基于Python3.7入门经典100例(21-30)

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

分析:反向推断。猴子有一个桃子,他偷了一个桃子,觉得不够又偷了与手上等量的桃子,一共偷了9天

n = 1
for i in range(9):
    n = (n + 1) * 2
print('一共有', n, '个桃子')

输出结果:

一共有 1534 个桃子

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

分析:利用集合特性,集合是一个无序的不重复的list。

a = set(['y', 'z']) #a不和x比
b = set(['x', 'y', 'z']) #b可以和任何一个人比
c = set(['y']) #c不和x,z比

for i in a:
    for j in b:
        for k in c:
            #i、j、k组成一个长度为3的set,即每个人都有一个对手且不重复
            if len(set([i, j, k])) == 3:
                print('a-->%s, b-->%s, c-->%s' % (i, j, k))

输出结果:

a-->z, b-->x, c-->y

23、打印出如下图案(菱形):

   *
  ***
 *****
*******
 *****
  ***
   *

分析:找规律。

for i in range(-4, 5):
    if i < 0:
        j = -i
    else:
        j = i

    print(' '*j + '*'*(9-2*j))

输出结果:

    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

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

a = 2
b = 1
s = 0

for i in range(0, 20):
    s += a / b
    a, b = a+b, a
print(s)

输出结果:

32.66026079864164

25、求1+2!+3!+…+20!的和。

n = 0
s = 0
t = 1
for n in range(1, 21):
    t *= n
    s += t
print('1! + 2! + 3! + ... + 20! =', s)

输出结果:

1! + 2! + 3! + ... + 20! = 2561327494111820313

26、利用递归方法求5!。

def f(n):
    if n==1:
        return 1
    else:
        return n * f(n-1)

print(f(5))

输出结果:

120

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

def rec(string):
    if len(string)!=1:
        rec(string[1:])
    print(string[0],end='')

rec(input('输入一个字符串:'))

输入abcde,输出结果:

输入一个字符串:abcde
edcba

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

分析:递归求等差数列。

def age(n):
    if n==1:
        return 10
    return 2 + age(n-1)

print(age(5))

输出结果:

18

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

n = int(input('输入一个正整数:'))
n = str(n) #转换成字符,字符可用用len()函数求长度
print('%d位数'%len(n))
print(n[::-1])

输入12345,输出结果:

输入一个正整数:12345
5位数
54321

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

n = input('请输入一个数字:')
l = len(n)
flag = True

for i in range(0, l):
    if n[i] != n[-i-1]:
        flag = False
    else:
        flag = True

if flag==True:
    print('%s是回文数'% n)
else:
    print('%s不是回文数'% n)

输入1234321,输出结果:

请输入一个数字:1234321
1234321是回文数
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值