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 ...
随机推荐
- Python2和Python3中的字符串编码问题解决
Python2和Python3在字符串编码上是有明显的区别. 在Python2中,字符串无法完全地支持国际字符集和Unicode编码.为了解决这种限制,Python2对Unicode数据使用了单独的字 ...
- .net随笔--不好归类的
1..cs .Designer.cs .resx三种文件 cs是类文件,不介绍了.Designer.cs是visual studio对cs类文件的自动生成代码的一种补充,在编辑器里用视图的方式对win ...
- vagrant快速搭建LNMP环境并且打包带走留着以后用
不多说废话,全文文字,照着输就没问题 vagrant下载 可以到VirtualBox的官网进行下载: https://www.virtualbox.org/wiki/Downloads vagran ...
- Spring_Spring与AOP
一.传统编程使用代理解决目标类增强问题 //主业务接口 public interface ISomeService { // 目标方法 void doFirst(); // 目标方法 void doS ...
- adb 获取Android手机信息命令(1)
@set version=1.7.2Normal @echo ============================================================= @echo I ...
- 【动态规划】洛谷P1006传纸条
题目描述: 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的 ...
- [PHP] PHP与Apache的模块配合说明
1.当PHP需要在Apache服务器下运行时 一般来说,它可以mod_php5模块的形式集成, 此时mod_php5模块的作用是接收Apache传递过来的PHP文件请求,并处理这些请求, 然后将处理后 ...
- 数据挖掘之聚类算法Apriori总结
项目中有时候需要用到对数据进行关联分析,比如分析一个小商店中顾客购买习惯. package com.data.algorithm; import com.google.common.base.Spli ...
- CTF---Web入门第四题 Forms
Forms分值:10 来源: Ph0enix 难度:易 参与人数:4945人 Get Flag:2776人 答题人数:2824人 解题通过率:98% 似乎有人觉得PIN码是不可破解的,让我们证明他是错 ...
- HDU 2296:Ring
Problem Description For the hope of a forever love, Steven is planning to send a ring to Jane with a ...