RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 867746
Accepted
Tony Stark
Tony Stark
Asked:2020-08-12 21:36:09 +0000 UTC2020-08-12 21:36:09 +0000 UTC 2020-08-12 21:36:09 +0000 UTC

井字游戏 - 比较值时出错

  • 772

我写了一个井字游戏程序,一切正常,但是当我输入数字 7 时,它说:选择不可用!也就是说,好像 7 无法与 available(location, board) 函数中的 7 进行比较。我不明白错误在哪里。

from IPython.display import clear_output #to clear the output (specific to Jupyter notebooks and ipython)
from random import randint

def draw(board):

for row in board:
    print ("\t      {} | {} | {}".format(*row))
    print ("\t    ","-"*10)




def available(location, board):

for row in board:
    for col in row:
        if location == col:
            return False
        else:
            return True


def mark(player, location, board):
for row in board:
    if location in row:

        ind = row.index(location)
        row.pop(ind)
        row.insert(ind, player)

def check_win(board):


if board[0][0] == board[1][0] and board[1][0] == board[2][0]:
    return True
elif board[0][1] == board[1][1] and board[1][1] == board[2][1]:
    return True
elif board[0][2] == board[1][2] and board[1][2] == board[2][2]:
    return True
elif board[0][0] == board[0][1] and board[0][1] == board[0][2]:
    return True
elif board[1][0] == board[1][1] and board[1][1] == board[1][2]:
    return True
elif board[2][0] == board[2][1] and board[2][1] == board[2][2]:
    return True
elif board[0][0] == board[1][1] and board[1][1] == board[2][2]:
    return True
elif board[0][2] == board[1][1] and board[1][1] == board[2][0]:
    return True
else:
    return False

def check_tie(board):

    for row in board:
        for col in row:
            if col.isdigit():
                return False
                break
            else:
                return True


def dashes():

print("o" + 35 *'-' + "o")

def display(message):

print("|{:^35s}|".format(message))

def main():
# initializing game
board = [['7', '8', '9'], ['4', '5', '6'], ['1', '2', '3']]
# select the first player randomly
player = ['X', 'O']
turn = randint(0, 1)

win = False
tie = False
while(not win and not tie):
    # switch players
    turn = (turn + 1) % 2
    current_player = player[turn] # contains 'X' or 'O'

    clear_output()

    # display header
    dashes()
    display("TIC TAC TOE")
    dashes()

    # display game board
    print()
    draw(board)
    print()

    # display footer
    dashes()
    # player select a location to mark
    while True:
        location = input("|{:s} Turn, select a number (1, 9): ".format(current_player))
        if available(location, board):
            break # Only the user input loop, main loop does NOT break
        else:
            print("Selection not available!")
    dashes()

    # mark selected location with player symbol ('X' or 'O')
    mark(current_player, location, board)

    # check for win
    win = check_win(board)

    # check for tie
    tie = check_tie(board)


# Display game over message after a win or a tie
clear_output()

# display header
dashes()
display("TIC TAC TOE")
dashes()

# display game board (Necessary to draw the latest selection)
print()
draw(board)
print()

# display footer
dashes()
display("Game Over!")
if(tie):
    display("Tie!")
elif(win):
    display("Winner:")
    display(current_player)
dashes()



main()
python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Tony Stark
    2020-08-15T19:37:06Z2020-08-15T19:37:06Z

    更正了错误。这是解决方案:

    from IPython.display import clear_output #to clear the output (specific to Jupyter notebooks and ipython)
    from random import randint
    
    def draw(board):
    
    for row in board:
        print ("{:^3s}|{:^3s}|{:^3s}".format(row[0], row[1], row[2]))
        if row == board[0] or row == board[1] :
            print ("-"*11)
    
    
    
    def available(location, board):
    
    for row in board:
    if location in row:
      return True
    return False
    
    
    def mark(player, location, board):
    for row in board:
        if location in row:
    
            ind = row.index(location)
            row.pop(ind)
            row.insert(ind, player)
            return (board)
    
    def check_win(board):
    
    
    if board[0][0] == board[1][0] and board[1][0] == board[2][0]:
        return True
    elif board[0][1] == board[1][1] and board[1][1] == board[2][1]:
        return True
    elif board[0][2] == board[1][2] and board[1][2] == board[2][2]:
        return True
    elif board[0][0] == board[0][1] and board[0][1] == board[0][2]:
        return True
    elif board[1][0] == board[1][1] and board[1][1] == board[1][2]:
        return True
    elif board[2][0] == board[2][1] and board[2][1] == board[2][2]:
        return True
    elif board[0][0] == board[1][1] and board[1][1] == board[2][2]:
        return True
    elif board[0][2] == board[1][1] and board[1][1] == board[2][0]:
        return True
    else:
        return False
    
    def check_tie(board):
    
        for row in board:
            for col in row:
                if col.isdigit():
                    return False
    
            return True
    
    
       def dashes():
    
    print("o" + 35 *'-' + "o")
    
      def display(message):
    
    print("|{:^35s}|".format(message))
    
    def main():
    # initializing game
    board = [['7', '8', '9'], ['4', '5', '6'], ['1', '2', '3']]
    # select the first player randomly
    player = ['X', 'O']
    turn = randint(0, 1)
    
    win = False
    tie = False
    while(not win and not tie):
        # switch players
        turn = (turn + 1) % 2
        current_player = player[turn] # contains 'X' or 'O'
    
        clear_output()
    
        # display header
        dashes()
        display("TIC TAC TOE")
        dashes()
    
        # display game board
        print()
        draw(board)
        print()
    
        # display footer
        dashes()
        # player select a location to mark
        while True:
            location = input("|{:s} Turn, select a number (1, 9): ".format(current_player))
            if available(location, board):
                break # Only the user input loop, main loop does NOT break
            else:
                print("Selection not available!")
        dashes()
    
        # mark selected location with player symbol ('X' or 'O')
        mark(current_player, location, board)
    
        # check for win
        win = check_win(board)
    
        # check for tie
        tie = check_tie(board)
    
    
    # Display game over message after a win or a tie
    clear_output()
    
    # display header
    dashes()
    display("TIC TAC TOE")
    dashes()
    
    # display game board (Necessary to draw the latest selection)
    print()
    draw(board)
    print()
    
    # display footer
    dashes()
    display("Game Over!")
    if(win):
        display("Winner:")
        display(current_player)
    elif(tie):
        display("Tie!")
    dashes()
    
    
    
    main()
    
    • -1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5