用户输入的三角形边长和程序(Think Python 练习 5-4-2)
我正在尝试解决《Think Python》中的练习5-4-2,这个练习要求我写一个程序,让用户输入三根棍子的长度,以便判断这三根棍子能否组成一个三角形。规则是,如果其中一根棍子的长度大于另外两根棍子长度的总和,那么就不能组成三角形。
这是我的代码。问题是它总是返回“不能组成三角形”(我试过正确的值,比如4、5和3,也试过应该返回错误的值,比如1、2和12),而且它总是显示“None”(就好像我没有使用“return”一样):
def is_triangle(x,y,z):
if (x>y+z) or (y>z+x) or (z>x+y):
print 'no triangle'
else:
print 'triangle yes'
return
prompt1 = 'Input firt stick length for your triangle please...'
x = raw_input(prompt1)
int(x)
prompt2 = 'Input second stick length for your triangle please...'
y = raw_input(prompt2)
int(y)
prompt3 = 'Input third stick length for your triangle please...'
z = raw_input(prompt3)
int(z)
print is_triangle(x,y,z)
提前谢谢你的帮助!... Norpa
3 个回答
0
在设计这个函数的时候,你可以把它设置为只接受整数。
def is_triangle(a,b,c):
if (int(a)>int(b+c)) or (int(b)>int(c+a)) or (int(c)>int(a+b)):
print("No")
else:
print("Yes")
这里的内容是针对你练习的范围来说的。如果你想更进一步,可以让这个函数变得更灵活,只允许用户输入整数(在提示中)。希望等你进阶后能做到这一点。祝你好运!
2
这里的问题是,你没有把你的 int cast
(整数转换)重新赋值给 x、y 和 z。因此,它们被当作字符串来处理。在你最后的比较中,你得到了 (x + y) = 34
(作为字符串),所以比较结果变成了 True。
所以所有的提示部分应该像这样:
prompt1 = 'Input firt stick length for your triangle please...'
x = raw_input(prompt1)
x = int(x)
或者:
prompt1 = 'Input firt stick length for your triangle please...'
x = int(raw_input(prompt1))
0
你没有正确地把 x
、y
和 z
转换成整数,所以在用 >
比较输入的字符串时会出问题。
把
int(x)
改成
x = int(x)
并且对 y
和 z
也做同样的修改。
问题在于你忘了把 int(x)
的结果赋值回 x
,所以 int(x)
其实没有起到任何作用。