Чтобы упростить задачу, я собираюсь включить сюда весь файл: choices = ['1', '2', '3', '4', '5', '6', '7', '8', '9'] Is_Current_One = Верно выиграно = Ложно неправильноEntryPlayer1 = Ложно неправильноEntryPlayer2 = ...

1
Brandon Li 17 Янв 2021 в 04:11

3 ответа

Лучший ответ

Я сделал несколько исправлений, и все работает нормально.

choices = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
choices_closed = ['=','=','=','=','=','=','=','=','=']
Is_Current_One = True
won = False
wrongEntryPlayer1 = False
wrongEntryPlayer2 = False



while not won:
    if not wrongEntryPlayer1 and not wrongEntryPlayer2:
        print('\n')
        print('|' + choices[0] + '|' + choices[1] + '|' + choices[2] + '|')
        print('----------')
        print('|' + choices[3] + '|' + choices[4] + '|' + choices[5] + '|')
        print('----------')
        print('|' + choices[6] + '|' + choices[7] + '|' + choices[8] + '|')



    # above code is to print board layouts
    if Is_Current_One:
        print("Player 1's turn.\nChoose a number to put an X there.")
        try:
            choice = int(input("> ").strip())
            wrongEntryPlayer1 = False
        except ValueError:
            print("Please enter only valid fields from board (0-8)")
            wrongEntryPlayer1 = True
            continue
    else:
        print("Player 2's turn.\nChoose a number to put an O there.")
        try:
            choice = int(input("> ").strip())
            wrongEntryPlayer2 = False
        except ValueError:
            print("Please enter only valid fields from board (0-8)")
            wrongEntryPlayer2 = True
            continue

    if Is_Current_One:
        if choices[choice - 1] != int:
            if choices_closed[choice - 1] != '+':            
                try:
                    choices[choice - 1] = 'X'
                    choices_closed[choice - 1] = '+'
                    wrongEntryPlayer1 = False
                except IndexError:
                    print("Please enter only valid fields from board (0-8)")
                    wrongEntryPlayer1 = True
            else:                
                print("You cannot that. The record aren't empty")
                Is_Current_One = True
        else:            
            print("Please choose a number that is empty.")
            wrongEntryPlayer1 = True
    else:        
        if choices[choice - 1] != int:    
            if choices_closed[choice - 1] != '+':        
                try:
                    choices[choice - 1] = 'O'
                    choices_closed[choice - 1] = '+'
                    wrongEntryPlayer2 = False
                except IndexError:
                    print("Please enter only valid fields from board (0-8)")
                    wrongEntryPlayer2 = True
            else:                
                print("You cannot that. The record aren't empty")
                Is_Current_One = False

        else:
            print("Please choose a number that is empty.")
            wrongEntryPlayer2 = True



    # code to toggle between True and False
    Is_Current_One = not Is_Current_One

    for pos_x in range(0, 3):
        pos_y = pos_x * 3

        # for row condition:
        if (choices[pos_y] == choices[(pos_y + 1)]) and (
                choices[pos_y] == choices[(pos_y + 2)]):
            won = True

        # column condition:
        if (choices[pos_x] == choices[(pos_x + 3)]) and (
                choices[pos_x] == choices[(pos_x + 6)]):
            won = True


    if ((choices[0] == choices[4] and choices[0] == choices[8])
            or (choices[2] == choices[4] and choices[4] == choices[6])):
        won = True

print("Player " + str(int(Is_Current_One + 1)) + " won, Congratulations!")

Я добавил choices_closed, там много "=", т.к. это поможет с непустой записью. Также я изменил это if choices[choice - 1] != int: вместо этого if choices[choice - 1] == int:

На следующем:

            if choices_closed[choice - 1] != '+':            
                try:
                    choices[choice - 1] = 'X'
                    choices_closed[choice - 1] = '+'
                    wrongEntryPlayer1 = False
                except IndexError:
                    print("Please enter only valid fields from board (0-8)")
                    wrongEntryPlayer1 = True
            else:                
                print("You cannot that. The record aren't empty");
                Is_Current_One = True

Что я имею в виду if choices_closed[choice - 1] != '+':? Я имею в виду, когда это поле не пусто. Когда будет True , я поставлю знак "+", и теперь он заполнится. Когда будет False , я покажу это print("You cannot that. The record aren't empty"), поэтому я добавил в следующей строке Is_Current_One = False для человека, который не хочет тратить зря, то же самое для других строк кода { {X3}} - 'X'

0
Sanetro 17 Янв 2021 в 02:44

Я думаю вместо того, чтобы использовать

 if not wrongEntryPlayer1 and not wrongEntryPlayer2:

Вам следует использовать:

if wrongEntryPlayer1 or wrongEntryPlayer2:

Это исправит часть печатной платы.

0
Julio Suaya 17 Янв 2021 в 01:37

На самом деле с вашим кодом есть две проблемы: во-первых, ваша проблема, по которой вы просили помощи, вызвана переключением флага Is_Current_One, даже когда игрок вводит "плохой" ввод. Другими словами, когда первый игрок вводит «asdf», мы хотим, чтобы у него была возможность снова ввести «хороший» ввод, а не сразу переключаться на второго игрока. Поместите блок if над той строкой, которая читает if not wrongEntryPlayer1 and not wrongEntryPlayer2:.

Вторая, гораздо более серьезная проблема заключается в том, что ваша проверка типа на предмет того, является ли ввод игрока int, не работает. Во-первых, choices[choice - 1] == int сравнивает значение в массиве с типом, который всегда будет False. Во-вторых, даже функция isinstance(choices[choice-1], int) не работает, потому что каждый член выбора является строковым типом. Поэтому вам следует использовать строковый метод choices[choice-1].isnumeric(), который определит, является ли строка в массиве числом. (В качестве альтернативы вы можете просто проверить, не является ли он x или o, но это больше Pythonic.)

Я протестировал эти изменения, и, похоже, они работают. pastebin

0
William Bradley 17 Янв 2021 в 01:50
65756356