python3 第十九章 - 写一个10进制转任意进制的函数
我们先回忆下之前所学的进制转换的知识(详见:第十章),10进制转其它进制的方法是:
- 整数部分,除基取余,逆序排列
- 小数部分,乘基取整,顺序排列
- 负数,按绝对值处理
好,假设我们需要转化的数都是正整数,那这个函数可以这样写:
def Convert1(num:'十进制的数', base:'转换为这个进制的数')->'转化之后的数': # 0〜36的数的表示
index = ["", "", "", "", "", "", "", "", "", "", "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'] res = "" # 用来存储结果 while num >= base:
num1 = num // base # 商
num2 = num % base # 余数
num = num1
res = str(index[num2]) + res
else:
res = str(num) + res return res
添加调用函数的代码:
def Convert1(num:'十进制的数', base:'转换为这个进制的数')->'转化之后的数': # 0〜36的数的表示
index = ["", "", "", "", "", "", "", "", "", "", "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'] res = "" # 用来存储结果 while num >= base:
num1 = num // base # 商
num2 = num % base # 余数
num = num1
res = str(index[num2]) + res
else:
res = str(num) + res return res num = input('请输入一个十进制数,并按回车:') # 十进制数
num = int(num) base = input('请输入一个2 ~ 36的数字表示进制,并按回车:') # 转化为这个进制
base = int(base) print(Convert1(num, base))
运行代码,分别输入回车、回车,程序输出:
请输入一个十进制数,并按回车:100
请输入一个2 ~ 36的数字表示进制,并按回车:26
3M
通过在线验证工具:http://tool.oschina.net/hexconvert/ 验证正确。
现在,假设我们需要转化的数都是 0〜1 之间的小数:
def Convert2(num:'0到1之间的十进制的数', base:'转换为这个进制的数')->'转化之后的数': # 0〜36的数的表示
index = ["", "", "", "", "", "", "", "", "", "", "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'] res = "0." # 用来存储结果 while (num < 1) & (num >0):
num1 = num * base # 积
num2 = int(num1 // 1) # 取整 num = num1 - num2
res += str(index[num2]) if len(res) >10: # 只保留8位
break return res num = input('请输入一个十进制数,并按回车:') # 十进制数
num = float(num) base = input('请输入一个2 ~ 36的数字表示进制,并按回车:') # 转化为这个进制
base = int(base) print(Convert2(num, base))
思考:假如在while中不做位数判断会出现什么情况?
接下来我们只要把整数部分和小数部分的组合起来,就可以得到最终的函数:
def Convert1(num:'十进制的数', base:'转换为这个进制的数')->'转化之后的数': # 0〜36的数的表示
index = ["", "", "", "", "", "", "", "", "", "", "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'] res = "" # 用来存储结果 while num >= base:
num1 = num // base # 商
num2 = num % base # 余数
num = num1
res = str(index[num2]) + res
else:
res = str(num) + res return res def Convert2(num:'0到1之间的十进制的数', base:'转换为这个进制的数')->'转化之后的数': # 0〜36的数的表示
index = ["", "", "", "", "", "", "", "", "", "", "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'] res = "." # 用来存储结果 , 没合并时这里是 0. 想一想现在为什么要改成 . while (num < 1) & (num >0):
num1 = num * base # 积
num2 = int(num1 // 1) # 取整 num = num1 - num2
res += str(index[num2]) if len(res) >10: # 只保留8位
break return res def Convert(num, base):
"""
:param num:十进制数
:param base: 要转换为这个进制
:return: 返回转换后的数
"""
numConvert = abs(num) # 得到num的绝对值 num1 = int(numConvert // 1) # 得到整数部分
num2 = numConvert - num1 # 得到小数部分 if num2 == 0:
res = Convert1(num1, base)
else:
res = Convert1(num1, base) + Convert2(num2, base) return res # 调用函数
num = input('请输入一个十进制数,并按回车:') # 十进制数
num = float(num) base = input('请输入一个2 ~ 36的数字表示进制,并按回车:') # 转化为这个进制
base = int(base) print(Convert(num, base))
至此,函数就写好了,但是我们发现,这个函数并不完美,因为,我们必须保证输入的10进制数字是正确的,否则函数会报错,请思考:如何用前些章学过的知识改进函数,使用当用户输入不正确的格式时提示用户重新输入? 后面的章节里,我们再来讲如何处理这种情况。
python3 第十九章 - 写一个10进制转任意进制的函数的更多相关文章
- python3 第二十九章 - 内置函数之tuple相关
Python元组包含了以下内置函数 序号 方法及描述 实例 1 len(tuple)计算元组元素个数. >>> tuple1 = ('Google', 'Baidu', 'Taoba ...
- 【C++】《C++ Primer 》第十九章
第十九章 特殊工具与技术 一.控制内存分配 1. 重载new和delete new表达式的工作机理: string *sp = new string("a value"); //分 ...
- 第十九章——使用资源调控器管理资源(1)——使用SQLServer Management Studio 配置资源调控器
原文:第十九章--使用资源调控器管理资源(1)--使用SQLServer Management Studio 配置资源调控器 本系列包含: 1. 使用SQLServer Management Stud ...
- 第十九章——使用资源调控器管理资源(2)——使用T-SQL配置资源调控器
原文:第十九章--使用资源调控器管理资源(2)--使用T-SQL配置资源调控器 前言: 在前一章已经演示了如何使用SSMS来配置资源调控器.但是作为DBA,总有需要写脚本的时候,因为它可以重用及扩展. ...
- Gradle 1.12用户指南翻译——第四十九章. Build Dashboard 插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第二十九章. Checkstyle 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第三十九章. IDEA 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- 第十九章 Django的ORM映射机制
第十九章 Django的ORM映射机制 第一课 Django获取多个数据以及文件上传 1.获取多选的结果(checkbox,select/option)时: req.POST.getlist('fav ...
- Gradle 1.12翻译——第十九章. Gradle 守护进程
有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...
随机推荐
- Keepalived学习笔记
注LVS(Linux Virtual Server):Linux虚拟服务器,这里通过keepalived作为负载均衡器RS(Real Server):真实服务器VRRP(Virtual Router ...
- 【动态规划】洛谷P1006传纸条
题目描述: 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的 ...
- C++继承分析
面向对象的三大特性之一就是继承,继承运行我么重用基类中已经存在的内容,这样就简化了代码的编写工作.继承中有三种继承方式即:public protected private,这三种方式规定了不同的访问权 ...
- C#学习笔记-装饰模式
题目:给顾客打扮,但是需要满足正常的穿衣风格,例如先穿了衬衣再打领带,最后在穿鞋子,这种基本要求. 分析: 现在将具体的衣服裤子和鞋子都分别写在不同的类里面,这样方便以后添加新的衣服,这些全部都属于服 ...
- 迭代器中next()的用法
>>> g = (x ** 2 for x in range(10)) >>> next(g) 0 >>> next(g) 1 >>& ...
- 进入docker登录psql数据库对特定表进行操作
查看docker镜像 docker ps 运行镜像的脚本命令 docker exec -it 08 bash # 选择id为08开头的镜像运行bash 登录数据库 (1)直接登录 执行命令:psql ...
- bzoj:3085: 反质数加强版SAPGAP
Description 先解释一下SAPGAP=Super AntiPrime, Greatest AntiPrime(真不是网络流),于是你就应该知道本题是一个关于反质数(Antiprime)的问题 ...
- Matrix Chain Multiplication(表达式求值用栈操作)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1082 Matrix Chain Multiplication Time Limit: 2000/100 ...
- Linux使用Public Key方式远程登录
一.前言: ssh远程登录密码认证的方式有三种,password.Keyboard Interactive.Public Key 前面两种方式就是密码认证,含义都是一样大同小异.第三种是登录方式最安全 ...
- 前端自动化-----gulp详细入门(转)
简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以很愉快的编写代码 ...