函数部分
二进制与十进制的转换函数
这里先编写了十进制数与二进制数的转换函数,用于之后编写函数和主程序的运用。
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表展示:
美化后:
附录
下载xlwt的方法:
1.打开Windows PowerShell。
2.输入:
pip install --user xlwt
并按下回车键即可。