如何解决Tictactoe 的获胜条件在 python 3.8.3 中不起作用
我一直在尝试在 python 中制作井字游戏(noughts and crosses)以提高我的技能。然而,在测试时,我发现当我把我的动作放在最后一行时,无论是否满足我设定的获胜条件,玩家都会获胜。我知道还有其他方法可以完成此任务,但这是我想出的代码...
import random
toprow=[1,2,3]
midrow=[4,5,6]
botrow=[7,8,9]
availablenums=[1,3,4,6,7,9]
pname=input("What is your name?\n")
print(toprow)
print(midrow)
print(botrow)
while True:
pinput=int(input("Please enter a number from 1-9 (1 being the top-left square and 9 being the bottom-right square)\n"))
if pinput==1:
toprow[0]="X"
availablenums.remove(1)
if pinput==2:
toprow[1]="X"
availablenums.remove(2)
if pinput==3:
toprow[2]="X"
availablenums.remove(3)
if pinput==4:
midrow[0]="X"
availablenums.remove(4)
if pinput==5:
midrow[1]="X"
availablenums.remove(5)
if pinput==6:
midrow[2]="X"
availablenums.remove(6)
if pinput==7:
botrow[0]="X"
availablenums.remove(7)
if pinput==8:
botrow[1]="X"
availablenums.remove(8)
if pinput==9:
botrow[2]="X"
availablenums.remove(9)
compinput=random.choice(availablenums)
if compinput==1:
toprow[0]="O"
availablenums.remove(1)
if compinput==2:
toprow[1]="O"
availablenums.remove(2)
if compinput==3:
toprow[2]="O"
availablenums.remove(3)
if compinput==4:
midrow[0]="O"
availablenums.remove(4)
if compinput==5:
midrow[1]="O"
availablenums.remove(5)
if compinput==6:
midrow[2]="O"
availablenums.remove(6)
if compinput==7:
botrow[0]="O"
availablenums.remove(7)
if compinput==8:
botrow[1]="O"
availablenums.remove(8)
if compinput==9:
botrow[2]="O"
availablenums.remove(9)
print("___________")
print(toprow)
print(midrow)
print(botrow)
print("___________")
if toprow[0] and toprow[1] and toprow[2] == "X":
print(pname,"wins! Well done",pname,"!")
break
elif midrow[0] and midrow[1] and midrow[2] == "X":
print(pname,"!")
break
elif botrow[0] and botrow[1] and botrow[2] == "X":
print(pname,"!")
break
elif toprow[0] and midrow[0] and botrow[0] == "X":
print(pname,"!")
break
elif toprow[1] and midrow[1] and botrow[1] == "X":
print(pname,"!")
break
elif toprow[2] and midrow[2] and botrow[2] == "X":
print(pname,"!")
break
elif toprow[0] and midrow[1] and botrow[2] == "X":
print(pname,"!")
break
elif toprow[2] and midrow[1] and botrow[0] == "X":
print(pname,"!")
break
解决方法
elif botrow[0] and botrow[1] and botrow[2] == "X":
仅检查 botrow[2]
是否等于 "X" 以及 botrow[0]
和 botrow[1]
是否具有隐式为 True 的值。有关布尔处理检查 this article 的更多信息。由于您将行初始化为
toprow=[1,2,3]
midrow=[4,5,6]
botrow=[7,8,9]
这些整数中的每一个都隐式为真。
elif botrow[0] == "X" and botrow[1] == "X" and botrow[2] == "X":
将是解决您问题的最简单方法。
我不知道为什么你的其他 elif 语句没有出现这个问题。你也检查过吗?
,你需要使用
elif toprow[1] == "X" and midrow[1] == "X" and botrow[1] == "X":
在每个语句上,检查所有三个语句是否都是 X
。目前,该代码仅检查 elif
语句的最后一部分是否等于 X
(并且您将 botrow
作为最后一部分,如上例所示,因此如果有任何一个,则始终获胜底行是一个 X
)。
此外,您没有代码来检查计算机是否获胜,因此复制计算机获胜条件的 if
和 elif
语句。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。