当前位置: 首页 > 面试题库 >

Python精美的int(string,base)反函数

东方谦
2023-03-14
问题内容

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明确说明它是一个单独的分支。

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()可以考虑,但我没有打扰,因为它会增加一条线,简洁性更好。:)



 类似资料:
  • 问题内容: Python文档中函数圆括号内的方括号是什么意思? 例如: 帮助 ( [ 对象 ] ) 要么 int ( [ x [ , base ]] ) 问题答案: 方括号中的所有内容都是可选的,即您可以忽略它。如果方括号包含多个参数,则无法选择要忽略的参数,而必须全部指定或不指定。 这就是嵌套方括号派上用场的地方: 例如,在这里,您可以不带参数使用(通过省略整个外部括号)或(通过省略内部括号)或

  • 本文向大家介绍Python-int()函数,包括了Python-int()函数的使用技巧和注意事项,需要的朋友参考一下 Python函数将指定的值转换为整数。 该函数将返回一个由数字或字符串(例如x)构成的整数对象,如果未指定实数则返回0。 语法 值=可以转换为整数的数字或字符串 base =一个代表数字格式的数字。默认值-10 示例

  • Python 内置函数 描述 int() 函数用于将一个字符串或数字转换为整型。 语法 以下是 int() 方法的语法: class int(x, base=10) 参数 x -- 字符串或数字。 base -- 进制数,默认十进制。 返回值 返回整型数据。 实例 以下展示了使用 int() 方法的实例:>>>int() # 不传入参数时,得到结果0 0 >>> int(3) 3 >>> in

  • 我试图用Python中的多项式根来近似Julia集合。特别是,我想找出多项式q(z)=z^2-0.5的第n次迭代的根。换句话说,我想找到n次组成的q(q(q))的根。为了得到许多采样点,我需要计算次多项式的根 我尝试过使用numpy的内置多项式类(它有一个根函数)和sympy的函数解算器来解决这个问题。在第一种情况下,当我选择大于100的度数时,精度会损失。复杂的计算需要很长时间。以下是我的代码:

  • 描述 (Description) 此方法有两个变体,并围绕给定正则表达式的匹配拆分此字符串。 语法 (Syntax) 以下是此方法的语法 - public String[] split(String regex, int limit) 参数 (Parameters) 这是参数的细节 - regex - 分隔正则表达式。 limit - 结果阈值,表示要返回的字符串数。 返回值 (Return V

  • 描述 (Description) 此方法有两个变体,并返回一个新字符串,该字符串是此字符串的子字符串。 子字符串以指定索引处的字符开头,并且如果给出第二个参数,则延伸到此字符串的末尾或最多为endIndex - 1。 语法 (Syntax) 以下是此方法的语法 - public String substring(int beginIndex, int endIndex) 参数 (Paramete