int函数中的基数值有什么作用?
我看过官方文档 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:
我发现了两个规则:
- 单个字符串数字必须小于基数。
int()
会返回一个数字,这个数字等于(n)*(base^(n-1)) + (n-1)*(base^(n-2)) + ... + 1*(base^0)
还有没有其他隐藏的规则?这个基数是用来解决什么问题的?
4 个回答
int()
这个函数可以把一个以字符串形式表示的整数,转换成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
基数就是一个数字系统中不同基本元素或数字的数量。
比如,二进制(基数2)只有0和1,可以用电子设备表示为开和关。
十进制(基数10)就是我们熟悉的10个数字:0到9。
任何整数都可以用不同的基数来表示,但符号的组合会不同。例如,在二进制中,1111表示的是十进制中的15。
选择基数并进行字符串转换的能力,让软件能够接受不同基数的输入,并在合适的情况下进行基数转换。
base
的值告诉Python要把给定的字符串当作不同进制的数来理解。
比如,1011
在二进制(base 2)中表示的是11。所以,int('1011', 2)
会返回11
。
另一方面,1011
在三进制(base 3)中表示的是31。因此,int('1011', 3)
会返回31
。
十进制是以10为基数的,这就是为什么base
的默认值是10
。
选择一个数字进制的有趣之处在于,在这个系统中,没有比基数本身更高(或相等)的数字。这就是为什么在十进制系统中没有代表十的数字,而十六进制系统(base 16)用字母A
来表示十。这也是你在尝试用基数4来解释包含数字5
的数字时会出现错误的原因。
这个功能就是把一个字符串转换成指定进制的整数。根据说明,int()
可以把字符串转换成从2到36的任意进制。最小的进制是2,因为1进制只会有“0”这个符号,根本没法用来计数,没什么用。最大的进制是36,这个是随便选的,因为我们用的是“0123456789abcdefghijklmnopqrstuvwxyz”这些符号(10个数字加上26个字母)——如果继续增加符号,之后用什么就不太清楚了。
我们平常用的数学是10进制(用的符号是“0123456789”):
int("123", 10) # == 1*(10**2) + 2*(10**1) + 3*(10**0) == 123
二进制是2进制(用的符号是“01”):
int("101", 2) # == 1*(2**2) + 0*(2**1) + 1*(2**0) == 5
在2进制里,“3”是没有意义的;因为它只用“0”和“1”这两个符号,所以“3”是个无效符号(就像你试图预约1月34号的时间一样,根本不可能)。
int("333", 4) # == 3*(4**2) + 3*(4**1) + 3*(4**0)
# == 3*16 + 3*4 + 3*1
# == 48 + 12 + 3
# == 63