表示参数[i]的Python动态字符串

问题描述 投票:0回答:2

我有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) 
python python-3.x
2个回答
0
投票

试试这个,这样你就有了一个列表(你可以用你描述的方式命名新的变量)。另外我觉得你不熟悉循环的工作方式......

TempPersonNr = len(sys.argv) - 2
VarPersonNr = []

for TempPerson in sys.argv[2:]:
    VarPersonNr.append(TempPerson)
    print (TempPerson)

0
投票

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或列表。

© www.soinside.com 2019 - 2024. All rights reserved.