python3 整数的10进制变换成其他进制

背景:

目的是:pandas数据框df中的列序号转换为excel中的列标题'A','AA','AAA'

百度找了一下,看了其中几个,都是前面个位'A',十位'AA'可以,到了百位'AAA'就出问题,所以自己琢磨了一下,给出以下的解决办法:

def index2name(num): # num = 26
    """# 余数是 末尾字母 ,除法结果是剩下的高位"""
    # 26字母列表
    ABC = [chr(i) for i in range(ord('A'), ord('Z') + 1)]
    # 个位的字母
    L = [ ABC[ num % 26 ] ]
    # 其他十位百位千位类推
    i = num // 26
    while i > 0:
        L.append( ABC[ (i-1) % 26 ] )
        i = (i-1) // 26
    # 最后把字母倒叙输出
    return "".join(L.reverse())

for i in range(702):
    print(i,index2name(i))

推广开来,只要函数增加一个参数用来输入你需要的进制列表(上面函数的ABC变量)那么就可以变成10进制变换N进制

def ten2N(num,abc="abc123"): # num = 1
    """
    num 是待变换的10进制整数
    abc 是进制的元素 是字符串 例如:abc = "abc123" 代表6进制
    """
    N = len(abc)
    L = [ abc[ num % N ] ]
    i = num // N
    while i > 0:
        L.append( abc[ (i-1) % N ] )
        i = (i-1) // N
    L.reverse()
    return "".join(L)

abc = "123abc"
for i in range(38):
    print(i,ten2N(i,abc))

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值