Python的三角形验证程序代码中的错误

时间:2013-06-28 09:30:16

标签: python geometry conditional

a = raw_input('side 1 \n')
b = raw_input('side 2 \n')
c = raw_input('side 3 \n')

def triangle_check(x, y, z):
    if x > 0 and y > 0 and z > 0:
        if z > (x + y) or y > (x + z) or x > (y + z):
            print 'impossible'
        else:
            print 'possible'

triangle_check(a, b, c)

我遇到了语义错误(我认为)。即使我输入有效的三元组,例如3, 4, 5,我也会收到impossible消息。任何人都可以发现我的错误吗?

2 个答案:

答案 0 :(得分:2)

raw_input返回一个字符串,您应该先将它们转换为整数。否则条件:

if x>0 and y>0 and z>0:始终为True。

所有字符串都大于整数。

>>> "-1" > 0
True
>>> "" > 0
True

z>(x+y):在这里,您实际上先连接两个字符串,然后将其与其他字符串z进行比较。

修复:应用int()将这些字符串转换为整数:

a = int(raw_input('side 1 \n'))
b = int(raw_input('side 2 \n'))
c = int(raw_input('side 3 \n'))

现在它运作正常。

演示:

$ python so.py
side 1 
3
side 2 
4
side 3 
5
possible

答案 1 :(得分:0)

a = raw_input('side 1 \n')
b = raw_input('side 2 \n')
c = raw_input('side 3 \n')

def triangle_check(x, y, z):
    if x > 0 and y > 0 and z > 0:
        if z > (x + y) or y > (x + z) or x > (y + z):
            print 'impossible'
        else:
            print 'possible'

triangle_check(int(a), int(b), int(c))

需要将raw_input转换为int,因为raw_input会返回string