Python 输入数字

1 投票
4 回答
60 浏览
提问于 2025-04-14 17:46
def get_num_players() -> int:
    num_players = int(input("Enter the number of players (1 to 4): "))
    while True:
        if num_players < 1 or num_players > 4:
            print("Invalid number of players. Please enter a number between 1 and 4.")
            num_players = int(input("Enter the number of players (1 to 4): "))
        elif num_players >= 1 or num_players <= 4:
            break
        else:
            print("Invalid number of players. Please enter a number between 1 and 4.")
            num_players = int(input("Enter the number of players (1 to 4): "))
        
    return num_players

我想让玩家输入人数,但当用户输入为空或者输入的是字符串时,就会出现EOFError: EOF when reading a line的错误。我该怎么解决这个错误呢?

4 个回答

0

一般来说,你应该始终验证用户输入,特别是当你需要把输入转换成其他类型,而不是字符串时。

比如,当你需要一个整数时,把字符串传给int()函数,并检查是否出现了ValueError错误,这是一种不错的做法。

不过在这个情况下,你只关心几个特定的值,也就是1、2、3和4。

你可能还想要一种方法来表示用户输入可以结束程序。一个合理的做法是允许用户输入一个空值。

这个版本的函数会返回一个范围在1到4之间的整数,或者如果用户输入为空(只按了回车),则返回None。

def get_num_players() -> int | None:
    while np := input("Enter the number of players (1 to 4): "):
        if np in {'1','2','3','4'}:
            return int(np)
        print("\aInvalid number of players")
    # implicitly return None on empty input
1

为了处理用户可能输入非整数或空值的情况,你可以使用一个叫做try-except的结构来捕捉当尝试把输入转换为整数时出现的错误(ValueError)。

def get_num_players() -> int:
    while True:
        try:
            num_players = int(input("Enter the number of players (1 to 4): "))
            if 1 <= num_players <= 4:
                break
            else:
                print("Invalid number of players. Please enter a number between 1 and 4.")
        except ValueError:
            print("Invalid input. Please enter a valid integer.")

    return num_players
1

我觉得当用户输入一个字符串或者什么都不输入时,产生的错误其实是:

ValueError: invalid literal for int() with base 10: ''

对吧?这就是我得到的结果。

这是因为如果输入的字符串不能被理解为一个整数,int就会报错。

你可以通过使用一个尝试-捕获的结构来解决这个问题。先获取输入,然后尝试把它转换成整数。

另外,我觉得你应该是想写 elif num_players >= 1 and num_players <= 4:,而不是 elif num_players >= 1 or num_players <= 4: 来判断成功的条件。

试试下面的代码:

def get_num_players() -> int:
    while True:
        user_input = input("Enter the number of players (1 to 4): ")
        try:
            num_players = int(user_input)
            if num_players >= 1 and num_players <= 4:
                return num_players
            else:
                print("Invalid number of players. Please enter a number between 1 and 4.")
        except:
            print("Invalid number of players. Please enter a number between 1 and 4.")

撰写回答