首页 > 编程语言 >Python代码 | 井字棋

Python代码 | 井字棋

时间:2024-07-14 22:52:17浏览次数:6  
标签:return Python 代码 井字棋 range checkerboard print True row

import random

checkerboard = [
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]
]
i = 0
print(f"欢迎来玩井子棋,请在轮到你落子时输入你要下的位置,第x行,第y列,用逗号隔开,例如:1,2")


def print_board():
    for row in checkerboard:
        for col in row:
            if col == 0:
                print("| ", end="")
            if col == 1:
                print("|○", end="")
            if col == -1:
                print("|×", end="")
        print("|")
    print()


def is_over():
    for row in checkerboard:
        if sum(row) == 3:
            print("你赢了")
            return True
        if sum(row) == -3:
            print("你输了")
            return True

    for y in range(3):
        if checkerboard[0][y] + checkerboard[1][y] + checkerboard[2][y] == 3:
            print("你赢了")
            return True
        if checkerboard[0][y] + checkerboard[1][y] + checkerboard[2][y] == -3:
            print("你输了")
            return True

    if checkerboard[0][0] + checkerboard[1][1] + checkerboard[2][2] == 3:
        print("你赢了")
        return True
    if checkerboard[0][0] + checkerboard[1][1] + checkerboard[2][2] == -3:
        print("你输了")
        return True
    if checkerboard[0][2] + checkerboard[1][1] + checkerboard[2][0] == 3:
        print("你赢了")
        return True
    if checkerboard[0][2] + checkerboard[1][1] + checkerboard[2][0] == -3:
        print("你输了")
        return True
    if i == 9:
        print("平局")
        return True


# 电脑为后手,故胜利第一,防守第二,进攻第三
def computer_turn():
    # 胜利
    for x in range(3):
        if sum(checkerboard[x]) == -2:
            for y in range(3):
                if checkerboard[x][y] == 0:
                    checkerboard[x][y] = -1
                    return 0
    for y in range(3):
        if checkerboard[0][y] + checkerboard[1][y] + checkerboard[2][y] == -2:
            for x in range(3):
                if checkerboard[x][y] == 0:
                    checkerboard[x][y] = -1
                    return 0
    if checkerboard[0][0] + checkerboard[1][1] + checkerboard[2][2] == -2:
        for j in range(3):
            if checkerboard[j][j] == 0:
                checkerboard[j][j] = -1
                return 0
    if checkerboard[0][2] + checkerboard[1][1] + checkerboard[2][0] == -2:
        for j in range(3):
            if checkerboard[j][2 - j] == 0:
                checkerboard[j][2 - j] = -1
                return 0

    # 防守
    for x in range(3):
        if sum(checkerboard[x]) == 2:
            for y in range(3):
                if checkerboard[x][y] == 0:
                    checkerboard[x][y] = -1
                    return 0
    for y in range(3):
        if checkerboard[0][y] + checkerboard[1][y] + checkerboard[2][y] == 2:
            for x in range(3):
                if checkerboard[x][y] == 0:
                    checkerboard[x][y] = -1
                    return 0
    if checkerboard[0][0] + checkerboard[1][1] + checkerboard[2][2] == 2:
        for j in range(3):
            if checkerboard[j][j] == 0:
                checkerboard[j][j] = -1
                return 0
    if checkerboard[0][2] + checkerboard[1][1] + checkerboard[2][0] == 2:
        for j in range(3):
            if checkerboard[j][2 - j] == 0:
                checkerboard[j][2 - j] = -1
                return 0

    # 进攻的写法比较随机,是卖给玩家唯一的破绽
    vacancies = []
    for x in range(3):
        for y in range(3):
            if checkerboard[x][y] == 0:
                vacancies.append((x, y))
    x, y = vacancies[random.randint(0, len(vacancies))]
    checkerboard[x][y] = -1


print_board()
while True:
    while True:
        x, y = map(int, input(f"轮到你落子了,选择你要下的位置:").split(","))
        if x > 3 or y > 3:
            print("超出棋盘范围,请重新输入")
            continue
        if checkerboard[x - 1][y - 1] != 0:
            print("该位置已有棋子,请重新输入")
            continue
        break
    checkerboard[x - 1][y - 1] = 1
    i += 1
    print("")
    print(f"第{i}子:")
    print_board()
    if is_over():
        break

    computer_turn()
    i += 1
    print("")
    print(f"第{i}子:")
    print_board()
    if is_over():
        break

  

标签:return,Python,代码,井字棋,range,checkerboard,print,True,row
From: https://www.cnblogs.com/IronRocGIS/p/18302155

相关文章

  • [附开题]flask框架Web民宿管理系统的设计与实现89x8t(源码+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景:近年来,随着旅游业的蓬勃发展和消费者出行方式的多元化,民宿作为一种新兴的住宿选择,凭借其独特的居住体验、灵活的租赁方式和个性化的服务,受......
  • [附开题]flask框架Web精品课程网络平台的设计与实现3q7nv(源码+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景:随着信息技术的迅猛发展和教育理念的持续革新,传统教学模式正逐步向数字化、网络化转型。精品课程网络平台作为教育信息化的重要载体,不仅能......
  • [附开题]flask框架搬家网平台iz216(源码+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景:随着城市化进程的加速和人口流动性的增强,搬家服务需求日益增长,成为现代生活中不可或缺的一部分。然而,传统搬家行业存在信息不对称、服务质......
  • [附开题]flask框架班级管理系统3pdep(源码+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景:在教育信息化的浪潮中,传统的班级管理模式面临着诸多挑战。随着学生数量的增加和教育资源的日益丰富,如何高效地管理班级信息、协调班级事务......
  • Python 字典(Dict)详解与实战应用
    目录前言一、字典的定义和创建1.使用花括号定义2.使用dict()函数创建二、字典的三种遍历方式方式1:遍历字典的键,通过键获取值 dict.keys()方式2:遍历字典的值,但不能通过值获取键dict.values()方式3:最常用的方法:直接获取键值对 dict.items()三、字典的常见操作1.添......
  • Jupyter - 增加代码自动提示
    启用代码自动提示1.安装JupyterNotebook:如果你还没有安装JupyterNotebook,首先需要安装它。你可以使用pip来安装,并且确认安装的版本无误解。 pipinstalljupyternotebook==6.4.8-ihttps://pypi.tuna.tsinghua.edu.cn/simple2.安装并激活Jupyter的代码自动提示插件:为了......
  • Python 潮流周刊第 2 季完结了,分享几项总结
    我订阅了很多的周刊/Newsletter,但是发现它们都有一个共同的毛病:就是缺乏对往期内容的整理,它们很少会对内容数据作统计分析,更没有将内容整理成合集的习惯。在自己开始连载周刊后,我就想别开生面,除了每周更新正刊外,还计划定期做一些盘点。我认为过往周刊值得被串联起来,形成合集后,既......
  • 基于SpringBoot+Hadoop+python的物品租赁系统(带1w+文档)
    基于SpringBoot+Hadoop+python的物品租赁系统(带1w+文档)基于SpringBoot+Hadoop+python的物品租赁系统(带1w+文档)物品租赁系统是电子、信息技术相结合,是一种必然的发展趋势。以互联网为基础,以服务于广大用户为目的,发展整体优势,扩大规模,提升服务质量,提高物品租赁的......
  • Python函数进阶
    1.多返回值返回值为return返回给上级函数的值,需要注意的是,与C和C++不同,Python中可以有多返回值。多返回值deftest_return():return1,2x,y=test_return()print(x)print(y)特点:按照返回值的顺序,写对应顺序的多个变量接收即可变量之间用逗号隔开支持不同......
  • Python Scrapy爬虫、调试Scrapy程序、爬取的数据保存到数据库
    前言从0配置Scrapy爬虫程序,并记录如何调试脚本,保存数据到数据库。这里我们以Scrapy推荐的官方练习项目为例进行实战演练配置1初始环境安装Anaconda,Anaconda是一个软件包管理和环境管理系统。安装PyCharm,Python编辑器2创建Scrapy项目并运行打开AnacondaPrompt......