方案一:

while True :
    try:
        m=int(input())
        num=[]#放二进制数
        while m!=1:
            a=m%2
            if a:
                num.append(a)
                m=(m-a)/2
            else:
                m=(m-a)/2
                #不能写continue,continue 用于跳过该次循环,不会更新m
        print(len(num)+1)    
    except:
        break

运行时间:18ms
占用内存:3360k
瞎琢磨了一下,新开了一个列表放1,列表里面如果放了很多1会不会有点占内存??
以及,把里面的重复的代码写成函数会不会好点点?

方案二:

def cal_data(num):
    i=0
    while num>0:
        if num%2==1:
            i+=1
            num=num//2#向下去取整,不是用/
        else:
            num=num//2
    return i 

while True :
    try:
        m=int(input())
        count=cal_data(m)
        print(count)
    except:
        break       

运行时间:23ms
占用内存:3448k

内存确实小了一丢丢,但是时间长了?又是充满问号的一天