Python3学习实战——用类实现简单的猜拳游戏

2023-11-09

Python3学习实战——用类实现简单的猜拳游戏

前言

本笔记仅个人认知和见解,水平有限,还请见谅。

如有错误,还请指出,若有想法,欢迎共享!

内容不代表最优解决方案,甚至可能不是很好的方法,仅供参考。


1.题目分析

原题:用类实现一个简单的猜拳游戏。

猜拳游戏:用户输入一个剪刀石头或布,机器输出一个剪刀石头或布,并判断输赢。

特殊需求:用类(创建自定义对象),简单的。

2.流程分析

主要流程:

提供选项->系统输出->获取用户输入->判断胜负->重新执行

由于这个程序比较简单,就做一个猜拳类,实现获取并处理用户输入的方法和判断胜负的的方法即可。

3.完整程序

#Run.py
import random
class GuessBox:
    '''
    机器随机出一个,并且问用户输入,然后判断胜负
    '''
    GuessW={0:'剪刀',1:'石头',2:'布'}
    def __init__(self):
         print('---猜拳小游戏---')

    def Player(self):#判断玩家输入的方法
        self.__Robot=random.randrange(3)#从0-2中随机抽取一个数
        print('1.剪刀\n2.石头\n3.布')
        print('轮到你了!')
        self.Players=input()
        print('----------------')
        if self.Players in ['1','剪刀','1.剪刀']:
            self.PlayerInput=0
        elif self.Players in ['2','石头','2.石头']:
            self.PlayerInput=1
        elif self.Players in ['3','布','3.布']:
            self.PlayerInput=2
        else:
            self.PlayerInput=-1

    def Outp(self):
        print('您的是——',self.GuessW.get(self.PlayerInput))
        print('电脑出——',self.GuessW.get(self.__Robot))

    def WinorNot(self):#判断输赢的方法
        if self.PlayerInput not in range(3):
            print('憋乱打')
        elif self.PlayerInput == self.__Robot:
            print('平手')
        elif (0 in [self.PlayerInput,self.__Robot]) and (2 in [self.PlayerInput,self.__Robot]):
            if self.PlayerInput > self.__Robot:
                print('你输了...')
            elif self.PlayerInput < self.__Robot:
                print('你赢了!')
        elif self.PlayerInput < self.__Robot:
            print('你输了...')
        elif self.PlayerInput > self.__Robot:
            print('你赢了!')

#调用这个类

gb=GuessBox()
while True:
    gb.Player()
    gb.Outp()
    gb.WinorNot()
    print('----------------')

执行这个文件:

---猜拳小游戏---
1.剪刀
2.石头
3.布
轮到你了!
1
----------------
您的是—— 剪刀
电脑出—— 石头
你输了...
----------------
1.剪刀
2.石头
3.布
轮到你了!
剪刀
----------------
您的是—— 剪刀
电脑出—— 布
你赢了!
----------------
1.剪刀
2.石头
3.布
轮到你了!
石头
----------------
您的是—— 石头
电脑出—— 石头
平手
----------------
1.剪刀
2.石头
3.布
轮到你了!
3.----------------
您的是—— 布
电脑出—— 布
平手
----------------
1.剪刀
2.石头
3.布
轮到你了!

4.方法分析

初始化类

class GuessBox:
    '''
    机器随机出一个,并且问用户输入,然后判断胜负
    '''
    GuessW={0:'剪刀',1:'石头',2:'布'}
    def __init__(self):
         print('---猜拳小游戏---')

首先是要用类的方法,那就先创建一个类。然后创建一个类变量,预存一个猜拳的字典,方便以后调用时使用,而且也提醒我们0代表剪刀,1代表石头,2代表布。利用数字代表文字有利于后期判断胜负。然后构造函数加载一个标题,而这个标题仅加载一次。

出拳方法

    def Player(self):#判断玩家输入的方法
        self.__Robot=random.randrange(3)#从0-2中随机抽取一个数
        print('1.剪刀\n2.石头\n3.布')
        print('轮到你了!')
        self.Players=input()
        print('----------------')
        if self.Players in ['1','剪刀','1.剪刀']:
            self.PlayerInput=0
        elif self.Players in ['2','石头','2.石头']:
            self.PlayerInput=1
        elif self.Players in ['3','布','3.布']:
            self.PlayerInput=2
        else:
            self.PlayerInput=-1

接着是出拳方法(电脑用户同时猜拳):利用random.randomrange(3)获得0-2这三个数中的随机一个代表电脑的输出,赋值给一个禁止外部直接访问的变量__Robot。然后获得用户的输入,鉴于用户输入形式随机,我提供了三种输入方式,无论是只利用数字或只利用名字,还是数字名字都用都可以正确识别用户的输入(我可以认为是多态吗),并给予一个用户输入的猜拳数字代表用户的输入。如果用户的输入是不正常的,那这个数字是-1,以便以后能够警告用户。

判断输赢方法

    def WinorNot(self):#判断输赢的方法
        if self.PlayerInput not in range(3):
            print('憋乱打')
        elif self.PlayerInput == self.__Robot:
            print('平手')
        elif (0 in [self.PlayerInput,self.__Robot]) and (2 in [self.PlayerInput,self.__Robot]):
            if self.PlayerInput > self.__Robot:
                print('你输了...')
            elif self.PlayerInput < self.__Robot:
                print('你赢了!')
        elif self.PlayerInput < self.__Robot:
            print('你输了...')
        elif self.PlayerInput > self.__Robot:
            print('你赢了!')

最后是判断输赢的方法,首先判断用户的输入是不是合法的,如果不是合法的就给予一定的指引。合法,就比较用户和电脑的数字。在用数字代表猜拳的时候,刻意以剪刀石头布的顺序给定数字,这样就可以利用大于小于来判断输赢了,除了同时出现0和2需要特殊讨论外,数字大的一方胜利。而0和2同时出现,也只需要反其道而行之,数字小的胜利即可。

def Outp(self):
        print('您的是——',self.GuessW.get(self.PlayerInput))
        print('电脑出——',self.GuessW.get(self.__Robot))

另外还有个同时输出用户猜拳和电脑猜拳的方法,方便得到用户和电脑的猜拳结果。

游戏主体逻辑

gb=GuessBox()
while True:
    gb.Player()
    gb.Outp()
    gb.WinorNot()
    print('----------------')

首先将类实例化,然后在一个死循环内不断地调用方法,先获取电脑和用户的猜拳结果,再同时展示给用户,最后判断输赢。

1.5优化方向

除了算法上可以优化,如游戏输赢的判断方法等,还可以从面向对象的角度优化类的结构。比如将类的功能打散,或者将PlayerInput这种处理过的结果封装起来等。如果从可扩展上来说,如果加入耍赖系统的话,比如强行反转输赢等,可能就要重写WinorNot的方法。

最后这个程序没给直接退出程序的方法,要手动关掉。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3学习实战——用类实现简单的猜拳游戏 的相关文章

  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di

随机推荐

  • Vue基础--组件的创建和使用

    一 组件化思想 一个页面中所有的处理概述逻辑全部放在一起 处理起来就会变得非常复杂 不利于后续的管理以及扩展 但是 我们将一个页面逻辑复杂的页面拆分成一个个小的功能块 每个功能块只完成属于自己这部分独立的功能 把大功能拆分成一个个小的功能
  • 51单片机0-9数字LED灯循环输出

    代码 include
  • 703n的OpenWrt配置一:安装和基本设置

    OpenWrt支持的路由可以从官网查到 顺藤摸瓜也可以找到固件的下载地址 如果知道路由器的cpu也可以从这里分类查找路由器型号 对于703n的ar71xx就是点我里面搜索703n找到的那几个文件 挑最小的固件下载 这样可以剩下更多空间安装其
  • 【C++】类的默认成员函数——构造函数、析构函数、拷贝构造函数、赋值运算符重载

    文章目录 一 前言 二 构造函数 1 基本概念 2 初始化列表 3 自动生成的构造函数 三 析构函数 1 基本概念 2 自动生成的析构函数 四 拷贝构造函数 1 基本概念 2 自动生成的拷贝构造函数 五 赋值运算符重载 1 基本概念 2 自
  • 全面剖析PMD静态代码扫描工具

    PMD是使用JavaCC生成解析器来解析源代码并生成AST 抽象语法树 的 这两天对PMD及自定义规则做了调研及实验 部分说明来自官方说明文档 做了大部分参数的详细描述及测试 少数几个参数不明白含义 有了解的朋友欢迎讨论 1 调研对象 pm
  • 如何连接安卓手机到mac并传文件

    平时你有没有需求将文件拖拽到安卓手机文件夹下呢 我最近就需要安装许多插件包到我的手机上 今天就记录下我是如何做这个事情的 本文纯属自己记录自己的学习过程 下面交代下步骤 1 mac端下载HandShaker 2 安装HandShaker包
  • 2.1.cuda驱动API-概述

    目录 前言 1 Driver API概述 2 补充知识 总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程 之前有看过一遍 但是没有做笔记 很多东西也忘了 这次重新撸一遍 顺便记记笔记 本次课程学习精简 CUDA 教程 Dr
  • git rebase 合并提交与避免分叉合并

    本文让你熟练使用 rebase 学会以下两种操作 从此拒绝杂乱无章的 git 提交 目录 用法一 合并当前分支的多个commit记录 step1 找到想要合并的 commit 使用 rebase i step2 进入 Interact 交互
  • 阮一峰ES6 入门教程

    学习地址 https es6 ruanyifeng com
  • 书单(含资源链接,快撸!)

    撸资源 笨办法 学Python 第3版 https www jianshu com p 67a4827e88a1 Python 编写高质量Python代码的59个有效方法 https pan baidu com s 1vAw1R9bP5EC
  • 计算机视觉毕业后找不到工作怎么办?

    点击上方 视学算法 选择加 星标 置顶 重磅干货 第一时间送达 编辑 Amusi 来源 知乎 https www zhihu com question 335451320 本文仅作为学术分享 如果侵权 会删文处理 计算机视觉毕业后找不到工作
  • 使用tf-slim的ResNet V1 152和ResNet V2 152预训练模型进行图像分类

    本文使用tf slim的ResNet V1 152和ResNet V2 152预训练模型进行图像分类 并研究slim网络的scope命名等 tf slim文档不太多 实现过程中多参考官网的源码 https github com tensor
  • 静态代码扫描工具—— TScanCode

    一 简介 TscanCode支持以下类型规则扫描 空指针检查 包含可疑的空指针 数据越界 内存泄漏 分配和释放不匹配 逻辑错误 重复的代码分支 bool类型和INT进行比较 表达式永远True或者false等共18类检查 可疑代码检查 if
  • C语言 数据结构 栈的线性实现 基本操作代码

    typedef struct DataType data MaxSize int top LinearStack 初始化 void initStack LinearStack stack stack top 1 void isEmpty L
  • 消除游戏——蓝桥杯2022年第十三届省赛真题

    题目描述 在一个字符串 S 中 如果 S i S i 1 且S i 不等于S i 1 则称 S i 和 S i 1 为边缘字符 如果S i 不等于S i 1且 S i S i 1 则 S i 1 和 S i 也称为边缘字符 其它的字符都不是
  • tp5.1 查询字段为空的数据

    tp 语句直接查询空字段数据 gt where 字段名 null 查询为NULL时的条件 gt where 字段名 not null 查询不是NULL时的条件 官方文档提供了更加简洁的使用方式 推荐的方式是使用whereNull和where
  • 快速跑 nerf instant-ngp 快速调试与配置,跑自己的数据

    1 下载Anaconda3 2 打开Anaconda Prompt Anaconda 创建虚拟环境 conda create n nerf ngp python 3 8 切换到虚拟环境 conda activate nerf ngp 安装相
  • 2021年CNVD漏洞挖掘经验

    一 关于证书获取条件 先看一下CNVD的官方解释 归档漏洞的证书颁发条件为 1 对于中危及中危以上通用型漏洞 CVSS2 0基准评分超过4 0分 除小厂商的产品 非重要APP 黑盒测试案例不满10起等不颁发证书 2 涉及电信行业单位 中国移
  • js的三目运算写法

    1 什么是三目运算 布尔表达式 值0 值1 注意 三目运算和if else 的 区别是三目运算有返回值 例如 var max a gt b a b 2 多条件的三目运算怎么写 实例 根据学生成绩判定ABCD四个等级 var result s
  • Python3学习实战——用类实现简单的猜拳游戏

    Python3学习实战 用类实现简单的猜拳游戏 前言 本笔记仅个人认知和见解 水平有限 还请见谅 如有错误 还请指出 若有想法 欢迎共享 内容不代表最优解决方案 甚至可能不是很好的方法 仅供参考 文章目录 Python3学习实战 用类实现简