为什么i + = 1变化i + = 2有效?

时间:2018-02-04 15:19:51

标签: python while-loop

这是我第一次在这里提问。

我尝试让身高超过200厘米的球员但我不知道为什么在我将i += 1调整为i += 2之前它不起作用,我仍然不知道为什么的工作原理。

顺便说一句,我尝试使用while循环而不是for循环来编写此代码。

提前致谢!

players = [['James', 202],
           ['Curry', 193],
           ['Durant', 205],
           ['Jordan', 199],
           ['David', 211]]

i = 0
while i < len(players):
    if players[i][1] < 200:
        continue
    print(players[i])
    i += 1

5 个答案:

答案 0 :(得分:4)

使用for循环进行重组,并仅在您想要执行某些操作时指定:

players = [['James', 202], ['Curry', 193], ['Durant', 205],
           ['Jordan', 199], ['David', 211]]

for p, height in players:
    if height >= 200:
        print(p)

# James
# Durant
# David

或使用列表理解:

[p for p, height in players if score >= 200]
# ['James', 'Durant', 'David']

代码的问题在于,当它命中continue时,i不会随着循环的下一次迭代开始而递增。 Read up on continue here。以下是使用while循环执行此操作的方法:

i = 0
while i < len(players):
    p, height = players[i]
    if height >= 200:
        print(p)
    i += 1

# James
# Durant
# David

答案 1 :(得分:1)

你的问题是由于下面的代码,你最终会陷入无限循环:

if players[i][1] < 200:
    continue  # here you skip to the top of the loop without changing i

当您更改为i += 2时,此问题仍然存在,但您恰好避免卡在其中。这是因为您只处理偶数索引元素。其中每个值都超过200,因此您的代码永远不会转到continue语句。

[['James', 202],
 ['Durant', 205],
 ['David', 211]]

尝试:

i = 0
while i < len(players):
    if players[i][1] < 200:
        print(players[i])
    i += 1

答案 2 :(得分:1)

如果你坚持使用while循环,那么另一个是干净的替代方案:

players = [['James', 202],
           ['Curry', 193],
           ['Durant', 205],
           ['Jordan', 199],
           ['David', 211]]

while players:
    p, height = players.pop(0)
    if height >= 200:
        print(p)

这是有效的,因为玩家在空[]时评估为假。在每一步中我们都会弹出一件物品。但是,在运行循环后,玩家是一个空列表。

答案 3 :(得分:0)

在将i + = 1添加到i + = 2之前,不理解它的意思只是想想你想要做什么。

你想从数组中获取值吗?即。

players[0][1] will get you 202
players[1][1] will get you 193
players[2][1] will get you 205
....

所以相应地增加我。

有时编写代码的最简单方法是首先大声说出来或用简单的英文写出来。

  • 您希望循环遍历数组的值
  • 然后,您要检查值是否与某些内容匹配
  • 如果确实要打印
  • 如果它不打印,然后转到下一个值
  • 继续执行此操作,直到您检查了数组中的每个值

现在编写代码是对的吗?

理解增量的最简单方法是像这样写

i = i + 1

答案 4 :(得分:0)

实现您未来的目标的最简单方法

players = [['James', 202],
           ['Curry', 193],
           ['Durant', 205],
           ['Jordan', 199],
           ['David', 211]]

for name,height in players:
    if height>=200: print(name)