用于测试三个数字是否构成直角三角形边的程序

时间:2014-04-08 01:04:05

标签: python python-3.x

这是我到目前为止的程序:

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

我无法弄清楚如何解决这个错误,如果有人帮助我,我会很感激。非常感谢你!

3 个答案:

答案 0 :(得分:1)

您的代码构造工作的方式是只计算9个条件块中的一个,您必须计算smallersmallestlargest的值。当它来自其中一个块时,只会声明smallersmallestlargest中的一个。所以当代码到达执行语句

的时候
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 两次没必要。
  • 您可以简化条件,将smallersmallestlargest变量计算为:

    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个部分,每个部分设置smallestsmallerlargest中的一个。