仙子追随者 发表于 2020-2-11 09:36:04

第17讲动动手,

本帖最后由 仙子追随者 于 2020-2-11 09:48 编辑

编写一个将十进制转换为二进制的函数,要求采用“除2取余”(补脑链接)的方式,结果与调用 bin() 一样返回字符串形式。

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))
完全看蒙了,请大神给讲解一下

SHRS23 发表于 2020-2-11 10:32:13

本帖最后由 SHRS23 于 2020-2-11 10:49 编辑

首先你要知道十进制转换为二进制用笔算怎么算,也就是题目里说的除2取余法

然后找个数(小一点10左右)用纸笔模拟一下程序就明白了

    while dec:
      quo = dec % 2
      dec = dec // 2
      temp.append(quo)

这里quo就是每次除2得到的余数,也是转换为二进制的每一位,把它加入到列表temp中
dec 是之前的dec(上一轮循环中的dec)除2的商,是被转换的十进制数“未除尽”的部分
存储到dec中一直除2,直到得0的时候说明二进制转换完了。

后面的pop()是把temp列表倒序输出,因为先存进列表的是二进制的低位(比如十进制中的个十百千,个位就是低位)
最后存进去的是高位,输出的时候倒序成高位在前低位在后


补充一张手算二进制的过程,横线上是普通竖式除法与短除法的对应关系
横线下是以62为例计算二进制

仙子追随者 发表于 2020-2-11 10:53:44

SHRS23 发表于 2020-2-11 10:32
首先你要知道十进制转换为二进制用笔算怎么算,也就是题目里说的除2取余法

然后找个数(小一点10左右) ...

看明白了,非常感谢大神
页: [1]
查看完整版本: 第17讲动动手,