![](/img/trans.png)
[英]Proper usage of 'continue' and 'break' in for loop
[英]While Loop Break usage
我对我编写的这个函数完全发疯了,而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
OR d
不是int时,代码也应该退出。
但是似乎输入什么都没关系,(我尝试输入0,0和0,1)返回invalid entry, exiting...
条件怎么了?
在Python 3中, input
函数始终返回一个字符串。 它不像在Python 2中那样eval
用户输入。因此, o
和d
都是字符串,而不是整数。 您需要将input
调用包装为int(input('...'))
才能将它们转换为int,因此您的条件条件有机会获得成功。
在这种情况下,如果用户输入的值不是数字,则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
是否均为int,然后进行处理。 然后,您的下一个条件(第一个elif
块)尝试将它们与0
进行比较,这将始终失败,因为如果您进行该测试,则意味着第一个条件失败了,因此它们不是两个整数,因此永远不能等于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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.