python允许使用[2,36]范围内的任何基数,从字符串到整数的转换,使用:
int(string,base)
我正在寻找一个优雅的逆函数,该函数需要一个整数和一个底数并返回一个字符串
例如
>>> str_base(224,15) 'ee'
我有以下解决方案:
def digit_to_char(digit): if digit < 10: return chr(ord('0') + digit) else: return chr(ord('a') + digit - 10) def str_base(number,base): if number < 0: return '-' + str_base(-number,base) else: (d,m) = divmod(number,base) if d: return str_base(d,base) + digit_to_char(m) else: return digit_to_char(m)
注意:digit_to_char()适用于<= 169的基数,将“ z”后的ascii字符用作高于36的基数的数字
是否有python内置函数,库函数或更优雅的int(string,base)逆函数?
该线程具有一些示例实现。
实际上,我认为您的解决方案看起来不错,甚至可以递归使用,这在某种程度上令人愉悦。
我仍然会简化它以删除else,但这可能是个人风格的事情。我认为if foo: return这很明确,不需要else明确说明它是一个单独的分支。
else
if foo: return
def digit_to_char(digit): if digit < 10: return str(digit) return chr(ord('a') + digit - 10) def str_base(number,base): if number < 0: return '-' + str_base(-number, base) (d, m) = divmod(number, base) if d > 0: return str_base(d, base) + digit_to_char(m) return digit_to_char(m)
我简化了0-9的情况digit_to_char(),我认为str()比chr(ord())构造更清晰。为了最大限度地增加与>= 10案件的对称性,ord()可以考虑,但我没有打扰,因为它会增加一条线,简洁性更好。:)
digit_to_char()
str()
chr(ord())
>= 10
ord()