我正在按照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只选择第一个格子。
回答: