Как увеличить foor l oop внутри вложенного оператора if - PullRequest
0 голосов
/ 30 мая 2020

Я различаю 2 игроков в TicTacToe, используя MOD, который используется при увеличении l oop. У меня возникли проблемы с увеличением foor l oop во вложенном операторе if.

            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 

Я хочу иметь возможность увеличивать l oop, если кто-то щелкает по определенному координатному пространству.

Ответы [ 2 ]

2 голосов
/ 30 мая 2020

Поскольку вы используете for i in range(1, 10), не имеет значения, какие изменения вы вносите в i во время итерации, когда он вернется к for l oop, ему будет присвоено следующее значение в range. пример:

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

Вы ожидаете, что произойдет что-то вроде

>>> 0
>>> 3

, но на самом деле произойдет следующее:

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

Что здесь произошло? Сначала i присваивается значение 0, затем оно было напечатано и увеличено (теперь оно равно 2). Затем i присваивается значение 1 (из генератора range), поэтому сделанное вами приращение было отменено.

Чтобы решить эту проблему, используйте while l oop:

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

Теперь значение i не будет переопределено каждый раз, когда loop выполняет

0 голосов
/ 31 мая 2020

Выражение range(n) вычисляется только один раз, а не на каждой итерации. Вы не можете установить n и ожидать изменения range(n). Он не позволяет этого. Подробности см. Здесь

Для этого нужно использовать while l oop.

i=0
while i<=5:
    #do your tasks
    #do your increment
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...