微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Tictactoe 的获胜条件在 python 3.8.3 中不起作用

如何解决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)。

此外,您没有代码来检查计算机是否获胜,因此复制计算机获胜条件的 ifelif 语句。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?