Python 制作11位二进制回文数及其十进制数表

函数部分

二进制与十进制的转换函数

这里先编写了十进制数与二进制数的转换函数,用于之后编写函数和主程序的运用。

def ten_to_two(n):
    '''提供一个十进制数n,返回其二进制数'''
    total = []
    while n != 0:
        total.append(n % 2)
        n = n//2
    total.reverse()
    two_number = ''.join(str(i) for i in total)
    return int(two_number)

def two_to_ten(n):
    '''提供一个二进制数n,返回其十进制数'''
    result = 0
    n = list(str(n))
    n.reverse()
    for i in range(0,len(n)):
        result += int(n[i]) * (2**i)
    return result

产生所有11位二进制数的列表

为了寻找回文数字,先要生成所有11位二进制数的列表,同理使用函数实现,参数是二进制数的长度。

def make_list(number):
    '''提供一个长度,产生该长度所有二进制数的列表'''
    total = []
    first_n = two_to_ten(int('1' + '0' * (number - 1)))
    last_n = two_to_ten(int('1' + '0' * number))
    for i in range(first_n,last_n):
        total.append(ten_to_two(i))
    return total

寻找列表中的回文数字

这个函数将列表中所有的回文数字找出并返回回文数的列表。

def get_num(list_a):
    '''获得在列表中所有的回文数字'''
    result = []
    for i in list_a:
        list_b = list(str(i))[:]
        list_b.reverse()
        if list(str(i)) == list_b:
            result.append(i)
    return result

将回文二进制数及其对应十进制数写入字典

这个函数将回文二进制数及其对应的十进制数写入字典并返回。

def list_back(list_1):
    '''将二进制数列表对应的十进制数一一写入字典'''
    result = {}
    list_2 = [two_to_ten(i) for i in list_1]
    for i in range(0,len(list_2)):
        result[list_1[i]] = list_2[i]
    return result

主程序

函数调用

调用函数以获得11位回文二进制数及其对应十进制数的字典。

if __name__ == '__main__':
    all_number = make_list(11)  #11位二进制数的列表
    nums = get_num(all_number)  #回文二进制数列表
    result = list_back(nums)    #回文二进制数及其十进制数的字典

写入Excel表

使用第三方模块xlwt(下载方法见附录)将结果写入Excel表。

    workbook = xlwt.Workbook()  #新建Excel表
    sheet1 = workbook.add_sheet('11位二进制回文数及其对应十进制数')  #增加1个sheet
    # 写入标题及小标题
    sheet1.write(0,0,'11位二进制回文数及其对应十进制数')
    sheet1.write(1,0,'11位回文二进制数')
    sheet1.write(1,1,'对应十进制数')

    # 根据字典内容写入Excel表
    h = 2
    for k,v in result.items():
        sheet1.write(h,0,k)
        sheet1.write(h,1,v)
        h += 1
    #保存
    workbook.save('11位二进制回文数及其对应十进制数.xlsx')
    print('Done')

源码

这是程序的完整代码。

#  Python 3
#  coding = UTF-8
#  本程序基于简单转换十进制与二进制的方法编写
#  代码仅供参考,必有不足之处有待发现

import xlwt

def ten_to_two(n):
    '''提供一个十进制数n,返回其二进制数'''
    total = []
    while n != 0:
        total.append(n % 2)
        n = n//2
    total.reverse()
    two_number = ''.join(str(i) for i in total)
    return int(two_number)

def two_to_ten(n):
    '''提供一个二进制数n,返回其十进制数'''
    result = 0
    n = list(str(n))
    n.reverse()
    for i in range(0,len(n)):
        result += int(n[i]) * (2**i)
    return result

def make_list(number):
    '''提供一个长度,产生该长度所有二进制数的列表'''
    total = []
    first_n = two_to_ten(int('1' + '0' * (number - 1)))
    last_n = two_to_ten(int('1' + '0' * number))
    for i in range(first_n,last_n):
        total.append(ten_to_two(i))
    return total

def get_num(list_a):
    '''获得在列表中所有的回文数字'''
    result = []
    for i in list_a:
        list_b = list(str(i))[:]
        list_b.reverse()
        if list(str(i)) == list_b:
            result.append(i)
    return result

def list_back(list_1):
    '''将二进制数列表对应的十进制数一一写入字典'''
    result = {}
    list_2 = [two_to_ten(i) for i in list_1]
    for i in range(0,len(list_2)):
        result[list_1[i]] = list_2[i]
    return result

if __name__ == '__main__':
    all_number = make_list(11)  #11位二进制数的列表
    nums = get_num(all_number)  #回文二进制数列表
    result = list_back(nums)    #回文二进制数及其十进制数的字典

    
    workbook = xlwt.Workbook()  #新建Excel表
    sheet1 = workbook.add_sheet('11位二进制回文数及其对应十进制数')  #增加1个sheet
    # 写入标题及小标题
    sheet1.write(0,0,'11位二进制回文数及其对应十进制数')
    sheet1.write(1,0,'11位回文二进制数')
    sheet1.write(1,1,'对应十进制数')

    # 根据字典内容写入Excel表
    h = 2
    for k,v in result.items():
        sheet1.write(h,0,k)
        sheet1.write(h,1,v)
        h += 1
    #保存
    workbook.save('11位二进制回文数及其对应十进制数.xlsx')
    print('Done')

运行效果展示

源Excel表展示:
原来的Excel表
美化后:
美化后的Excel表

附录

下载xlwt的方法:
1.打开Windows PowerShell。
2.输入:
pip install --user xlwt
并按下回车键即可。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拖泥鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值