注意:我用的python2.7,大家如果用Python3.0以上的版本,請記得在print()函數哦!如果因為版本問題評論的,不做回復哦!!
21.題目:將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。
程序分析:對n進行分解質因數,應先找到一個最小的質數k,然后按下述步驟完成:
(1)如果這個質數恰等于n,則說明分解質因數的過程已經結束,打印出即可。
(2)如果n!=k,但n能被k整除,則應打印出k的值,并用n除以k的商,作為新的正整數你n,重復執行第一步。
(3)如果n不能被k整除,則用k+1作為k的值,重復執行第一步。
注意:要知道 format 這個函數,其實就是格式化,與 print 差不多
方法一:只用循環
# -*- coding: UTF-8 -*-while True: n = input("請輸入一個數:") #這里有逗號是為了保證它輸出后不自動換行,下同 print '{} = '.format(n), #判斷你輸入的是不是正確格式 if not isinstance(n, int) or n <= 0 : print '請輸入一個正確的數字 !' #如果你是輸入的是 1,那只輸出 1 if n in [1] : print '{}'.format(n) while n >= 2: for i in range(2,n + 1): if n % i == 0: n /= i #n 等于 n/i if n == 1: print i , else : # index 一定是素數 print '{} *'.format(i), break print #換行咯方法二:定義函數
# -*- coding: UTF-8 -*-def reduceNum(n): print '{} = '.format(n), if not isinstance(n, int) or n <= 0 : print '請輸入一個正確的數字 !' exit(0) elif n in [1] : print '{}'.format(n) while n not in [1] : # 循環保證遞歸 for i in range(2, n + 1) : if n % i == 0: n /= i # n 等于 n/i if n == 1: print i else : # i 一定是素數 print '{} *'.format(i), breakreduceNum(100)reduceNum(9) 輸出:
100 = 2 * 2 * 5 * 5
9 = 3 * 3
方法三:用列表 append 函數,這里只是用列表的形式輸出了所有x的因子
# -*- coding: UTF-8 -*-while True: x = input("pls input a number:") ret = [] while x > 1: for v in range(2,x + 1): if x % v == 0: ret.append(v) x /= v break print ret 輸出: pls input a number:9 [3, 3]說明:其實兩種方法大同小異,沒什么區別。
22.題目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。
程序分析:關鍵是計算出每一項
# -*- coding: UTF-8 -*-Tn = 0Sn = [] #用來存儲數字個數n = int(raw_input('輸入你想要相加的數字個數 n = :')) #控制你要相加的次數a = int(raw_input('輸入數字 a = :')) #真正要加的數字for count in range(n): Tn = Tn + a a = a * 10 Sn.append(Tn)#每加一個數就放在Sn列表中 print Tn #lambda這個函數比較強大,具體用法可以看下資料Sn = reduce(lambda x,y : x + y,Sn)print Sn 輸入你想要相加的數字個數 n = :5
輸入數字 a = :6
6
66
666
6666
66666
74070
用到的函數:
1.python中的reduce內建函數是一個二元操作函數,他用來將一個數據集合(鏈表,元組等)中的所有數據進行下列操作:用傳給reduce中的函數 func()(必須是一個二元操作函數)先對集合中的第1,2個數據進行操作,得到的結果再與第三個數據用func()函數運算,最后得到一個結果。
2.lambda函數
23.題目:一個數如果恰好等于它的因子之和,這個數就稱為”完數”。例如6=1+2+3.編程找出1000以內的所有完數。
程序分析:請參照程序Python 練習實例14。只要在后面加上判斷條件就可以了,注意,要在輸出因子的時候加上1,注意看題,1是任何數的因子,所以不能漏掉
# -*- coding: UTF-8 -*-import randomimport timewhile True: x = random.randint(1,1000) #因為后面求質數要修改x的值,所以先把x保存起來備用 s = x factors = [1] #1是任何數的因子 while x > 1: #上限取值可以是x,即因子也可以是x本身,這個大家都懂得 for v in range(2,x + 1): if x % v == 0: factors.append(v) #找到了當前的最小因子,重置繼續找下一符合條件的最小因子 x /= v #由于break是跳出當前的循環,所以這里的break是跳出for循環 break print "所有因子是 %s,所以"%(factors), if sum(factors) == s: #這里就是判斷函數了 print "%d 是完數"%(s) else: print "%d 不是完數"%(s)time.sleep(1) #為防止程序卡頓,我睡一秒輸出一個
輸出:
所有因子是 [1, 2, 2, 2, 31],所以: 248 不是完數
所有因子是 [1, 2, 2, 2, 73],所以: 584 不是完數
所有因子是 [1, 823],所以: 823 不是完數
所有因子是 [1, 281],所以: 281 不是完數
所有因子是 [1, 467],所以: 467 不是完數
所有因子是 [1, 2, 359],所以: 718 不是完數
所有因子是 [1, 2, 7, 47],所以: 658 不是完數
所有因子是 [1, 751],所以: 751 不是完數
所有因子是 [1, 3, 71],所以: 213 不是完數
24.題目:兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽簽決定比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找出三隊賽手的名單。
程序分析:用數學的角度很好理解是吧,但是這里要把字母轉化成ASCII碼來做哦!
# -*- coding: UTF-8 -*-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))25.題目:有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13…求出這個數列的前20項之和。
程序分析:請抓住分子與分母的變化規律。可以看出,分母是斐波那契數列哦~
方法一:第一個分數的分子分母之和是第二個數的分子。
# -*- coding: UTF-8 -*-a = 2.0 #第一個數的分母b = 1.0 #第一個數的分子s = 0 #前20項的和for n in range(1,21): s += a / b t = a #先把分子保存到t a = a + b #分子是前一個分數的分子分母之和 b = t #分子分母交換print s
方法二:
# -*- coding: UTF-8 -*-a = 2.0b = 1.0s = 0.0for n in range(1,21): s += a / b b,a = a , a + bprint s
方法三:
# -*- coding: UTF-8 -*-a = 2.0b = 1.0l = []for n in range(1,21): b,a = a,a + b l.append(a / b)print reduce(lambda x,y: x + y,l)
26.題目:求1+2!+3!+…+20!的和。
程序分析:此程序只是把累加變成了累乘。想一想階乘怎么算的?n!=n×(n-1)×(n-2)×(n-3)×…×1,所以只需要一個遍歷,把n以內的數字相乘后,再加起來即可。
方法一:
# -*- coding: UTF-8 -*-n = 0s = 0t = 1for n in range(1,21): t *= n #這里t就是20以內每個數的階乘 s += t #把每次得到的階乘值加到sprint '1! + 2! + 3! + ... + 20! = %d' % s
方法三:這里用定義函數的方法,使用sum函數。
# -*- coding: UTF-8 -*-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
輸出:1! + 2! + 3! + ... + 20! = 2561327494111820313
這里補充一下map()函數的用法:
很簡單,第一個參數接收一個函數名,第二個參數接收一個可迭代對象
# -*- coding: UTF-8 -*-ls = [1,2,3]rs = map(str, ls)#打印結果 ['1', '2', '3']lt = [1, 2, 3, 4, 5, 6]def add(num): return num + 1rs = map(add, lt)print rs #打印結果[2,3,4,5,6,7]
27.題目:利用遞歸方法求5!。
程序分析:遞歸公式:fn=fn_1*4!遞歸的方法就是自己調用自己。
# -*- coding: UTF-8 -*-def jiecheng(n): if n <= 1: return 1 else: return n * jiecheng(n-1)print jiecheng(5)輸出:120
28.題目:將所輸入的5個字符,以相反順序打印出來。
方法一:利用遞歸函數調用方式
# -*- coding: UTF-8 -*-def output(s,l): if l==0: return print (s[l-1]) output(s,l-1)s = raw_input('Input a string:')l = len(s)output(s,l) 輸出:Input a string:1234
4
3
2
1
方法二:用reverse函數
# -*- coding: UTF-8 -*-a = [1,2,3,4,5]a.reverse()print a 或者:# -*- coding: UTF-8 -*-s = list(raw_input('Input a string:'))s.reverse()print s28.題目:有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩歲。最后問第一個人,他說是10歲。請問第五個人多大?
程序分析:利用遞歸的方法,遞歸分為回推和遞推兩個階段。要想知道第五個人歲數,需知道第四人的歲數,依次類推,推到第一人(10歲),再往回推。
方法一:這個很簡單吧,就是每次循環都加2,循環4次就好了啊!
# -*- coding: UTF-8 -*-x = 10for i in range(1,5): x = x + 2print x
方法二:定義函數的方法
# -*- coding: UTF-8 -*-def age(n): if n == 1: x = 10 else: x = age(n - 1) + 2 return xprint age(5)
29.題目:一個5位數,判斷它是不是回文數。即12321是回文數,個位與萬位相同,十位與千位相同。
程序分析:將這個五位數從中間分開,根據對稱性去切,然后比較是否相等。
# -*- coding: UTF-8 -*-a = int(raw_input("請輸入一個數字:"))x = str(a)flag = Truefor i in range(len(x)/2): if x[i] != x[-i - 1]: #如果不相等,直接跳出循環,直接判斷不是回文數 flag = False breakif flag: print "%d 是一個回文數!" % aelse: print "%d 不是一個回文數!" % a 輸出:
請輸入一個數字:
15651
15651 是一個回文數!
30.題目:請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續判斷第二個字母。
程序分析:用情況語句比較好,如果第一個字母一樣,則判斷用情況語句或if語句判斷第二個字母。。哇,這個題應該好簡單啊~~先看一下星期的單詞都有哪些“Monday Tuesday Wednesday Thursday Friday Saturday Sunday”,所有只有“T”和“S”要判斷第二個字母。
# -*- coding: UTF-8 -*- letter = raw_input("please input:") #while letter != 'Y': if letter == 'S': print ('please input second letter:') letter = raw_input("please input:") if letter == 'a': print ('Saturday') elif letter == 'u': print ('Sunday') else: print ('data error') elif letter == 'F': print ('Friday') elif letter == 'M': print ('Monday') elif letter == 'T': print ('please input second letter') letter = raw_input("please input:") if letter == 'u': print ('Tuesday') elif letter == 'h': print ('Thursday') else: print ('data error') elif letter == 'W': print ('Wednesday') else: print ('data error')這篇文章就介紹到這了,后面VEVB武林網小編將繼續為大家分享更多的關于python的一些實例資料。
新聞熱點
疑難解答