【27】Python100例基礎練習題6
阿新 • • 發佈:2018-03-12
python range 函數 遞歸 例27:
題目:用遞歸的方法將輸入的字符,以相反的方式打印出來。
程序分析:
了解遞歸特性
1.必須有一個明確的結束條件
2.每次進入更深一層遞歸時,問題規模相比上次遞歸都應有所減少
3.遞歸效率不高,遞歸層次過多會導致棧溢出(在計算機中,函數調用是通過棧(stack)這種數據結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞歸調用的次數過多,會導致棧溢出) 程序分析:
逆向思維,假設第1個人歲數是N,那第五個就是N+2+2+2+2 給一個不多於5位的正整數,要求:一、求它是幾位數,二、逆序打印出各位數字。
程序分析:學會分解出每一位數。
題目:用遞歸的方法將輸入的字符,以相反的方式打印出來。
程序分析:
了解遞歸特性
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:
題目:
程序分析:學會分解出每一位數。
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