Оператор if / else не запускает встроенный код даже после тщательной проверки и переназначения

#python #if-statement

#python #if-statement

Вопрос:

Вот мой код:

 x_or_o = ['x','o']
player_alive = 'yes'
    def game_over():
        player_alive = 'no'
        print('Player ' currentplayer ' wins!')
        player_alive = input('Play again? ')
        
    def check():
        for n in range(2):
            if str(x_or_o[n]) == currentplayer:
                if str(spot1) == currentplayer:
                    game_over()
    def main():
        choice = input('what is your choice?')# just choose 1a for this example
        if choice == '1a':
            spot1 = currentplayer
    currentplayer = 'x'
    check()
  

По какой-то причине второй оператор if не выполняется, хотя кажется, что строка установлена правильно, и я попытался изменить все аргументы, и самое большее, что я получил, это первый оператор if, работающий правильно; я попытался изменить условия, изменив spot1 на строку и обратно, даже отчуждая блоки кода в другом файле python, но, похоже, ничего не работает
Полный код для справки:

 import random
import os
spot1 = '1'
spot2 = '2'
spot3 = '3'
spot4 = '4'
spot5 = '5'
spot6 = '6'
spot7 = '7'
spot8 = '8'
spot9 = '9'
currentplayer = 'x'
choice = ''
x_or_o = ['x','o']
player_alive = 'yes'
def game_over():
    player_alive = 'no'
    print('Player ' currentplayer ' wins!')
    player_alive = input('Play again? ')
    
def check():
    for n in range(2):
        if str(x_or_o[n]) == currentplayer:
            if str(spot1) == currentplayer:# and spot4 == currentplayer and spot7 == currentplayer:#colums, left to right
                game_over()
            elif spot2 == currentplayer and spot5 == currentplayer and spot8 == currentplayer:
                game_over()
            elif spot3 == currentplayer and spot6 == currentplayer and spot9 == currentplayer:
                game_over()
            elif spot1 == currentplayer and spot2 == currentplayer and spot3 == currentplayer:#rows, top to bottom
                game_over()
            elif spot4 == currentplayer and spot5 == currentplayer and spot6 == currentplayer:
                game_over()
            elif spot7 == currentplayer and spot8 == currentplayer and spot9 == currentplayer:
                game_over()
            elif spot1 == currentplayer and spot5 == currentplayer and spot9 == currentplayer:
                game_over()
            elif spot3 == currentplayer and spot5 == currentplayer and spot7 == currentplayer:
                game_over()
def engine():
    spot1 = '*'
    spot2 = '*'
    spot3 = '*'
    spot4 = '*'
    spot5 = '*'
    spot6 = '*'
    spot7 = '*'
    spot8 = '*'
    spot9 = '*'
    currentplayer = 'x'
    while player_alive == 'yes':
        print('   a   b   c    n')
        print('1 [' spot1 '] [' spot2 '] [' spot3 ']n')
        print('2 [' spot4 '] [' spot5 '] [' spot6 ']n')
        print('3 [' spot7 '] [' spot8 '] [' spot9 ']n')
        choice = input('Where would you like to place your piece, ' currentplayer '?n')
        if choice == '1a':
            spot1 = currentplayer
        elif choice == '1b':
            spot2 = currentplayer
        elif choice == '1c':
            spot3 = currentplayer
        elif choice == '2a':
            spot4 = currentplayer
        elif choice == '2b':
            spot5 = currentplayer
        elif choice == '2c':
            spot6 = currentplayer
        elif choice == '3a':
            spot7 = currentplayer
        elif choice == '3b':
            spot8 = currentplayer
        elif choice == '3c':
            spot9 = currentplayer
            
        if currentplayer == 'x':
            currentplayer = 'o'
        else:
            currentplayer = 'x'
        check()
while True:
    engine()
  

Комментарии:

1. @Sayse if choice == ‘1a’: spot1 = текущий проигрыватель

Ответ №1:

Ваша spot1 (и другие) являются глобальной переменной. Вы можете прочитать их в функции, но не можете изменить их таким образом.

Если вы напечатаете spot1 перед своим if , это будет равно '1'

Чтобы обновить spot1 внутри вашей main функции (или engine в полном коде), вы должны добавить global spot1 перед изменением его значения

     def main():
        choice = input('what is your choice?')# just choose 1a for this example
        if choice == '1a':
            global spot1
            spot1 = currentplayer
  

Комментарии:

1. извините, я пересмотрел свой код и этот пост, и я знаю, в чем проблема; я просто не могу это исправить

2. Как и в моем примере, вы можете добавить global spot1 перед изменением значения spot1 , и это должно сработать

3. я только что просмотрел свой код, и вы были правы. Извините за беспокойство