4

每次我尝试我的代码时它都可以工作,但是当我输入'stop'它时会给我一个错误:

ValueError: int() 以 10 为底的无效文字:'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

作为第一个检查

另一个建议是在输入中使用小写字母,然后检查小写字母“stop”。这样,您只需检查一次,它将捕获“停止”、“停止”、“停止”等。

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