今天仍然是学习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是我太菜见识少了,足够乐呵几天了。常规收尾,明天继续加油!