base函数在int函数中做了什么?

时间:2014-04-21 02:47:43

标签: python

我已阅读官方文档https://docs.python.org/2/library/functions.html#int,但仍然感到困惑。

我在终端上尝试了一些命令,我​​找到了一些规则,但仍然不太清楚。希望有更多相关知识的人可以进一步解释。

以下是我的例子和发现:

int('0', base=1)
ValueError: int() base must be >= 2 and <=36

int('3', base=2)
ValueError: invalid literal for int() with base 2:

int('3', base=4)
3

int('33', base=4)
15

int('333', base=4)
63

int('353', base=4)
ValueError: invalid literal for int() with base 4:

我在这里找到两个规则:

  1. 单个字符串数字必须小于基数。
  2. int()将返回一个等于(n)*(base^(n-1)) + (n-1)*(base^(n-2)) + ... + 1*(base^0)
  3. 的数字

    是否还有其他隐藏规则,以及基础设计要解决的问题是什么?

4 个答案:

答案 0 :(得分:5)

base值告诉python将给定的字符串解释为不同基数的值。

例如,基数2中的1011为11.因此,int('1011', 2)会返回11
另一方面,基数3中的1011为31.因此,int('1011', 3)返回31

小数位于基数10,这就是base的默认值为10的原因。

选择数字基础的一个有趣的副作用是,该系统中不存在高于(或等于)基础本身的数字。这就是为什么我们在十进制系统中没有10的数字,而十六进制系统(基数16)使用数字A为10。这就是为什么要求数字5的数字在基数4中解释时出错的原因。

答案 1 :(得分:4)

它完全符合它所说的 - 在给定的数字基础中将字符串转换为整数。根据文档,int()可以将任何基数中的字符串从2转换为36.在低端,base 2是最低的有用系统;基数1只有&#34; 0&#34;作为一个符号,这对于计算来说是无用的。在高端,36是任意选择的,因为我们使用来自&#34; 0123456789abcdefghijklmnopqrstuvwxyz&#34; (10位+ 26个字符) - 你可以继续使用更多的符号,但是在z之后使用它并不是很清楚。

&#34;正常&#34; math是base-10(使用符号&#34; 0123456789&#34;):

int("123", 10)  # == 1*(10**2) + 2*(10**1) + 3*(10**0) == 123

Binary是base-2(使用符号&#34; 01&#34;):

int("101", 2)   # == 1*(2**2) + 0*(2**1) + 1*(2**0) == 5

&#34; 3&#34;在基地2没有任何意义;它只使用符号&#34; 0&#34;和&#34; 1&#34;,&#34; 3&#34;是一个无效的符号(它有点像试图在1月34日预约)。

int("333", 4)   # == 3*(4**2) + 3*(4**1) + 3*(4**0)
                # == 3*16 + 3*4 + 3*1
                # == 48 + 12 + 3
                # == 63

答案 2 :(得分:3)

int()函数可以将基数(或radix)中的整数转换为10作为字符串传递,其中第二个参数是字符串中数字的基数,结果将是基数为10的整数。例如,以下所有字符串值将产生整数42

int('42')        # by default, it's base 10
=> 42
int('42', 10)    # same as above
=> 42
int('101010', 2) # base 2 (binary)
=> 42
int('2A', 16)    # base 16 (hexadecimal)
=> 42

答案 3 :(得分:3)

基数是数字系统中不同基本元素或数字的数量。

Base 2有0和1,可以在电子设备中表示为on和off。

Base 10有熟悉的10位0..9

任何整数都可以在任何基数中表示,但符号串将不同。例如,在基数10中基数2 1111 = 15

选择基本转换为字符串或从字符串转换的功能允许软件接受不同基数的输入并在适当时翻译碱基。

另见http://en.wikipedia.org/wiki/Radix