Python 输入数字
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.")