剪刀石头布游戏

news2024/11/25 22:49:40

csdn问答社区的一道题目,题目描述都像一篇论文了,界面设置不敢恭维,不过也算是可练手工程。


(笔记模板由python脚本于2023年12月05日 22:15:03创建,本篇笔记适合熟悉Python字典、列表、字符串的coder翻阅)


【学习的细节是欢悦的历程】

  • Python 官网:https://www.python.org/

  • Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
    地址:https://lqpybook.readthedocs.io/


  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


  • My CSDN主页、My HOT博、My Python 学习个人备忘录
  • 好文力荐、 老齐教室
等风来,不如追风去……


csdn问答社区的一道题目
石头剪刀布游戏
(题目描述都像一篇论文了,界面设置不敢恭维)


本文质量分:

96

本文地址: https://blog.csdn.net/m0_57158496/article/details/134818684

CSDN质量分查询入口:http://www.csdn.net/qc



目 录

  • ◆ 石头剪刀布游戏
    • 1、题目描述
    • 2、算法解析
      • 2.2 “全局变量”
      • 2.2 菜单显示和选择模块
      • 2. “游戏”
    • 3、完整源码



◆ 石头剪刀布游戏


1、题目描述


  • 题目描述

    1、任务描述:

      相信大家都玩过“石头剪刀布”的游戏,要求编写程序,让人与机器来玩这个游戏。游戏界面和示例过程如下:

    0:石头 1:剪刀 2:布
    3:重新开始 4:结束游戏

    电脑已经确定了出拳且愿与你比试,请输入你的选择:1
    本轮结果:你出的“剪刀”赢,电脑出的“布”
    你的战绩:1赢0平0输

    电脑已经确定了出拳且愿与你比试,请输入你的选择:0
    本轮结果:你出的“石头”平,电脑出的“石头”你的战绩:1赢1平0输

    电脑已经确定了出拳且愿与你比试,请输入你的选择:2
    本轮结果:你出的“布”平,电脑出的“布”
    你的战绩:1赢2平0输

    电脑已经确定了出拳且愿与你比试,请输入你的选择:3

    电脑已经确定了出拳且愿与你比试,请输入你的选择:0
    本轮结果:你出的“石头"平,电脑出的“石头”你的战绩:0赢1平0输

    电脑已经确定了出拳且愿与你比试,请输入你的选择:4


    2、输入输出

    [输入]
    每次输入用户的选择:0、1、2、3、4,表示相应的操作输出

    [菜单信息]
    每次人机对战的过程以及用户的战绩输入举例:参见任务描述中的游戏示例过程,分别输入的是1、0、2、3、0、4。

    [输出举例]
    参见任务描述中的游戏示例过程中的输出。


    3、分析
    (1)电脑随机所出的“石头”、“剪刀"、“布”可利用random模块的随机数函数实现;
    (2)对于人机对战的结果“赢”、“平”、 “输”的判断和“赢”、“平”、“输” 次数的记录可利用字典实现;
    (3)游戏的循环进行和选择结束游戏的功能,可以通过while循环和break语句来实现,重新开始游戏功能的实现方式为:清空比分,不显示本轮成绩,直接进入下一轮循环。


    4、重要知识点
    (1) 元组的运用
    (2) 字典的运用
    (3) 循环和选择结构的运用
    (4) 多个结果信息的统计


    5、过程
    系统功能的需求分析
    主要功能模块的算法设计
    调试过程中出现的问题和解决方法

题目来源于 CSDN 问答社区提问“石头剪刀布游戏”



回页目录


2、算法解析


  题目描述都已经够啰嗦的了,这里就不再BB。大多代码行都作了适当的注释,应该可以轻松阅读。


2.2 “全局变量”


  单行lambda函数无形参,功能为Linux下的“字符串”打印方式清屏并打印游戏标题。做成函数是方便代码复用。



# 全局变量 #
wins = [0] # 胜局变量初值。
fails = [0] # 输局变量初值。
dogfalls = [0] # 平局变量初值。
title = lambda: print(f"\033[2J\n{' 石头剪刀布游戏 ':=^33}\n")
isWindict = {'01': True, 
             '02': False, 
             '12': True, 
             '10': False, 
             '20': True, 
             '21': False
    	        } # 输赢评判字典。
kindDict = {'0': '石头', 
            '1': '剪刀', 
            '2': '布'
    	        } # 出拳种类字典。



回页目录



2.2 菜单显示和选择模块


  游戏菜单我采用我所擅长的循环打印菜单选择项,简单便捷,扩充方便,菜单选择项的多寡,都是那几行代码,简洁而优雅。


  • 代码运行效果截屏图片
    在这里插入图片描述


def menu():
    ''' 游戏菜单 '''
    title() # Linux式清屏并打印游戏名称。
    strMenu = '石头', '剪刀', '布', '重新开始', '结束游戏'
    
    for k,i in enumerate(strMenu): # 遍历打印菜单选择项。

        if k in (0, 3):
            print(f"\n\n{'':>8}", end='') # 换行。

        print(f"{k}. {i}{'':>2}", end='')

    print(f"\n{'':.^40}\n{'(输入对应序号选择菜单)':^30}\n")
    while 1:
        result = input(f"\n\n{'电脑已经确定了出拳且愿与你比试':^25}\n{'':~^40}\n\n{'':>8}您的选择(0~4):_")

        if result in map(str, range(5)):
            break 
        else:
            input(f"\n{' 输入错误!':~^35}")

    return result



回页目录



2. “游戏”


  这部分为代码主体,调用menu打印并选择菜单,用if分支据玩家的不同选择而转到不同的地方(不同的if分支)执行代码。

  游戏菜单循环选择,我不是用的while结构,而是用的“闭包”调用其自身实现循环。


  • 代码运行效果截屏图片

    菜单4效果
    在这里插入图片描述
    菜单3效果
    在这里插入图片描述
    游戏效果
    在这里插入图片描述


def game():
    ''' 游戏 '''
    from random import randint # 加载随机整数生成方法。
    ai = str(randint(0, 2)) # 机器随机出拳。
    player = menu() # 玩家出拳。
    
    if player == '3': # 数据清零,重开游戏。
        wins[0] = 0
        fails[0] = 0
        dogfalls[0] = 0
        title()
        input(f"\n\n{' 游戏数据已清零 ':.^33}\n\n\n\n{' 任意键继续 ':~^35}")
        game()
    elif player == '4':
        title()
        print(f"\n\n{' 您已退出游戏 ':^34}\n\n\n\n{f' 欢迎下次来玩 ':=^34}\n\n")
        exit() # 退出game函数。
    
    if isWindict.get(''.join([player, ai])) is True:
        flag = '赢'
        wins[0] += 1
    elif isWindict.get(''.join([player, ai])) is False:
        flag = '输'
        fails[0] += 1
    else:
        flag = '平'
        dogfalls[0] += 1
    
    input(f"\n\n{' 本轮结果 ':.^36}\n\n{'':>8}你出的{kindDict.get(player)}{flag},电脑出的{kindDict.get(ai)}\n\n{f'你的战绩:{wins[0]:>3}{dogfalls[0]:>3}{fails[0]:>3}输':^32}\n\n{' 任意键继续 ':~^35}")
    game() # 调用自己,实现循环游戏。



回页目录


3、完整源码

(源码较长,点此跳过源码)

#!/usr/bin/nve python
# coding: utf-8
from random import randint # 加载随机整数生成方法。


# 全局变量 #
wins = [0] # 胜局变量初值。
fails = [0] # 输局变量初值。
dogfalls = [0] # 平局变量初值。
title = lambda: print(f"\033[2J\n{' 石头剪刀布游戏 ':=^33}\n")
isWindict = {'01': True, 
             '02': False, 
             '12': True, 
             '10': False, 
             '20': True, 
             '21': False
    	        } # 输赢评判字典。
kindDict = {'0': '石头', 
            '1': '剪刀', 
            '2': '布'
    	        } # 出拳种类字典。


def menu():
    ''' 游戏菜单 '''
    title() # Linux式清屏并打印游戏名称。
    strMenu = '石头', '剪刀', '布', '重新开始', '结束游戏'
    
    for k,i in enumerate(strMenu): # 遍历打印菜单选择项。

        if k in (0, 3):
            print(f"\n\n{'':>8}", end='') # 换行。

        print(f"{k}. {i}{'':>2}", end='')

    print(f"\n{'':.^40}\n{'(输入对应序号选择菜单)':^30}\n")
    while 1:
        result = input(f"\n\n{'电脑已经确定了出拳且愿与你比试':^25}\n{'':~^40}\n\n{'':>8}您的选择(0~4):_")

        if result in map(str, range(5)):
            break 
        else:
            input(f"\n{' 输入错误!':~^35}")

    return result
        

def game():
    ''' 游戏 '''
    from random import randint # 加载随机整数生成方法。
    ai = str(randint(0, 2)) # 机器随机出拳。
    player = menu() # 玩家出拳。
    
    if player == '3': # 数据清零,重开游戏。
        wins[0] = 0
        fails[0] = 0
        dogfalls[0] = 0
        title()
        input(f"\n\n{' 游戏数据已清零 ':.^33}\n\n\n\n{' 任意键继续 ':~^35}")
        game()
    elif player == '4':
        title()
        print(f"\n\n{' 您已退出游戏 ':^34}\n\n\n\n{f' 欢迎下次来玩 ':=^34}\n\n")
        exit() # 退出game函数。
    
    if isWindict.get(''.join([player, ai])) is True:
        flag = '赢'
        wins[0] += 1
    elif isWindict.get(''.join([player, ai])) is False:
        flag = '输'
        fails[0] += 1
    else:
        flag = '平'
        dogfalls[0] += 1
    
    input(f"\n\n{' 本轮结果 ':.^36}\n\n{'':>8}你出的{kindDict.get(player)}{flag},电脑出的{kindDict.get(ai)}\n\n{f'你的战绩:{wins[0]:>3}{dogfalls[0]:>3}{fails[0]:>3}输':^32}\n\n{' 任意键继续 ':~^35}")
    game() # 调用自己,实现循环游戏。


if __name__ == '__main__':
    game() # 调用函数开始游戏。

回页首


上一篇:  猜数字赢金币(充值金币后开始游戏,猜中奖励10金币退出,不中扣除1金币继续)
下一篇: 

我的HOT博:

  本次共计收集 246 篇博文笔记信息,总阅读量 40.46w,平均阅读量 1644。已生成 16 篇阅读量不小于 4000 的博文笔记索引链接。数据采集于 2023-10-12 05:41:03 完成,用时 4 分 41.10 秒。


  1. ChatGPT国内镜像站初体验:聊天、Python代码生成等
    ( 59262 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/129035387
    点赞:126   踩 :0  收藏:798  打赏:0  评论:71
    本篇博文笔记于 2023-02-14 23:46:33 首发,最晚于 2023-07-03 05:50:55 修改。
  2. 让QQ群昵称色变的神奇代码
    ( 58086 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122566500
    点赞:24   踩 :0  收藏:83  打赏:0  评论:17
    本篇博文笔记于 2022-01-18 19:15:08 首发,最晚于 2022-01-20 07:56:47 修改。
  3. pandas 数据类型之 DataFrame
    ( 9173 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/124525814
    点赞:6   踩 :0  收藏:31  打赏:0  评论:0
    本篇博文笔记于 2022-05-01 13:20:17 首发,最晚于 2022-05-08 08:46:13 修改。
  4. 个人信息提取(字符串)
    ( 7215 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/124244618
    点赞:1   踩 :0  收藏:13  打赏:0  评论:0
    本篇博文笔记于 2022-04-18 11:07:12 首发,最晚于 2022-04-20 13:17:54 修改。
  5. Python列表(list)反序(降序)的7种实现方式
    ( 7161 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/128271700
    点赞:5   踩 :0  收藏:22  打赏:0  评论:8
    本篇博文笔记于 2022-12-11 23:54:15 首发,最晚于 2023-03-20 18:13:55 修改。
  6. 罗马数字转换器|罗马数字生成器
    ( 7035 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122592047
    点赞:0   踩 :0  收藏:1  打赏:0  评论:0
    本篇博文笔记于 2022-01-19 23:26:42 首发,最晚于 2022-01-21 18:37:46 修改。
  7. Python字符串居中显示
    ( 6966 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122163023
    点赞:1   踩 :0  收藏:7  打赏:0  评论:1
    本篇博文笔记
  8. 斐波那契数列的递归实现和for实现
    ( 5523 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122355295
    点赞:4   踩 :0  收藏:2  打赏:0  评论:8
    本篇博文笔记
  9. python清屏
    ( 5108 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/120762101
    点赞:0   踩 :0  收藏:8  打赏:0  评论:0
    本篇博文笔记
  10. 练习:字符串统计(坑:f‘string‘报错)
    ( 5103 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/121723096
    点赞:0   踩 :0  收藏:1  打赏:0  评论:0
    本篇博文笔记
  11. 回车符、换行符和回车换行符
    ( 5093 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/123109488
    点赞:1   踩 :0  收藏:2  打赏:0  评论:0
    本篇博文笔记于 2022-02-24 13:10:02 首发,最晚于 2022-02-25 20:07:40 修改。
  12. 练习:尼姆游戏(聪明版/傻瓜式•人机对战)
    ( 4943 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/121645399
    点赞:14   踩 :0  收藏:42  打赏:0  评论:0
    本篇博文笔记
  13. 密码强度检测器
    ( 4323 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/121739694
    点赞:1   踩 :0  收藏:4  打赏:0  评论:0
    本篇博文笔记于 2021-12-06 09:08:25 首发,最晚于 2022-11-27 09:39:39 修改。
  14. 练习:生成100个随机正整数
    ( 4274 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122558220
    点赞:1   踩 :0  收藏:6  打赏:0  评论:0
    本篇博文笔记于 2022-01-18 13:31:36 首发,最晚于 2022-01-20 07:58:12 修改。
  15. 我的 Python.color() (Python 色彩打印控制)
    ( 4159 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/123194259
    点赞:2   踩 :0  收藏:8  打赏:0  评论:0
    本篇博文笔记于 2022-02-28 22:46:21 首发,最晚于 2022-03-03 10:30:03 修改。
  16. 罗马数字转换器(用罗马数字构造元素的值取模实现)
    ( 4149 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122608526
    点赞:0   踩 :0  收藏:0  打赏:0  评论:0
    本篇博文笔记于 2022-01-20 19:38:12 首发,最晚于 2022-01-21 18:32:02 修改。
推荐条件 阅读量突破{补全数据}
(更多热博,请点击蓝色文字跳转翻阅)

回页首


老齐漫画头像

精品文章:

  • 好文力荐:齐伟书稿 《python 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永久分享,点击跳转免费🆓下载。)
  • OPP三大特性:封装中的property
  • 通过内置对象理解python'
  • 正则表达式
  • python中“*”的作用
  • Python 完全自学手册
  • 海象运算符
  • Python中的 `!=`与`is not`不同
  • 学习编程的正确方法

来源:老齐教室


◆ Python 入门指南【Python 3.6.3】


好文力荐:

  • 全栈领域优质创作者——[寒佬](还是国内某高校学生)博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是编程学习的两大利器。
  • 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
  • 靠谱程序员的好习惯
  • 大佬帅地的优质好文“函数功能、结束条件、函数等价式”三大要素让您认清递归

CSDN实用技巧博文:

  • 8个好用到爆的Python实用技巧
  • python忽略警告
  • Python代码编写规范
  • Python的docstring规范(说明文档的规范写法)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1288566.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

军大衣方歇 东北大花袄正当时

聊起最近军大衣和各式棉服的销量,丽亮服饰的陈先生正忙于打包,他说现在订购的军大衣最早也得20天后才能到货,除了零散的几件,市面基本都处于断货状态。 做了十多年服装生意,陈先生也没想到军大衣会从自己的父辈&#x…

【Vue】element组件不显示问题

使用element组件但不显示 不显示的原因:(未引入element-ui) 首先在控制台输入 npm i element-ui 进行安装 安装完之后,再去main.js配置element-ui组件库 import ElementUI from element-ui import element-ui/lib/theme-chal…

MYSQL数据库中运行SQL文件报错

报错显示 当使用mysql数据库运行SQL文件报错时 [Err] 1273 - Unknown collation: utf8mb4_0900_ai_ci 报错原因 版本高低问题,一个是5.7版本,一个是8.0版本生成转储文件的数据库版本为8.0,要导入sql文件的数据库版本为5.7,因为是高版本导入到低版本&a…

.NET Core 依赖注入 Microsoft.Extensions.DependencyInjection(未完待续)

文章目录 前言什么是依赖注入C# 使用依赖注入框架介绍 Microsoft.Extensions.DependencyInjectionNuget安装简单单例使用打印结果 暂时结束 前言 依赖注入是一个非常重要的编程思想,就和面向过程和面向对象一样,IOC和控制反转是一种解耦的编程思想。 什…

小满CRM与畅捷通T+系统数据集成方案分享

小满CRM与畅捷通T系统数据集成方案分享 在当前数字化浪潮的推动下,越来越多的企业选择使用各种信息化系统来提高工作效率和管理水平。其中,小满CRM和畅捷通T系统成为了广受企业欢迎的两个主流系统。然而,企业在使用这两个系统的过程中&#…

【数据分享】1990-2022年我国省市县三级的各类土地覆盖面积

土地覆盖数据是我们在各项研究中经常使用的数据。土地覆盖数据可以帮助我们确定哪儿是建设用地,哪儿是水域,哪儿是农田等!我们之前分享了武汉大学杨杰和黄昕教授发布的1990-2022年中国30米年度土地覆盖栅格数据(可查看之前的文章获…

在微信小程序中如何改变默认打开的页面

在微信小程序中,在我们编写页面的时候,可能会在重新渲染的时候导致页面跳转到默认打开的页面上,为了提升用户的一个体验,我们可以设置一些内容来修改小程序默认打开的页面,提升开发者的开发体验。 当我们打开一个微信…

CentOS中安装数据库

1.下载 网址:https://dev.mysql.com/downloads/mysql/ 按如图选择,然后点击Download 这里它让我们登录,我们直接选择不登录,直接下载 2.关闭防火墙 systemctl disable firewalld3.正式安装 切换到/usr/local下 cd /usr/l…

扰动观测器(Disturbance observer)

干扰观测器是将外部干扰以及模型参数变化造成的实际对象与名义模型之间的差异等效到控制输入端,即观测出等效干扰。并在控制中引入等效的补偿,实现对干扰的完全控制。 参考文献: 聊聊控制领域的干扰观测器(DOB) - 知乎1. 简介1987 年日本学者…

[Python从零到壹] 七十三.图像识别及经典案例篇之图像去雾ACE算法和暗通道先验去雾算法实现

十月太忙,还是写一篇吧!祝大家1024节日快乐O(∩_∩)O 欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经…

打开率高的开发信主题?邮件的标题怎么写?

如何写高点击率的开发信主题?推荐的邮件标题模板? 一封高效的开发信可以是你争取客户的第一步。但是,要让你的邮件在收件人的收件箱中引起关注并被打开,你需要选择一个吸引人的主题。蜂邮将介绍一些打开率高的开发信主题&#xf…

安卓设备发送指令操作蓝牙打印机打印信息

引用安卓蓝牙设备驱动 蓝牙打印指令测试下载https://download.csdn.net/download/u014596302/16231571 示例运行页面 使用起步wex5 - 3.9 编辑器打开 .w文件 下载 所需插件及驱动 wex5 开发软件http://www.justep.com/wex5downloads/ 安卓蓝牙驱动 cordova 版https://down…

第74讲:MySQL数据库InnoDB存储引擎事务:Redo Log与Undo Logo的核心概念

文章目录 1.InnoDB引擎中的逻辑存储结构2.事务的基本概念3.Redo log的核心概念3.1.什么是Redo log3.2.如果没有redo log面临的问题3.3.使用redo log之后是怎样的流程 4.Undo log的核心概念 1.InnoDB引擎中的逻辑存储结构 InnoDB存储引擎的逻辑结构分为以下几层: Ta…

Python 对中文名称逐字按字母表进行排序并输出

使用场景 代码适用于需要对中文名称进行排序并规范化输出的情景,具体为处理一个包含中文姓名的文本文件,按姓名的拼音首字母进行排序,并以规范的格式输出。 排序规则: 将名称按照姓氏首字母A-Z的次序,进行排序&#x…

15+铁死亡超高分推荐,快来码思路

今天给同学们分享一篇生信文章“Polydopamine Nanoparticles Targeting Ferroptosis Mitigate Intervertebral Disc Degeneration Via Reactive Oxygen Species Depletion, Iron Ions Chelation, and GPX4 Ubiquitination Suppression”,这篇文章发表在Adv Sci (Wei…

【漏洞复现】狮子鱼任意文件上传漏洞

漏洞描述 狮子鱼CMS(Content Management System)是一种网站管理系统,旨在帮助用户更轻松地创建和管理网站。它具有用户友好的界面和丰富的功能,包括页面管理、博客、新闻、产品展示等。 狮子鱼CMS使用简单直观的管理界面,使得网站所有者可以方便地进行内容的发布、管理和…

Python插件 - 动态 简单账表 通过SQL存储过程输出列实现动态展示

第一步 新建一个简单账表加上表头标签 第二步 新建一个过滤框 第三步 修改过滤窗口标识 第四步 注册插件 python代码实现 import clr clr.AddReference("System") clr.AddReference("System.Core") clr.AddReference("Kingdee.BOS") clr.AddRe…

思腾云计算中心 | 5千平米超大空间,基础设施完善,提供裸金属GPU算力租赁业务

2021年,思腾合力全资收购包头市易慧信息科技有限公司,正式开启云计算业务。思腾云计算中心占地2400平米,位于包头市稀土高新区,毗邻多家知名企业,地理位置优越,交通便利,是区内重要的信息化产业…

数据结构实验—宿舍管理系统(C,Python,Java三种代码版本)

目录 实验课程 实验内容 数据结构类型定义 模块划分 (C语言)详细代码设计 (python)详细代码设计 (Java)详细代码设计 测试数据及结果 实验总结 实验课程 课程名称:数据结构 实验名称&…

C-11练习题

一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) 1,在C语言中,合法的长整型常数是() A. OxOL B. 4962710M C. 324562& D. 216D 2,设有定义: int a[10],*pa6,*q…