2013-09-24 2 views
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 

переменная = [ '16', '17', '13', '11', '5', '3'], например, должен быть присвоен переменных A до F. Мне нужно будет использовать эти переменные много в последующих вычислениях, поэтому ничего слишком громоздкого.

EDIT: мне нужно будет использовать переменные в вычислениях, пока не появится другая строка с тегом V, когда мне нужно будет присвоить следующий список переменным A-Z и использовать новые переменные в последующих вычислениях.

вход будет иметь такую ​​форму:

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^ 

, где другие линии различные расчеты должны быть сделаны.

+1

я упускаю что-то? Это то, для чего нужны массивы (списки или словари на Python). Почему вы не хотите иметь список переменных, индексированных буквой от «A» до «Z»? Если вы настаиваете, вы можете делать то, что хотите, с 'eval', но это будет очень уродливо ... – nickie

+0

Что вы надеетесь достичь? Что вы делаете с 'x'? Вы их храните? Прямо сейчас вы просто назначаете 'vardict [last entry of var]' to 'x'. – wflynny

+0

Вы знаете, что вы можете просто сделать 'для строки в файле:'? –

ответ

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} 
0

переменной с именем в строке могут быть назначены путем записи глобального словаря:

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

Вы можете работать по списку var, генерируя строки «A», «B» ... и присваивание каждый по очереди.

Но этот вид обмана, возможно, является признаком того, что вы делаете что-то неправильно: он менее ясен, а что происходит, если у вас заканчиваются буквы?

(ссылка) http://www.diveintopython.net/html_processing/locals_and_globals.html

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 
Смежные вопросы