【问题标题】:generating data with two variables使用两个变量生成数据
【发布时间】: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。
  • 您可以使用格式。 ' &lt;vehicle id="right_{}" type="typeWE" route="right" depart="{}"'.format(i, j)

标签: python string for-loop typeerror


【解决方案1】:

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

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

【讨论】:

  • 你是对的,使用 %i 两次不是问题。但我想使用两个变量 i 和 j,并且 i 变量必须创建 100 辆汽车,而 j 变量必须采用 0 到 1600 之间的数字。有什么建议吗?
  • @AlexanderMartínez 抱歉,我 100% 不明白你的意思。您可以尝试更新您的问题吗?
  • %i中的i指的是要显示的值的类型(整数);它与所显示的变量的名称完全无关"%i" % j 是完全有效的代码。
猜你喜欢
  • 2022-07-31
  • 1970-01-01
  • 1970-01-01
  • 2023-02-25
  • 1970-01-01
  • 1970-01-01
  • 2015-02-16
  • 2021-03-28
  • 2020-12-14
相关资源
最近更新 更多