对于我的tic-tac-toe程序,我决定创建一个函数来检查玩家的输入是否可用。我定义了一个名为checkOverride()
的函数来检查播放器的输入。如果输入已经被选择并且具有"X"
或"O"
,则函数将返回True
。否则它将返回False
。但是,在测试程序时,我试图使函数返回True
,但函数返回的值是None
。为什么会这样
def main():
# Welcome the players
print("Welcome players to Tic-Tac-Toe!")
# Variables for creating game board
top = "1|2|3"
middle = "4|5|6"
bottom = "7|8|9"
divider = "-+-+-"
# Display game board
Board = createGameBoard(top, middle, bottom, divider)
print(Board)
playerOneWin = False
playerTwoWin = False
while playerOneWin == False and playerTwoWin == False:
# Get input from player One
playerOneInput = input("x's turn to choose a square (1-9): ")
# Check for override
override = checkOverride(Board, playerOneInput)
if override == True:
print(f"{playerOneInput} has already been filled. Please choose another square.")
continue
elif override == False:
Board = playerOneMove(Board, playerOneInput)
print(Board)
# Get input from player Two
playerTwoInput = input("o's' turn to choose a square(1-9): ")
# Check for override
override = checkOverride(Board, playerTwoInput)
if override == True:
print(f"{playerTwoInput} has already been filled. Please choose another square.")
continue
elif override == False:
Board = playerTwoMove(Board, playerTwoInput)
print(Board)
def createGameBoard(top, middle, bottom, divider):
'''
Create a Tic-Tac-Toe game board.
'''
Board = f"{top}\n{divider}\n{middle}\n{divider}\n{bottom}"
return Board
def playerOneMove(Board, playerOneInput):
'''
Take player one's input and display it onto the board.
'''
# Identify where player one's move and replace number with 'X'
if playerOneInput in Board:
Board = Board.replace(playerOneInput, 'X')
return Board
def playerTwoMove(Board, playerTwoInput):
'''
Take player two's input and display it onto the board.
'''
# Identify where player one's move and replace number with 'X'
if playerTwoInput in Board:
Board = Board.replace(playerTwoInput, "O")
return Board
def checkOverride(Board, playerOneInput="", playerTwoInput=""):
'''
Look at the input of player one or player two and see if their input is already taken.
'''
if playerOneInput:
if playerOneInput in Board:
square = Board.index(playerOneInput)
if Board[square] == "X" or Board[square] == "O":
return True
else:
return False
elif playerTwoInput:
if playerTwoInput in Board:
square = Board.index(playerTwoInput)
if Board[square] == "X" or Board[square] == "O":
return True
else:
return False
通常,如果函数结束时没有到达带有值的
return
,则返回None
在您的功能中,这可以通过两种方式实现:
if
块下面结束,在这两个块下面没有更多的代码要执行,并且None
将被返回,因为没有任何东西要返回。(为了理解“truthy”和“falsy”的意思,this SO answer解释得很好。 )playerOneInput
和playerTwoInput
中的一个是真的,那么同样的事情也会发生,但是当测试它是否是in Board
时,它的计算结果是False
。没有else:
来捕获执行,它最终没有什么可返回的,因此它返回None
李>要修复2,您可能需要更改
到
如果你需要两者都是
True
,并且当播放器输入是真实的,而不是在棋盘上时,你不想以不同的方式处理它要修复1,您需要确定是否要在开始时测试输入,并在
playerOneInput
或playerTwoInput
(甚至可能是Board
)都不可用时引发错误,或者是否要在函数末尾的else:
中处理它另外,您可能只需要接收一个播放器的输入,然后调用该函数两次
函数返回
None
的唯一方法是,如果playerOneInput
和playerTwoInput
都等于""
、False
或None
(因为它们会使条件失败),或者playerOneInput
和playerTwoInput
都在电路板中找不到(如果是这种情况,那么我们无法提供帮助,因为您没有向我们提供董事会的代码,以便我们了解问题所在)因此,函数返回
None
的原因是您在运行它时没有参数,使它默认为playerOneInput
和playerTwoInput
的值""
相关问题 更多 >
编程相关推荐