对于循环到While循环使用IN进行while循环

时间:2014-07-11 03:23:48

标签: python python-2.7 if-statement for-loop while-loop

我对Python 2.7很陌生,所以我对使用for循环的循环有几个问题。

例如:我正在写这个定义

def missingDoor(trapdoor,roomwidth,roomheight,step):        
    safezone = []
    hazardflr = givenSteps(roomwidth,step,True)
    safetiles = []

    for m in hazardflr:
        safetiles.append((m,step))
        i = 0
        while i < len(safetiles):
            nextSafe = safetiles[i]
            if knownSafe(roomwidth, roomheight, nextSafe[0], nextSafe[1]):
                if trapdoor[nextSafe[0]/roomwidth][nextSafe[0]%roomwidth] is "0":
                    if nextSafe[0] not in safezone:
                        safezone.append(nextSafe[0])
                    for e in givenSteps(roomwidth,nextSafe[0],True):
                        if knownSafe(roomwidth, roomheight, e, nextSafe[0]):
                            if trapdoor[e/roomwidth][e%roomwidth] is "0" and (e,nextSafe[0]) not in safetiles:
                                safetiles.append((e,nextSafe[0]))
            i += 1  
    return sorted(safezone)

我正在尝试将所有for循环转换为while循环,所以这是我目前所写的内容。我实际上不知道我们是否说过&#34;当我在&#34;在代码中间附近工作。但是使用while循环规则,此代码是否与for循环规则相同?

safezone = []
hazardflr = givenSteps(roomwidth,step,True)
safetiles = []
m=0
while m < hazardflr:
    safetiles.append((m,step))
    i = 0
    while i < len(safetiles):
        nextSafe = safetiles[i]
        if knownSafe(roomwidth, roomheight, nextSafe[0], nextSafe[1]):
            if trapdoor[nextSafe[0]/roomwidth][nextSafe[0]%roomwidth] is "0":
                if nextSafe[0] not in safezone:
                    safezone.append(nextSafe[0])
                    e=0
                while e in givenSteps(roomwidth,nextSafe[0],True):
                    if knownSafe(roomwidth, roomheight, e, nextSafe[0]):
                        if trapdoor[e/roomwidth][e%roomwidth] is "0" and (e,nextSafe[0]) not in safetiles:
                            safetiles.append((e,nextSafe[0]))
                    e+=1        
        i += 1
    m+=1
return sorted(safezone)

感谢您的任何建议或帮助!

3 个答案:

答案 0 :(得分:1)

不,您的代码不相同。

虽然它们看起来很相似,但for item in listwhile item in list会做完全不同的事情

  • for item in list是对列表中每个项目说法的一种语法方式 - 用is做点什么。
  • while item in list不同 - 只要条件为真,while循环就会迭代。在这种情况下的条件是item in list。它不会在每次迭代时更新项目,如果您从未更改itemlist的内容,则它可能永远不会终止。此外,如果任何给定项目不在列表中,它可能会提前终止。

如果您要遍历列表并保持计数,使用while是错误的方法。请改用enumerate()功能。

enumerate()获取一个列表,并返回一个元组列表,列表中的每个项目按其索引顺序排列,如下所示:

for i,m in enumerate(hazardflr):
    safetiles.append((m,step))

这一小改动意味着您不再需要手动跟踪索引。

如果您正在迭代Python中列表中的每个项目 - 使用for 这就是它的目的。

答案 1 :(得分:0)

这取决于givenSteps返回的确切内容,但总的来说,不是。 for x in foo评估foo一次,然后依次将x指定为foo的每个元素。另一方面,while x in foo: ... x += 1在每次迭代时评估foo,如果foo不是连续序列,则会提前结束。例如,如果foo = [0, 1, 2, 5, 6]for将使用foo的每个值,但while将在2之后结束,因为3不在foo中。如果while包含任何非整数值或低于起始值的值,则for也会与foo不同。

答案 2 :(得分:-1)

while aList:
     m= hazardflr.pop()
    # ...

应该大致相当于你的其他循环