27Python100例基础练习题6
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了27Python100例基础练习题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<value.
|
| __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)
经验总结:一个程序的难易度往往在于你的分析能力,能否一针见血直至核心很关键,这个还是需要多多练习才醒。
http://www.runoob.com/python/python-100-examples.html
以上是关于27Python100例基础练习题6的主要内容,如果未能解决你的问题,请参考以下文章