0

this program returns a truth_table for the specified string. I want to read a string from console but i dont know how to create dinamically variables. I tried (almost) everything but doesnt work. please help me. sorry for my english.

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)     
kylieCatt
  • 10,672
  • 5
  • 43
  • 51
  • 2
    If you want dynamic variable names you should use a dictionary. for example `{'name1': value, 'name2': value2, ...}` – kylieCatt May 16 '15 at 18:59

1 Answers1

2

I've run into this before and the answer was to use a dictionary. Here's basically what you need

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
Kyrubas
  • 877
  • 8
  • 23
  • I think I'm not very smart because it does not works. if I substitute: a, b = unpack (data) by: a = unpack (data) [0] b = unpack (data) [1] It works perfectly, but does not work if the variables are created dynamically. – Daril Aleman Morales May 16 '15 at 19:57