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

Python 华为机考真题【用连续自然数之和来表达整数】分值【Q1-100】 用连续自然数之和来表达整数:一个整数可以由连续的自然数之和来表示。给定一个整数,计算该整数有几种连续自然数之和的表达式,且打印出每种表达式。 阅读详情

前言

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

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 % 2
        s = str(r) + s
        n //= 2
    return s

if __name__ == "__main__":
    import doctest
    doctest.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 % base
        s = codes[r] + s
        num //= base
    return s if s != "" else "0"

if __name__ == "__main__":
    import doctest
    doctest.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 + 0x61
        s += chr(code)
    return s

if __name__ == "__main__":
    import doctest
    doctest.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 += ch
            continue
        base = 0x41 if ch.isupper() else 0x61
        code = (ord(ch) - 0x61 + 3) % 26 + 0x61
        s += 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 random

def compare(computer, player):
    choices = ["scissor", "stone", "paper"]
    infos = ["it is a draw.", "computer win!", "player win!"]    
    wid = 0
    if computer == (player + 1) % 3:
        wid = 1
    elif computer != player:
        wid = 2
    return 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: break
    
    print(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, 1
    for i in range(1, n+1):
        item = sign / (2*i - 1)
        s += item        
        sign *= -1     #正负交替
    return 4 * s

if __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(p−a)(p−b)∗(p−c) ​,其中p为周长的一半。

代码实现

import math

def calc_area(n):
    angle = 2*math.pi / n
    x1, y1 = 1, 0
    x2, 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 = 20000
    s = calc_area(n)
    print(n * s)

if __name__ == "__main__":
    run()

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

扩展练习:

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

蒙特卡罗投针实验求π

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

模拟投针实验:

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

  2. 随机投针

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

代码实现

import random, math

def calc_area(n):
    count = 0
    for i in range(n):
        x = random.random()
        y = random.random()
        d = math.sqrt(x*x + y*y)            #到圆心的距离
        if d < 1:                           #落入圆内,则计数加1
            count += 1
    return count * 4 / n

def run():
    n = 1000000
    s = calc_area(n)
    print(s)

if __name__ == "__main__":
    run()

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

尾语 💝

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

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

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

—— 心灵鸡汤

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

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

python与恺撒密码的实现 恺撒密码是古罗马恺撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 原文:A B C D E F G H... 阅读详情

相关推荐

华为-字符串加密

字符串加密(java实现) 问题 题目描述: 有一种技巧可以对数据进行加密,它使用一个单词作为它的密匙。下面是它的工作原理:首先,选择一个单词作为密匙,如TRAILBLAZERS。如果单词中包含有重复的字母,只保留第1个,其余几个丢弃。现在,修改过的那个单词属于字母表的下面,如下所示: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z T R A I L B Z E S C D F G H J K M N O P Q U V W X Y 上面其他用字母

u012449521的博客 396

利用π/4=1-1/3+1/5-1/7+1/9+……,编程计算π近似值,直到最后一项的绝对值小于10的负5次方为止,输出π的值并统计累加的项数。

利用π/4=1-1/3+1/5-1/7+1/9+……,编程计算π近似值,直到最后一项的绝对值小于10的负5次方为止,输出π的值并统计累加的项数。

Li20221120的博客 4603

python3学习之路 -- 7)初级练习3 - 进制转化

#实操案例3 -- 任务1 -- 将指定的十进制数转为二进制、8进制、十六进制 def fun(): num = int(input('请输入一个十进制的整数:')) #将str类型转为int类型 print(num,'的二进制数为:',bin(num)) #使用了个数可变的位置参数 print(str(num)+'的二进制数为:'+bin(num)) #使用“+”作为连接符,“+”的左右均为str print('%s的二进制数为:%s' % (num,bin(num).

lurongrong520_的博客 349

64进制和10进制互相转换,可以用来做数据加密

var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/'.split(''); var radix = chars.length; function conversion(number) { ret = []; do { mod = number % radix; number = (number - mod) / radix; ret.un...

oNanShengZhenZi的博客 805

逆向解析M团外卖mtgsig与waimai_sign加密参数实战指南⊙ω⊙

本文详细解析了M团外卖App中mtgsig与waimai_sign两个核心加密参数的逆向分析与生成方法。通过抓包定位、静态逆向与Frida动态调试,拆解了waimai_sign的RSA签名逻辑与mtgsig的复杂参数组装加密流程,并提供了Python模拟实现的框架与调试心得,为安全研究及合规数据分析提供实战指南。

weixin_29327525的博客 1285

避开新手第一个坑:手把手教你正确安装Perforce服务器与客户端(P4d/P4V)

本文详细指导如何正确安装和配置Perforce服务器与客户端(P4d/P4V),避免新手常见的安装顺序错误。从环境准备到分步安装,再到常见问题排查和性能优化,帮助开发者快速搭建稳定的版本控制环境,提升团队协作效率。

weixin_26804345的博客 671

文本和二进制转换并加密

<br />写了个文本和二进制互相转换的程序,可以进行简单加密,算法可以说是投机取巧,用了特简单的方法就把汉字和二进制互相转换,程序不大一点,很简单的。<br />例如转换 :<br />仍然爱你,我会试着忘记你<br />11000111 11010011 11000111 10111010 10101111 10101101 11000011 11100010 10100010 10101011 11001101 11010001 10111010 11100000 11001001 11010011

mxf999的专栏 1258

用Python搞定超效率SBM模型:从数据清洗到结果可视化全流程指南

本文详细介绍了如何使用Python实现超效率SBM模型,从数据清洗到结果可视化的全流程指南。超效率SBM模型作为传统DEA的进化版本,能有效处理非期望产出(如环境污染)并对高效单元进行精细排序。通过实战案例和代码示例,帮助读者掌握这一先进模型的Python实现技巧,提升效率评估的准确性和可视化效果。

silver的专栏 654

python 信息加密

在传递信息的过程中,为了加密,有时需要按一定规则将文本转换成密文发送出去。有一种加密规则是这样的: 对于字母字符,将其转换成其后的第3个字母。例如:A→D,a→d,X→A,x→a; 对于非字母字符,保持不变。 现在,请你根据输入的一行字符,输出其对应的密码。 样例输入 I(2016)love(08)China(15)! 样例输出 L(2016)oryh(08)Fklqd(15)! str = 'I(2016)love(08)China(15)!' res = '' temp = '' for i i

有勇气的牛排博客 2203

【QT开发教程】Qt中的跨平台文件系统操作

文件系统操作是应用程序开发中经常需要处理的任务。Qt提供了一套跨平台的文件系统操作API,使开发者能够在不同操作系统上无缝地进行文件和目录操作。本文将介绍Qt中的跨平台文件系统操作,包括基本概念、常用类和方法以及实际示例。

科技改变人类,技术成就未来 983

Flow Matching03-01:微分方程【微分方程(描述变化规律的方程):包含未知函数和它的导数的方程】【公式解(精确)、数值解(逼近)】

好的,我将从数学角度详细解释Flow Matching,从高中生能理解的基础知识开始,逐步深入到高级概念。

u013250861的博客 221

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

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

python学习者的博客 1575

120、ISP 驱动架构解析:从 V4L2 请求到 ISP 硬件的配置下发流程

本文以实际案例解析ISP驱动架构的V4L2到硬件配置下发流程。作者通过一个因内存共享导致画面闪烁的bug案例,详细剖析了用户空间参数通过V4L2结构体传递、驱动层拆包与硬件寄存器映射、时序同步机制等关键环节。特别强调深拷贝、dirty flag增量更新、shadow register等实现要点,并给出多路并发隔离、寄存器写入失败等典型问题的排查方法。文章建议开发者深入理解参数到寄存器的转换过程,推荐通过debugfs实时监控寄存器状态,避免过度依赖自动调试工具。全文以实践为导向,对ISP驱动开发具有直接指导

sundong_81的博客 161

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

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章。

weixin_62853513的博客 614

Veritas NetBackup8.1.1客户端安装

1.在客户机打开安装包运行Browser 2.选择NetBackup Client Software Installation 3.下一步 4.接受,下一步 5.我选择自定义安装,下一步 6.我选择安装到D盘 7.默认下一步 8.使用域管理账户 9.输入服务器安装了服务端的那一台名称 10.输入服务端生成的令牌,选择“I recognize the fingerprint for this host.Proceed with the certificate deploymen”下一步

万物皆可学 2万+

进阶06:C#连接TwinCAT 3使用ADS通讯

本文介绍了使用C#通过ADS协议与倍福TwinCAT3 PLC通讯的实现方法。主要内容包括:1)在两台电脑上安装TwinCAT3开发环境并建立网络连接;2)在TwinCAT中定义变量和结构体;3)使用C# Winform开发界面,通过TwinCAT.Ads.dll实现读写功能;4)实现主动读取和通知两种数据获取方式。详细说明了连接建立、变量定义、读写操作及事件通知的实现代码。该方案实现了对PLC寄存器数据的实时监控和操作,为工业控制系统的开发提供了参考。

weixin_38637405的博客 3690

4道python基础案例题(进制转换、字符串加密的实现、猜拳游戏、多种方法计算π)_python 螤 4=1-1 3+1 5

运行上述测试,可以看到0的二进制串没通过测试,原因是s默认为空串,因而传入0时得到的将是空串。我们可以在返回值时,使用三元运算符处理即可,return s if s!

2401_86372850的博客 352

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

简单搞定python进制转换

python 进制转换及计算原理

forever12li的博客 7692

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

python加密算法

首先加密算法要引入hashlib模块,在python中用import hashlib引入 接下来如果要对一串数字进行加密操作如下 这里用a变量来接接收,md5里的数字就是要加密的内容 然后再内容后面加上.encode(“utf-8”)因为hashlib是对二进制进行加密的,如果直接对字符串加密的话, 会报错的。因此需要通过encode将字符串转码成二进制格式。 然后用hexdigest()进行加密输出即可。这里可以看到上面输出a的结果是存储在堆里的一个项目的地址,而下面输出的是数字加密后的md5码。 m

clarelove777的博客 2177

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

算法题_单词加密_python实现

/单词加密。输入一个字符串和一个非负整数k,对字符串中的每一个字母, 用字母表中其后的第k个字母代替,不够k个时再从字母a循环计数。 例如k=3是,a用d代替,A用D代替,x用a代替,y用b代替,保持大小写不变。 字符串中的非字母字符不变。字符串的长度不超过100。 输入:一个字符串(无空格)和非负整数k,之间用空格分隔 输出:加密的字符串。/ # todo 测试输入 str_in = 'asAf$ccz' str_num = int('3') # todo 解答 import string lowe

wcl1800的博客 1953

【python】用python进行进制转换(10进制、2进制、16进制)

博客由来写在前面:由于计组老师要求我们课后查一下进制转换,因为底层的都是01二进制进行编码的,故而想到用python进行传统的进制转换手推理解,配上python本身的函数进行答案对比,故有此篇博客。每一个进制之间转换包含俩种算法,一种是直接调用python的进制转换包,一种是用人工计算进制转换的思路写的(其中2进制转为16进制,是采用2进制局部转为10进制再转为16进制的方法)

Bessie_Lee 1万+

python字符串简单加密算法_Python练习实例89 | 关于数字加密算法

原题目是这样的:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。轻骑,一骑绝尘!.jpg多余的话就不多说了,我们直接看下面的代码吧!if __name__ == '__main__': # 定义程序入口num = input("请输入需加密的数字:") # 输入需要加...

weixin_39564187的博客 1304

Python 格式化输出 —— r 与 s 的区别( repr 与 str )

Python 格式化输出 —— r 与 s 的区别( repr 与 str )

hftytf的博客 1546

Python练习05——上机4,进制转换

1.念数字,输入一个数,输出每个数对应的拼音 # 数字拼音 num = ['0','1','2','3','4','5','6','7','8','9','-'] pin = ['ling','yi','er','san','si','wu','liu','qi','ba','jiu','fu'] num1 = input('请输入一个数字:') pin1 = '' for i in num1: for x in range(11): if num[x] == i :

weixin_55187886的博客 1982

探索一下进制转换 (Python 实现源码)

Python 实现进制转换 一、导言 导语: 在计算机进行数据交换时,常常会有一个进制转换的过程,我们知道计算机只认0 和 1.在内存系统中,基本基于二进制进行运算的,但是有时候数据过于庞大,为了方便存储管理,计算机会使用十六进制存储数据,但是怎么实现数据转换呢? 我们人类由十根手指头,所以自然就使用十进制啦,每当我们数数字到10之后,于是就重0 开始继续数,所以逢十进一就这么来了。 对于其它...

欢迎来到Gorit的博客 4388

用python实现进制转换

今天给大家带来三个很简单的程序:用python实现进制转换 (1)输入一个十进制数,换算成二进制和十六进制并输出 list1=['A','B','C','D','E','F'] while True: x=int(input('请输入一个十进制数:')) y=x p='' q='' while x>0: m=x%2 x//=2 p=str(m)+p print('该数的二进制为:',p) wh

qq_51242351的博客 4633
上一篇: 【python】制作一个简单的界面,有手就行的界面~
下一篇: 【Python入门】NumPy 入门知识介绍,看这一篇足矣
魔王不会哭
博客等级 码龄5年 6003粉丝 394原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值