python3基础题目 100例_【27】Python100例基础练习题6

例27:

题目:用递归的方法将输入的字符,以相反的方式打印出来。

程序分析:

了解递归特性

1.必须有一个明确的结束条件

2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少

3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

1.递归方法

def bar(s):

if len(s)>0: #大于0

print(s[-1]) #打印最后一个

bar(s[0:-1]) #返回剩下的字符串

s=input("string>>>") ##输入

bar(s)##s 赋值给函数bar

2.不用递归方法:(这里需要函数reverse())

s=input("Input in string>>>").strip()

l=list(s)

l.reverse()

for i in range(len(l)):

print(l[i])

print(l)

例28

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

程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。

程序分析:

逆向思维,假设第1个人岁数是N,那第五个就是N+2+2+2+2

1.没用递归方法

def boo(n): ##n=10 ,第一个人岁数

for i in range(1,5): ###用range循环四次,1,2,3,4

n=n+2

print(n)

boo(10)

2.递归方法

def age(n):

if n==1:

return 10

if n>1:

return (n-1)*2+10 ##每人间隔两岁,所以第五个跟第一个相差8岁,在加上10得第五人

print(age(5))

例29:

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

程序分析:学会分解出每一位数。

n=input("输入五位数字")

for i in range(len(n)-1,-1,-1):

print(len(n),n[i])

看帮助手册了解range函数用法,看顺便可以提高英语阅读能力。

Help on class range in module builtins:

class range(object)

| range(stop) -> range object

| range(start, stop[, step]) -> range object

|

| Return an object that produces a sequence of integers from start (inclusive)

| to stop (exclusive) by step. range(i, j) produces i, i+1, i+2, ..., j-1.

| start defaults to 0, and stop is omitted! range(4) produces 0, 1, 2, 3.

| These are exactly the valid indices for a list of 4 elements.

| When step is given, it specifies the increment (or decrement).

|

| Methods defined here:

|

| __bool__(self, /)

| self != 0

|

| __contains__(self, key, /)

| Return key in self.

|

| __eq__(self, value, /)

| Return self==value.

|

| __ge__(self, value, /)

| Return self>=value.

|

| __getattribute__(self, name, /)

| Return getattr(self, name).

|

| __getitem__(self, key, /)

| Return self[key].

|

| __gt__(self, value, /)

| Return self>value.

|

| __hash__(self, /)

| Return hash(self).

|

| __iter__(self, /)

| Implement iter(self).

|

| __le__(self, value, /)

| Return self<=value.

|

| __len__(self, /)

| Return len(self).

|

| __lt__(self, value, /)

| Return self

|

| __ne__(self, value, /)

| Return self!=value.

|

| __new__(*args, **kwargs) from builtins.type

| Create and return a new object. See help(type) for accurate signature.

|

| __reduce__(...)

| helper for pickle

|

| __repr__(self, /)

| Return repr(self).

|

| __reversed__(...)

| Return a reverse iterator.

|

| count(...)

| rangeobject.count(value) -> integer -- return number of occurrences of value

|

| index(...)

| rangeobject.index(value, [start, [stop]]) -> integer -- return index of value.

| Raise ValueError if the value is not present.

|

| ----------------------------------------------------------------------

| Data descriptors defined here:

|

| start

|

| step

|

| stop

例30:

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

程序分析:所谓回文数字,其实就是一个数等于它的相反数,这是只要能将输入内容相反一下等于本身即是回文数。

x=input("Please number:")

y=x[::-1] ####y=x的倒数,当x输入12345,x[::-1] == 54321

if x==y:

print("回文数",x)

else:

print("非回文数",y)

经验总结:一个程序的难易度往往在于你的分析能力,能否一针见血直至核心很关键,这个还是需要多多练习才醒。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值