python经典练习100例(21~30)

目录

21. 猴子吃桃问题

22. 比赛抽签选对手

23.  打印图案

24. 求数列和

25. 求阶乘的和

26. 利用递归方法求阶乘

27. 反向输出字符串

28. 求年龄

29. 逆序输出数字

30. 判断回文数


21. 猴子吃桃问题

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

# coding: UTF-8

def func1():
    day = 10
    a = 1
    while day > 1:
        a = 2*(a + 1)
        day -= 1
    print a

def func2():
    x2 = 1
    for day in range(9,0,-1):
        x1 = (x2+1) * 2
        x2 = x1
    print x1

func1()
func2()

22. 比赛抽签选对手

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

# coding: UTF-8

# method1:
a = []
b = []

for i in [1, 2, 3]:
    for j in [1, 2, 3]:
        for k in [1, 2, 3]:
            if i <> j and j <>k and i<>k:
                if i<>1 and k != 1 and k<>3:
                    a.append(i)
                    a.append(j)
                    a.append(k)
print a

for p in a:
    b.append(chr(ord('w')+p))
print b

print 'a vs %s, b vs %s, c vs %s' %(b[0], b[1], b[2])


print "########################################"

#method2:
for i in range(ord('x'), ord('z') + 1):
    for j in range(ord('x'), ord('z') + 1):
        if i <> ord('x'):
            for k in range(ord('x'), ord('z') + 1):
                if k<>ord('x') and k<>ord('z') and i <> j and j<>k and i<>k:
                    print 'a vs %s, b vs %s, c vs %s' %(chr(i), chr(j), chr(k))

23.  打印图案

题目:打印出如下图案(菱形):
   *
  ***
 *****
*******
 *****
  ***
   *

# coding: UTF-8

from sys import stdout
# method1
for i in range(1, 5):
    j = 4-i
    print ' '*j, '*'*(2*i-1), ' '*j
'''
    for x in range(j):
        stdout.write(' ')
    for x in range(2*i - 1):
        stdout.write('*')
    print
'''
for a in range(3,0,-1):
    j = 4-a
    print ' '*j, '*'*(2*a-1), ' '*j

print "##################"

# method2:
# from sys import stdout
for i in range(4):
    for j in range(2-i+1):
        stdout.write(' ')
    for k in range(2*i + 1):
        stdout.write('*')
    print
for i in range(3):
    for j in range(i+1):
        stdout.write(' ')
    for k in range(4- 2*i + 1):
        stdout.write('*')
    print

24. 求数列和

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

# coding: UTF-8

#method1
a = [2]
b = [1]

for i in range(1,20):
    a.append(a[-1] + b[-1])
    b.append(a[i-1])

print a
print b

sum20 = 0.0
for i in range(20):
    sum20 +=  a[i]*1.0/b[i]

print sum20

print "#########################"
# method2 优化方法1的空间
a = [1, 2]
for i in range(2, 21):
    a.append(a[-1]+a[-2])
print a
sum20 = 0.0
for i in range(20):
    sum20 += a[i+1]*1.0/a[i]
print sum20

print "######################"

# method3
sum20 = 0.0
a = 2.0
b = 1.0
for i in range(2, 22):
    sum20 += a/b
    a, b = a+b, a

print a, b, sum20

25. 求阶乘的和

题目:求1+2!+3!+...+20!的和。

# coding: UTF-8

def jiech(n):
    if n==1:
        return 1
    num = 1
    for i in range(1, n+1):
        num *= i
    return num

def main():
    sum_jiech = 0
    for i in range(1, 21):
        sum_jiech += jiech(i)
    print sum_jiech

main()

26. 利用递归方法求阶乘

题目:利用递归方法求5!。

# coding: UTF-8

def func(n):
    if n == 1 or n==0:
        return 1
    return n*func(n-1)

print func(5)

27. 反向输出字符串

题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

# coding: UTF-8

def func(st):
    if len(st) == 1:
        return st
    print st[-1], st[0:-1]
    return st[-1] + func(st[0:-1])

str_input = raw_input("pls input a line: ")
print str_input
str_test = func(str_input)
print str_test

28. 求年龄

题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。
问第4个人岁数,他说比第3个人大2岁。
问第三个人,又说比第2人大两岁。
问第2个人,说比第一个人大两岁。
最后问第一个人,他说是10岁。请问第五个人多大?

# coding: UTF-8

#method1

a = 10
for i in range(4):
    a += 2
print a

#method2
def age(n):
    if n == 1:
        c = 10
    else:
        c = age(n-1) + 2
    return c
print age(5)

29. 逆序输出数字

题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

# coding: UTF-8

num = input("pls input a interger: ")

count = 1
while num/10 >0:
    print num % 10
    num = num/10
    count += 1
print num
print "该数是%d位数"%count

30. 判断回文数

题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

# coding: UTF-8

# method 1
num = input("plz input a 五位数: ")
ten_th = num/10000
th = num%10000/1000
ten = num%100/10
inter = num%10

if ten_th == inter and th == ten:
    print 'yes'
else:
    print 'no'

# method 2
l = raw_input("plz input a num:")
flag = 1
for i in range(len(l)/2):
    if l[i] <> l[len(l)-1-i]:
        flag = 0
        break
if flag == 1: print 'yes'
else: print 'no'

 

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值