MMM啊 发表于 2019-7-14 10:03:23

这个十进制转换成二进制的函数貌似不对啊

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))
这是课后参考答案中给的代码,可是运行不了啊,还是其他问题呢?

jackz007 发表于 2019-7-14 11:28:41

      楼主写丢了一个括号
      result += str(temp.pop())

MMM啊 发表于 2019-7-14 13:13:27

jackz007 发表于 2019-7-14 11:28
楼主写丢了一个括号
      result += str(temp.pop())

是奥,这样确实能运行了,但是这个程序看不太懂是什么逻辑{:10_277:}

jackz007 发表于 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 =
       第2次循环:quo = 31 % 2 = 1 ,dec = 31 // 2 = 15 , temp . append(1) , temp =
       第3次循环:quo = 15 % 2 = 1 ,dec = 15 // 2 =7 , temp . append(1) , temp =
       第4次循环:quo =7 % 2 = 1 ,dec =7 // 2 =3 , temp . append(1) , temp =
       第5次循环:quo =3 % 2 = 1 ,dec =3 // 2 =1 , temp . append(1) , temp =
       第6次循环:quo =1 % 2 = 1 ,dec =1 // 2 =0 , temp . append(1) , temp =
       dec = 0 循环终止

   我们得到了由二进制位构成的列表 temp, 可是,这个列表的元素顺序却是从低位序开始,就是说,0 应该是最后而不应该是第一个元素。
   
   于是,就有了 while temp: 的循环,其用意是从列表尾部开始,逆序提取、消减列表元素并将之转化为字符,添加到字符串 result 中。这样 result 中字符的顺序就会和列表 temp 中的恰好相反,而这正是我们想要的。
页: [1]
查看完整版本: 这个十进制转换成二进制的函数貌似不对啊