0
places = ["Jack", "John", "Sochi"]
count=0
multi_word=0
place  = places[count]
while place != "Sochi" and count < len(places):
    if ' ' in place:
        multi_word += 1

    count += 1
    place = places[count]

print ('Number of cities before Sochi:', count)

我的代码应该打印 Sochi 之前的城市数量,不包括 Sochi 。我不明白这条线 (place = places[count]) 做了什么,也不明白为什么我需要它两次。

4

4 回答 4

2

foreach 会把它整理好

places = ["Jack", "John", "Sochi"]
count = 0
for place in places:
    if ' ' in place:
        multi_word += 1
    if place == "Sochi":
        break
    count += 1
于 2013-10-14T11:40:55.343 回答
1

为什么不尝试更 Pythonic 的解决方案呢?

places = ["Jack", "John", "Sochi"]

try:
    count = places.index("Sochi")
except ValueError:
    count = len(places)

multi_word = len([place for place in places[:count] if ' ' in place])
于 2013-10-14T11:47:50.870 回答
1

您可以使用以下while循环检查索契之前的位置数:

places = ["Jack", "John", "Sochi"]
count = 0
multi_word = 0
while count < len(places):
    place = places[count]
    if ' ' in place:
        multi_word += 1
    if place == "Sochi":
        break
    count += 1

print('Number of cities before Sochi:', count)

break语句意味着您将退出while循环。

于 2013-10-14T11:28:48.263 回答
1
count=0
place = places[count]

现在place总是places[0],即杰克。因此,while 循环仅在第二个条件下终止,列表长度为 3。

place = places[count]应该进入循环。

于 2013-10-14T11:27:14.113 回答