2015-05-16 3 views
0

Эта программа возвращает true_table для указанной строки. Я хочу прочитать строку из консоли, но я не знаю, как создавать динамические переменные. Я пробовал (почти) все, но не работал. пожалуйста помогите. Извините за мой английский.Переменные Python автоматически создаются

from itertools import izip, product, tee 

# Logic functions: take and return iterators of truth values 

def AND(a, b): 
    for p, q in izip(a, b): 
     yield p and q 

def OR(a, b): 
    for p, q in izip(a, b): 
     yield p or q 

def NOT(a): 
    for p in a: 
     yield not p 

def EQUIV(a, b): 
    for p, q in izip(a, b): 
     yield p is q 

def IMPLIES(a, b): 
    for p, q in izip(a, b): 
     yield (not p) or q 

def XOR(a,b): 
    for p,q in izip(a,b): 
     yield (p and (not q)) or ((not p) and q) 

def create(num=2): 
#''' Returns a list of all of the possible combinations of truth for the 
given number of variables. 
#ex. [(T, T), (T, F), (F, T), (F, F)] for two variables ''' 
    return list(product([True, False], repeat=num)) 

def unpack(data): 
#''' Regroups the list returned by create() by variable, making it suitable 
for use in the logic functions. 
#ex. [(T, T, F, F), (T, F, T, F)] for two variables ''' 
    return [[elem[i] for elem in lst] for i, lst in enumerate(tee(data, 
    len(data[0])))] 

def print_result(data, result): 
''' Prints the combinations returned by create() and the results returned 
by the logic functions in a nice format. ''' 
    n = len(data[0]) 
    headers = 'abcdefghijklmnopqrstuvwxyz'[:n] 
    print headers + "|RESULT" 
    print '-' * len(headers) + '+------' 
    for row, result_cell in izip(data, result): 
     print ''.join({True: 'T', False:'F'}[cell] for cell in row) + '|' + 
     ' ' + {True: 'T', False:'F'}[result_cell] 




if __name__ == '__main__': 
    data = create(num = 2) 
    a,b = unpack(data) 
    result = IMPLIES(a,b)  
    print_result(data, result)  
+2

Если вам нужны имена динамических переменных, вы должны использовать словарь. например '{'name1': value, 'name2': value2, ...}' – IanAuld

ответ

2

Я столкнулся с этим раньше, и ответ заключался в использовании словаря. Здесь в основном то, что вам нужно

var_dict = {} 
my_list = ['a', 'b', 'c', 'd'] 
for each in my_list:  
    #Create a new dictionary key if it the current iteration doesn't already exist 
    if each not in var_dict.keys(): 
     var_dict[each] = <THE VALUE YOU WISH TO SET THE VARIABLE TO> 
    else: 
     pass 
     #Or do something if the variable is already created 
+0

Я думаю, что я не очень умный, потому что он не работает. если я подставляю: a, b = распаковать (данные) by: a = unpack (data) [0] b = распаковать (данные) [1] Он отлично работает, но не работает, если переменные созданы динамически. –

Смежные вопросы