我有Python的问题,我尝试在这里搜索答案,但我似乎无法解释到目前为止提供的任何解决方案。我使用命令行参数(sys.argv)提供我的python程序,并且这些参数的数量可能会从一次运行更改为另一次运行,因此我认为最好创建一个for循环,为每个参数创建一个新变量。第一个参数是因为我们都知道脚本名称,我不想包含这个,第二个参数是密码字符串,我也不想要这个,所以它从第三个参数开始。最后的印刷品只是为了看它是否有效。
TempPersonNr = len(sys.argv)
TempPersonNr -= 2
VarPersonNr = ""
i = 1
for TempPersonNr in sys.argv[2:]:
VarPersonNr[i] = sys.argv[i]
print (VarPersonNr[i])
i += 1
错误:
Traceback (most recent call last):
File "HIDDEN", line 31, in <module>
VarPersonNr[i] = sys.argv[i]
TypeError: 'str' object does not support item assignment
我希望输出是这样的。
Argument 1 = A
Argument 2 = B
Argument 3 = C
如果我使用以下命令行参数提供程序,我希望它以值作为参数创建3个变量。例如。
VarPersonNr1 (with the value of argument 1)
VarPersonNr2 (with the value of argument 2)
VarPersonNr3 (with the value of argument 3)
试试这个,这样你就有了一个列表(你可以用你描述的方式命名新的变量)。另外我觉得你不熟悉循环的工作方式......
TempPersonNr = len(sys.argv) - 2
VarPersonNr = []
for TempPerson in sys.argv[2:]:
VarPersonNr.append(TempPerson)
print (TempPerson)
String对象是不可变的,你不能改变它。因此,当您尝试将字符串的第i个变量分配给sys.argv [i]时,它会给出错误。
编辑:根据您的输入和输出,您可以直接将sys.argv的第三个值分配给您的变量。 varPersonNr3 = sys.argv中[I]
如果要将其余参数添加到该变量,请使用:VarPersonNr3.append(sys.argv [i])
编辑:有几个选项:1)您可以使用字典将变量名称存储为键,将sys.argv值存储为值:
d={}
TempPersonNr = len(sys.argv)
TempPersonNr -= 2
VarPersonNr = ""
i = 1
for TempPersonNr in sys.argv[2:]:
key="VarPersonNr"+str(i)
d[key]=sys.argv[i]
i += 1
这将为您提供一个字典{“VarPersonNr3”:'C',“VarPersonNr4”:'D'}等等2)您可以将所有值添加到列表中并从那里获取它。 3)这是一个非常糟糕的选择,不应该使用..但仍然:
import sys
this = sys.modules[__name__]
i=1
for TempPersonNr in sys.argv[2:]:
setattr(this, 'VarPersonNr%s' % i, sys.argv[i])
i+=1
print(VarPersonNr3)
#this will give you the third value
尝试使用dict或列表。