首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我在选择第一个位置后就得到了胜利的消息?

为什么我在选择第一个位置后就得到了胜利的消息?
EN

Stack Overflow用户
提问于 2021-02-15 23:23:57
回答 1查看 39关注 0票数 1

我正试着用python在终端上做一个tic tac toe游戏,但是我不明白为什么我选择了第一个位置之后就得到了胜利的信息,其他人能看到为什么吗?我创建了一个for循环来检查我是否在行或列中获胜,并创建了2个if语句来检查我是否通过对角线获胜。

代码语言:javascript
复制
import random

board = [[' ',' ',' '],
         [' ',' ',' '],
         [' ',' ',' ']]

def checkwin(board):
   for row in board:
        if len(set(row)) == 1:
           return True 
        elif board[0][0] == board[1][1] == board[2][2]:
            return True
        elif board[2][0] == board[1][1] == board[0][2]:
            return True
        else:
           return False

def check_space_taken(board, number):
    if not choose_position(board, number) == ' ':
        return True
    else:
        return False

def choose_position(board, number):
   if number <= 3:
        board[0][number-1] = 'X'
    elif number <= 6:
        board[1][number-4] = 'X'
    elif number <= 9:
        board[2][number-7] = 'X'
    return board, number

def computer_position(board, computer_number):
    computer_number = random.randint(0,9)
    if computer_number <= 3:
        board[0][computer_number-1] = 'O'
    elif computer_number <= 6:
        board[1][computer_number-4] = 'O'
    elif computer_number <= 9:
        board[2][computer_number-7] = 'O'
    return board, computer_number


Game_over = False

while not Game_over:
    print(board)
    player_input = int(input('move to: '))
    changed_board = choose_position(board, player_input)

    for line in changed_board:
        print(line)

    if checkwin(board):
        print('\n-----------------------Congrats you won-----------------------\n')
        Game_over = True
EN

回答 1

Stack Overflow用户

发布于 2021-02-15 23:34:48

原则上,您的逻辑是正确的,但您需要考虑空格。您还忘记检查列:

代码语言:javascript
复制
def checkwin(board):
    for i in range(3):
        if board[i][0] != " " and board[i][0] == board[i][1] == board[i][2]:
            return True  # found a winning row
        if board[0][i] != " " and board[0][i] == board[1][i] == board[2][i]:
            return True  # found a winning column

    # winning diagonals?
    if board[1][1] != " " and board[0][0] == board[1][1] == board[2][2]:
        return True
    if board[1][1] != " " and board[2][0] == board[1][1] == board[0][2]:
        return True

    return False
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66210713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档