如何解决每次调用函数时如何在函数中复制,打印列表和存储值井字游戏
我对参数如何工作以及如何使用return语句调用函数感到困惑。我正在尝试从旧的图表创建一个新的图表,这样,如果我再次玩,它将重新开始。我尝试过将列表复制到run函数中并打印出来,但似乎新值已放在旧列表中。我也相信check_win
函数可以大大简化,尽管我不确定该怎么做。
graph = [[' ','|',' ',' '],['-','+','-','-'],[' ',' ']]
def draw_graph(new_graph):
for row in new_graph:
for col in row:
print(col,end = '')
print()
def play_game():
again = 'yes'
while again == 'yes':
new_graph = graph
draw_graph(new_graph)
won = False
current_player = 'player1'
while not won:
pos = input("Which spot do you want to place your piece (1-9)? ")
if current_player == 'player1':
symbol = 'X'
elif current_player == 'player2':
symbol = 'O'
place_spot(pos,symbol,new_graph)
draw_graph(new_graph)
won = check_win(new_graph)
current_player = flip_player(current_player)
print("Thank you for playing.")
again = input("Do you want to play again? (yes/no) ")
def place_spot(pos,new_graph):
answer = ''
while answer != 'good':
if pos == '1':
new_graph[0][0] = symbol
break
if pos == '2':
new_graph[0][2] = symbol
break
if pos == '3':
new_graph[0][4] = symbol
break
if pos == '4':
new_graph[2][0] = symbol
break
if pos == '5':
new_graph[2][2] = symbol
break
if pos == '6':
new_graph[2][4] = symbol
break
if pos == '7':
new_graph[4][0] = symbol
break
if pos == '8':
new_graph[4][2] = symbol
break
if pos == '9':
new_graph[4][4] = symbol
break
else:
print("Please enter a number (1-9).")
def check_win(new_graph):
#top row win
if new_graph[0][0] == 'X' and new_graph[0][2] == 'X' and new_graph[0][4] == 'X':
print(f"Player 1 wins!")
won = True
return won
#middle row win
elif new_graph[2][0] == 'X' and new_graph[2][2] == 'X' and new_graph[2][4] == 'X':
print(f"Player 1 wins!")
won = True
return won
#bottom row win
elif new_graph[4][0] == 'X' and new_graph[4][2] == 'X' and new_graph[4][4] == 'X':
print(f"Player 1 wins!")
won = True
return won
#left diagonal win
elif new_graph[0][0] == 'X' and new_graph[2][2] == 'X' and new_graph[4][4] == 'X':
print(f"Player 1 wins!")
won = True
return won
#right diagonal win
elif new_graph[0][4] == 'X' and new_graph[2][2] == 'X' and new_graph[4][0] == 'X':
print(f"Player 1 wins!")
won = True
return won
#Player 2
#top row win
elif new_graph[0][0] == 'O' and new_graph[0][2] == 'O' and new_graph[0][4] == 'O':
print(f"Player 2 wins!")
won = True
return won
#middle row win
elif new_graph[2][0] == 'O' and new_graph[2][2] == 'O' and new_graph[2][4] == 'O':
print(f"Player 2 wins!")
won = True
return won
#bottom row win
elif new_graph[4][0] == 'O' and new_graph[4][2] == 'O' and new_graph[4][4] == 'O':
print(f"Player 2 wins!")
won = True
return won
#left diagonal win
elif new_graph[0][0] == 'O' and new_graph[2][2] == 'O' and new_graph[4][4] == 'O':
print(f"Player 2 wins!")
won = True
return won
#right diagonal win
elif new_graph[0][4] == 'O' and new_graph[2][2] == 'O' and new_graph[4][0] == 'O':
print(f"Player 2 wins!")
won = True
return won
def flip_player(player):
if player == 'player1':
current_player = 'player2'
return current_player
elif player == 'player2':
current_player = 'player1'
return current_player
play_game()
解决方法
您可以使用copy.deepcopy
递归复制列表:
>>> x = [[1],[2],[3]]
>>> y = copy.copy(x) # a shallow copy
>>> y[0][0] = 5 # this modifies 'x[0]' as well
>>> x
[[5],[3]]
>>> z = copy.deepcopy(x)
>>> z[0][0] = 9
>>> x
[[5],[3]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。