【发布时间】:2023-03-23 13:12:01
【问题描述】:
我是 python 的初学者,我正在终端中创建一个两人的井字游戏。总共,这段代码占用了 139 行,(下面是我遇到问题的代码的相关部分),然而,这个 CheckWin 函数占用了大约 40 行代码,我认为这与数量相比相当多此代码中的行数,并考虑到它执行一些基本功能。基本上,在游戏中,此函数检查行、列或对角线是否有三个 X 或三个 O,如果有,则将 X 分配给获胜者,将 O 分配给获胜者。无论如何,这是代码。
X = "X"
O = "O"
empty = " "
S = [" ", " ", " ", " ", " ", " ", " ", " ", " "]
def CheckWin(S):
global winner
winner = ""
if S[0] == S[1] == S[2] != empty:
if S[0] == X:
winner = X
if S[0] == O:
winner = O
if S[3] == S[4] == S[5] != empty:
if S[3] == X:
winner = X
if S[3] == O:
winner = O
if S[6] == S[7] == S[8] != empty:
if S[6] == X:
winner = X
if S[6] == O:
winner = O
if S[0] == S[3] == S[6] != empty:
if S[0] == X:
winner = X
if S[0] == O:
winner = O
if S[1] == S[4] == S[7] != empty:
if S[1] == X:
winner = X
if S[1] == O:
winner = O
if S[2] == S[5] == S[8] != empty:
if S[2] == X:
winner = X
if S[2] == O:
winner = O
if S[0] == S[4] == S[8] != empty:
if S[0] == X:
winner = X
if S[0] == O:
winner = O
if S[2] == S[4] == S[6] != empty:
if S[2] == X:
winner = X
if S[2] == O:
winner = O
基本上,我需要帮助使功能更简单。但是,我不想消除 X、O 和获胜者变量,也不想消除带有列表 S 的列表索引方法。尽管如此,有没有办法简化所有这些 If 语句,保留这些东西?如果是这样,怎么做?
【问题讨论】:
-
对于初学者,您可以通过将所有
if S[n] == X: winner = X / if S[x] == O: winner = O缩短为winner = S[n]来摆脱负载。这将为您节省 24 行代码。 :) -
考虑使用
for循环和range。 -
这个问题更适合codereview.stackexchange.com,它的重点是让现有的运行代码更好。
-
我假设当有赢家时游戏停止?您可能可以为具有最后输入的任何行/列编写
testRow和testCol函数。如果该条目在对角线上,则只需进行测试对角线。
标签: python if-statement terminal tic-tac-toe