fazerse 发表于 2020-8-6 05:24:13

Python 课 课后作业第17讲, 卡住了

题目如下 2. 编写一个将十进制转换为二进制的函数,要求采用“除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))

===================================================================================
这里面第一个 循环里,   除二取整循环除 ,   除二取余填列表我都能看懂,自己写也是这么做的, 但是 第二个循环体里 是在做什么就表示没看懂, 是倒叙往外弹吗?
这里 我用 reverse   不可以吗、。   还有    开头处 ,    result=‘ ’   这个动作是做什么,有点 跟不上思路了。      

Twilight6 发表于 2020-8-6 07:26:01

本帖最后由 Twilight6 于 2020-8-6 07:32 编辑




但是 第二个循环体里 是在做什么就表示没看懂

因为求二取余法,是从最后的余数倒回去往前排序才是最终的二进制结果,但是你第一个循环都是按顺序直接加入列表,所以需要用 pop() 弹出列表中的最后一个元素

pop() 函数当你的函数中没有填写参数时候,默认弹出列表中的最后一个元素,此时将弹出的数字转化为字符串,最后拼接在字符串上返回的二进制最终结果

这里 我用 reverse   不可以吗?

可以,如果你用 reverse ,那么你 pop() 就需要改成 pop(0) ,或者不用 while temp 循环,reverse 完列表后,用 for 循环列表,或者还有个办法就直接 ''.join(temp)拼接在一起

用 reverse 后 pop 方法代码:
def Dec2Bin(dec):
    temp = []
    result = ''

    while dec:
      quo = dec % 2
      dec = dec // 2
      temp.append(quo)
    temp.reverse()
    while temp:
      result += str(temp.pop(0))

    return result

print(Dec2Bin(62))

reverse 后 for 循环列表方法:
def Dec2Bin(dec):
    temp = []
    result = ''

    while dec:
      quo = dec % 2
      dec = dec // 2
      temp.append(quo)
    temp.reverse()
    for i in temp:
      result += str(i)

    return result

print(Dec2Bin(62))

用 reverse 后 join 方法代码:

def Dec2Bin(dec):
    temp = []

    while dec:
      quo = dec % 2
      dec = dec // 2
      temp.append(str(quo))   # 因为 join 拼接的是字符串,所以要将与余数转化为整型

    temp.reverse()
    result = ''.join(temp)

    return result

print(Dec2Bin(62))

还有开头处 , result=‘ ’ 这个动作是做什么,有点 跟不上思路了。      

这个是初始化一个字符串空,为了后续做准备,也就是第二个 while 循环中可以去拼接

如果你上面用 join 就可以不用这个初始化,直接 join 后赋值即可


baige 发表于 2020-8-6 07:02:38

本帖最后由 baige 于 2020-8-6 07:13 编辑

pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
result = ''初始化为空字符串
第二个循环每次都把temp最后一个元素移除,加进result里,如上面的问题temp = , result = '', 开始执行循环 temp = , result = ‘1’,以此类推。

baige 发表于 2020-8-6 07:26:13

def Dec2Bin(dec):
    temp = []
    result = ''

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

    temp.reverse()
    for each in temp:
      result += str(each)
    return result

print(Dec2Bin(62))

凯0102 发表于 2020-8-11 21:15:15

result += str(each)这一步是什么意思呢?

fazerse 发表于 2020-8-13 22:35:05

凯0102 发表于 2020-8-11 21:15
result += str(each)这一步是什么意思呢?

把每个生成的余数添加到 result字符串里,   result=result+str(each)

前面 已声明,result是空字符串‘ ’, 所以第一轮是result   被赋值 ‘ ’+新生成的 每个余数。

如果不做 字符串 转型的话,最后打印结果会是之类的 一个列表
页: [1]
查看完整版本: Python 课 课后作业第17讲, 卡住了