1

問題:

コンピューターはランダムに数字を生成します。ユーザーが数値を入力すると、コンピューターは数値が高すぎるか低すぎるかを教えてくれます。次に、数字を推測するまで推測を続けます。

私の解決策:

import random

computer = random.randint(1, 500)

def guessNumber():      
    user = raw_input('> ')
    while user != computer:
            if user > computer:
                print "Your number is too big"
                user = raw_input('> ')
            else:
                    print "Naa! too small. Try a bit higher number"
                    user = raw_input('> ')
     print "Now the numbers are equal"

残念ながら、私のコードはifステートメントを渡すことはありません。それでも、ユーザーに「1」を入力しても、常に「あなたの番号が大きすぎます」と出力されます。

4

2 に答える 2

2

raw_input()文字列値を返します。最初に整数に変換します。

user = int(raw_input('> '))

Python 2 は常に文字列の前に数値をソートするため、user > computer入力内容に関係なく、テストは常に True を返します。

>>> '' > 0
True

Python 3 はこれを修正します。

>>> '' > 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() > int()

ユーザーが有効な数値を入力しない場合、は以下int()をスローすることに注意してくださいValueError:

>>> int('42')
42
>>> int('fortytwo')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'fortytwo'

それを明示的に処理したい場合があります:

def askForNumber():
    while True:
        try:
            return int(raw_input('> '))
        except ValueError:
            print "Not a number, please try again"


def guessNumber():
    user = askForNumber()
    while user != computer:
        if user > computer:
            print "Your number is too big"
            user = askForNumber()
        else:
            print "Naa! too small. Try a bit higher number"
            user = askForNumber()
    print "Now the numbers are equal"
于 2013-09-25T16:26:56.370 に答える
1

文字列を返すため、user変数は文字列型ですraw_input()。コードを次のように変更します。

user = int(raw_input('> '))

したがってuser、整数になります。

于 2013-09-25T16:26:53.730 に答える