печать работает только тогда, когда она тоже хочет. Мне нужно знать, почему

#python #printing

#питон #печать

Вопрос:

Ниже приведена вся кодировка. В последнем разделе, где функции взаимодействуют друг с другом, надпись добро пожаловать в tic tac toe и какой игрок идет первым, не печатается. Как и почему? Отступы на самом деле такие, какими они должны быть, перенос его в stackoverflow не привел к появлению отступов. Все функции работают. У меня нет с ними никаких проблем. Просто хочу понять, почему в последней ячейке два оператора печати welcome to tic tac toe и who goes first вообще не работают. перезапущенное ядро перепечатало их, удалило копию ячейки и вставило. понятия не имею, как заставить его печатать.

 from IPython.display import clear_output
def run_board(board):
clear_output()
print(' ' board[7] ' | ' board[8] ' | ' board[9] ' ')
print(' ~   ~   ~')
print(' ' board[4] ' | ' board[5] ' | ' board[6] ' ')
print(' ~   ~   ~')
print(' ' board[1] ' | ' board[2] ' | ' board[3] ' ')

def choose_marker():
marker=''

while not(marker=='X' or marker=='O'):
    marker = input('Player 1 choose X or O ').upper()
    
if marker=='X':
    return('X','O')
else:
    return('O','X')

def place_marker(board,marker,position):
board[position]=marker

def win_check(board,marker):
return ((board[1]==marker and board[2]==marker and board[3]==marker)or
       (board[4]==marker and board[5]==marker and board[6]==marker)or
       (board[7]==marker and board[8]==marker and board[9]==marker)or
       (board[7]==marker and board[4]==marker and board[1]==marker)or
       (board[8]==marker and board[5]==marker and board[2]==marker)or
       (board[9]==marker and board[6]==marker and board[3]==maker)or
       (board[7]==marker and board[5]==marker and board[3]==marker)or
       (board[9]==marker and board[5]==marker and board[1]==marker))

def spot_check(board,position):
return board[position]==' '

def full_board_check(board):
for pos in range(1,10):
    if spot_check(board,pos):
        return False
return True

def pick_spot(board):
position=0
while position not in [1,2,3,4,5,6,7,8,9] or not spot_check(board,position):
    position= int(input('Pick a location per num keys far right.'))
return position

import random
def go_first():
if random.randint(0,1)==0:
    return 'Player 1'
else:
    return 'Player 2'


def play_again():
return input('Do you want to play again? Yes or No.').lower().startswith('y')
 

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

 print('Welcome to Tic Tac Toe')

while True:
game_board=[' ']*10
turn=go_first()
print(turn ' Will go first')
run_board(game_board)
player1,player2=choose_marker()
play_game=input('Are you Ready to play?').lower()
if play_game[0]=='y':
    game_on=True
else:
    game_on=False

while game_on:
    if turn=='Player 1':
        run_board(game_board)
        position=pick_spot(game_board)
        place_marker(game_board,player1,position)
        
        if win_check(game_board,player1):
            run_board(game_board)
            print('You won MF')
            game_on=False
        else:
            if full_board_check(game_board):
                run_board(game_board)
                print('Wow you both lost. Nice.')
                game_on=False
            else:
                turn='Player 2'
    elif turn=='Player 2':
        run_board(game_board)
        position=pick_spot(game_board)
        place_marker(game_board,player2,position)
        
        if win_check(game_board,player2):
            run_board(game_board)
            print('You won even though you went last')
            game_on=False
        else:
            if full_board_check(game_board):
                run_board(game_board)
                print('Wow you both lost')
                game_on=False
            else:
                turn='Player 1'
if not play_again():
    break
 

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

1. Хотя я ценю, что вы упомянули, что ваш код имеет проблемы с отступами при вставке в stack overflow, для нас неразумно пытаться помочь отладить вашу программу, если мы не видим фактический отступ. Рассмотрите возможность использования трех обратных меток ( ``` ) в начале и конце вашего кода, чтобы отформатировать его без необходимости изменять отступ при вставке в Stack Overflow.

Ответ №1:

Он действительно печатает то, что вы хотите, но затем вы удаляете его. Например, он печатает Добро пожаловать в Tic Tac Toe, но затем вы запускаете run_board, который удаляет его. Я удалил run_board из начального цикла while, и это решило проблему, о которой вы изначально сообщали.

Тем не менее, я столкнулся с 2 другими незначительными проблемами. Я исправил их и опубликовал ниже. Не смотрите на приведенный ниже код, если вы делаете это для обучения и хотите сначала попробовать решить его самостоятельно, но он есть, если вы этого хотите.

 print('Welcome to Tic Tac Toe')
game_on=False
while game_on==False:
    game_board=[' ']*10
    turn=go_first()
    print(turn ' Will go first')
    player1,player2=choose_marker()
    play_game=input('Are you Ready to play?').lower()
    if play_game[0]=='y':
        game_on=True
    else:
        game_on=False

while game_on:
    if turn=='Player 1':
        run_board(game_board)
        position=pick_spot(game_board)
        place_marker(game_board,player1,position)
        
        if win_check(game_board,player1):
            run_board(game_board)
            print('You won MF')
            game_on=False
        else:
            if full_board_check(game_board):
                run_board(game_board)
                print('Wow you both lost. Nice.')
                game_on=False
            else:
                turn='Player 2'
    elif turn=='Player 2':
        run_board(game_board)
        position=pick_spot(game_board)
        place_marker(game_board,player2,position)
        
        if win_check(game_board,player2):
            run_board(game_board)
            print('You won even though you went last')
            game_on=False
        else:
            if full_board_check(game_board):
                run_board(game_board)
                print('Wow you both lost')
                game_on=False
            else:
                turn='Player 1'
    if game_on==False:
        if not play_again():
            break
 

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

1. БОЖЕ мой. Я забыл о чистоте. Мы только что говорили об этом. Так что я бы никогда не рассматривал это как возможность. Это сводило меня с ума. Большое вам спасибо.