所以我想从用户那里获取三个输入并检查它们是否形成一个三角形,现在我想要我的程序使用给定输入的任意三个随机值来检查并检查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)
但是我没有输出。 有什么错误
答案 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()