Python 在'之外修改列表;而';在通过';而';环
我目前正试图从头开始创建我自己的Tictatcoe游戏,我目前很难使用与我创建的列表相对应的“while”循环。 我正在使用以下列表:Python 在'之外修改列表;而';在通过';而';环,python,list,Python,List,我目前正试图从头开始创建我自己的Tictatcoe游戏,我目前很难使用与我创建的列表相对应的“while”循环。 我正在使用以下列表: board = [1,2,3,4,5,6,7,8,9] 在Tictatcoe的3x3游戏中标记所有9个插槽。 但是,当一号玩家移动时(例如在插槽“1”中),列表应更改为显示 board = [X,2,3,4,5,6,7,8,9] 这应该一直持续到列表中的所有9个索引(我认为是合适的术语)都应该被“X”或“O”占据,这将在游戏中等于平局 现在我只是在进行实验,
board = [1,2,3,4,5,6,7,8,9]
在Tictatcoe的3x3游戏中标记所有9个插槽。
但是,当一号玩家移动时(例如在插槽“1”中),列表应更改为显示
board = [X,2,3,4,5,6,7,8,9]
这应该一直持续到列表中的所有9个索引(我认为是合适的术语)都应该被“X”或“O”占据,这将在游戏中等于平局
现在我只是在进行实验,所以请原谅其余的代码,但我使用的完整代码是:
board = [1,2,3,4,5,6,7,8,9]
def CreateBoard(board):
print(' | |')
print(' ' + board[7] + ' | ' + board[8] + ' | ' + board[9])
print(' | |')
print('-----------')
print(' | |')
print(' ' + board[4] + ' | ' + board[5] + ' | ' + board[6])
print(' | |')
print('-----------')
print(' | |')
print(' ' + board[1] + ' | ' + board[2] + ' | ' + board[3])
print(' | |')
PlayerOne = 'X'
Turn = 'player one'
GameRunning = True
while [0] == 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8 or 9 in board == True:
if Turn == 'player one':
letter = 'X'
Move = input("Please pick where to go next: ")
Move = int(Move)
if Move in board:
board.insert(Move, letter)
board.remove(Move)
print(board)
Turn = 'player two'
else:
print("This move is invalid")
if Turn == 'player two':
letter = 'O'
Move = input("Pick where to go next: ")
Move = int(Move)
if Move in board:
board.insert(Move, letter)
board.remove(Move)
print(board)
Turn = 'player one'
else:
print("This move is invalid")
我得到的输出是:
我猜while循环正在运行循环之外的列表,但我正在尝试找到一种方法来改变它!
我还没有弄明白为什么它会打印“那个举动是无效的” while循环的问题是非零整数总是被认为是“真的”。所以
while [0] == 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8 or 9 in board == True:
实际上是指“当包含0的列表等于整数1(始终为false)、2(true)、3(true)…或9 in(线路板)(如果9仍在线路板上,则为true)时,输入块。”
我相信你的意思是:
while any((cell in range(1,10) for cell in board)):
这意味着当电路板中的任何单元在1(包括)到10(不包括)的范围内时,请输入块
请看下面的代码:
player = [
{"name": "Player One", "letter": "X"},
{"name": "Player Two", "letter": "O"},
]
def print_board(board):
def print_vbars():
print(" | |")
def print_hbars():
print("-----------")
print_vbars()
for row in range(3):
print(" {} | {} | {}".format(*(board[row*3 : row*3+3])))
print_vbars()
print_hbars()
print_vbars()
print_vbars()
def final_state(board):
winning_combinations = (
(0,1,2), # Horizontal top row
(3,4,5), # Horizontal middle row
(6,7,8), # Horizontal bottom row
(0,3,6), # Vertical left row
(1,4,2), # Vertical middle row
(2,5,7), # Vertical right row
(0,4,8), # Downward diagonal
(2,4,6), # Upward diagonal
)
for letter in ("X", "O"):
for combination in winning_combinations:
row_state = (board[index] for index in combination)
if all(map(lambda cell: letter == cell, row_state)):
return "{} wins".format(letter)
if all(map(lambda cell: cell in ("X", "O"), board)):
return "Game is a draw."
return False
def play_game():
board = list(range(9))
starting_player = 0
turn = 0
active_player = starting_player
while final_state(board) is False:
turn += 1
print("Turn {}:".format(turn))
print_board(board)
name, letter = player[active_player]["name"], player[active_player]["letter"]
move = None
while move is None:
try:
move = input("{} please make your move: ".format(name))
move = int(move)
if move in board:
board[move] = letter
print("{} played {} on {}.".format(name, letter, move))
active_player = 1 - active_player
else:
print("Move {} is invalid.".format(move))
move = None
except Exception as e:
print("Move {} is invalid.".format(move))
move = None
print_board(board)
print(final_state(board))
if __name__ == "__main__":
play_game()
while循环的问题是非零整数总是被认为是“true”。所以
while [0] == 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8 or 9 in board == True:
实际上是指“当包含0的列表等于整数1(始终为false)、2(true)、3(true)…或9 in(线路板)(如果9仍在线路板上,则为true)时,输入块。”
我相信你的意思是:
while any((cell in range(1,10) for cell in board)):
这意味着当电路板中的任何单元在1(包括)到10(不包括)的范围内时,请输入块
请看下面的代码:
player = [
{"name": "Player One", "letter": "X"},
{"name": "Player Two", "letter": "O"},
]
def print_board(board):
def print_vbars():
print(" | |")
def print_hbars():
print("-----------")
print_vbars()
for row in range(3):
print(" {} | {} | {}".format(*(board[row*3 : row*3+3])))
print_vbars()
print_hbars()
print_vbars()
print_vbars()
def final_state(board):
winning_combinations = (
(0,1,2), # Horizontal top row
(3,4,5), # Horizontal middle row
(6,7,8), # Horizontal bottom row
(0,3,6), # Vertical left row
(1,4,2), # Vertical middle row
(2,5,7), # Vertical right row
(0,4,8), # Downward diagonal
(2,4,6), # Upward diagonal
)
for letter in ("X", "O"):
for combination in winning_combinations:
row_state = (board[index] for index in combination)
if all(map(lambda cell: letter == cell, row_state)):
return "{} wins".format(letter)
if all(map(lambda cell: cell in ("X", "O"), board)):
return "Game is a draw."
return False
def play_game():
board = list(range(9))
starting_player = 0
turn = 0
active_player = starting_player
while final_state(board) is False:
turn += 1
print("Turn {}:".format(turn))
print_board(board)
name, letter = player[active_player]["name"], player[active_player]["letter"]
move = None
while move is None:
try:
move = input("{} please make your move: ".format(name))
move = int(move)
if move in board:
board[move] = letter
print("{} played {} on {}.".format(name, letter, move))
active_player = 1 - active_player
else:
print("Move {} is invalid.".format(move))
move = None
except Exception as e:
print("Move {} is invalid.".format(move))
move = None
print_board(board)
print(final_state(board))
if __name__ == "__main__":
play_game()
你想用这个循环做什么陈述?你的while条件将永远是真的。你的情况糟透了。正因为如此,你的“如果”检查命中了“else”块。语句?我不太清楚你的意思,但我正在尝试将代码开头的列表更改为任何值,在它运行“While”循环后,最终替换列表中的所有内容。我看到了“While”循环中if语句的错误所在,我刚刚修复了不太熟悉python的问题,但是,如果您将其设置为字符串而不是数组,并使用正则表达式,这不会简化您的测试吗?您仍然可以编辑索引字符,并将其视为数组,对吗?您试图使用此循环生成什么语句?您的while条件将始终为true。你的情况糟透了。正因为如此,你的“如果”检查命中了“else”块。语句?我不太清楚你的意思,但我正在尝试将代码开头的列表更改为任何值,在它运行“While”循环后,最终替换列表中的所有内容。我看到了“While”循环中if语句的错误所在,我刚刚修复了不太熟悉python的问题,但是,如果您将其设置为字符串而不是数组,并使用正则表达式,这不会简化您的测试吗?您仍然可以编辑索引字符并将其视为数组,对吗?本质上,我想我可以将其称为家庭作业,而您的代码可以解决问题,我之所以通过我熟悉的东西进行实验来编写代码,是为了将我已经知道的东西复合起来,以确保我完全理解它,而且您代码中的许多功能不符合我自己编写代码的原因,但除此之外,您的代码将解决许多问题。我更新了我的答案,以更直接地解决这些问题你的问题。本质上我想我可以称之为家庭作业,虽然你的代码可以解决这个问题,我之所以通过我熟悉的东西进行实验来编写代码,是为了将我已经知道的东西复合起来,以确保我完全理解它,而且您代码中的许多功能不符合我自己编写代码的原因,但除此之外,您的代码将解决许多问题。我更新了我的答案,以更直接地解决这些问题你的问题。