对我的井字游戏程序帮助不大
Little assistance with my tic-tac-toe program
我在 Python 中创建的井字游戏需要一些帮助 3. 看看我的有趣程序并尝试一下。之后,请帮我在我的程序中创建一个 while
语句。 也就是说,当用户选择方块是否已填充时,您应该继续询问他们,直到他们选择一个空方块。 When the choose an empty square, the program continues as before. I am not used to the while
statements, please help me on this!
这是我的程序:
from turtle import *
def setUp():
#Set up the screen and turtle
win = Screen()
tic = Turtle()
tic.speed(10)
#Change the coordinates to make it easier to tranlate moves to screen coordinates:
win.setworldcoordinates(-0.5,-0.5,3.5, 3.5)
#Draw the vertical bars of the game board:
for i in range(1,3):
tic.up()
tic.goto(0,i)
tic.down()
tic.forward(3)
#Draw the horizontal bars of the game board:
tic.left(90) #Point the turtle in the right direction before drawing
for i in range(1,3):
tic.up()
tic.goto(i,0)
tic.down()
tic.forward(3)
tic.up() #Don't need to draw any more lines, so, keep pen up
#Set up board:
board = [["","",""],["","",""],["","",""]]
return(win,tic,board)
def playGame(tic,board):
#Ask the user for the first 8 moves, alternating between the players X and O:
for i in range(4):
x,y = eval(input("Enter x, y coordinates for X's move: "))
tic.goto(x+.25,y+.25)
tic.write("X",font=('Arial', 90, 'normal'))
board[x][y] = "X"
x,y = eval(input("Enter x, y coordinates for O's move: "))
tic.goto(x+.25,y+.25)
tic.write("O",font=('Arial', 90, 'normal'))
board[x][y] = "O"
# The ninth move:
x,y = eval(input("Enter x, y coordinates for X's move: "))
tic.goto(x+.25,y+.25)
tic.write("X",font=('Arial', 90, 'normal'))
board[x][y] = "X"
def checkWinner(board):
for x in range(3):
if board[x][0] != "" and (board[x][0] == board[x][1] == board[x][2]):
return(board[x][0]) #we have a non-empty row that's identical
for y in range(3):
if board[0][y] != "" and (board[0][y] == board[1][y] == board[2][y]):
return(board[0][y]) #we have a non-empty column that's identical
if board[0][0] != "" and (board[0][0] == board[1][1] == board[2][2]):
return(board[0][0])
if board[2][0] != "" and (board[2][0] == board[1][1] == board[2][0]):
return(board[2][0])
return("No winner")
def cleanUp(tic,win):
#Display an ending message:
tic.goto(-0.25,-0.25)
tic.write("Thank you for playing!",font=('Arial', 20, 'normal'))
win.exitonclick()#Closes the graphics window when mouse is clicked
def main():
win,tic,board = setUp() #Set up the window and game board
playGame(tic,board) #Ask the user for the moves and display
print("\nThe winner is", checkWinner(board)) #Check for winner
cleanUp(tic,win) #Display end message and close window
main()
您可能正在寻找这样的东西:
x,y = None,None
while x == None or y == None or board[x][y] != "";
x,y = eval(input("Enter x, y coordinates for X's move: "))
只要 x
和 y
不指示板上的空白块,这将一直要求用户输入。
顺便说一下,您可以考虑更改处理输入的方式。现在您正在使用 eval
,这可能很危险,因为可以执行任何输入。手动处理输入可能会更好,像这样:
x,y = map(int,input("Enter coordinates").split(','))
这会在逗号处拆分输入,将其转换为字符串列表。 map
然后将函数 int
应用于列表中的每个元素,将它们转换为整数。然后将它们解压缩到 x
和 y
.
for i in range(4):
while True:
move = input("Enter x, y coordinates for X's move: ")
x,y = int(move[0]), int(move[-1]) # don't use eval()
if board[x][y] not in ('X', 'O') # if valid
tic.goto(x+.25,y+.25)
tic.write("X",font=('Arial', 90, 'normal'))
board[x][y] = "X"
break # break out of loop after doing stuff
您可能想要使用验证函数获取整个输入字符串并在验证函数中对其进行解析,如下面的代码:
def isUserInputValid (s):
cordinate=s.split(',')
...... # Your validation logic goes here
while not isUserInputValid(input("Please put your cell cordinate x, y:")):
print("Your choice is not valid!")
我在 Python 中创建的井字游戏需要一些帮助 3. 看看我的有趣程序并尝试一下。之后,请帮我在我的程序中创建一个 while
语句。 也就是说,当用户选择方块是否已填充时,您应该继续询问他们,直到他们选择一个空方块。 When the choose an empty square, the program continues as before. I am not used to the while
statements, please help me on this!
这是我的程序:
from turtle import *
def setUp():
#Set up the screen and turtle
win = Screen()
tic = Turtle()
tic.speed(10)
#Change the coordinates to make it easier to tranlate moves to screen coordinates:
win.setworldcoordinates(-0.5,-0.5,3.5, 3.5)
#Draw the vertical bars of the game board:
for i in range(1,3):
tic.up()
tic.goto(0,i)
tic.down()
tic.forward(3)
#Draw the horizontal bars of the game board:
tic.left(90) #Point the turtle in the right direction before drawing
for i in range(1,3):
tic.up()
tic.goto(i,0)
tic.down()
tic.forward(3)
tic.up() #Don't need to draw any more lines, so, keep pen up
#Set up board:
board = [["","",""],["","",""],["","",""]]
return(win,tic,board)
def playGame(tic,board):
#Ask the user for the first 8 moves, alternating between the players X and O:
for i in range(4):
x,y = eval(input("Enter x, y coordinates for X's move: "))
tic.goto(x+.25,y+.25)
tic.write("X",font=('Arial', 90, 'normal'))
board[x][y] = "X"
x,y = eval(input("Enter x, y coordinates for O's move: "))
tic.goto(x+.25,y+.25)
tic.write("O",font=('Arial', 90, 'normal'))
board[x][y] = "O"
# The ninth move:
x,y = eval(input("Enter x, y coordinates for X's move: "))
tic.goto(x+.25,y+.25)
tic.write("X",font=('Arial', 90, 'normal'))
board[x][y] = "X"
def checkWinner(board):
for x in range(3):
if board[x][0] != "" and (board[x][0] == board[x][1] == board[x][2]):
return(board[x][0]) #we have a non-empty row that's identical
for y in range(3):
if board[0][y] != "" and (board[0][y] == board[1][y] == board[2][y]):
return(board[0][y]) #we have a non-empty column that's identical
if board[0][0] != "" and (board[0][0] == board[1][1] == board[2][2]):
return(board[0][0])
if board[2][0] != "" and (board[2][0] == board[1][1] == board[2][0]):
return(board[2][0])
return("No winner")
def cleanUp(tic,win):
#Display an ending message:
tic.goto(-0.25,-0.25)
tic.write("Thank you for playing!",font=('Arial', 20, 'normal'))
win.exitonclick()#Closes the graphics window when mouse is clicked
def main():
win,tic,board = setUp() #Set up the window and game board
playGame(tic,board) #Ask the user for the moves and display
print("\nThe winner is", checkWinner(board)) #Check for winner
cleanUp(tic,win) #Display end message and close window
main()
您可能正在寻找这样的东西:
x,y = None,None
while x == None or y == None or board[x][y] != "";
x,y = eval(input("Enter x, y coordinates for X's move: "))
只要 x
和 y
不指示板上的空白块,这将一直要求用户输入。
顺便说一下,您可以考虑更改处理输入的方式。现在您正在使用 eval
,这可能很危险,因为可以执行任何输入。手动处理输入可能会更好,像这样:
x,y = map(int,input("Enter coordinates").split(','))
这会在逗号处拆分输入,将其转换为字符串列表。 map
然后将函数 int
应用于列表中的每个元素,将它们转换为整数。然后将它们解压缩到 x
和 y
.
for i in range(4):
while True:
move = input("Enter x, y coordinates for X's move: ")
x,y = int(move[0]), int(move[-1]) # don't use eval()
if board[x][y] not in ('X', 'O') # if valid
tic.goto(x+.25,y+.25)
tic.write("X",font=('Arial', 90, 'normal'))
board[x][y] = "X"
break # break out of loop after doing stuff
您可能想要使用验证函数获取整个输入字符串并在验证函数中对其进行解析,如下面的代码:
def isUserInputValid (s):
cordinate=s.split(',')
...... # Your validation logic goes here
while not isUserInputValid(input("Please put your cell cordinate x, y:")):
print("Your choice is not valid!")