猪猪虾 发表于 2020-3-23 12:30:24

23讲,输出少一位

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

def ten_to_2(num):
    global code
    if num//2!=1:   #除数为1时,跳出循环
       code.insert(1,num%2)
       return ten_to_2(num//2)

    #string=''.join(code)   #列表转换成字符串
    return code
   
code=             #最高位必然是1,放在最前面
number=int(input("enter an interger:"))
result=ten_to_2(number)
print(result)

qiuyouzhi 发表于 2020-3-23 12:35:43

???
倒数第4行,你是要取最高位吗?
那不应该是code吗?

jackz007 发表于 2020-3-23 12:41:02

def ten_to_2(num):
    if num : return ten_to_2(num // 2) + str(num % 2)
    else : return ''

print(ten_to_2(int(input('enter an interger : '))))

猪猪虾 发表于 2020-3-23 12:46:51

qiuyouzhi 发表于 2020-3-23 12:35
???
倒数第4行,你是要取最高位吗?
那不应该是code吗?

啊,因为一开始是定义,code=,就是code【0】=1

sunrise085 发表于 2020-3-23 12:52:02

在那个帖子中我已经回复你了。把if语句的条件改为if num//2!=0
在上个帖子中,我在四楼写的,你只修改了2和3,1和4你都没有修改。
我帮你修改了。
def ten_to_2(num):
      global code
      code.insert(0,num%2)
      if num//2!=0:   #除数为1时,跳出循环
                return ten_to_2(num//2)

    #string=''.join(code)   #列表转换成字符串
      return code
   
code=[]             #最高位必然是1,放在最前面.注意,最高位不一定是1
print(ten_to_2(0))      #输入为0的时候最高位就不是1了。
print(ten_to_2(12))

猪猪虾 发表于 2020-3-23 13:08:53

本帖最后由 猪猪虾 于 2020-3-23 13:09 编辑

sunrise085 发表于 2020-3-23 12:52
在那个帖子中我已经回复你了。把if语句的条件改为if num//2!=0
在上个帖子中,我在四楼写的,你只修改了 ...

是不是在写递归的时候,停止的条件都要比不用递归时候所使用的条件深一层,这个题如果不用递归的话停止条件应该是num//2!=1

猪猪虾 发表于 2020-3-23 13:12:07

jackz007 发表于 2020-3-23 12:41


蟹蟹

sunrise085 发表于 2020-3-23 13:28:12

猪猪虾 发表于 2020-3-23 13:08
是不是在写递归的时候,停止的条件都要比不用递归时候所使用的条件深一层,这个题如果不用递归的话停止 ...

不用递归,循环条件也是0.
def ten_to_2(num):
        code=[]
        if num==0:
                code.append(0)
        while num!=0:
                code.append(num%2)
                num=num//2
        return code
   
print(ten_to_2(0))
print(ten_to_2(12))
print(ten_to_2(5))
print(ten_to_2(10))
print(ten_to_2(1))

猪猪虾 发表于 2020-3-23 20:26:33

sunrise085 发表于 2020-3-23 13:28
不用递归,循环条件也是0.

是我之前思路就有问题,蟹蟹
页: [1]
查看完整版本: 23讲,输出少一位