将变量与“int”进行比较是行不通的



我的程序需要用户的整数,所以我正在尝试创建一个循环,如果他们输入非整数,就会发生循环,直到他们输入整数才结束。我试过:

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

elsetry中未出错时运行。

错误出在行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

否则部分将在没有任何异常时执行。

最新更新