生成具有两个变量的数据

时间:2018-10-13 18:35:26

标签: python string for-loop typeerror

考虑到汽车数量(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 :(得分:0)

好的,我明白你的意思了。

%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是不正确的占位符)。