python学习--练习题14-20

练习14:

#题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。

 1 from functools import reduce
 2 a=int(input("几次重复加:"))
 3 b=int(input("想要重复的数字是:"))
 4 s=[]
 5 tn=0
 6 #sum=b*a*10+b*(a-1)*10+…………+b*1*10
 7 for count in range(0,a):
 8     tn=tn+b
 9     b=10*b
10     s.append(tn)
11     print(tn)
12 s = reduce(lambda x,y : x + y,s)
13 print ("计算和为:",s)

练习15

#题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。

from functools import reduce
def num():
    for s in range(2,1000):
        l = []
        for i in range(1,s):
            if s%i==0:
                l.append(i)
                i+=1
        def f(x, y):
            return x + y
        sum=reduce(f,l)
        if sum == s:
            print(s,list(l))
        s+=1
num()

练习16

#题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
from functools import reduce
l = []
def sum(a):
    for i in range(1,10):
        k=a/2
        l.append(k*2)
        i+=1
        a=k
sum(100)
def f(x,y):
    return x+y
print("在第10次落地时,共经过多少米{0}".format(float(reduce(f,l))+100))
print(l[8])
print("第10次反弹多高{0[8]}".format(l))

练习17

#题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

x2 = 1
for day in range(9, 0, -1):
    x1 = (x2 + 1) * 2
    x2 = x1
print (x1)
#程序分析:采取逆向思维的方法,从后往前推断。
'''
第10天=1
第9天=(第10天+1)*2
第8天=(第9天+1)*2
………………
第1天=(第2天+1)*2=总共有多少个桃子
'''

练习18

#两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。
# 已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。


teamA=["a","b","c"]
teamB=["x","y","z"]
s=((a,b) for a in teamA for b in teamB )
l=[("a","x"),("c","x"),("c","z")]
print(list(set(s)^set(l)))    #打散再组合

练习19

#打印出菱形

for n in range(1,8,2):
    空格数 = int((7 - n) / 2)
    星星数 = n
    print(空格数 * " ", 星星数 * "*", 空格数 * " ")
for m in range(5,0,-2):
    空格数 = int((7 - m) / 2)
    星星数 = m
    print(空格数 * " ", 星星数 * "*", 空格数 * " ")

练习20

#题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

from functools import reduce
l=[1,1]
除数序列=[]
for i in range(0,20):
    a=l[i+1]+l[i]
    l.append(a)
    b=l[i+1]
    除数序列.append(a/b)
    i+=1
print(除数序列)
求和 = reduce(lambda x,y : x + y,除数序列)
print ("计算和为:",求和)
'''
a = 2.0
b = 1.0
l = []
l.append(a / b)
for n in range(1,20):
    b,a = a,a + b
    l.append(a / b)
print reduce(lambda x,y: x + y,l)

'''

猜你喜欢

转载自www.cnblogs.com/xurui89/p/10534839.html
今日推荐