# [Tutor] request for sugestions on fragement of code for generating truth-tables

Brian van den Broek broek at cc.umanitoba.ca
Sat Apr 1 02:32:16 CEST 2006

```Hi all,

I've been too busy with life to do much Python of late. So, I am a bit
rusty. :-(

I've got some code that does what it needs to but I think I might be
overlooking a much smoother way to get what I need.

The code takes a list of strings and returns a list of dictionaries,
where each dictionary uses the strings from the list as keys and
booleans as values. The dictionary list contains a dictionary
exhibiting each possible combination of booleans over the keys, where
these combinations are listed in a systematic way.

This code works:

def tva_dict_maker(atoms):

tvas = []
val = False

for k in range(2**len(atoms)):
tvas.append(dict())

for i in range(len(atoms)):
key = atoms[i]

for j in range(2**len(atoms)):
if j % ( len(tvas) / 2.0 ** (i+1) ) == 0:
val = not val
tvas[j][key]=val

return tvas

The output I desire is easier to see with a bit of processing (to
impose order on the dicts). So,

def display_tvas(tvas):
for i in tvas:
for j in sorted(i):
print "%s:%s\t" %(j, i[j]),
print

Then, the output is like so:

>>> atoms = ["a","b","c"]
>>> tvas = tva_dict_maker(atoms)
>>> display_tvas(tvas)
a:True	b:True	c:True
a:True	b:True	c:False
a:True	b:False	c:True
a:True	b:False	c:False
a:False	b:True	c:True
a:False	b:True	c:False
a:False	b:False	c:True
a:False	b:False	c:False
>>>

As desired :-)

But, I can't shake the feeling I'm doing this in a harder than
necessary way :-|

[This is in the context of writing a program to generate truth-tables
for sentential logic, so that I can easily create answered exercises
for a critical thinking course I've been teaching. (As it is for a
Philosophy class, the truth-values are listed in the opposite order
than in a CompSci context.)]

Any suggestions would be welcome.

Best to all,

Brian vdB
```

More information about the Tutor mailing list