генерирование данных с двумя переменными - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь сгенерировать файл, учитывая количество машин (i) и время прибытия (j), но я не могу заставить код работать должным образом.Например, если вы хотите, чтобы 5 автомобилей отправлялись между 0 и 60 [i = 5, j = (0,60)], сгенерируйте что-то вроде этого:

<routes>
<vehicle id="left_0" type="typeWE" route="left" depart="8" />
<vehicle id="left_1" type="typeWE" route="left" depart="17" />
<vehicle id="right_2" type="typeWE" route="right" depart="39" />
<vehicle id="up_3" type="typeNS" route="up" depart="50" color="1,0,0"/>
<vehicle id="left_4" type="typeWE" route="left" depart="58" />
<routes>

Это код:

from __future__ import absolute_import
from __future__ import print_function
import os
import sys
import optparse
import subprocess
import random

def generate_routefile():
    random.seed(47)
    N = 800  # number of cars
    M = 1600 # demand per second from different directions
    pWE = 1. / 10
    pNS = 1. / 30

    with open("800_r.rou.xml", "w") as routes:
        print("<routes>", file=routes)
        lastVeh = 0
        vehNr = 0

        for i in range(N):
            for j in range(M):
                if random.uniform(0, 1) < pWE:
                    print('    <vehicle id="right_%i" type="typeWE" route="right" depart="%%j" />' % (
                        vehNr, i, j), file=routes)
                    vehNr += 1
                    lastVeh = i
                if random.uniform(0, 1) < pEW:
                    print('    <vehicle id="left_%i" type="typeWE" route="left" depart="%i" />' % (
                        vehNr, i), file=routes)
                    vehNr += 1
                    lastVeh = i
                if random.uniform(0, 1) < pNS:
                    print('    <vehicle id="down_%i" type="typeNS" route="down" depart="%i" color="1,0,0"/>' % (
                        vehNr, i), file=routes)
                    vehNr += 1
                    lastVeh = i
                if random.uniform(0, 1) < pNS:
                    print('    <vehicle id="up_%i" type="typeNS" route="up" depart="%i" color="1,0,0"/>' % (
                        vehNr, i), file=routes)
                    vehNr += 1
                    lastVeh = i

        print("</routes>", file=routes)

if __name__ == "__main__":
    generate_routefile()`

Ошибка: line 36, in generate_routefile vehNr, i, j), file=routes) ValueError: unsupported format character 'j' (0x6a) at index 64

Я пытаюсь добавить переменную для времени прибытия транспортных средств (отправление), код работает только тогда, когда i является единственной переменной.

Это работает, но с помощью этого кода я могу определить только значение отправления:

for i in range(N):
    if random.uniform(0, 1) < pWE:
        print('    <vehicle id="right_%i" type="typeWE" route="right" depart="%i" />' % (
            vehNr, i), file=routes)
        vehNr += 1
        lastVeh = i

, но это не так, но в этом я бы определил количество автомобилей и время отправления:

for i in range(N):
    for j in range(M):
        if random.uniform(0, 1) < pWE:
            print('    <vehicle id="right_%i" type="typeWE" route="right" depart="%j" />' % (
                vehNr, i, j), file=routes)
            vehNr += 1
            lastVeh = i

1 Ответ

0 голосов
/ 13 октября 2018

Хорошо, теперь я понимаю, что вы имеете в виду.

%i является заполнителем для целого числа, в то время как %j не распознается в python.Это не имеет ничего общего с i или j.

Использование %i дважды - не проблема.


И если мы внимательно посмотрим на код, который не работает:

print('    <vehicle id="right_%i" type="typeWE" route="right" depart="%j" />' % (
                vehNr, i, j), file=routes)

Вы пытаетесь вставить 3 значения, но у вас есть только два потенциальных заполнителя (% i,%j) (помните, что% j неправильный).

...