用户输入的三角形边长和程序(Think Python 练习 5-4-2)

1 投票
3 回答
1560 浏览
提问于 2025-04-18 08:12

我正在尝试解决《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

你没有正确地把 xyz 转换成整数,所以在用 > 比较输入的字符串时会出问题。

 int(x)

改成

 x = int(x)

并且对 yz 也做同样的修改。

问题在于你忘了把 int(x) 的结果赋值回 x,所以 int(x) 其实没有起到任何作用。

撰写回答