循环中断使用时

时间:2014-02-23 17:12:35

标签: python python-3.x while-loop

对于我写的这个函数,我完全疯了,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时退出,并且在od不是int

时也应该退出

然而,似乎我输入的内容并不重要(我试过0,0和0,1)它返回invalid entry, exiting...

条件怎么了?

2 个答案:

答案 0 :(得分:4)

在Python 3中,input函数始终返回一个字符串。它不会像在Python 2中那样eval用户输入。因此,od都是字符串,而不是整数。您需要将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

作为旁注,你在条件中的逻辑有点怪异/破碎。您的第一个条件检查ad是否都是整数,然后进行处理。然后你的下一个条件(第一个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