Py学习  »  Python

Python中表达式int('0x10, 36)的值是。。。

Python小屋 • 6 年前 • 259 次点击  

在Python中,int()可用来把实数转换为整数,或者把数字字符串按指定进制转换为十进制数,详见文末的相关阅读。

然而,下面的代码又应该如何解释呢?

>>> int('0x10', 36)
42804

按照传统意义的解释,0x开头表示十六进制,而试图把十六进制数看作36进制数并转换为十进制数,上面的代码应该出错,但是却又没有出错。把'0x10'当作36进制,那么x又表示什么呢?执行下面的代码试试:

>>> import string
>>> for ch in string.ascii_lowercase:

    print(ch, int(ch, 36))

 
a 10
b 11
c 12
d 13
e 14
f 15
g 16
h 17
i 18
j 19
k 20
l 21
m 22
n 23
o 24
p 25
q 26
r 27
s 28
t 29
u 30
v 31
w 32
x 33
y 34
z 35

看到这里,似乎应该想到了一个问题,Python的int()函数的第二个参数为啥要限制为0或2-36呢?上面的代码应该可以解释这个问题。对于N进制的数字,每一位上的数字应该介于0和N-1之间

  • 二进制数的每一位只能为0或1。

  • 八进制数的每一位只能是0到7之间的数字。

  • 十进制数的每一位只能是0到9之间的数字。

  • 十六进制数的每一位只能是0到9之间的数字或a到f之间的字母,其中a代表10,b代表11,以此类推,f表示15。

那么有没有可能利用字母f后面的字母来代表数字呢?这个问题一般不会有人去想,但是如果确实要这样做的话,是可以的。那就是g代表16,h代表17,i代表18,以此类推,x代表33,y代表34,z代表35

>>> int('1m', 16)
Traceback (most recent call last):
  File "", line 1, in
    int('1m', 16)
ValueError: invalid literal for int() with base 16: '1m'

>>> int('1m', 26)
48
>>> int('0ij', 16)
Traceback (most recent call last):
  File "", line 1, in
    int('0ij', 16)
ValueError: invalid literal for int() with base 16: '0ij'

>>> int('0ij', 24)
451
>>> int('0ij', 25)
469
>>> 25*18 + 19
469

回到本文最初的问题, int('0x10', 36)的解释应该为:把字符串'0x10'看作36进制数并转换为十进制数,其中x代表数字33,并不表示十六进制数,那么 int('0x10', 36)等价于按权展开式0*36^3 + 33*36^2 + 1*36^1 + 0*36^0 = 42804。

>>> int('0x10', 36)
42804
>>> 33*36**2 + 1*36
42804

最后说明一下,对于int()函数,当第一个参数字符串隐含进制时,第二个参数必须为0,这一点仅适用于二进制、八进制、十六进制并且第二个参数指定的进制小于第一个参数字符串的隐含进制的情况,当第二个参数指定的进制大于第一个参数字符串中所有位字符表示的数字时,不存在这个限制

>>> int('0b11', 0)
3
>>> int('0b11', 2)
3

>>> int('0b11', 16)
2833

>>> 16*16*11+16+1
2833
>>> int('0b11', 11)
Traceback (most recent call last):
  File "", line 1, in
    int('0b11', 11)
ValueError: invalid literal for int() with base 11: '0b11'

>>> int('0b11', 12)
1597

>>> int('0o1', 25)
601



----------相关阅读----------

1900页Python系列PPT分享一:基础知识(106页)

1900页Python系列PPT分享二:Python序列(列表、元组、字典、集合)(154页)

1900页Python系列PPT分享三:选择与循环结构语法及案例(96页)

1900页Python系列PPT分享四:字符串与正则表达式(109页)

1900页Python系列PPT分享五:函数设计与应用(134页)

1900页Python系列PPT分享六:面向对象程序设计(86页)

1900页Python系列PPT分享七:文件操作(132页)

报告PPT(163页):基于Python语言的课程群建设探讨与实践

1000道Python题库系列分享四(40道)

1000道Python题库系列分享三(30道)

1000道Python题库系列分享二(48道)

1000道Python题库系列分享一(17道)



Python内置函数int()高级用法

妙用Python内置函数int()快速计算等比数列前n项和

如果把Python代码写成这样子就太难看了

转义字符'\r'在Python内置函数print()中的妙用

Python检查字符串重叠部分并进行拼接

Python面向对象程序设计中属性的作用与用法

Python元组与列表的相同点与区别



又一个学期结束了,送给在校大学生几句话

淡定!不要因为纳入了高考和二级考试甚至极个别小学课程就盲目夸大Python!

全国计算机等级考试二级Python考试大纲预测和分析

大家都在学Python,你和别人的差距在哪?

大学生们颤抖吧,中学生已经开始学Python了!

祝所有程序员1024节日快乐

学会提问,你就成功了一大半!

盘点那些让人上火的提问方式(论如何让交流更高效)



----------喜大普奔----------

1、董付国老师Python系列教材:

《Python程序设计基础》(2018年2月第6次印刷)

《Python程序设计(第2版)》(2018年2月第5次印刷)

《Python可以这样学》(2018年2月第5次印刷)(本书已被引入台湾发行繁体版)

《Python程序设计开发宝典》(2018年2月第3次印刷)

《中学生可以这样学Python》

董付国老师6本Python系列图书阅读指南

董付国老师6本Python系列教材被北大、复旦等近百所高校选作教材

热烈庆祝《Python可以这样学》在台湾发行繁体版


2、董老师免费视频地址: https://pan.baidu.com/s/1jJeAs8Q 密码: px59


3、董老师CSDN学院9套“Python可以这样学”收费视频课程汇总地址:https://edu.csdn.net/search?keywords=%E8%91%A3%E4%BB%98%E5%9B%BD&type=0



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/MTzb3n8fy1
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/7519
 
259 次点击