#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. БОЖЕ мой. Я забыл о чистоте. Мы только что говорили об этом. Так что я бы никогда не рассматривал это как возможность. Это сводило меня с ума. Большое вам спасибо.