黑马程序员技术交流社区

标题: 【郑州校区】Python100例基础练习题6 [打印本页]

作者: 我是色色    时间: 2018-4-2 18:03
标题: 【郑州校区】Python100例基础练习题6
例27:
题目:用递归的方法将输入的字符,以相反的方式打印出来。
程序分析:
了解递归特性
1.必须有一个明确的结束条件
2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
1.递归方法
[AppleScript] 纯文本查看 复制代码
def bar(s):
    if len(s)>0: #大于0
        print(s[-1])  #打印最后一个
        bar(s[0:-1])  #返回剩下的字符串
s=input("string>>>") ##输入
bar(s)##s 赋值给函数bar
2.不用递归方法:(这里需要函数reverse())
[AppleScript] 纯文本查看 复制代码
s=input("Input in string>>>").strip()
l=list(s)
l.reverse()
for i in range(len(l)):
    print(l)
print(l)
例28
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
程序分析:
逆向思维,假设第1个人岁数是N,那第五个就是N+2+2+2+2
1.没用递归方法
[AppleScript] 纯文本查看 复制代码
def boo(n):  ##n=10 ,第一个人岁数
    for i in range(1,5):  ###用range循环四次,1,2,3,4
        n=n+2
        print(n)
boo(10)
2.递归方法
[AppleScript] 纯文本查看 复制代码
def age(n):
    if n==1:
        return 10
    if n>1:
        return (n-1)*2+10  ##每人间隔两岁,所以第五个跟第一个相差8岁,在加上10得第五人
print(age(5))
例29:
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
程序分析:学会分解出每一位数。
[AppleScript] 纯文本查看 复制代码
n=input("输入五位数字")
for i in range(len(n)-1,-1,-1):
    print(len(n),n)
看帮助手册了解range函数用法,看顺便可以提高英语阅读能力。
[AppleScript] 纯文本查看 复制代码
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是回文数,个位与万位相同,十位与千位相同。
程序分析:所谓回文数字,其实就是一个数等于它的相反数,这是只要能将输入内容相反一下等于本身即是回文数。
[AppleScript] 纯文本查看 复制代码
x=input("Please number:")
y=x[::-1]  ####y=x的倒数,当x输入12345,x[::-1] == 54321
if x==y:
    print("回文数",x)
else:
    print("非回文数",y)
经验总结:一个程序的难易度往往在于你的分析能力,能否一针见血直至核心很关键,这个还是需要多多练习才醒。


作者: loveheima008    时间: 2018-4-2 20:25
怎么才能下载所有的题库呢
作者: huchengdong    时间: 2018-4-11 15:25
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
作者: 我是色色    时间: 2018-4-23 14:52
loveheima008 发表于 2018-4-2 20:25
怎么才能下载所有的题库呢

你想下载哪部分呢?
作者: 青春不容你奢侈    时间: 2018-5-16 21:19
怎么能把这100题全部打包下载下来,正在学python想试试看自己基础知识学的怎么样!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2