冬雪雪冬 发表于 2017-9-5 20:54:28

Python:每日一题 92(答题领鱼币)

我们知道1,2,4,8,16,32,64和128这8个数字利用加法可以得到1~255中的任意数字,如
21 = 1 + 4 + 16
192 = 64 + 128
编写一个函数输入1~255的数字,给出如何用1,2,4,8,16,32,64和128 的加法可以到这个数字。
def fun(num):
    ........

>>> print(fun(155))
1 + 2 + 8 + 16 + 128
>>> print(fun(3))
1 + 2
>>> print(fun(8))
8

我的解法:

**** Hidden Message *****

solomonxian 发表于 2017-9-5 21:20:17

def fun(num):
    return "+".join(i for i,j in zip(['1','2','4','8','16','32','64','128'],bin(num)[-1:1:-1]) if int(j))

bush牛 发表于 2017-9-5 21:24:56

def fun(num):
    mod =
    s = []
    for i in mod:
      if num >= i:
            num = num - i
            s.append(str(i))
    s.reverse() # 128+64+8+4+1
    return '+'.join(s)

chunchun2017 发表于 2017-9-5 22:39:30

def fun0(num):
   list0 = []
   for i in :
      if(num-i>=0):
         list0.append(i)
         num-=i
   print('+'.join(str(i) for i in list0))
N=int(input('请输入一个1-255之间的数字:'))
fun0(N)
=======
运行结果:
请输入一个1-255之间的数字:155
128+16+8+2+1

请输入一个1-255之间的数字:3
2+1

请输入一个1-255之间的数字:8
8

jerryxjr1220 发表于 2017-9-5 23:14:00

本帖最后由 jerryxjr1220 于 2017-9-5 23:22 编辑

再来个递归写法
fun = lambda n, exp='' : (exp+' + '+str(n)).strip(' + ') if n in else if i<n]
print(fun(15))
8 + 4 + 2 + 1


不过这种一行输出的装X写法,当数字比较大时就会比较慢,分多行写就没这个问题。

多行写法:
def fun(n, exp=''):
        if n in :
                return (exp+' + '+str(n)).strip(' + ')
        else:
                for i in :
                        if i<n:
                                return fun(n-i, exp+' + '+str(i))

ktjack2009 发表于 2017-9-5 23:51:09

把n转换成对应二进制数
def fun(n):
        if 1<=n<=255:
                b = str(bin(n))
                l = len(b)
                t = 1
                for i in range(l):
                        if b != '0':
                                if i != l-1:
                                        print(str(t)+ ' + ',end='')
                                else:
                                        print(str(t)+ ' = ',end='')
                        t *= 2
                print(n)
        else:
                print('请输入1~255的整数')

Greenland 发表于 2017-9-6 00:43:00

本帖最后由 Greenland 于 2017-9-6 00:50 编辑

def fun(num):
    if not isinstance(num, int) or num < 1:
      print('请输入一个正整数')
    renum = []
    lnum = list(reversed(bin(num)))
    base = 1
    for i in lnum[:-2]:
      if int(i):
            renum.append(str(base))
      base *= 2
    return ' + '.join(renum)

a512540 发表于 2017-9-6 01:57:33

def fun():
    num = int(input('请输入一个1-255之间的数字:'))
    numbers =
    list_numbers = []
    for i in numbers:
      if (num - i) >= 0:
            list_numbers.append(str(i))
            num -= i
    print('+'.join(list_numbers), end='')

fun()

sige 发表于 2017-9-6 09:21:31

写出这行代码的时候,我听到cup在呼救……我一定会学好函数的{:9_240:}print('神奇的8个数字:1,2,4,8,16,32,64,128')
print('---------------------')
number = int(input('请输入1-255之间的整数:'))
for a in range(2):
    for b in range(2):
      for c in range(2):
            for d in range(2):
                for e in range(2):
                  for f in range(2):
                        for g in range(2):
                            if (a + 2*b + 4*c + 8*d + 16*e + 32*f + 128*g) == number:
                              print('%d + 2*%d + 4*%d + 8*%d + 16*%d + 32*%d + 128*%d' % (a,b,c,d,e,f,g))

古堡主人。 发表于 2017-9-6 09:58:15

def fun(mynum):
    mystr=''
    i=0
    while(mynum!=0):
      if mynum & 1:
         mystr+=str(2**i)+'+'
      mynum=mynum>>1
      i+=1
    return mystr[:-1]

古堡主人。 发表于 2017-9-6 09:59:36

solomonxian 发表于 2017-9-5 21:20


想跟大神一样用很少的语句搞定需要看什么书

l1993520 发表于 2017-9-6 10:26:03

def fun(n):
    mod =
    num = []
    for x in mod:
      if n >= x:
            n -= x
            num.append(str(x))
    num.sort(key=lambda x:int(x))
    print(num)
    return "+".join(num)
fun(250)

ChrisYang 发表于 2017-9-6 11:55:00

from random import choice
def fun(num):
    lis=
    a=choice(lis)
    b=choice(lis)
    c=choice(lis)
    d=choice(lis)
    e=choice(lis)
    f=choice(lis)
    g=choice(lis)
    h=choice(lis)
    while True:
      if a+b==num:
            print(str(a)+"+"+str(b)+"="+str(num))
            
      elif a+b+c==num:
            print(str(a)+"+"+str(b)+"+"+str(c)+"="+str(num))
      elif a+b+c+d==num:
            print(str(a)+"+"+str(b)+"+"+str(c)+"+"+str(d)+"="+str(num))
      elif a+b+c+d+e==num:
            print(str(a)+"+"+str(b)+"+"+str(c)+"+"+str(d)+"+"+str(e)+"="+str(num))
      elif a+b+c+d+e+f==num:
            print(str(a)+"+"+str(b)+"+"+str(c)+"+"+str(d)+"+"+str(e)+"+"+str(f)+"="+str(num))
            
      elif a+b+c+d+e+f+g==num:
            print(str(a)+"+"+str(b)+"+"+str(c)+"+"+str(d)+"+"+str(e)+"+"+str(f)+"+"+str(g)+"="+str(num))
      elif a+b+c+d+e+f+g+h==num:
            print(str(a)+"+"+str(b)+"+"+str(c)+"+"+str(d)+"+"+str(e)+"+"+str(f)+"+"+str(g)+"+"+str(h)+"="+str(num))


num=str(input("请输入数字:"))
fun(num)

baicel21314 发表于 2017-9-6 12:33:44

let's me see see

baicel21314 发表于 2017-9-6 13:12:53

def fun(n):
    str1=""
    list1=
    for i in list1:
      if n-i>=0:
            n=n-i
            str1=str(i)+'+'+str1
            if n==0:
                break
    return str1[:-1]

suloman 发表于 2017-9-6 14:07:10

def fun(num):
    a=
    b=""
    for i in a:
      if num >= i:
            num = num -i
            b=str(i)+" + "+b
      if num == 0:
            break
    print(b[:-3])
   
fun(128)   

土沙拉 发表于 2017-9-6 16:41:18

写的很繁琐
def fun(num):
    x=
    y=[]
    t=-1
    while abs(t)!=len(x)+1:
      if num>=x:
         y.append(x)
         num=num-x
         t -= 1
      else:
         t -= 1

    return('+'.join(str(t) for t in y))
N=int(input('请输入一个255以内的整数:'))
print(N,'=',fun(N))

solomonxian 发表于 2017-9-6 18:12:05

古堡主人。 发表于 2017-9-6 09:59
想跟大神一样用很少的语句搞定需要看什么书

几个版主才是大神,我还是入门水平
我还没看过相关的书··· ···
如果是我这个水平的话,你只要做多几次练习
看看别人的写法,过不了多久就差不多了
加油吧{:5_106:}

HELLO2017 发表于 2017-9-6 20:35:02

def fun(num):
    buzhidao

pynliu 发表于 2017-9-7 10:53:09

{:5_91:}
页: [1] 2 3 4 5
查看完整版本: Python:每日一题 92(答题领鱼币)