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 ***** 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)) 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) 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: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)) 把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: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) 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() 写出这行代码的时候,我听到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)) def fun(mynum):
mystr=''
i=0
while(mynum!=0):
if mynum & 1:
mystr+=str(2**i)+'+'
mynum=mynum>>1
i+=1
return mystr[:-1] solomonxian 发表于 2017-9-5 21:20
想跟大神一样用很少的语句搞定需要看什么书 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)
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)
let's me see see 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] 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) 写的很繁琐
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))
古堡主人。 发表于 2017-9-6 09:59
想跟大神一样用很少的语句搞定需要看什么书
几个版主才是大神,我还是入门水平
我还没看过相关的书··· ···
如果是我这个水平的话,你只要做多几次练习
看看别人的写法,过不了多久就差不多了
加油吧{:5_106:} def fun(num):
buzhidao {:5_91:}