这是我到目前为止的程序:
def main4():
if isRight():
print('it is right')
if not isRight():
print('it is not right')
def isRight():
n1=int(input('Enter first number:'))
n2=int(input('Enter second number:'))
n3=int(input('Enter third number:'))
if n1<n2 and n1<n3:
smallest=n1
elif (n1<n2 and n1>n3) or (n1<n3 and n1>n2):
smaller=n1
elif n2<n1 and n2<n3:
smallest=n2
elif (n2<n1 and n2>n3) or (n2<n3 and n2>n1):
smaller=n2
elif n3<n2 and n3<n1:
smallest=n3
elif (n3<n2 and n3>n1) or (n3<n1 and n3>n2):
smaller=n3
elif n1>n2 and n1>n3:
largest=n1
elif n2>n1 and n2>n3:
largest=n2
else:
largest=n3
if largest**2==(smallest**2)+(smaller**2):
return true
else:
return false
当我调用main函数时,它允许我输入三个数字但是然后返回此错误消息:
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
main4()
File "/Users/L/Documents/maxoftwo.py", line 45, in main4
if isRight():
File "/Users/L/Documents/maxoftwo.py", line 71, in isRight
if largest**2==(smallest**2)+(smaller**2):
UnboundLocalError: local variable 'largest' referenced before assignment
我无法弄清楚如何解决这个错误,如果有人帮助我,我会很感激。非常感谢你!
答案 0 :(得分:1)
您的代码构造工作的方式是只计算9个条件块中的一个,您必须计算smaller
,smallest
和largest
的值。当它来自其中一个块时,只会声明smaller
,smallest
和largest
中的一个。所以当代码到达执行语句
if largest**2==(smallest**2)+(smaller**2):
如果只找到这三个变量中的一个,那么就会抛出你看到的错误。要解决此问题,您可以在使用以下用户输入后声明所有三个变量:
smallest=largest=smaller=0
在您要求用户输入变量后,您应该让您的程序正常工作。
您的代码存在其他一些问题:
True
和'False are defined keywords in python,
true and 'false
不是。因此,请确保使用大写单词。main4
例程中,第二个if
可以替换为
else
。在当前代码中,将调用函数isRight
两次没必要。您可以简化条件,将smaller
,smallest
和largest
变量计算为:
smallest = min(n1, n2, n3)
largest = max(n1, n2, n3)
smaller = list(set([n1, n2, n3]) - set([smallest, largest]))[0]
答案 1 :(得分:0)
在使用局部变量largest
之前,您必须指定一个值。
def main4():
result = isRight()
if result:
print('it is right')
else:
print('it is not right')
def isRight():
largest = 0 # <-
smallest = 0 # <-
smaller = 0 # <-
...
# calculate each other
if largest**2==(smallest**2)+(smaller**2):
...
答案 2 :(得分:0)
您的条件仅设置一个变量。您需要将长if / elif链分成3个部分,每个部分设置smallest
,smaller
和largest
中的一个。