对于我写的这个函数,我完全疯了,while循环不适用于上帝之爱
while (something something):
print("at anytime enter 0 for both origin and destination to exit the game")
o=input("Enter origin stool's index (Must be int) ")
d=input("Enter destination stool's index (Must be int) ")
if isinstance(o,int) and isinstance(d,int):#if input d,o are int
#do bla bla
elif o==0 and d==0:#to exit manually
print("Exiting Manually...")
break
elif not (isinstance(o,int) and isinstance(d,int)):
print ("Invalid entry, exiting...")
break
代码应在o
AND d
为0时退出,并且在o
或d
不是int
然而,似乎我输入的内容并不重要(我试过0,0和0,1)它返回invalid entry, exiting...
条件怎么了?
答案 0 :(得分:4)
在Python 3中,input
函数始终返回一个字符串。它不会像在Python 2中那样eval
用户输入。因此,o
和d
都是字符串,而不是整数。您需要将input
来电与int(input('...'))
打包在一起,以便将其变为整数,这样您的条件就有可能成功。
在这种情况下,如果用户输入的值不是数字,则int
调用将失败并显示ValueError
。处理此问题的标准方法是使用try
- except
块来包装对用户输入的任何调用,以处理提供错误输入的用户。因此,代码的相关部分可能如下所示:
try:
o=int(input("Enter origin stool's index (Must be int) "))
d=int(input("Enter destination stool's index (Must be int) "))
except ValueError:
print("Invalid entry, exiting...")
break
作为旁注,你在条件中的逻辑有点怪异/破碎。您的第一个条件检查a
和d
是否都是整数,然后进行处理。然后你的下一个条件(第一个elif
块)尝试将这些条件与0
进行比较,这将总是失败,因为如果你进入那个测试,这意味着第一个条件失败,因此它们不是两个整体,因此永远不能等于0
。
答案 1 :(得分:0)
当o和d为整数时,无论其值如何,您的第一个“if”都将通过。只有当这个条件失败时,它才会继续到下一个“elif”。
尝试更多类似的内容:
if isinstance(o,int) and isinstance(d,int) and (o != 0 or d != 0):
#Conditions met, carry on
else:
break