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(a, b, c)

セマンティックエラーが発生しています(と思います)。のような有効なトリプレットを入力しても3, 4, 5impossibleメッセージが表示されます。誰かが私の間違いを見つけることができますか?

4

2 に答える 2

2

raw_input文字列を返す場合、最初に整数に変換する必要があります。それ以外の場合:

if x>0 and y>0 and z>0:は常に True です。

すべての文字列は整数より大きいです。

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

z>(x+y): そしてここでは、実際には最初に 2 つの文字列を連結してから、それを他の文字列 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
于 2013-06-28T09:31:37.717 に答える
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する必要があります。intraw_inputstring

于 2013-06-28T09:33:25.227 に答える