多次输入不当会导致崩溃

时间:2018-11-29 15:39:49

标签: python python-3.x

我正在尝试制作一个简单的数字猜测程序,但效果很好,但是如果我两次输入“ a”而不是有效的int,它将崩溃。有人可以在这里解释我在做什么错。

import random

def input_sanitiser():
    guess = input("Please enter a number between 1 and 10: ")
    while True:
        if type(guess) != int:
            guess = int(input("That isn't a number, try again: "))
        elif guess not in range (1,11):
            guess = int(input("This is not a valid number, try again: "))
        else:
            break

def main():
    number = random.randrange(1,10)
    guess = 0
    input_sanitiser()
    while guess != number:
        if guess < number:
            print("This number is too low!")
            input_sanitiser()
        if guess > number:
            print("This number is too high!")
            input_sanitiser()
        else: 
            break
    print ("Congratulations, you've guessed correctly")





if __name__ == "__main__":
    main()

1 个答案:

答案 0 :(得分:3)

您想先检查输入,然后再尝试将其转换为int

int(input("This is not a valid number, try again: "))

我会写:

while True:
    try:
        guess = int(input("This is not a valid number, try again: "))
    except ValueError:
        pass
    else:
        break

旁注:代码无法按预期运行:

def main():
    number = random.randrange(1,10)
    guess = 0
    input_sanitiser()  # <<<<<<<<<<
    while guess != number:

请注意,input_sanitiser不会修改guess中的变量main,您需要采取其他方法,例如处理输入然后从input_sanitiser返回结果,例如这个:

def input_sanitiser():
    guess = input("Please enter a number between 1 and 10: ")
    while True:
        try:
            guess = int(input("This is not a valid number, try again: "))
        except ValueError:
            continue  # keep asking for a valid number

        if guess not in range(1, 11):
            print("number out of range")
            continue
        break
    return guess

def main():
    number = random.randrange(1,10)
    guess = input_sanitiser()
    while guess != number:
        if guess < number:
            print("This number is too low!")
            guess = input_sanitiser()
        if guess > number:
            print("This number is too high!")
            guess = input_sanitiser()
        else: 
            break
    print ("Congratulations, you've guessed correctly")