【问题标题】:How to increment a foor loop within a nested if statement如何在嵌套的 if 语句中增加 for 循环
【发布时间】:2020-05-30 08:04:55
【问题描述】:

我通过使用 MOD 来区分井字游戏中的 2 个玩家,该 MOD 在递增的 for 循环中使用。我无法在嵌套的 if 语句中增加 for 循环。

            for i in range (1,10):
                if i % 2==1:
                    #1st row
                    if click[0]<=250 and click[0]>=100 and click[1]<=250 and click[1]>=100:
                        current_game[0][0] = "X"
                        i+=1
                    elif click[0]<=550 and click[0]>=250 and click[1]<=250 and click[1]>=100:
                        current_game[0][1] = "X"
                        i += 1
                    elif click[0]<=700 and click[0]>=550 and click[1]<=250 and click[1]>=100:
                        current_game[0][2] = "X"
                        i += 1
                    #2nd row
                    elif click[0]<=250 and click[0]>=100 and click[1]<= 550and click[1]>=250:
                        current_game[1][0] = "X"
                        i += 1
                    elif click[0]<=550 and click[0]>=250 and click[1]<=550 and click[1]>=250:
                        current_game[1][1] = "X"
                        i += 1
                    elif click[0] <= 700 and click[0] >= 550 and click[1] <= 550 and click[1] >= 250:
                        current_game[1][2] = "X"
                        i += 1
                    #3rd row
                    elif click[0]<=250 and click[0]>=100 and click[1]<= 700and click[1]>=550:
                        current_game[2][0] = "X"
                        i += 1
                    elif click[0] <= 550 and click[0] >= 250 and click[1] <= 700 and click[1] >= 550:
                        current_game[2][1] = "X"
                        i += 1
                    elif click[0] <= 700 and click[0] >= 550 and click[1] <= 700 and click[1] >= 550:
                        current_game[2][2] = "X"
                        i += 1
                elif i % 2==0:
                    # 1st row
                    if click[0] <= 250 and click[0] >= 100 and click[1] <= 250 and click[1] >= 100:
                        current_game[0][0] = "o"
                        i += 1
                    elif click[0] <= 550 and click[0] >= 250 and click[1] <= 250 and click[1] >= 100:
                        current_game[0][1] = "o"
                        i += 1
                    elif click[0] <= 700 and click[0] >= 550 and click[1] <= 250 and click[1] >= 100:
                        current_game[0][2] = "o"
                        i += 1
                    # 2nd row
                    elif click[0] <= 250 and click[0] >= 100 and click[1] <= 550 and click[1] >= 250:
                        current_game[1][0] = "o"
                        i += 1
                    elif click[0] <= 550 and click[0] >= 250 and click[1] <= 550 and click[1] >= 250:
                        current_game[1][1] = "o"
                        i += 1
                    elif click[0] <= 700 and click[0] >= 550 and click[1] <= 550 and click[1] >= 250:
                        current_game[1][2] = "o"
                        i += 1
                    # 3rd row
                    elif click[0] <= 250 and click[0] >= 100 and click[1] <= 700 and click[1] >= 550:
                        current_game[2][0] = "o"
                        i += 1
                    elif click[0] <= 550 and click[0] >= 250 and click[1] <= 700 and click[1] >= 550:
                        current_game[2][1] = "o"
                        i += 1
                    elif click[0] <= 700 and click[0] >= 550 and click[1] <= 700 and click[1] >= 550:
                        current_game[2][2] = "o"
                        i += 1 

如果有人点击某个坐标空间,我希望能够增加 for 循环。

【问题讨论】:

  • for i in range (1,10): 替换为while i&lt;10 并在此之前添加i =1

标签: python list loops for-loop increment


【解决方案1】:

因为您使用for i in range(1, 10),所以在迭代期间您对i 所做的更改并不重要,当它返回for 循环时,它将被分配range 中的下一个值。示例:

for i in range(5):
    print(i)
    i += 2

你期望发生的事情是这样的

>>> 0
>>> 3

但实际上会发生的是:

>>> 0
>>> 1
>>> 2
>>> 3
>>> 4

这里发生了什么?首先,i 被赋值为 0,然后它被打印并递增(所以现在它等于 2)。接下来,i 被赋值为 1(来自 range 生成器),因此您所做的增量被覆盖。

要解决这个问题,请使用while 循环:

i = 1
while i < 10:
    # do stuff
    i += 1

现在i 的值不会在每次loop 执行时被覆盖

【讨论】:

    【解决方案2】:

    表达式range(n) 只计算一次,而不是每次迭代。您不能设置 n 并期望更改 range(n)。它不允许这样做。 Check it here for details

    您必须为此使用 while 循环。

    i=0
    while i<=5:
        #do your tasks
        #do your increment
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多