4

コードを試すたびに機能しますが、入力する'stop'とエラーが発生します。

ValueError: 基数 10 の int() の無効なリテラル: 'stop'

def guessingGame():
    global randomNum
    guessTry = 3

    while True:
        guess = input('Guess a Number between 1 - 10, You have 3 Tries, or Enter Stop:  ')
        if int(guess) == randomNum:
            print('Correct')
            break

        if int(guess) < randomNum:
            print('Too Low')
            guessTry = guessTry - 1
            print('You have, ' + str(guessTry) + ' Guesses Left')

        if int(guess) > randomNum:
            print('Too High')
            guessTry = guessTry - 1
            print('You have, ' + str(guessTry) + ' Guesses Left')

        if guessTry == 0:
            print('You have no more tries')
            return

        if str(guess) == 'stop' or str(guess) == 'Stop':
            break
4

3 に答える 3

12

に渡される文字列にint()は、数字のみが含まれている必要があります。

>>> int("stop")
Traceback (most recent call last):
  File "<ipython-input-114-e5503af2dc1c>", line 1, in <module>
    int("stop")
ValueError: invalid literal for int() with base 10: 'stop'

簡単な修正は、ここで例外処理を使用することです。

def guessingGame():
    global randomNum
    global userScore
    guessTry = 3

    while True:
        guess = input('Guess a Number between 1 - 10, You have 3 Tries, or Enter Stop:  ')
        try:
            if int(guess) == randomNum:
                print('Correct')
                break

            if int(guess) < randomNum:
               print('Too Low')
               guessTry = guessTry - 1
               print('You have, ' + str(guessTry) + ' Guesses Left')

            if int(guess) > randomNum:
                print('Too High')
                guessTry = guessTry - 1
                print('You have, ' + str(guessTry) + ' Guesses Left')

            if guessTry == 0:
                print('You have no more tries')
                return
        except ValueError:
            #no need of str() here
            if guess.lower() == 'stop':
                break
guessingGame()

またguess.lower() == 'stop'、「stop」の大文字と小文字の組み合わせに一致させるために使用できます。

>>> "Stop".lower() == "stop"
True
>>> "SToP".lower() == "stop"
True
>>> "sTOp".lower() == "stop"
True
于 2013-05-24T19:42:05.043 に答える
1

これは、よりpythonic(Python 3)バージョンです。

def guessing_game(random_num):
    tries = 3
    print("Guess a number between 1 - 10, you have 3 tries, or type 'stop' to quit")

    while True:
        guess = input("Your number: ")
        try:
            guess = int(guess)
        except (TypeError, ValueError):
            if guess.lower()  == 'stop' :
                return
            else:
                print("Invalid value '%s'" % guess)
                continue

        if guess == random_num:
            print('Correct')
            return
        elif guess < random_num:
            print('Too low')
        else:
            print('Too high')

        tries -= 1
        if tries == 0:
            print('You have no more tries')
            return

        print('You have %s guesses left' % tries)
于 2013-05-24T21:45:02.907 に答える
0

文字列「stop」を整数に変換しようとしています。その文字列には整数としての有効な表現がないため、そのエラーが発生します。あなたは置くべきです

if str(guess) == 'stop' or str(guess) == 'Stop':
break

最初のチェックとして

もう 1 つの提案は、入力で小文字を使用してから、小文字の 'stop' をチェックすることです。そうすれば、一度だけチェックするだけで、「Stop」、「STOP」、「sTOP」などのいずれかがキャプチャされます.

if str(guess).lower() == 'stop':
break
于 2013-05-24T19:40:19.880 に答える