python中的零和叉:评分不起作用

python中的零和叉:评分不起作用,python,Python,我意识到很多其他人都尝试过,但都失败了(通过查看建议的问题),但我认为他们没有和我一样的问题 这是我的密码: import random, time, sys raw3 = ["-", "-", "-"] raw2 = ["-", "-", "-"] raw1 = ["-", "-", "-"] def draw(): str3 = "" str2 = "" str1 = "" for i in raw3: str3 = (str3 +

我意识到很多其他人都尝试过,但都失败了(通过查看建议的问题),但我认为他们没有和我一样的问题

这是我的密码:

import random, time, sys

raw3 = ["-", "-", "-"]

raw2 = ["-", "-", "-"]

raw1 = ["-", "-", "-"]

def draw():
    str3 = ""
    str2 = ""
    str1 = ""

    for i in raw3:
        str3 = (str3 + i + "   ")
    for i in raw2:
        str2 = (str2 + i + "   ")
    for i in raw1:
        str1 = (str1 + i + "   ")

    str_board = str3+str("\n"*2)+str(str2)+str("\n"*2)+str(str1)
    print(str_board)

def playerX_turn():
    c_choice_in = input("Type the coordinates in the format y/x\n(e.g. 2/1)")
    c_choice_list = list(c_choice_in)
    c_choice_x = int(c_choice_list[0]); c_choice_y = int(c_choice_list[2])
    print(c_choice_x, c_choice_y)

    if c_choice_x == 3 and raw3[c_choice_y - 1] == "-":
        raw3[c_choice_y - 1] = "X"
    elif c_choice_x == 2 and raw2[c_choice_y - 1] == "-":
        raw2[c_choice_y - 1] = "X"
    elif c_choice_x == 1 and raw1[c_choice_y - 1] == "-":
        raw1[c_choice_y - 1]  = "X"

def playerO_turn():
    c_choice_in = input("Type the coordinates in the format y/x\n(e.g. 2/1)")
    c_choice_list = list(c_choice_in)
    c_choice_x = int(c_choice_list[0]); c_choice_y = int(c_choice_list[2])
    print(c_choice_x, c_choice_y)

    if c_choice_x == 3 and raw3[c_choice_y - 1] == "-":
        raw3[c_choice_y - 1] = "O"
    elif c_choice_x == 2 and raw2[c_choice_y - 1] == "-":
        raw2[c_choice_y - 1] = "O"
    elif c_choice_x == 1 and raw1[c_choice_y - 1] == "-":
        raw1[c_choice_y - 1]  = "O"

def check4win():
    winner = None
    if winner == None or winner == False and raw3[0] == "X" or raw3[2] == "X" and raw2[1] == "X" and raw1[0] == "X" or raw1[2] == "X":
        winner = "playerX"

    column_checker = 0
    for i in range(0,3):
        if winner == None or winner == False and raw3[column_checker] == "X" and raw2[column_checker] == "X" and raw1[column_checker] == "X":
            winner = "playerX"
        else:
            column_checker += 1

    if winner == None or winner == False:
        if raw3[0] == "X" and raw3[1] == "X" and raw3[2] == "X":
            winner = "playerX"
        elif raw2[0] == "X" and raw2[1] == "X" and raw2[2] == "X":
            winner = "playerX"
        elif raw1[0] == "X" and raw1[1] == "X" and raw1[2] == "X":
            winner = "playerX"

    ### ### ### ###

    if winner == None or winner == False and raw3[0] == "Y" or raw3[2] == "Y" and raw2[1] == "Y" and raw1[0] == "Y" or raw1[2] == "Y":
        winner = "playerY"

    column_checker = 0
    for i in range(0,3):
        if winner == None or winner == False and raw3[column_checker] == "Y" and raw2[column_checker] == "Y" and raw1[column_checker] == "Y":
            winner = "playerY"
        else:
            column_checker += 1

    if winner == None or winner == False:
        if raw3[0] == "Y" and raw3[1] == "Y" and raw3[2] == "Y":
            winner = "playerY"
        elif raw2[0] == "Y" and raw2[1] == "Y" and raw2[2] == "Y":
            winner = "playerY"
        elif raw1[0] == "Y" and raw1[1] == "Y" and raw1[2] == "Y":
            winner = "playerY"

    ### ### ### ###

    if winner != None or winner != False:
        if winner == "playerX":
            print("X won the game!\n(Sorry, O!)")
        elif winner == "playerY":
            print("Y won the game!\n(Bad luck, X!)")
        sys.exit()

def main():
    game_over = False
    while game_over == False:
        playerX_turn()
        draw()
        check4win()
        playerO_turn()
        draw()
        check4win()

main()
因此,我的第一个问题是,这是it输出的一个示例:

>>> 
Type the coordinates in the format y/x
(e.g. 2/1)1,1
1 1
-   -   -   

-   -   -   

X   -   -   
X won the game!
(Sorry, O!)
>>> 
这显然是不正确的。。。
这可能是一个愚蠢的错误,但我太懒了,无法正确地查看它,但我已简要地查看了
check4win()
函数,但没有任何效果。


另一件(不太重要的)事情是,我觉得这段代码可以变得更整洁。。。可能是
main()

老实说,check4win()函数太乱了。你可以通过几种不同的方式测试一个玩家是否是赢家,然后对另一个玩家进行同样的测试。据我所知,无论发生什么,两名球员都是赢家。这毫无意义。我建议您研究多维数组-每行有几个硬编码数组意味着很难迭代您的游戏数据。单个多维数组意味着您可以在几行代码中检查所有场景中的赢家。请注意,
if winner!=没有人或胜利者!=False:
始终为True。有关对布尔表达式求反的提示,请参阅。或者只使用
else