int函数中的基数值有什么作用?

14 投票
4 回答
24637 浏览
提问于 2025-04-18 03:33

我看过官方文档 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)

还有没有其他隐藏的规则?这个基数是用来解决什么问题的?

4 个回答

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
5

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

比如,二进制(基数2)只有0和1,可以用电子设备表示为开和关。

十进制(基数10)就是我们熟悉的10个数字:0到9。

任何整数都可以用不同的基数来表示,但符号的组合会不同。例如,在二进制中,1111表示的是十进制中的15。

选择基数并进行字符串转换的能力,让软件能够接受不同基数的输入,并在合适的情况下进行基数转换。

更多信息请查看 http://en.wikipedia.org/wiki/Radix

7

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的数字时会出现错误的原因。

19

这个功能就是把一个字符串转换成指定进制的整数。根据说明,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

撰写回答