我的程序需要用户输入一个整数,因此我试图创建一个循环,如果他们输入非整数,并且直到输入整数,该循环才结束。我尝试过:
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
块成功后,循环会自动结束。
答案 0 :(得分:4)
执行以下操作:
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
中未出错时运行。
答案 1 :(得分:3)
错误在while PlayerCount != int:
行中。
PlayerCount != int
将始终为真。您可能想做的是检查PlayerCount
是否为整数类型。但是您实际上正在检查它是否等效于类int
本身。请注意,实际整数与int
类不同。
要检查PlayerCount
是否是int
类的实例,请用while not isinstance(PlayerCount, int):
替换条件。
答案 2 :(得分:2)
尝试在第一行的isinstance
循环中使用while
,则无需修改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?")
答案 3 :(得分:0)
在您的代码中,您正在将用户输入与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)
,它基于bool
是否是PlayerCount
的实例而返回int
的值。 / p>
答案 4 :(得分:0)
请雅各布指出,与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
几点:
input
函数调用int
答案 5 :(得分:0)
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
其他部分将在没有任何异常的情况下执行。