0

我需要将每个数字列表分配给从 A 到 Z 的变量。但是,此列表的长度会有所不同。有没有办法在循环中做到这一点?到目前为止,我有:

file=open('inputfile.txt')
data=file.readlines()

vardict={1: 'A', 2: 'B', 3: 'C', 4: 'D', 5: 'E', 6: 'F',
         7: 'G', 8: 'H', 9: 'I', 10: 'J', 11: 'K', 12: 'L',
         13: 'M', 14: 'N', 15: 'O', 16: 'P', 17: 'Q',
         18: 'R', 19: 'S', 20: 'T', 21: 'U', 22: 'V',
         23: 'W', 24: 'X', 25: 'Y', 26: 'Z'}

for line in data:
    if line[0:1]=='V': #v is a marker that this line needs to assign variables. 
        num=1
        var=line.split() 
        var=var[1:] #remove the tag 
        for entry in var:
            x=vardict[num] #this will assign x to the correct variable
                           #need some lines here to create a variable from whatever is in x 
            num+=1 

var=['16', '17', '13', '11', '5', '3'] 例如,需要分配给变量 A 到 F。我需要大量使用这些变量后来的计算,所以没有什么太笨拙。

编辑:我将需要在计算中使用变量,直到出现另一行带有标签 V 的行,此时我需要将以下列表分配给变量 AZ,并在以后的计算中使用新变量。

输入将采用以下形式:

V 1 -2 3 4 5 7 8 9 10
I (A+B)-C*F
I C*F-(A+B)    
R -+AB*CF
V 16 17 13 11 5 3 
O AB+C-D*E/F^

其中其他行是要进行的各种计算。

4

3 回答 3

0

可以通过写入全局字典来分配字符串中命名的变量:

varname="A"
globals()[varname] = 16   # equivalent to A = 16

您可以处理列表var,生成字符串“A”、“B”……并依次分配给每个字符串。

但这种诡计可能表明你做错了:它不那么明确,如果你用完了字母会发生什么?

(参考) http://www.diveintopython.net/html_processing/locals_and_globals.html

于 2013-09-24T22:05:48.790 回答
0

如果你创建一个对象来保存你的变量,你可以使用 setattr 函数......例如:

class variables():
    pass

vars = variables()

for line in data:
    if line[0:1]=='V': #v is a marker that this line needs to assign variables. 
        num=1
        v=line.split() 
        v=v[1:] #remove the tag 
        for entry in var:
            setattr(vars, vardict[num], entry) #creates vars.A=16 for example
            num+=1 
于 2013-09-24T22:16:59.870 回答
0
import string
my_input = "V 1 -2 3 4 5 7 8 9 10"
doctored_input = map(int,my_input.split()[1:])

print dict(zip(string.ascii_uppercase,doctored_input))
#result : {'A': 1, 'C': 3, 'B': -2, 'E': 5, 'D': 4, 'G': 8, 'F': 7, 'I': 10, 'H': 9}
于 2013-09-24T22:17:49.337 回答