问题1: 在Github项目Python-100-Days/02.语言元素.md里发现这么一句话:int():将一个数值或字符串转换成整数,可以指定进制。 于是我想试一下转化进制的功能。输入如下代码:

int('4', base=2)
ValueError: invalid literal for int() with base 2: '4'
值错误:基数为2的int()的无效文字:‘4’ 

问题2:本来以为是'4'的问题,尝试了以下代码,发现又产生了新的错误。

int(4, base=2)
TypeError: int() can't convert non-string with explicit base
类型错误:int()不能用显示基数转换非字符串 

问题1分析:通过查阅资料:Python int() 函数 | 菜鸟教程 (runoob.com),才发现问题所在。我写int('4', base=2),本意是想把4转为二进制的数,但int()函数不是这么用的。如果你的base=2,那前面的那个参数必须是二进制,int()函数是把你指定的二进制数0100转为十进制数,而不是我想的那样把十进制数4转为指定的二进制。

int('0100', base=2)
4

问题2分析:查阅资料:Python中进制转换及int()函数_MrSate的博客-CSDN博客_python中的进制转换,里面说:

首先需要明确一个概念,即所谓的16进制,10进制,2进制,只是一种整型数值的表示方法表示方法,同一个数值可以有的16进制,10进制,2进制的表示,也可以使用16进制,10进制,2进制来创建同一个数值。并且一般在一定范围内,不同方式表示的同一个数字在内存中的存储结构也是相同的。

所以所谓的16进制转10进制,10进制转2进制,并不是对一个整型类的数值而讲的,整形类数值根本就没有进制转换的概念,原因就如同上一段中所描述的。
————————————————
版权声明:本文为CSDN博主「MrSate」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/MrSate/article/details/79383254

所以在问题2里我的问题就是,对整数数值做了进制转换,这种逻辑本身就是错误的,数值就是那个数值,各种进制只是它外在的表现形式。 

另外:如果我想把'4'转为二进制怎么办呢?那就首先用int()函数把字符串的'4'换为十进制的4,再用bin()函数转:

# 两行代码都是同样的输出
bin(int('4', 10))
bin(int('4')) #base默认为10,省略也可以
'0b100'

注意:这样写会报错,因为bin函数不允许传入str对象,这就是bin函数的功能了,与本文主要问题关系不大。

bin('4')
TypeError: 'str' object cannot be interpreted as an integerl
类型错误:'str'对象不能解释为整数
bin(4) # 这样写就是没有用到int的功能,简单的只用了bin函数的功能
'0b100'
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐