I want change sign in if statement. When I use exec
def set_value(array, negation=False):
equal = "!=" if negation else "=="
for index1, row in enumerate(pattern_map):
for index2, column in enumerate(row):
exec("if array {} column: kar_map[index1][index2]=1".format(equal))
I get IndexError
Traceback (most recent call last):
File "/home/charlie/Desktop/Projects/Python/karnaugh_map.py", line 234, in <module>
print(kar_map.map_filled)
File "/home/charlie/Desktop/Projects/Python/karnaugh_map.py", line 176, in map_filled
kar_map = self.__class__.filled_map_1(self.__table.count_variable, self.map_pattern, kar_map, variable)
File "/home/charlie/Desktop/Projects/Python/karnaugh_map.py", line 160, in filled_map_1
set_value("")
File "/home/charlie/Desktop/Projects/Python/karnaugh_map.py", line 148, in set_value
exec("if array {} column: kar_map[index1][index2]=1".format(equal))
File "<string>", line 1, in <module>
TypeError: 'Map' object does not support indexing
[Finished in 0.1s with exit code 1]
[cmd: ['/usr/bin/python3.5', '-u', '/home/charlie/Desktop/Projects/Python/karnaugh_map.py']]
[dir: /home/charlie/Desktop/Projects/Python]
[path: /usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/opt/ope ncascade/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl]
When I don't use exec, it works.
def set_value(array, negation=False):
for index1, row in enumerate(pattern_map):
for index2, column in enumerate(row):
if negation:
if array != column:
kar_map[index1][index2] = 1
else:
if array == column:
kar_map[index1][index2] = 1
Anyone have any idea whats the problem?
When using single-line if statements, you put the
if
part after the code you want to run. In addition, the.format(equal)
doesn't make sense. What do you want equal to be? If you want to change the equals sign (=), you should use.format(equals = equal)
and change=
to{equals}
. You should changeto