在满足特定条件时使用while循环停止函数

时间:2013-10-09 20:16:06

标签: python loops while-loop nested-loops

places= ["Home","In-n Out Burger", "John's house", "Santa Monica Pier", "Staples center",  "LA Dodgers stadium", "Home"]
def placesCount(places):
    multi_word = 0
    count = 0
    while True:
        place = places[count]
        if ' ' in place and place!='LA Dodgers stadium' **""" or anything that comes after LA dodgers stadium"""** :
            multi_word += 1
        if '' in place and place!='LA Dodgers stadium' """ **or anything that comes after LA dodgers stadium**""":
            count += 1
    print (count, "places to LA dodgers stadium"),  print (multi_word)
placesCount(places)

我基本上想知道在这种情况下,当它到达列表的某个元素(“LA Dodgers Stadium”)时,如何阻止while循环添加到列表中。它不应该在到达列表的元素后添加任何内容。我知道我之前问过这个问题,但我没有收到正确答案。

5 个答案:

答案 0 :(得分:4)

您可能希望改变循环条件。而不是while True尝试:

place = places[0]
while place != "LA Dodgers Stadium" and count < len(places):

    if ' ' in place:
        multi_word += 1

    count += 1
    place = places[count]

编辑:可能更好的写作方式可能是:

for place in places:
    if place == "LA Dodgers Stadium": break
    if ' ' in place: multi_word += 1

答案 1 :(得分:0)

(伪代码)

flag = true

while (flag)
    ...
    if (place == LA Dodgers stadium)
    {
        flag = false
    }

答案 2 :(得分:0)

running = True

while running:

    user_input = raw_input("cmd> ")
    if user_input == "q":
        running = False

while True:

    user_input = raw_input("cmd> ")
    if user_input == "q":
        break

看看hereherehere:)

答案 3 :(得分:0)

嗯,这种简单事情的最快捷方式是:

places.index('LA Dodgers Stadium')

如果它不存在则会引发ValueError异常,但如果是,则返回索引。那么你可以做到

while count < dodgersindex:

为你的循环。更好的是,你可以这样做:

while place in places[:dodgersindex]:

可让你直接处理单词,而不是索引 - 更多pythonic。

作为一般情况。您可以使用continuebreak来中断执行......区别是这样的:

x = -1
while x < 100:
    x += 1
    if x % 2 == 0:
        continue
    if somearray[x] > 100:
        break

继续意味着'不要尝试其余的循环迭代,继续下一个' - 对于第一个项目,它将检查是否x%2 == 0,看到它是否存在,而不是甚至看看是否somearray[x] > 100。但它只会进入下一个条目(这将导致x增加到1)。但是,中断将导致整个循环退出...如果在条目51,我们发现somearray[51] > 100,我们将不会检查其余项目,但会立即退出。

答案 4 :(得分:0)

当我在上一个问题中读到你时,print(placesCount)无法正常工作,因为placesCount是一个不返回任何内容的函数。并且您正在尝试打印函数对象而不是函数返回的函数。

在函数末尾添加return。应该管用。 print语句应该是print(placesCount(argument))

但是,我建议你不要用文件迭代你的列表来实现你现在正在做的事情。

您可以使用列表推导来完成此操作。这通常比手动循环列表更快。

def placesCount(places):
    last_index = places.index('LA Dodgers stadium')

    multi_word = len([item for item in places[:last_index] if ' ' in item])
    count = len(places[:last_index])
    return count + "places to LA dodgers stadium\n" + (multi_word)

print(placesCount(places))

如果你想使用while循环。

def placesCount(places):
    count = 0
    while True:
        place = place[count]
        multi_word += 1 if ' ' in place else 0
        if place == 'LA Dodgers stadium':
            break
        count +=1
    return count + "places to LA dodgers stadium\n" + (multi_word)

print(placesCount(places))