|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
def Dec2Bin(dec):
temp = []
result = ''
while dec:
quo = dec % 2
dec = dec // 2
temp.append(quo)
while temp:
result += str(temp.pop())
return result
print(Dec2Bin(62))
以上是鱼C论坛上的标准答案,其中黄色标示的这两句我一直想不明白,比如,while 后面返回的值是真,就一直循环,返回假,就跳出循环,那么上述这个例子什么时候会返回假呢?还有,为什么temp.pop()前面一定要加str呢,貌似如果不加,它返回的值的类型是整型,而不是字符串,这样会对程序造成怎样的影响?
本帖最后由 status 于 2017-7-30 22:39 编辑
先看这个代码,实例化传入4:
- def Dec2Bin(dec):
- temp = []
- result = ''
- while dec:
- quo = dec % 2
- print('quo',quo)
- dec = dec // 2
- print('dec',dec)
- temp.append(quo)
- print('temp',temp)
- while temp:
- result += str(temp.pop())
-
- return result
- print(Dec2Bin(4))
复制代码
输出结果为:
- quo 0
- dec 2
- temp [0]
- quo 0
- dec 1
- temp [0, 0]
- quo 1
- dec 0
- temp [0, 0, 1]
- 100
复制代码
第一个问题,while什么时候会为假而停止:
第一个while,条件是dec,传入4,所以dec等于4,然后一直被2除,取整除(//)依次得2,2,0。quo取余除依次得0,0,2并添加进temp,所以temp为[0,0,1],然后最后dec等于0时则为假退出,进入下面的程序。
第二个while,条件是temp,因为上面第一个循环得temp[0,0,1],列表的pop()方法是如果不传入索引值,默认则从最后开始删除列表元素并返回,所以,取三次去完为空时,while也为假了,结束循环。
第二个问题:为什么要加str()
str()是工厂函数,把把其对象转为字符串的,由于函数最开始给定result为空字符串,temp里是int整数型,字符串和整数相加是会报错的: - Traceback (most recent call last):
- File "C:\Users\Administrator\Desktop\1.py", line 16, in <module>
- print(Dec2Bin(4))
- File "C:\Users\Administrator\Desktop\1.py", line 13, in Dec2Bin
- result +=(temp.pop())
- TypeError: must be str, not int
复制代码
当然你可以说result可以定义为列表,像这样(片段代码): - result = []
- while temp:
- result.append(temp.pop())
复制代码
结果为:
但是。需要知道的是,二进制是怎么书写的,见到的都是010,101,001之类的,并不是这个结果里的[1,0,0],如果做大型操作,这个结果还要再次进行修饰才能表达二进制。所以使用字符串表示,输出时是最符合二进制写法的(没有其他符号,只有引号作为字符串身份,当直接一般输出时是不带引号的)。所以需要转成字符串来表示最终结果。
我不知道我说清楚没有,希望你能理解 
|
|