检查三个输入是否形成三角形

时间:2020-04-05 14:21:58

标签: python-3.x list function for-loop if-statement

所以我想从用户那里获取三个输入并检查它们是否形成一个三角形,现在我想要我的程序使用给定输入的任意三个随机值来检查并检查a + b> c。这是我的的代码:

def check_triangle(a, b, c):
  a, b, c = [float(i) for i in input('Enter the stick lengths: ').split(' ')]
  x, y, z = [int(num) for num in [a, b, c]]
  list_1 = [x, y, z]
  def is_triangle(x, y, z):
    for i in list_1:
      if (list_1[i] <(list_1[i+1] + list_1[i+2])):
        print("Yes")
      else:
        print("No")

check_triangle(a, b, c)

但是我没有输出。 有什么错误

3 个答案:

答案 0 :(得分:1)

您没有得到任何输出,因为您在函数内部定义了一个函数,但是您仅调用第一个函数。因此,第二个已定义但从未执行。要执行第二个操作,您需要在第一个操作的末尾添加一个函数调用,因此您的情况将是:

def check_triangle(a, b, c):
  a, b, c = [float(i) for i in input('Enter the stick lengths: ').split(' ')]
  x, y, z = [int(num) for num in [a, b, c]]
  list_1 = [x, y, z]
  def is_triangle(x, y, z):
    for i in list_1:
      if (list_1[i] <(list_1[i+1] + list_1[i+2])):
        print("Yes")
      else:
        print("No")
   is_triangle(x,y,z)

缩进可能会弄乱,因为我正在用手机接听电话,对此感到抱歉。 另外,据我所知,您将在此行得到列表索引超出范围错误。

如果(list_1 [i] <(list_1 [i + 1] + list_1 [i + 2]))

之所以发生这种情况,是因为您的i实际上是下面一行中定义的列表的元素,而不是索引,但是您正尝试使用语法my_list [index]的索引从列表中获取元素。 / p>

对于list_1中的我

您想要做的而不是上面提到的for循环是在其长度范围内进行迭代,这意味着对列表中可能的索引进行迭代是这样的:

对于范围内的我(len(list_1))

我注意到您的代码中还有其他几处内容,还有很多改进的余地,但我希望您能自己解决其余的问题!

答案 1 :(得分:0)

您正在从用户那里获取输入,因此无需为函数check_triangle传递任何参数:

def is_triangle(x, y, z):
    if x < y + z:
        print("Yes")
    else:
        print("No")


def check_triangle():
    x, y, z = map(int, input('Enter the stick lengths: ').split())
    is_triangle(x, y, z)

check_triangle()

或者您可以简化代码,例如:

def is_triangle(x, y, z):
    print('Yes' if x < y + z else 'No')

is_triangle(*map(int, input('Enter the stick lengths: ').split()))

答案 2 :(得分:0)

首先,由于a,b和c是用户输入的变量,因此不需要将它们作为参数输入到函数中。实际上,由于在将它们作为函数的参数给出之前没有定义它们,这导致该函数在调用时NameError时出现name 'a' is not defined消息。要解决此问题,可以在函数的定义和用法中删除a,b和c作为函数的参数。

这时,该函数将运行,但是即使用户以程序期望的格式(即,用单个空格分隔-用户未明确指定)输入数字,程序的该部分评估您的目标条件不会运行,因为它包含在未调用的函数is_triangle(x,y,z)中。可以取消此功能,并且可以在主功能中评估您的测试条件。此外,无需遍历列表中的元素,因为您可以直接访问其元素以评估目标条件。

下面是进行以下更改的代码:

# since a, b and c are given by the user, they do not need to be arguments to the function
def check_triangle():

    a, b, c = [float(i) for i in input('Enter the stick lengths: ').split(' ')]
    x, y, z = [int(num) for num in [a, b, c]]
    list_1 = [x, y, z]

    # evaluate your test condition directly within the main function. no secondary function is necessary    
    # as you want to check that c < a + b, access those elements directly by using the index of the list. no loop is necessary
    if list_1[2] < list_1[0] + list_1[1]:
        print("Yes")
    else:
        print("No")

# since a, b and c are not defined before running the function, they cause it to raise a NameError if they are given
check_triangle()

此代码将运行并评估您的目标条件。但是,此条件(c