【发布时间】:2019-03-18 15:52:24
【问题描述】:
鉴于汽车的数量 (i) 和到达时间 (j),我正在尝试生成一个文件,但我无法使代码正常工作。
例如,如果想要 0 到 60 之间的 5 辆车 [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
【问题讨论】:
-
我不知道相扑是什么。无论如何,错误究竟发生在哪里?请edit您的问题并添加您所获得的完整回溯。
-
您在格式字符串(
depart=旁边)中使用 %j,这不受支持。请为您的变量类型提供正确的代码(可能是 %d) -
您运行的是哪个 Python 版本?您现在可以使用
f''或较旧但熟悉的str.format(),而不是 %s、%d、%i。 -
您可以使用格式。
' <vehicle id="right_{}" type="typeWE" route="right" depart="{}"'.format(i, j)
标签: python string for-loop typeerror