免责声明:我是一名Python新手,所以如果这段代码不是pythonic或者有更简单/更好的方式来写这个,我道歉。任何[建设性的]批评都将不胜感激!
嘿所有,所以我试图创建一个脚本,该脚本将要求用户输入最多8位的二进制输入(一旦有效,将创建实际的输入请求)并执行异或(XOR)操作它们并为变量赋值。问题是,我无法弄清楚为什么我会收到名称错误。下面的代码涉及三输入异或门。
这是错误:
如果bool(G1)^ bool(e)^ bool(G2):
NameError:name' G1'未定义
据我所知,G1并没有被分配任何东西。
a = 0
b = 1
c = 1
d = 0
e = 1
f = 1
g = 0
h = 1
#G1
if bool(b) ^ bool(c) ^ bool(d) :
G1 = True
elif bool(b) ^ bool(c) == False :
if bool(d) :
G1 = True
elif bool(b) ^ bool(c) :
if bool(d) == False :
G1 = True
elif bool(b) :
if bool(c) ^ bool(d) == False:
G1 = True
else :
G1 = False
#G2
if bool(f) ^ bool(g) ^ bool(h) :
G2 = True
elif bool(f) ^ bool(g) == False :
if bool(h) :
G2 = True
elif bool(f) ^ bool(g) :
if bool(h) == False :
G2 = True
elif bool(f) :
if bool(g) ^ bool(h) == False:
G2 = True
else :
G2 = False
#G3
if bool(G1) ^ bool(e) ^ bool(G2) :
G3 = True
elif bool(G1) ^ bool(e) == False :
if bool(d) :
G3 = True
elif bool(G1) ^ bool(e) :
if bool(G2) == False :
G3 = True
elif bool(G1) :
if bool(e) ^ bool(G2) == False:
G3 = True
else :
G3 = False
答案 0 :(得分:1)
你有像
这样的结构elif x ^ y:
if z:
G1 = ...
else:
G1 = ...
你的代码中的。即使elif
语句中的一个在您的情况下可能为真,但检查z
的子条件也不是。这意味着G1
实际上永远不会赋值,因此您会收到未定义的错误。
要解决此问题,您可以为每个子条件添加else
子句。通过这样做,您将确保明确分配G1
。
例如:
elif x ^ y:
if z:
G1 = ...
else:
G1 = ...
else:
G1 = ...
答案 1 :(得分:0)
这是一个常见的(有时很难找到)错误。如果在稍后要使用的条件内分配变量,则必须在条件之前预定义变量的默认值,或者确保条件中的每个路径都指定变量。
在您的情况下,很容易发现问题。例如
elif bool(b) ^ bool(c) == False :
if bool(d) :
G1 = True
...如果内部if
不是真的会怎么样?该变量未分配,您有一个错误就是等待在最不方便的时候扼杀您。
理想情况下,程序应该有一个伴随测试,可以驱动它通过每个可能的状态,以确保它们都能正常工作。至少应该手动检查代码,以找出可能存在错误的异常路径。