二进制和十进制是两种用途广泛的数的形式,前者用于计算机,后者用于人类社会。二进制与十进制的转换稍显复杂,今天博主就使用Python编写了一个小程序来实现快捷且正确的转换,在此与大家分享一下,希望能帮助到python的初学者。


文章目录

  • 了解二进制与十进制数转换方法
  • 二进制转为十进制
  • 十进制转为二进制
  • 中阶研究
  • 源码
  • 程序分析
  • 转换函数
  • 主程序
  • 运行结果展示
  • 高阶研究
  • 详细信息
  • 附录


了解二进制与十进制数转换方法

首先我们要了解一下二进制数与十进制数之间的相互转换的方法。在这里博主给大家找了两张图,后面的转换函数将要用到这些转换方法。

二进制转为十进制

Python 生成二进制文件 python二进制文件转换_Python 生成二进制文件

十进制转为二进制

Python 生成二进制文件 python二进制文件转换_十进制_02

中阶研究

目标:将1-10000的十进制数转换成二进制数并写入Excel。

源码

程序代码:
注:第三方模块xlwt安装方法将在附录展示。

#导入函数
import xlwt

#二进制转十进制
def two_ten(two_n):
    total = 0
    two_n = list(str(two_n))#把数字转换成列表
    two_n.reverse()#反转列表
    times = 0#记录2的指数
    #遍历列表
    for i in two_n:
    	number = int(i)*(2**times)
    	total = total+int(number)#计算十进制数
    	times += 1#指数加1
    return total
#十进制转二进制
def ten_two(ten_n):
    total = []
    #开始相除
    while ten_n != 0:
        if ten_n %2 == 1:#余数是1
            ten_n = (ten_n-1)/2
            total.append(1)
        else:#余数是0
            total.append(0)
            ten_n = ten_n/2
    total.reverse()#反转列表
    if ten_n == 1:
        a_total = 1
    else:
	#把列表变成文本
        a_total = ''.join('%s'%number for number in total)
    return int(a_total)


if __name__ == '__main__':
    result = []
    for i in range(1,10001):
        two_n = ten_two(i)#将十进制的i转换成二进制
        if two_ten(two_n) == i:#验算
            result.append([two_n,i])#正确则将二进制数和对应的十进制数写入列表
        else:#错误
            raise Exception(f'{two_n},{i}')#引发错误

    wbk = xlwt.Workbook()#新建一个Excel表
    sheet = wbk.add_sheet('二进制与十进制的转换表')#新建一个sheet
    h = 0#行数变量
    for a in result:#遍历最终列表
	#写入二进制数与十进制数
        sheet.write(h,0,a[0])
        sheet.write(h,1,a[1])
        h += 1
    wbk.save('二进制与十进制表.xlsx')#保存

    print('Done.')

程序分析

转换函数

二进制与十进制相互转换的函数:

#二进制转十进制
def two_ten(two_n):
    total = 0
    two_n = list(str(two_n))#把数字转换成列表
    two_n.reverse()#反转列表
    times = 0#记录2的指数
    #遍历列表
    for i in two_n:
    	number = int(i)*(2**times)
    	total = total+int(number)#计算十进制数
    	times += 1#指数加1
    return total
#十进制转二进制
def ten_two(ten_n):
    total = []
    #开始相除
    while ten_n != 0:
        if ten_n %2 == 1:#余数是1
            ten_n = (ten_n-1)/2
            total.append(1)
        else:#余数是0
            total.append(0)
            ten_n = ten_n/2
    total.reverse()#反转列表
    if ten_n == 1:
        a_total = 1
    else:
	#把列表变成文本
        a_total = ''.join('%s'%number for number in total)
    return int(a_total)

主程序

循环1~10000十进制数,转换为二进制数并写入Excel:

if __name__ == '__main__':
    result = []
    for i in range(1,10001):
        two_n = ten_two(i)#将十进制的i转换成二进制
        if two_ten(two_n) == i:#验算
            result.append([two_n,i])#正确则将二进制数和对应的十进制数写入列表
        else:#错误
            raise Exception(f'{two_n},{i}')#引发错误

    wbk = xlwt.Workbook()#新建一个Excel表
    sheet = wbk.add_sheet('二进制与十进制的转换表')#新建一个sheet
    h = 0#行数变量
    for a in result:#遍历最终列表
	#写入二进制数与十进制数
        sheet.write(h,0,a[0])
        sheet.write(h,1,a[1])
        h += 1
    wbk.save('二进制与十进制表.xlsx')#保存

    print('Done.')

运行结果展示

初始表格:

Python 生成二进制文件 python二进制文件转换_二进制数_03


美化后:

Python 生成二进制文件 python二进制文件转换_二进制数_04

高阶研究

目标:找到所有11位的回文二进制数及其十进制数并写入Excel。