不清除板

如何解决不清除板

我正在制作一个井字游戏,在开始和结束时它会询问您“是否想玩游戏是/否?”,如果您按是,它可以正常工作,如果您按否,它会说“再见”并像它假设的那样关闭程序,但是如果您在玩完第一场游戏后按“是”,它不会重新打印板,只会给您已经填写的板。 有没有办法清除任何人都可以帮助我的董事会?

board = [" " for x in range(10)]

#insert letter into the board

def insertLetter(letter,pos):
    board[pos] = letter

# Is that space avalible?

def spaceIsFree(pos):
    return board[pos] == " "

# Prints the board

def printBoard(board):

    #Board set up

    print("   |   |")
    print(" " + board[1] + " | " + board[2] + " | " + board[3])
    print("   |   |")
    print("-----------")
    print("   |   |")
    print(" " + board[4] + " | " + board[5] + " | " + board[6])
    print("   |   |")
    print("-----------")
    print("   |   |")
    print(" " + board[7] + " | " + board[8] + " | " + board[9])
    print("   |   |")

def isWinner(bo,le):

    #Look for winner!

    return ((bo[7] == le and bo[8] == le and bo[9] == le) or # across the top
    (bo[4] == le and bo[5] == le and bo[6] == le) or # across the middle
    (bo[1] == le and bo[2] == le and bo[3] == le) or # across the bottom
    (bo[7] == le and bo[4] == le and bo[1] == le) or # down the left side
    (bo[8] == le and bo[5] == le and bo[2] == le) or # down the middle
    (bo[9] == le and bo[6] == le and bo[3] == le) or # down the right side
    (bo[7] == le and bo[5] == le and bo[3] == le) or # diagonal
    (bo[9] == le and bo[5] == le and bo[1] == le)) # diagonal
 

def playerMove():

    #Grabs player move,cheak for valid input

    run = True

    while run:
        move = input("Please select a position place an \"X\" (1-9): ")
    
        try:
            move = int(move)

            if move > 0 and move < 10:
            
                if spaceIsFree(move):
                    run = False
                    insertLetter("X",move)

                else:
                    print ("Sorry,this space is already taken!")

            else:
                print ("Please type a number within the range!")
        
        except:
               print("Please type a number!")
    

def compMove():

    # Computers move
        
    possibleMoves = [x for x,letter in enumerate(board) if letter == " " and x != 0]
    move = 0

    #check for a possible win

    for let in ["O","X"]:
    
        for i in possibleMoves:
            boardCopy = board[:]
            boardCopy[i] = let
    
            if isWinner (boardCopy,let):
                move = i
                return move
        
    #check for open corners

    cornersOpen = []

    for i in possibleMoves:
        if i in [1,3,7,9]:
        cornersOpen.append(i)
         
    if len(cornersOpen) > 0:
        move = selectRandom(cornersOpen)
        return move

    #check for center move

    if 5 in possibleMoves:
        move = 5
        return move

    #check for open edges

    edgesOpen = []
    for i in possibleMoves:
        if i in [2,4,6,8]:
            edgesOpen.append(i)
        
    if len(edgesOpen) > 0:
        move = selectRandom(edgesOpen)
    
    return move

def selectRandom(li):

 # Selects random numbers

    import random
    ln = len(li)
    r = random.randrange(0,ln)
    return li[r]

def isBoardFull(board):

    #See if the board is full

    if board.count(" ") > 1:
        return False

    else:
        return True 

def main():
    print("Welcom to Tic Tac Toe!")
    print ()
    printBoard(board)

    while not (isBoardFull(board)):

        # Do a player move,# Check if O wins
    
        if not (isWinner(board,"O")):
            playerMove()
            printBoard(board)
            
        else:
            print("Sorry,O's won this time!")
            break

        # Check If X wins
    
        if not (isWinner(board,"X")):
            move = compMove()

            if move == 0:
                print("Tie Game!")

            else:
                insertLetter("O",move)
                print("Computer placed an O in position",move,":")
                printBoard(board)
        
        else:
            print("X's won this time! Good Job")
            break

        # No one wins - it's a tie
    
    if isBoardFull(board):
        print ("Tie Game!")
    

while True:

    # Start/Play again
        
    replay = input ("Would you like to play a game? y/n: ")

    if replay == "no":
        print ("Goodbye")
        break

    else:
        print()
        main()    

解决方法

您只在顶部创建一次看板,然后永远不要重置它。

重置状态最简单的方法就是不全局保存它。重新配置您的代码,使 board 仅存在于 main 中,并手动将其传递给需要它的每个函数。然后,当 main 退出时,每次运行 main 时都会销毁并重新创建板。

为了修补您现有的代码以使其正常工作,我只需创建一个创建新板的函数:

def new_board():
    return [" " for x in range(10)]

然后,在 main 的顶部,重置它:

def main():
    global board
    board = new_board()
    print("Welcom to Tic Tac Toe!")
    print ()
    printBoard(board)

从长远来看,我不建议这样做,但这是一个快速解决方案。

,

board 定义在全局范围内,因此再次调用 main 不会影响它,您将保留之前的数据。一种选择是显式重新初始化它:

else:
    board = [" " for x in range(10)]
    print()
    main()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-