鱼C论坛

 找回密码
 立即注册
查看: 2312|回复: 3

[已解决]这个十进制转换成二进制的函数貌似不对啊

[复制链接]
发表于 2019-7-14 10:03:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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))
这是课后参考答案中给的代码,可是运行不了啊,还是其他问题呢?
最佳答案
2019-7-14 13:32:07
本帖最后由 jackz007 于 2019-7-14 14:51 编辑
   dec = 62
   while dec:
       第1次循环:quo = 62 % 2 = 0 ,dec = 62 // 2 = 31 , temp . append(0) , temp = [0]
       第2次循环:quo = 31 % 2 = 1 ,dec = 31 // 2 = 15 , temp . append(1) , temp = [0 , 1]
       第3次循环:quo = 15 % 2 = 1 ,dec = 15 // 2 =  7 , temp . append(1) , temp = [0 , 1 , 1]
       第4次循环:quo =  7 % 2 = 1 ,dec =  7 // 2 =  3 , temp . append(1) , temp = [0 , 1 , 1 , 1]
       第5次循环:quo =  3 % 2 = 1 ,dec =  3 // 2 =  1 , temp . append(1) , temp = [0 , 1 , 1 , 1 , 1]
       第6次循环:quo =  1 % 2 = 1 ,dec =  1 // 2 =  0 , temp . append(1) , temp = [0 , 1 , 1 , 1 , 1 , 1]
       dec = 0 循环终止

   我们得到了由二进制位构成的列表 temp, 可是,这个列表的元素顺序却是从低位序开始,就是说,0 应该是最后而不应该是第一个元素。
   
   于是,就有了 while temp: 的循环,其用意是从列表尾部开始,逆序提取、消减列表元素并将之转化为字符,添加到字符串 result 中。这样 result 中字符的顺序就会和列表 temp 中的恰好相反,而这正是我们想要的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-14 11:28:41 | 显示全部楼层
      楼主写丢了一个括号
        result += str(temp.pop())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-14 13:13:27 | 显示全部楼层
jackz007 发表于 2019-7-14 11:28
楼主写丢了一个括号
        result += str(temp.pop())

是奥,这样确实能运行了,但是这个程序看不太懂是什么逻辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-14 13:32:07 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-7-14 14:51 编辑
   dec = 62
   while dec:
       第1次循环:quo = 62 % 2 = 0 ,dec = 62 // 2 = 31 , temp . append(0) , temp = [0]
       第2次循环:quo = 31 % 2 = 1 ,dec = 31 // 2 = 15 , temp . append(1) , temp = [0 , 1]
       第3次循环:quo = 15 % 2 = 1 ,dec = 15 // 2 =  7 , temp . append(1) , temp = [0 , 1 , 1]
       第4次循环:quo =  7 % 2 = 1 ,dec =  7 // 2 =  3 , temp . append(1) , temp = [0 , 1 , 1 , 1]
       第5次循环:quo =  3 % 2 = 1 ,dec =  3 // 2 =  1 , temp . append(1) , temp = [0 , 1 , 1 , 1 , 1]
       第6次循环:quo =  1 % 2 = 1 ,dec =  1 // 2 =  0 , temp . append(1) , temp = [0 , 1 , 1 , 1 , 1 , 1]
       dec = 0 循环终止

   我们得到了由二进制位构成的列表 temp, 可是,这个列表的元素顺序却是从低位序开始,就是说,0 应该是最后而不应该是第一个元素。
   
   于是,就有了 while temp: 的循环,其用意是从列表尾部开始,逆序提取、消减列表元素并将之转化为字符,添加到字符串 result 中。这样 result 中字符的顺序就会和列表 temp 中的恰好相反,而这正是我们想要的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 03:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表