码迷,mamicode.com
首页 > 编程语言 > 详细

【27】Python100例基础练习题6

时间:2018-03-12 00:00:50      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:python   range   函数   递归   

例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

【27】Python100例基础练习题6

标签:python   range   函数   递归   

原文地址:http://blog.51cto.com/000011211684/2085340

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!