当前位置: 首页 > news >正文

python基础案例题:进制转换、字符串加密的实现、猜拳游戏、多种方法计算π

目录

      • 前言
      • 1.进制转换
      • 2.字符串加密的实现
      • 3.猜拳游戏
      • 4.多种方法计算π
      • 尾语 💝

前言

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

1.进制转换

功能

获取十进制整数的二进制串,相当于内置函数bin。

算法分析

  1. 对2辗转相除,直到商为0

  2. 每次所得余数逆序即可

流程图绘制

测试驱动,书写测试用例:

>>> convert(13)
'1101'
>>> convert(1)
'1'
>>> convert(0)
'0'
>>> convert(67)
'1000011'
>>> convert(15)
'1111'

代码实现:

def convert(n):"""添加上述测试用例"""s = ""while n != 0:r = n % 2s = str(r) + sn //= 2return sif __name__ == "__main__":import doctestdoctest.testmod(verbose=True)

运行上述测试,可以看到0的二进制串没通过测试,

原因是s默认为空串,因而传入0时得到的将是空串。

我们可以在返回值时,使用三元运算符处理即可,return s if s != “” else “0”

扩展:十进制转任意进制

  1. 进制:变化的是数码和基数

  2. 基数我们可以通过参数传入来解决

  3. 数码我们可以通过定义码元串来完成,然后通过索引访问即可

代码实现:

def convert(num, base):""">>> convert(13, 2)'1101'>>> convert(23, 16)'17'>>> convert(23, 8)'27'>>> convert(30, 16)'1E'"""codes = "0123456789ABCDEF"s = ""while num != 0:r = num % bases = codes[r] + snum //= basereturn s if s != "" else "0"if __name__ == "__main__":import doctestdoctest.testmod(verbose=True)

2.字符串加密的实现

功能:

对英文串进行加密,规则英文字母循环右移n位,不失一般性,此处n设为3

算法分析:

  1. chr,根据ASCII码获取字符;

  2. ord,获取字母的ASCII码

循环右移,即越界翻转,z完后再到a,即(ord(ch) + 3 - 0x61) % 26 + 0x61

流程图绘制

测试先行:

>>> encrypt("abc")
'def'
>>> encrypt("xyz")
'abc'
>>> encrypt("Abc")
'Def'
>>> encrypt("a1b2c3")
'd1e2f3'
>>> encrypt("abc ABC")
'def DEF'

代码实现:

def encrypt(p):"""添加上述测试用例"""s = ""for ch in p:code = (ord(ch) - 0x61 + 3) % 26 + 0x61s += chr(code)return sif __name__ == "__main__":import doctestdoctest.testmod(verbose=True)

运行上述测试,前2个通过,后面3个失败。

原因分析:

大写字母处理不对,代码默认基础字母是‘a’。

只需要增加base变量,根据字母是大写还是小写来初始化,即base = 0x41 if ch.isupper() else 0x61,将该行插入到第7行前,然后把后面行中出现的0x61修改为base即可。

再运行测试,前3个通过。

根据题意,对英文字母进行加密,非英文字母我们保持不变即可。

利用字符串对象提供的isalpha方法进行分支处理,

加密方法的完整代码如下:

def encrypt(p):"""添加上述测试用例"""s = ""for ch in p:if not ch.isalpha():s += chcontinuebase = 0x41 if ch.isupper() else 0x61code = (ord(ch) - 0x61 + 3) % 26 + 0x61s += chr(code)return s

注意:Python字符串的isalpha方法,支持unicode字符,因而中文也是字符,

这将导致上述代码无法正确处理中文。

我们可以通过自己定义is_letter函数来实现英文字母的判断。

3.猜拳游戏

功能:

玩家与计算机“剪刀石头布”,三局两胜(平局不算),最后输出获胜方。

计算机出拳,使用random库随机产生;玩家由键盘输入。

random库:

randrange函数:和range函数的参数一样,在该范围产生一个随机数

choice函数:抽取一个

choices函数:有放回抽样

sample函数:无放回抽样

seed函数:默认系统时间作为种子。种子相同,则产生相同随机数列。

逻辑判断优化:

建立映射:0表示scissor,1表示stone,2表示cloth

观察可得,(x+1)%3 == y,表示y胜;否则,x!=y,表示x胜

代码实现

import randomdef compare(computer, player):choices = ["scissor", "stone", "paper"]infos = ["it is a draw.", "computer win!", "player win!"]    wid = 0if computer == (player + 1) % 3:wid = 1elif computer != player:wid = 2return wid, infos[wid] + f"{choices[computer]} VS {choices[player]}"def run():    result = [0, 0, 0]while True:computer = random.choice([0, 1, 2])player = int(input("please input your choice:"))wid, info = compare(computer, player)print(info)      result[wid] += 1        if max(result[1], result[2]) == 2: breakprint(f"game over!{result[1]}:{result[2]}")if __name__ == "__main__":run()

程序运行情况如下:

please input your choice:0
computer win!stone VS scissor
please input your choice:0
computer win!stone VS scissor
game over!2:0
>>> please input your choice:0
player win!paper VS scissor
please input your choice:1
player win!scissor VS stone
game over!0:2
>>> please input your choice:0
it is a draw.scissor VS scissor
please input your choice:0
computer win!stone VS scissor
please input your choice:0
player win!paper VS scissor
please input your choice:0
player win!paper VS scissor
game over!1:2

4.多种方法计算π

功能:

数列方式求π:π/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9......

通项分析:

  1. 分子为1,分母为奇数2n-1,正负交替

  2. 计算项数越多,精度越高

代码实现

def calc(n):s, sign = 0, 1for i in range(1, n+1):item = sign / (2*i - 1)s += item        sign *= -1     #正负交替return 4 * sif __name__ == "__main__":s = calc(1000000)print(f"{s}")

运行该程序,可以得到π值为:3.1415916535897743。

增加循环次数,可以提升精度,但运行时间会增加,请大家自行测试。

扩展练习:

已知数列,π2/6=1+1/4+1/9+1/16……,编程实现π的计算。

刘徽割圆术求π

割之弥细,所失弥少,计算正多边形的面积,就是圆的面积(单位圆的话,就是π的值)

正多边形就是n个相同大小的三角形,只需计算1个三角形的面积即可

三角形三边长容易获得,再利用海伦-秦九韶公式可以计算面积: p ( p − a ) ( p − b ) ∗ ( p − c ) \sqrt{p(p-a)(p-b)*(p-c)} p(pa)(pb)(pc) ,其中p为周长的一半。

代码实现

import mathdef calc_area(n):angle = 2*math.pi / nx1, y1 = 1, 0x2, y2 = math.cos(angle), math.sin(angle)a = math.sqrt((x1-x2)**2 + (y1-y2)**2)      #求两点距离p = (a+1+1) / 2                             #周长的一半s = math.sqrt(p * (p-a) * (p-1) * (p-1))    #海伦-秦九韶公式return s#学习中没有资料?可以加我VX:qian97378免费领
def run():n = 20000s = calc_area(n)print(n * s)if __name__ == "__main__":run()

运行该程序,可得π \piπ的值:3.141592601914085。

扩展练习:

利用已知两边长及其夹角求面积公式,完成π \piπ的计算。

蒙特卡罗投针实验求π

概率可以用面积之比来表示

模拟投针实验:

  1. 单位圆和其外接正方形

  2. 随机投针

  3. 圆内针数与总针数的比例等于圆和方形的面积之比

代码实现

import random, mathdef calc_area(n):count = 0for i in range(n):x = random.random()y = random.random()d = math.sqrt(x*x + y*y)            #到圆心的距离if d < 1:                           #落入圆内,则计数加1count += 1return count * 4 / ndef run():n = 1000000s = calc_area(n)print(s)if __name__ == "__main__":run()

运行程序,1百万次投针得到的π \piπ值为:3.140648,精度不算太高。

尾语 💝

要成功,先发疯,下定决心往前冲!

学习是需要长期坚持的,一步一个脚印地走向未来!

未来的你一定会感谢今天学习的你。

—— 心灵鸡汤

本文章到这里就结束啦~感兴趣的小伙伴可以复制代码去试试哦 😝

👇问题解答 · 源码获取 · 技术交流 · 抱团学习请联系👇

相关文章:

python基础案例题:进制转换、字符串加密的实现、猜拳游戏、多种方法计算π

目录 前言1.进制转换2.字符串加密的实现3.猜拳游戏4.多种方法计算π尾语 &#x1f49d; 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 1.进制转换 功能&#xff1a; 获取十进制整数的二进制串&#xff0c;相当于内置函数bin。 算法分析&#xff1a; 对2辗转相除&…...

Spring Boot入门与进阶

本文将为您详细讲解Spring Boot的入门与进阶知识&#xff0c;包括Spring Boot的简介、环境搭建、基本功能以及高级特性&#xff0c;并配以丰富的代码示例&#xff0c;帮助大家快速掌握Spring Boot。 一、Spring Boot简介 Spring Boot是基于Spring框架的一种轻量级、快速开发的…...

servlet(1)—javaEE

文章目录 1.认识servlet2.使用servlet2.1创建项目2.2引入依赖2.3创建目录2.4编写代码2.5打包2.6部署2.7运行2.8验证 3.开发步骤4.部署方式4.1打包4.2安装插件 5.访问出错的情况5.1 4045.2 4055.3其他 6.servlet的三大生命周期方法7.servlet api7.1HttpServlet7.2HttpServletReq…...

定制 Jenkins 镜像说明

Dockerfile模板示例 FROM jenkins/jenkins:2.332.4-jdk8 MAINTAINER jason USER root RUN sed -i ‘s/deb.debian.org/mirrors.aliyun.com/g’ /etc/apt/sources.list && apt update && apt install ca-certificates tzdata -y && rm -rf /var/cach…...

【离散数学】测试五 图论

1. n层正则m叉树一共有()片树叶。 A. nm B. mn C. mn 正确答案: B 2. 下图是一棵最优二叉树 A. 对 B. 错 正确答案: B 3. 要构造权为1,4,9,16,25,36,49,64,81,100一棵最优二叉树,则必须先构造权为5,9,16,25,36,49,64,81,100一棵最优二叉树. A. 对 B. 错 …...

根据cadence设计图学习硬件知识 day03 了解 一些芯片 和 数据手册下载的地方

1. MT53D512M32D2DS 芯片&#xff08;动态随机存取存储器&#xff09;的技术指标 1.1 16n Prefetch (预加载) (n --芯片位宽) DDR 体系 链接&#xff1a;DDR扫盲—-关于Prefetch(预取)与Burst(突发)的深入讨论_ddr prefetch_qq_25814297-npl的博客-CSDN博客 1.2 每个通…...

计算机组成原理——第五章中央处理器(中)

辞别再无相见月&#xff0c;终是一人度春秋 文章目录 前言5.4.1 硬布线控制器的设计5.4.2 微程序控制器的基本原理5.4.3 微指令的设计5.4.4 微程序控制单元的设计 前言 本文主要写的是控制器的设计&#xff0c;控制器的设计分为硬部件控制器(就是用纯硬件的方式来实现的一种控…...

ImageJ 用户手册——第三部分(ImageJ扩展)

ImageJ 用户手册-第三部分 ImageJ扩展14. 宏指令&#xff08;Macros&#xff09;宏程序设计 15. 脚本&#xff08; Scripts&#xff09;JavaScript编程 16. 插件&#xff08; Plugins&#xff09;开发ImageJ插件 17. 用其他语言编写脚本Fiji脚本编辑器 18. 从命令行运行ImageJ …...

RK3399平台开发系列讲解(PCI/PCI-E)PCIE相关配置说明

🚀返回专栏总目录 文章目录 一、DTS 配置二、menuconfig 配置三、cmdline 配置沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将介绍在使用 RK3399 平台 PCIE 时候的配置。 一、DTS 配置 ep-gpios = <&gpio3 13 GPIO_ACTIVE_HIGH>; 此项是设置 PCIe…...

NAS私有云存储 - 搭建Nextcloud私有云盘并公网远程访问

文章目录 摘要视频教程1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问 4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名 转载自内网穿透工具的文章&#xff1a;使用Nextcl…...

Revit问题:墙体被楼板剪切及材质库被锁定问题

一、Revit 墙体被楼板剪切怎么办? 建模的时候画的墙总是到楼板就停了&#xff0c;这是为什么&#xff1f;明明顶部约束到标高2了&#xff0c;这种情况如何解决&#xff1f; 首先来分析问题产生的原因是&#xff0c;我们在绘制楼板的时候选择了用楼板剪切重复部分的墙体。 解决…...

CPU信息查询与CPU测试方法总结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请征得博主同意并附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/mainmaster/article/details/130267689 未经允许不能拷贝本文章内容发布到其他相关载体上。 CPU信息查询 我们知道在嵌入式系统…...

ChatGPT时代,我们可能站到了自然语言编程的大门口

ChatGPT大火&#xff0c;我现在有种感觉&#xff1a;我们可能站到了自然语言编程的门口&#xff0c;一脚下去&#xff0c;也许能把门踹开。 当然&#xff0c;也可能会踢到一块铁板。 回顾我们的编程之路&#xff0c;基本上就是一个编程门槛不断降低的历史。 最早的一批前辈们…...

深入理解AMQP协议

一.AMQP 是什么 AMQP&#xff08;Advanced Message Queuing Protocol&#xff0c; 高级消息队列协议&#xff09;是一个提供统一消息服务的 应用层标准高级 消息队列协议&#xff0c;是 应用层协议的一个 开放标准,为面向消息的中间件设计&#xff0c;是一个进程间传递 异步消息…...

大型体检管理系统源码:适用于大中型医院或独立体检中心

一套专业的体检管理系统源码&#xff0c;是医院、体检中心等单位开展体检业务的得力助手。它将以往人工操作的健康体检过程所得到信息转换成全信息化的电脑管理&#xff0c;使体检过程更为流畅、更有条理&#xff0c;更加便于管理&#xff0c;从而实现体检业务管理的自动化、信…...

ACM 1000 | 简单的a+b

文章目录 0x00 前言 0x01 题目描述 0x02 问题分析 0x03 代码设计 0x04 完整代码 0x05 运行效果 0x06 参考文献 0x07 总结 0x00 前言 C 语言网不仅提供 C 语言&#xff0c;还包括 C 、 java 、算法与数据结构等课程在内的各种入门教程、视频录像、编程经验、编译器教程及…...

系统分析师选择题笔记

目录 1、知识产权与标准化 1.1 保护范围与对象(★★★★) 1.2 保护期限(★) 1.3 知识产权人确定(★★★) 1.4 侵权判断(★★★) 1.5 标准的分类(★) 1.6 标准代号的识别(★) 2、系统配置与性能评价 2.1 系统性能概述 2.2 系统性能&#xff08;性能指标&#xff09;(★…...

MySQL隐式类型转换

当运算符与不同类型的操作数一起使用时&#xff0c;会发生类型转换以使操作数兼容。有些转换是隐式发生的。例如&#xff0c;MySQL会根据需要自动将字符串转换为数字&#xff0c;反之亦然。 转换规则 如果一个或两个参数都为NULL&#xff0c;则比较结果为NULL 。但是相等比较…...

IT知识百科:什么是SSID?

一、什么是SSID SSID&#xff08;Service Set Identifier&#xff09;是无线网络中的一个重要概念&#xff0c;它是一个用于标识无线局域网&#xff08;WLAN&#xff09;的名称。SSID可以看作是无线网络的名称&#xff0c;类似于有线网络中的网络名称或者路由器的名称。在无线…...

OpenAI-ChatGPT最新官方接口《从0到1生产最佳实例》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(十一)(附源码)

Production Best Practices 生产最佳实例 前言Introduction 导言Setting up your organization 设置您的组织Managing billing limits 管理计费限额API keys API密钥Staging accounts 演示账户 Building your prototype 构建您的原型Additional tips 其它技巧 Techniques for i…...

2023 IT市场权威榜单|美创数据库防火墙斩获“新一代信息技术创新产品”

4月20日&#xff0c;由赛迪顾问主办的“2023 IT市场权威榜单”评选结果正式发布&#xff0c;美创数据库防火墙斩获新一代信息技术创新产品&#xff01; 美创数据库防火墙是一款抵御并消除由于应用程序业务逻辑漏洞或者缺陷所导致的数据库安全问题的专业级数据库安全产品&#x…...

30个超级有用的JavaScript单行代码

在这篇文章中&#xff0c;我列出了一个系列的 30 个 JavaScript 单行代码&#xff0c;它们在使用 vanilla js&#xff08;≥ ES6&#xff09;进行开发时非常有用。它们也是使用该语言在最新版本中为我们提供的所有功能来解决问题的优雅方式。 我将它们分为以下5大类&#xff1…...

【GitLab私有仓库】在Linux上用Gitlab搭建自己的私有库并配置cpolar内网穿透

前言 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的Web服务。 Gitlab是被广泛使用的基于git的开源代码管理平台, 基于Ruby on Rails构建, 主要针对软件开发过程中产生的代码和文档进行管理, Gitlab主要针对…...

诊断CAPL自动化(1)—— CANoe自带的诊断工程分析

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe,博客目录大全,点击跳转👉 📘前言 🍅 学习CANoe,官方的实例工程就是最好的学习模板,对于初学者,…...

【dp】最长递增子序列

文章目录 方法一&#xff1a;动态规划方法二&#xff1a;贪心 二分查找构造最长递增子序列 方法一&#xff1a;动态规划 dp[i]&#xff1a;末尾元素为arr[i]的最长子序列的长度 从0遍历到i - 1&#xff0c;若遍历到的元素小于当前值arr[i]&#xff0c;表示当前值arr[i]可以和…...

docker容器:Docker-Compose

目录 一、Docker-Compose 1、Docker-Compose使用场景 2、Docker-Compose简介 3、Docker-Compose安装部署 4、YML文件编写注意事项 5、Compose配置常用字段 6、 Docker Compose 常用命令 7、Docker Compose 文件结构 8、docker Compose撰写nginx 镜像 9、docker Compos…...

如何使用DNS实现融合CDN功能

将托管DNS解决方案与CDN配对可为您的网站提供额外的性能、可靠性和灵活性。 域名系统&#xff08;DNS&#xff09;是一种用于计算机、服务或连接到Internet或专用网络的任何资源的分层分布式命名系统&#xff0c;它将各种信息与分配给每个参与实体的域名相关联&#xff0c;它基…...

有关实现深拷贝的四种方法

深拷贝与浅拷贝: 在开始之前我们需要先了解一下什么是浅拷贝和深拷贝&#xff0c;其实深拷贝和浅拷贝都是针对的引用类型&#xff0c;JS中的变量类型分为值类型&#xff08;基本类型&#xff09;和引用类型&#xff1b;对值类型进行复制操作会对值进行一份拷贝&#xff0c;而对…...

Mysql 高可用部署实践

mysql主从是如何备份的? 在MySQL主从复制架构下&#xff0c;备份通常需要在主库和从库上分别进行。 主库备份&#xff1a; 在主库上进行备份时&#xff0c;可以使用mysqldump等命令生成SQL文件&#xff0c;并将其保存到本地或者远程服务器上。备份过程中需要注意以下几点&a…...

IEEE-TMI:张孝勇团队开发小鼠精细脑结构自动分割的深度学习算法

近日&#xff0c;复旦大学类脑智能科学与技术研究院青年研究员张孝勇课题组联合德国亥姆霍兹慕尼黑研究中心&#xff0c;在医学图像处理领域顶尖期刊《IEEE医学影像汇刊》(IEEE Transactions on Medical Imaging&#xff0c;TMI) 发表了题为《MouseGAN&#xff1a;用于小鼠大脑…...