int()函数任性的一面

今天想到一件很有趣的事情,特来分享.下面是搜索到的关于int()函数的用法.

那么好戏就开场了,下面出道小小的测试题.

1 print("1.", int())
2 print("2.", int("0b11", 2))
3 print("3.", int("0011", 2))
4 print("4.", int("0011", 16))
5 print("5.", int("0b11", 16))
6 print("6.", int("0x11", 16))

看到这里是不是都快被绕晕了呢,没关系,结果会很有趣,当然,不会有报错.

我相信这里面一定有你不确定的答案,甚至是出问题的地方,下面就好好解析一下.

首先,int()函数有两个参数,第一个是字符串值,第二个是基数(2-36)

情况一:在字符串值中不带字母,那么,int()就会按照基数进行解析,当然,前提字符数值不能超过基数

1 print("1.", int("111", 2))      #7
2 print("2.", int("FFFF", 16))    #65535
3 print("3.", int("123", 2))      #ValueError: invalid literal for int() with base 2: '123'

情况二:在字符串值中带字母,样式特定为"0x", "0o", "0x"且基数分别为2,8,16,则按照2,8,16进制计算

1 print("1.", int("0b111", 2))        #7
2 print("2.", int("0o111", 8))        #73
3 print("3.", int("0x111", 16))       #273
4 print("4.", int("0x111", 15))       #ValueError: invalid literal for int() with base 15: '0x111'

情况三:在字符串值中带字母,字母序列号数小于进制数且不是特定样式,一律转化数字进行计算,例如:a=10, b=11, 以此类推前提,基数要大于字母所表示的最大数

1 print("1.", int("aaa", 11))     #1330
2 print("2.", int("0x11", 36))    #42805
3 print("3.", int("FF", 16))      #255
4 print("4.", int("FF", 15))      #ValueError: invalid literal for int() with base 15: 'FF'

 是不是连计算都不会了, 起初我也是这样的.

先说第一个.1330 = 10*pow(11, 2)+10*pow(11, 1)+10*pow(11, 0)

再说第二个:42805 = 0*pow(36, 3)+33*pow(36, 2)+1*pow(36, 1)+1*pow(36, 0)

相信的其它的小问题就难不倒各位了,接下来会有小伙伴疑问,为什么a=10,b=11,以此类推

话不多说一段代码就能搞定,最重要的是要记住,进制是2-36

 1 for x in range(0, 26):
 2     print(chr(97 + x), int(chr(97 + x), 36))
 3 
 4 
 5 #---------------结果----------------------
 6 a 10
 7 b 11
 8 c 12
 9 d 13
10 e 14
11 f 15
12 g 16
13 h 17
14 i 18
15 j 19
16 k 20
17 l 21
18 m 22
19 n 23
20 o 24
21 p 25
22 q 26
23 r 27
24 s 28
25 t 29
26 u 30
27 v 31
28 w 32
29 x 33
30 y 34
31 z 35

猜你喜欢

转载自www.cnblogs.com/liu-shi-xiong/p/8977668.html