Python - 多个XOR操作,NameError未定义

时间:2017-05-11 20:23:05

标签: python

免责声明:我是一名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

2 个答案:

答案 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不是真的会怎么样?该变量未分配,您有一个错误就是等待在最不方便的时候扼杀您。

理想情况下,程序应该有一个伴随测试,可以驱动它通过每个可能的状态,以确保它们都能正常工作。至少应该手动检查代码,以找出可能存在错误的异常路径。