'''【程式24】 題目:有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。1.程式分析:請抓住分子與分母的變化規律。 2.程式原始碼:'''#方法一a = 2.0b = 1.0s = 0for n in range(1,21): s += a / b t = a a = a + b b = tprint s#方法二s = 0.0for n in range(1,21): s += a / b b,a = a , a + bprint ss = 0.0for n in range(1,21): s += a / b b,a = a , a + bprint s#方法三l = []for n in range(1,21): b,a = a,a + b l.append(a / b)print reduce(lambda x,y: x + y,l)
''' 【程式21】題目:猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個 第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以後每天早上都吃了前一天剩下 的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。1.程式分析:採取逆向思維的方法,從後往前推斷。2.程式原始碼:'''x2 = 1for day in range(9,0,-1): x1 = (x2 + 1) * 2 x2 = x1print x1
'''【程式22】題目:兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽籤決定 比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程式找出 三隊賽手的名單。 1.程式分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除, 則表明此數不是素數,反之是素數。 2.程式原始碼: '''for i in range(ord('x'),ord('z') + 1): for j in range(ord('x'),ord('z') + 1): if i != j: for k in range(ord('x'),ord('z') + 1): if (i != k) and (j != k): if (i != ord('x')) and (k != ord('x')) and (k != ord('z')): print 'order is a -- %s\t b -- %s\tc--%s' % (chr(i),chr(j),chr(k))
'''【程式23】 題目:列印出如案(菱形) * *** ************ ***** *** *1.程式分析:先把圖形分成兩部分來看待,前四行一個規律,後三行一個規律,利用雙重 for迴圈,第一層控制行,第二層控制列。 2.程式原始碼: '''from sys import stdoutfor i in range(4): for j in range(2 - i + 1): stdout.write(' ') for k in range(2 * i + 1): stdout.write('*') printfor i in range(3): for j in range(i + 1): stdout.write(' ') for k in range(4 - 2 * i + 1): stdout.write('*') print
'''【程式25】 題目:求1+2!+3!+...+20!的和1.程式分析:此程式只是把累加變成了累乘。 2.程式原始碼:'''#方法一n = 0s = 0t = 1for n in range(1,21): t *= n s += tprint '1! + 2! + 3! + ... + 20! = %d' % s#方法二s = 0l = range(1,21)def op(x): r = 1 for i in range(1,x + 1): r *= i return rs = sum(map(op,l))print '1! + 2! + 3! + ... + 20! = %d' % s
'''【程式26】 題目:利用遞迴方法求5!。1.程式分析:遞迴公式:fn=fn_1*4!2.程式原始碼:'''def fact(j): sum = 0 if j == 0: sum = 1 else: sum = j * fact(j - 1) return sumfor i in range(5): print '%d! = %d' % (i,fact(i))
'''【程式27】 題目:利用遞迴函式調用方式,將所輸入的5個字元,以相反順序列印出來。1.程式分析:2.程式原始碼:'''def palin(n): next = 0 if n <= 1: next = input() print print next else: next = input() palin(n - 1) print nexti = 5palin(i)print
'''【程式28】 題目:有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第 3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩歲。最後 問第一個人,他說是10歲。請問第五個人多大?1.程式分析:利用遞迴的方法,遞迴分為回推和遞推兩個階段。要想知道第五個人歲數,需知道 第四人的歲數,依次類推,推到第一人(10歲),再往回推。'''def age(n): if n == 1: c = 10 else: c = age(n - 1) + 2 return cprint age(5)
'''【程式29】 題目:給一個不多於5位的正整數,要求:一、求它是幾位元,二、逆序列印出各位元字。1. 程式分析:學會分解出每一位元,如下解釋:(這裡是一種簡單的演算法,師專數002班趙鑫提供) 2.程式原始碼:'''x = int(raw_input("input a number:\n"))a = x / 10000b = x % 10000 / 1000c = x % 1000 / 100d = x % 100 / 10e = x % 10if a != 0: print "there are 5 ",e,d,c,b,aelif b != 0: print "there are 4 ",d,c,b,aelif c != 0: print "there are 3 ",e,d,celif d != 0: print "there are 2 ",e,delse: print "there are 1",e
'''題目:一個5位元,判斷它是不是迴文數。即12321是迴文數,個位與萬位相同,十位與千位相同。 1.程式分析:同29例2.程式原始碼:'''x = int(raw_input("input a number:\n"))x = str(x)for i in range(len(x)/2): if x[i] != x[-i - 1]: print 'this number is not a huiwen' breakprint 'this number is a huiwen'