python基础练习100打卡-Day06 (026~030)

今天仍然是学习python的一天✔

打卡练习题:菜鸟100实例


026

题目

利用递归方法求5!。

分析

昨天的025题就有用到递归

代码

def f(n):
    if n == 0 or n == 1:
        return 1
    else:
        return n * f(n - 1)
print(f(5))

027

题目

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

分析

定义一个递归函数f(s, n),参数s表示输入的字符串,n表示字符串的索引值。

代码

代码一:
def f(s, n):
    if n == -1:
        temp = ''
    else:
        temp = s[n] + f(s, n-1)
    return temp

string_5 = input('输入5个字符:')
print(f(string_5, len(string_5)-1))
二:

再看看菜鸟的思路,大体比较相似。也是定义一个递归函数f(s, l),s同样表示字符串,l表示字符串长度,减一就为字符串索引啦。

def f(s, l):
    if l == 0:
        return
    print(s[l - 1])
    f(s, l - 1)

string = input('输入5个字符:')
length = len(string)
f(string, length)

028

题目

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

分析

可以用普通循环累加,也可以用到递归。

代码

代码一:

普普通通循环

age = 10
for _ in range(4):
    age += 2
print(f'第五个人{age}岁')
二:

通过递归实现

def f(age, n):
    if n == 1:
        return age
    else:
        return f(age + 2, n - 1)

print(f(10, 5))

029

题目

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

分析

我的想法是,假设这个数是num,那么可以由num%10得到最后一位的数字,再由num//10去掉最后一位数字,这样重复上述过程,就可以取出每一位啦。在取的同时将数字存入list中,便于后续操作。

后来又发现了list的宝藏用法,搭配上map,简直绝绝子!

代码

代码一:
num = int(input('输入一个不多于5位的正整数:'))
li = []

while True:
    if num < 10:		# 只有一位数
        li.append(num)
        break
    temp = num % 10		# 最后一位数字
    li.append(temp)
    num //= 10			# 去掉最后一位
print(f'这是个{len(li)}位数')
print(f'逆序:{li}')
代码二:

绝 不愧是python

num = list(map(int, input('输入一个不多于5位的正整数:')))
num.reverse()
print(f'这是个{len(num)}位数')
print(f'逆序:{num}')

小结

一定要为这个list单独写一次小结,它在输入的同时创建列表真是太方便了,而且还是将输入的字符串自动拆分成一个个字符存入列表(懒人福音呀),也可能是我的见识少哈,牛哈哈的小伙伴莫见怪,等我见多了,我也就见怪不怪啦。


030

题目

一个5位数,判断它是不是回文数。

即12321是回文数,个位与万位相同,十位与千位相同。

分析

现学现用,用用上一题的“懒人福音”,不是我懒,只是试试能不能行

代码

num = list(map(int, input('输入一个五位数:')))
if num[0] == num[-1] and num[1] == num[-2]:
    print('该数是回文数')
else:
    print('不是回文数,再试试吧')

✔打卡第六天!今天收获多多呀,今天的五道题很多都用到了递归,对递归的理解也更进了一步,当然,最大的收获还是list,hhh是我太菜见识少了,足够乐呵几天了。常规收尾,明天继续加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值