python while循环内部for循环不破坏

时间:2014-02-21 11:56:38

标签: python for-loop while-loop break

为什么不用这个循环中断?我得到的是stats变量的第一个字母和从0到无限的计数。

x = 0

for letter in range(0,len(stats)):
    while True:
        if stats[letter] != ',':
            x += 1
            print(stats[letter])
            print (x)
        elif stats[letter] == ',':
            break
    break
    print(stats[letter])

3 个答案:

答案 0 :(得分:1)

它不会中断,因为你的letter永远不会在while循环中被更改。如果

stats[letter] != ','

while循环的开头,然后该分支将被反复使用。

答案 1 :(得分:0)

for letter in range(0,len(stats)-1):

    if stats[letter] != ',':
        x += 1
        print(stats[letter])
        print (x)
    elif stats[letter] == ',':
        break

print(stats[letter])

我认为上面的代码就是你所追求的。您不需要while循环,for循环将测试字符串stats中的每个字母,并在您使用逗号时中断。

如果字符串中没有逗号,最后一行将打印逗号或最后一个字母。我也改变了循环限制,因为我认为你测试一个不存在的字符会出错。

编辑:它适用于我,虽然我认为另一个答案是更好的方法。我在下面运行了这个测试脚本,并且每次命中逗号都会破坏它。

#!/usr/bin/python

def SO_answer(stats):

x = 0

for letter in range(0,len(stats)-1):
        if stats[letter] != ',':
            x += 1
            print(stats[letter])
            print (x)
        elif stats[letter] == ',':
            break

print(stats[letter])


SO_answer("test")

SO_answer("testing, 1, 2, 3")

SO_answer("Here's a long string with a comma at the end,")

SO_answer(",,,,,")

答案 2 :(得分:0)

这是你要解决的问题吗?内置enumerate()为您提供indexvalue的{​​{1}}。

iterable