天天看點

Python:Python技巧之80個經典題——課程筆記(四)

2  【程式21】

3 題目:猴子吃桃問題:猴子第一天摘下若幹個桃子,當即吃了一半,還不瘾,又多吃了一個

4    第二天早上又将剩下的桃子吃掉一半,又多吃了一個。以後每天早上都吃了前一天剩下

5    的一半零一個。到第10天早上想再吃時,見隻剩下一個桃子了。求第一天共摘了多少。

6 '''

7 n = 1

8 for i in range(9,0,-1):

9     n = (n+1)<<1

10 print n

1 '''

2 ★

3 【程式22】

4 題目:兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽簽決定

5    比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請程式設計式找出

6    三隊賽手的名單。

7 '''

8 for i in range(ord('x'),ord('z') + 1):

9     for j in range(ord('x'),ord('z') + 1):

10         if i != j:

11             for k in range(ord('x'),ord('z') + 1):

12                 if (i != k) and (j != k):

13                     if (i != ord('x')) and (k != ord('x')) and (k != ord('z')):

14                         print 'order is a -- %s\t b -- %s\tc--%s' % (chr(i),chr(j),chr(k))

2 【程式23】

3 題目:列印出如下圖案(菱形)

4

5    *

6   ***

7  *****

8 *******

9  *****

10   ***

11    *

12 '''

13 for i in range(1,8,2):

14     print ' '*(4-(i+1)/2)+'*'*i

15 for i in range(5,0,-2):

16     print ' '*(4-(i+1)/2)+'*'*i

2 【程式24】

3 題目:有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。

4 '''

5 u = 2.0

6 d = 1.0

7 s = 0.0

8 for i in range(0,20):

9     s = s+u/d

10     u = u+d

11     d = u-d

12 print '%f'%s

2 【程式25】

3 題目:求1+2!+3!+...+20!的和

5 s = 0

6 t = 1

7 for i in range(1,21):

8     t*=i

9     s+=t

10 print s

2 【程式26】

3 題目:利用遞歸方法求5!。

5 def fun(i):

6     if i==1:

7         return 1

8     return i*fun(i-1)

9

10 print fun(5)

2 【程式27】

3 題目:利用遞歸函數調用方式,将所輸入的5個字元,以相反順序列印出來。

5 def output(s,l):

6     if l==0:

7         return

8     print s[l-1]

9     output(s,l-1)

10

11 s = raw_input('Input a string:')

12 l = len(s)

13 output(s,l)

2 【程式28】

3 題目:有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第

4  3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩歲。最後

5    問第一個人,他說是10歲。請問第五個人多大?

7 def fun(i):

8     if i==1:

9         return 10

10     return fun(i-1)+2

11

12 print fun(5)

2 【程式29】

3 題目:給一個不多于5位的正整數,要求:一、求它是幾位數,二、逆序列印出各位數字。

5 def fun(i,cnt):

6     if i==0:

7         print 'There are %d digit in the number.'%cnt

8         return

9     print i%10,

10     i/=10

11     cnt+=1

12     fun(i,cnt)

13

14 i = int(raw_input('Input a number:'))

15 fun(i,0)

2 【程式30】

3 題目:一個5位數,判斷它是不是回文數。即12321是回文數,個位與萬位相同,十位與千位相同。   

5 ans=['Yes','No']

6 i = int(raw_input('Input a number(10000~99999):'))

7 if i<10000 or i>99999:

8     print 'Input Error!'

9 else:

10     i = str(i)

11     flag = 0

12     for j in range(0,2):

13         if i[j]!=i[4-j]:

14             flag = 1

15             break

16     print ans[flag]

2 【程式36】【篩選法】

3 題目:求100之内的素數   

5 a = [0]*101

6 for i in range(2,11):

7     for j in range(i+i,101,i):

8         a[j]=-1;

9 for i in range(2,101):

10     if a[i]!=-1:

11         print ' ',i,

2 【程式37】

3 題目:對10個數進行排序

5 print 'input 10 numbers please:'

6 l = []

7 for i in range(10):

8     l.append(int(raw_input('Input a number:')))

9 #可以直接使用sort函數:l.sort()

10 #也可以自己寫排序代碼(選擇排序)

11 for i in range(9):

12     for j in range(i+1,10):

13         if l[j]<l[i]:

14             temp = l[j]

15             l[j] = l[i]

16             l[i] = temp    

17 print l