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