繁体   English   中英

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

[英]What does base value do in int function?

我已经阅读了官方文档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)

除了这个还有什么潜规则吗,这个基地是为了解决什么样的问题?

它完全按照它所说的进行 - 将字符串转换为给定数字基数中的整数。 根据文档, int()可以将任何基数的字符串从 2 转换到 36。在低端,基数 2 是最低有用的系统; 基数 1 只会有“0”作为符号,这对计数毫无用处。 在高端,36 是任意选择的,因为我们使用来自“0123456789abcdefghijklmnopqrstuvwxyz”(10 位数字 + 26 个字符)的符号 - 您可以继续使用更多符号,但不清楚在 z 之后使用什么。

“正常”数学是基数为 10(使用符号“0123456789”):

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

二进制是 base-2(使用符号“01”):

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

“3”在基数 2 中没有意义; 它只使用符号“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

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

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

小数以 10 为基数,这就是base的默认值为10

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

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

基数 2 有 0 和 1,可以在电子学中表示为开和关。

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

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

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

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

int()函数可以转换以 10 为基数(或radix )以外的整数作为字符串传递,其中第二个参数是字符串中数字的基数,结果将为以 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM