我对Python井字游戏的困难

我正在按照Charles Dierbach的书《使用Python的计算机科学导论》进行学习。

我现在在第5章。我正在尝试做一个关于井字游戏自动玩法的练习。

我在为电脑创建一个选择空格子([])的函数时遇到了困难。

这是我的代码

import reimport randomdef template():    mylst = list()    for i in range(0, 3):        my_temp = []        for j in range(0, 3):            my_temp.append([])        mylst.append(my_temp)    return mylstdef template_2(alst):    print()    al = ("A", "B", "C")    for a in al:        if a == "A":            print (format(a, ">6"), end="")        if a == "B":            print (format(a, ">5"), end="")        if a == "C":            print (format(a, ">5"), end="")    print()    for j in range(len(alst)):        print(str(j + 1), format( " ", ">1"), end="")        print(alst[j])        print()def print_template(alst):    print()    al = ("A", "B", "C")    for a in al:        if a == "A":            print (format(a, ">6"), end="")        if a == "B":            print (format(a, ">4"), end="")        if a == "C":            print (format(a, ">3"), end="")    print()    for j in range(len(alst)):        print(str(j + 1), format( " ", ">1"), end="")        print(alst[j])        print()def first_player(lst):    print()    print ("您的符号是'X'。")    alpha = ("A", "B", "C")    #检查输入是否正确    check = True    temp_lst1 = []    while check:        correct_entry = False        while not correct_entry:            coord = input("请输入您的坐标 ")            player_regex = re.compile(r'(\w)(\d)')            aSearch = player_regex.search(coord)            if aSearch == None:                correct_entry = False            if aSearch.group(1) != "A" or aSearch.group(1) != "B" or aSearch.group(1) != "C" or aSearch.group(2) != 1 or aSearch.group(2) == 2 or aSearch.group(3) != 3:                correct_entry = False            if aSearch.group(1) == "A" or aSearch.group(1) == "B" or aSearch.group(1) == "C" or aSearch.group(2) == 1 or aSearch.group(2) == 2 or aSearch.group(3) == 3:                correct_entry = True            else:                correct_entry = True        blank = False        while not blank:            if lst[(int(coord[-1])) - 1][alpha.index(coord[0])] == []:                lst[(int(coord[-1])) - 1][alpha.index(coord[0])] = "X"                temp_lst1.append((int(coord[-1])-1))                temp_lst1.append((alpha.index(coord[0])))                blank = True            else:                blank = True                correct_entry = False        if blank == True and correct_entry == True:            check = False    return Truedef pc_player(lst):    print()    print ("电脑的符号是'O'。")    alpha = ("A", "B", "C")    num_list = (0, 1, 2)    for i in range(0, len(lst)):        for j in range(0, len(lst[i])):            if lst[i][j] ==[]:                lst[i][j] = "O"            break        break    return Truedef check_1st_player(lst):    if lst[0][0] == "X" and lst[0][1] == "X" and lst[0][2] == "X":        return True    elif lst[1][0] == "X" and lst[1][1] == "X" and lst[1][2] == "X":        return True    elif lst[2][0] == "X" and lst[2][1] == "X" and lst[2][2] == "X":        return True    elif lst[0][0] == "X" and lst[1][0] == "X" and lst[2][0] == "X":        return True    elif lst[0][1] == "X" and lst[1][1] == "X" and lst[2][1] == "X":        return True    elif lst[0][2] == "X" and lst[1][2] == "X" and lst[2][2] == "X":        return True    elif lst[0][0] == "X" and lst[1][1] == "X" and lst[2][2] == "X":        return True    elif lst[2][0] == "X" and lst[1][1] == "X" and lst[0][2] == "X":        return True    else:        return Falsedef check_pc_player(lst):    if lst[0][0] == "O" and lst[0][1] == "O" and lst[0][2] == "O":        return True    elif lst[1][0] == "O" and lst[1][1] == "O" and lst[1][2] == "O":        return True    elif lst[2][0] == "O" and lst[2][1] == "O" and lst[2][2] == "O":        return True    elif lst[0][0] == "O" and lst[1][0] == "O" and lst[2][0] == "O":        return True    elif lst[0][1] == "O" and lst[1][1] == "O" and lst[2][1] == "O":        return True    elif lst[0][2] == "O" and lst[1][2] == "O" and lst[2][2] == "O":        return True    elif lst[0][0] == "O" and lst[1][1] == "O" and lst[2][2] == "O":        return True    elif lst[2][0] == "O" and lst[1][1] == "O" and lst[0][2] == "O":        return True    else:        return Falsedef play_game():    ask = input("您想玩一个两人井字游戏吗? (y/n) ")    if ask in yes_response:        # 构建井字游戏的模板        print()        print("您想玩多少轮?" )        print("请只输入奇数整数" )        print("请输入您的坐标", end="")        print(" 使用格式A1或B2")        print("新一轮")        return Truedef play_again():    tell_me = input("您想再玩一局吗? (y/n)")    if tell_me == "Y" or "y":        return True    else:        return Falsedef is_full(lst):    count = 0    for i in lst:        for j in i:            if j != []:                count += 1    if count == 9:        return True##-- mainprint("欢迎体验精彩的两人井字游戏? ")print()answer = Falseyes_response =("Y", "y")no_response = ("N", "n")while not answer:    print("输入偶数整数以退出")    ask = int(input("您想玩多少场比赛?(仅限奇数整数)? " ))    game = play_game()    structure = template()    print_template(structure)    if ask % 2 == 1:        score_player1 = 0        score_pc = 0        count = 0        while count < ask:            pc_lst = []            if count >= 1:                structure = template()                print_template(structure)            while game:                check_pc = True                while check_pc:                    pc_player(structure)                    template_2(structure)                    check_pc = False                check_pc_winner = True                while check_pc_winner:                    game_pc = check_pc_player(structure)                    check_pc_winner = False                if game_pc == True:                    print("恭喜电脑获胜")                    score_pc += 1                    game = False                    break                check_player1 = True                while check_player1:                    first_player(structure)                    template_2(structure)                    check_player1 = False                check_first_winner = True                while check_first_winner:                    game_first = check_1st_player(structure)                    check_first_winner = False                if game_first == True:                    print("恭喜玩家1获胜")                    score_player1 += 1                    game = False                    break                board_full = False                while not board_full:                    check_board = is_full(structure)                    board_full = True                if check_board == True:                    print("这一轮是平局。")                    game = False            print("玩家1 : ", score_player1, " 电脑 : ", score_pc)            count += 1            game = True    if score_player1 > score_pc:        print("玩家1获胜")    elif score_player1 < score_pc:        print("电脑获胜")    if play_again() == False:           answer = True    else:        answer = False

我的问题出现在def pc_player():

我想知道如何循环列表和子列表,以便AI可以选择一个空格子作为其放置”O”的选择

我当前的for循环不起作用。AI只选择第一个格子。


回答:

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注