我的程序需要用户的整数,所以我正在尝试创建一个循环,如果他们输入非整数,就会发生循环,直到他们输入整数才结束。我试过:
PlayerCount = input("How many players?")
while PlayerCount != int:
try:
PlayerCount = int(PlayerCount)
except ValueError:
print("Please enter a number between 3 and 5")
PlayerCount = input("How many players?")
但是,当输入有效输入时,循环不会继续,或者结束并允许程序的其余部分运行。我只是在 IDLE 中看到一个换行符和一个闪烁的光标。我还需要做些什么来正确结束 while 循环吗?我预计一旦try
块成功,循环将自动结束。
这样做:
PlayerCount = input("How many players?")
while True: #loop forever until `break`
try:
PlayerCount = int(PlayerCount)
except ValueError:
print("Please enter a number between 3 and 5")
PlayerCount = input("How many players?")
else: #no error
break #exit loop
else
在try
中未出错时运行。
错误出在行while PlayerCount != int:
中。
PlayerCount != int
永远是真的。您可能想要做的是检查PlayerCount
是否为整数类型。但你实际上是在检查它是否等同于类int
本身。请注意,实际整数与 int
类不同。
要检查PlayerCount
是否是 int
类的实例,请将条件替换为 while not isinstance(PlayerCount, int):
。
尝试在第一行的while
循环中使用isinstance
,这样就不需要修改 while 循环的内部了:
PlayerCount = input("How many players?")
while not isinstance(PlayerCount, int):
try:
PlayerCount = int(PlayerCount)
except ValueError:
print("Please enter a number between 3 and 5")
PlayerCount = input("How many players?")
在代码中,将用户输入与int
类进行比较。您没有检查它是否是int
的实例。无论如何,您已经在检查您的 try-except 块。当输入不是有效的整数时,将执行 except 块。
只需将其更改为:
PlayerCount = input("How many players?")
while True:
try:
PlayerCount = int(PlayerCount)
break
except ValueError:
print("Please enter a number between 3 and 5")
PlayerCount = input("How many players?")
如注释中所述,另一种方法是使用 isinstance(PlayerCount, int)
,它根据 PlayerCount
是否是 int
的实例返回一个 bool
值。
Ask Jacob指出,与int
相比是不正确的。我建议有一个循环,它将重试,直到输入 3 到 5 之间的整数:
while True:
player_count = input('How many players (3-5)? ')
try:
player_count = int(player_count)
if player_count in (3, 4, 5):
break
except ValueError:
pass
几点:
- 此方法仅包括 1 个
input
函数调用 - 用户输入也会转换为
int
- 它检查两个条件:一个 int 和范围 3..5
PlayerCount = input("How many players?")
while type(PlayerCount) != int:
try:
PlayerCount = int(PlayerCount)
except ValueError:
print("Please enter a number between 3 and 5")
PlayerCount = input("How many players?")
else:
pass
否则部分将在没有任何异常时执行。