fjsboy 发表于 2022-10-4 22:41:22

编写一个将十进制转换为二进制的函数,要求采用“除2取余”的方式,结...

    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 发表于 2022-10-4 22:57:20

本帖最后由 jackz007 于 2022-10-4 23:27 编辑

def Dec2Bin(dec):
    r = ''                  # 需要循环累加得到结果,最终结果是字符串,所以,先把 r 初始化为空串
    while dec:                # 只要 dec 不为 0 就开始(或继续)循环
      r = str(dec % 2) + r# 把 dec 除以 2 的余数转换为字符累加到 r 的开头
      dec //= 2             # dec = dec // 2 (地板除)
    return r                  # 反馈字符串 r
print(Dec2Bin(512))
      至于十进制转二进制数的原理,为了形象直观,可以参考下面十进制转十进制代码的运行结果
def Dec2Dec(dec):
    c , r = 0 , ''
    while dec:
      print('第 %d 次循环:dec = %4d' % ((c + 1) , dec) , end = '')
      r = str(dec % 10) + r
      print('    dec %% 10 = %d , dec // 10 = %3d    r = %s' % ((dec % 10) , (dec // 10) , r))
      dec //= 10
      c += 1
    return r

print(Dec2Dec(3578))
       两个代码的计算方法完全对等,不同之处只是在于这个代码是 10 进制到十进制的转换,运行结果反映了转换原理
       下面是运行结果:
D:\\Python>python x.py
第 1 次循环:dec = 3578    dec % 10 = 8 , dec // 10 = 357    r = 8
第 2 次循环:dec =357    dec % 10 = 7 , dec // 10 =35    r = 78
第 3 次循环:dec =   35    dec % 10 = 5 , dec // 10 =   3    r = 578
第 4 次循环:dec =    3    dec % 10 = 3 , dec // 10 =   0    r = 3578
3578

D:\\Python>

ba21 发表于 2022-10-4 23:20:14


看图,思路多清晰,你只要把这图的思路转换成代码,在简单不过了吧。

fjsboy 发表于 2022-10-5 21:07:53

jackz007 发表于 2022-10-4 22:57
至于十进制转二进制数的原理,为了形象直观,可以参考下面十进制转十进制代码的运行结果

   ...

r 的空串默认数值就是0吗??

jackz007 发表于 2022-10-5 21:22:42

本帖最后由 jackz007 于 2022-10-5 21:23 编辑

fjsboy 发表于 2022-10-5 21:07
r 的空串默认数值就是0吗??

       字符串就是字符串,和整型数是两个完全不同东西,二者没有任何关系。

fjsboy 发表于 2022-10-5 21:56:00

jackz007 发表于 2022-10-5 21:22
字符串就是字符串,和整型数是两个完全不同东西,二者没有任何关系。

在请问下while temp:当temp =的时候还会循环下去吗

jackz007 发表于 2022-10-5 22:11:45

fjsboy 发表于 2022-10-5 21:56
在请问下while temp:当temp =的时候还会循环下去吗

       试一下就知道了
temp =
if temp:
    print('Bingo !')

fjsboy 发表于 2022-10-5 22:40:06

jackz007 发表于 2022-10-5 22:11
试一下就知道了

谢谢 谢谢懂了 懂了   真的太难了还是自己基础知识把握的不好。。
页: [1]
查看完整版本: 编写一个将十进制转换为二进制的函数,要求采用“除2取余”的方式,结...