Python習(xí)題選編_第1頁
Python習(xí)題選編_第2頁
Python習(xí)題選編_第3頁
Python習(xí)題選編_第4頁
Python習(xí)題選編_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Python習(xí)題選編華東師大信息學(xué)院計(jì)算中心一程序結(jié)構(gòu)與算法部分:1. 編寫一個(gè)python程序,輸入兩個(gè)數(shù),比較它們的大小并輸出其中較大者。參考代碼:x = int(input("Please enter first integer: ")y = int(input("Please enter second integer: ")if (x = y): print("兩數(shù)相同!")elif (x > y): print("較大數(shù)為:",x)else: print("較大數(shù)為:",y);2

2、. 寫一個(gè)算法(流程圖和python程序):輸入三個(gè)數(shù),輸出其最大者。參考代碼:a,b,c=3,4,5if a <= b: if c < b: print ("b是最大的數(shù)") else: print ("c是最大的數(shù)")else: if c < a: print ("a是最大的數(shù)") else: print ("c是最大的數(shù)")3. 使用Python編程,求1100間所有偶數(shù)的和。參考代碼:sum=0for x in range(1,101): if x % 2=0: print(x) sum=

3、sum+xprint("累加和是:",sum)4. 用Python編寫程序,輸入一年份,判斷該年份是否是閏年并輸出結(jié)果。注:凡符合下面兩個(gè)條件之一的年份是閏年。(1) 能被4整除但不能被100整除。(2) 能被400整除。參考代碼:year = int(input("Please enter the year: ")if (year%4=0 and year%100!=0) or (year%400=0): print(year,"is a leap year.")else: print(year,"is not a lea

4、p year.")5. 用Python編程,假設(shè)一年期定期利率為3.25%,計(jì)算一下需要過多少年,一萬元的一年定期存款連本帶息能翻番?參考代碼:cunkuan = 10000 #本金10000元years=0while cunkuan<20000: years+=1 cunkuan=cunkuan*(1+0.0325)print(str(years)+"年以后,存款會翻番")6. 從鍵盤接收一百分制成績(0100),要求輸出其對應(yīng)的成績等級AE。其中,90分以上為'A',8089分為'B',7079分為'C',

5、6069分為'D',60分以下為'E'。參考答案:score=int(input('請輸入成績(0100):')if score > 100: grade = "輸入錯(cuò)誤!"elif score >= 90: grade = 'A'elif score >= 80: grade = 'B'elif score >= 70: grade = 'C'elif score >= 60: grade = 'D'elif score >=

6、 0: grade = 'E'else: grade = "輸入錯(cuò)誤!"print(grade)7. 猜數(shù)游戲。預(yù)設(shè)一個(gè)09之間的整數(shù),讓用戶猜一猜并輸入所猜的數(shù),如果大于預(yù)設(shè)的數(shù),顯示“太大”;小于預(yù)設(shè)的數(shù),顯示“太小”,如此循環(huán),直至猜中該數(shù),顯示“恭喜!你猜中了!”。參考答案:num=7while True: guess=int(input('請輸入你猜的數(shù)(09):') if guess = num: print("恭喜!你猜中了!") break; elif guess > num: print("

7、;太大") else: print("太小")8. 輸入一個(gè)數(shù),判斷這個(gè)數(shù)是否為素?cái)?shù),并輸出判斷結(jié)果。(所謂素?cái)?shù),是指除了1和該數(shù)本身之外,不能被其它任何整數(shù)整除的數(shù)。下圖為參考流程圖)參考答案:import mathn=int(input("請輸入一個(gè)數(shù):")x=int(math.sqrt(n)i,w=2,0for i in range (2,x+1): if n%i=0: w=1if w=1: print(n,"不是素?cái)?shù)。")else: print(n,"是素?cái)?shù)。")或import mathn=int

8、(input('請輸入一個(gè)數(shù):')i,w=2,0while i <= int(math.sqrt(n) and w=0: if n%i = 0: w = 1 break else: i = i+1if w=0: print(n,"是素?cái)?shù)!")else:print(n,"不是素?cái)?shù)!")或import mathn=int(input('請輸入一個(gè)數(shù):')i=2while i <= int(math.sqrt(n) : if n%i = 0: print(n,"不是素?cái)?shù)!") break else

9、: i=i+1else: print(n,"是素?cái)?shù)!")9. 輸入一個(gè)時(shí)間(小時(shí):分鐘:秒),輸出該時(shí)間經(jīng)過5分30秒后的時(shí)間。參考答案:hour,minute,second=input('請輸入一個(gè)時(shí)間(h:m:s):').split(':')hour=int(hour)minute=int(minute)second=int(second)second+=30if second >= 60: second = second-60 minute += 1minute+=5if minute >= 60: minute = min

10、ute-60 hour += 1if hour = 24: hour = 0print('%d:%d:%d'%(hour,minute,second)10. 一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱為“完數(shù)”。例如,6的因子為1、2、3,而6=1+2+3,因此6是完數(shù)。編程,找出1000之內(nèi)的所有完數(shù),并輸出該完數(shù)及對應(yīng)的因子。(枚舉法)參考答案:m=1000for a in range(2,m+1): s=a L1= for i in range(1,a): if a%i=0: s-=i L1.append(i) if s=0: print("完數(shù):%d,因子包括

11、:"%a,end="") for j in range(1,len(L1): print("%d"%L1j,end=",") print("n")11編程,解決猴子吃桃問題。猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不過癮,又多吃了一個(gè)。第二天早上又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天早上都吃了前一天剩下的一半零一個(gè)。到第10天早上想吃時(shí),只剩下一個(gè)桃子了。求第一天共摘多少個(gè)桃子。(迭代法)參考答案:day=9x=1while day>0: x=(x+1)*2 day-=1print(&qu

12、ot;total=",x)二輸入輸出與文件部分:1. 編寫一個(gè)python程序,輸入兩個(gè)數(shù),輸出兩數(shù)之和。參考代碼:x = int(input("Please enter first integer: ")y = int(input("Please enter second integer: ")print("The sum is:");print(x+y);2.在當(dāng)前目錄下有一個(gè)文件名為temp.txt的文件,存放著上海從2014年3月10日(周一)到3月16日(周日)間一周的最高和最低氣溫(單位為攝氏度)。其中,第一行為

13、最高氣溫,第二行為最低氣溫。編程,找出這一周中第幾天最熱(按最高氣溫計(jì)算)?最高多少度?這一周中第幾天最冷(按最低氣溫計(jì)算)?最冷多少度?參考答案:flname="temp.txt"f=open(flname)ht=(f.readline().strip()L1=list(ht.split(',')lt=(f.readline().strip()L2=list(lt.split(',')f.close()for i in range(len(L1): L1i=int(L1i) L2i=int(L2i)maxVal=L10maxDay=0min

14、Val=L20minDay=0for i in range(1,len(L1): if L1i>maxVal: maxVal=L1i maxDay=i if L2i<minVal: minVal=L2i minDay=iprint("這周第"+str(maxDay+1)+"天最熱,最高"+str(maxVal)+"攝氏度")print("這周第"+str(minDay+1)+"天最冷,最低"+str(minVal)+"攝氏度")3在上題的基礎(chǔ)上,求出全周的平均氣溫

15、(這一周各天平均溫度的平均值,取整數(shù))。假設(shè)在氣象意義上,入春標(biāo)準(zhǔn)是連續(xù)5天日均氣溫超過10,根據(jù)這一周的氣象數(shù)據(jù)是否能判斷上海已經(jīng)入春?參考答案:flname="temp.txt"f=open(flname)ht=(f.readline().strip()L1=list(ht.split(',')lt=(f.readline().strip()L2=list(lt.split(',')f.close()L3=for i in range(len(L1): L1i=int(L1i) L2i=int(L2i) L3.append(int(L1i

16、+L2i)/2)sum=0k=0for i in range(len(L3): sum=sum+L3i if L3i>=10: k+=1 else: k=0avg=int(sum/len(L3)print("周平均氣溫為:",avg)if k>=5: print("上海這周已入春。")else:print("上海這周未入春。")4當(dāng)前目錄下有一個(gè)文件名為score1.txt的文本文件,存放著某班學(xué)生的計(jì)算機(jī)課成績,共有學(xué)號、平時(shí)成績、期末成績?nèi)小U埜鶕?jù)平時(shí)成績占40%,期末成績占60%的比例計(jì)算總評成績(取整數(shù)),并分學(xué)

17、號、總評成績兩列寫入另一文件score2.txt。同時(shí)在屏幕上輸出學(xué)生總?cè)藬?shù),按總評成績計(jì)90以上、8089、7079、6069、60分以下各成績檔的人數(shù)和班級總平均分(取整數(shù))。參考答案:f=open("score1.txt")a=f.readline()line=(f.readline().strip()f2=open("score2.txt",'w')f2.write("學(xué)號 平均成績n");L2=0,0,0,0,0count=0sum=0while (len(line) != 0): #print(line)

18、L1=line.split() f2.write(L10+" ") f_score=int(int(L11)*0.4+int(L12)*0.6) if 90<f_score<=100: L20+=1 elif f_score>=80: L21+=1 elif f_score>=70: L22+=1 elif f_score>=60: L23+=1 else: L24+=1 count+=1 sum+=f_score f2.write(str(f_score)+"n") line=(f.readline().strip()f.

19、close()f2.close()avg_score=int(sum/count)print("學(xué)生總?cè)藬?shù)為%d,按總評成績計(jì),90以上%d人、8089間%d人、7079間%d人、6069間%d人、60分以下%d人。班級總平均分為%d分。"%(count,L20,L21,L22,L23,L24,avg_score)或f=open("score1.txt")a=f.readlines()del a0L3=for line in a: line=line.strip() L1=line.split() f_score=int(int(L11)*0.4+int

20、(L12)*0.6) L3.append(L10,f_score)f.close()c=0,0,0,0,0count=0sum=0f2=open("score2.txt",'w')f2.write("學(xué)號 平均成績n");for L2 in L3: if 90<L21<=100: c0+=1 elif L21>=80: c1+=1 elif L21>=70: c2+=1 elif L21>=60: c3+=1 else: c4+=1 count+=1 sum+=L21 f2.write(L20+"

21、"+str(L21)+"n")f2.close()avg_score=int(sum/count)print("學(xué)生總?cè)藬?shù)為%d,按總評成績計(jì),90以上%d人、8089間%d人、7079間%d人、6069間%d人、60分以下%d人。班級總平均分為%d分。"%(count,c0,c1,c2,c3,c4,avg_score)5當(dāng)前目錄下有一個(gè)文本文件sample12.txt,其內(nèi)容包含小寫字母和大寫字母。請將該文件復(fù)制到另一文件sample12_copy.txt,并將原文件中的小寫字母全部轉(zhuǎn)換為大寫字母,其余格式均不變。參考答案:f=open(&q

22、uot;sample12.txt")L1=f.readlines()f2=open("sample12_copy.txt",'w')for line in L1: f2.write(line.upper()f.close()f2.close()6當(dāng)前目錄下有一個(gè)文件名為class_score.txt的文本文件,存放著某班學(xué)生的學(xué)號、數(shù)學(xué)課成績(第2列)和語文課成績(第3列)。請編程完成下列要求:(1)分別求這個(gè)班數(shù)學(xué)和語文的平均分(保留1位小數(shù))并輸出。(2)找出兩門課都不及格(<60)的學(xué)生,輸出他們的學(xué)號和各科成績。(3)找出兩門課的平均

23、分在90分以上的學(xué)生,輸出他們的學(xué)號和各科成績。建議用三個(gè)函數(shù)分別實(shí)現(xiàn)以上要求。參考答案:def output_avg(L): sum1,sum2=0,0 for line in L: L1=line.strip().split() sum1+=int(L11) sum2+=int(L12) count=len(L) avg1=round(sum1/count,1) avg2=round(sum2/count,1) print("這個(gè)班的數(shù)學(xué)平均分為:%4.1f,語文平均分為:%4.1f"%(avg1,avg2) def output_notpass(L): print(&

24、quot;兩門課均不及格的學(xué)生學(xué)號及數(shù)學(xué)、語文成績?yōu)椋?quot;) for line in L: L1=line.strip().split() if int(L11)<60 and int(L12)<60: print(line) def output_good(L): print("兩門課平均分在90分以上的學(xué)生學(xué)號及數(shù)學(xué)、語文成績?yōu)椋?quot;) for line in L: L1=line.strip().split() f_score=round(int(L11)+int(L12)/2) if f_score>=90: print(line)f=ope

25、n("class_score.txt")L=f.readlines()del L0output_avg(L)output_notpass(L)output_good(L)三 算法分析與設(shè)計(jì)部分1. 編程,從鍵盤接收若干個(gè)整數(shù)(直接輸入回車表示結(jié)束),用冒泡法或選擇法進(jìn)行排序(從小到大),并將排序結(jié)果在屏幕上輸出。同時(shí)估計(jì)算法的復(fù)雜度。參考答案:選擇排序:def bubble(List): num=len(List) for i in range(0,num-1): for j in range(i+1,num): if Listi>Listj: Listi,Listj

26、=Listj,Listi return ListL1=num_str=input('請輸入一個(gè)需排序的整數(shù):')while len(num_str) != 0: L1.append(int(num_str) num_str=input('請輸入一個(gè)需排序的整數(shù):')print('排序后結(jié)果:', bubble(L1)或冒泡排序:def bubble(List): for i in range(0,len(List)-1): for j in range(len(List)-1,i,-1): if Listj-1>Listj: Listj-1

27、,Listj=Listj,Listj-1 return ListL1=num_str=input('請輸入一個(gè)需排序的整數(shù):')while len(num_str) != 0: L1.append(int(num_str) num_str=input('請輸入一個(gè)需排序的整數(shù):')print('排序后結(jié)果:', bubble(L1)上述兩個(gè)程序算法的時(shí)間復(fù)雜度均為O(n2).2從鍵盤接收一個(gè)正整數(shù)n,輸出對應(yīng)斐波那契(Fibonacci)數(shù)列的前n項(xiàng)(計(jì)算數(shù)列中某項(xiàng)的值請用遞歸函數(shù)實(shí)現(xiàn))。另外,請指出所用算法的復(fù)雜度。有能力的同學(xué)還可進(jìn)一步改進(jìn)算

28、法的效率。參考答案:def fib(n): if n=0 or n=1: return n else: return fib(n-1) + fib(n-2)n=int(input('n=')for i in range(n+1):print(fib(i),end=" ")算法時(shí)間復(fù)雜度為O(n*2n).可改進(jìn)為:def fib(n,List): a,b=0,1 List.append(a) while b<=n: List.append(b) a,b = b,a+bn=int(input('n=')L1=fib(n,L1)print(L

29、1)算法的時(shí)間復(fù)雜性為O(n)3當(dāng)前目錄下有一個(gè)文件名為score2.txt的文本文件,存放著某班學(xué)生的計(jì)算機(jī)課成績,共有學(xué)號、總評成績兩列。請查找最高分和最低分的學(xué)生,并在屏幕上顯示其學(xué)號和成績。另外,請指出所用算法的復(fù)雜度。參考答案:f=open("score2.txt")a=f.readlines()del a0L2=L3=for line in a: line=line.strip() L1=line.split() L2.append(L10) L3.append(L11)f.close()maxScore=L30maxIndex=0minScore=L30min

30、Index=0for i in range(1,len(L3): if L3i>maxScore: maxScore=L3i maxIndex=i if L3i<minScore: minScore=L3i minIndex=iprint("最高分為:"+str(maxScore)+"分,該學(xué)生學(xué)號為:"+str(L2maxIndex)print("最低分為:"+str(minScore)+"分,該學(xué)生學(xué)號為:"+str(L2minIndex)時(shí)間復(fù)雜度為O(n).四 數(shù)據(jù)結(jié)構(gòu)部分:1. 編程,輸入一行

31、字符,分別統(tǒng)計(jì)出其中英文字母、空格、數(shù)字和其他字符的個(gè)數(shù)。參考答案:letters,space,digit,other=0,0,0,0s=input("請輸入一行字符:")for i in range(len(s): if (si>='a' and si<='z') or (si>='A' and si<='Z'): letters+=1 elif si=' ': space+=1 elif si>='0' and si<='9'

32、;: digit+=1 else: other+=1print("字母數(shù):%dn空格數(shù):%dn數(shù)字?jǐn)?shù):%dn其他字符數(shù):%dn"%(letters,space,digit,other)或p=input('請輸入一行字符:')a,b,c,d=0,0,0,0for i in p: if(i<='Z' and i>='A') or (i<='z' and i>='a'): a+=1 elif (i=' '): b+=1 elif(i>='0'

33、; and i<='9'): c+=1 else: d+=1print ('英文字母的個(gè)數(shù)為:'+str(a)print ('空格的個(gè)數(shù)為:'+str(b)print ('數(shù)字的個(gè)數(shù)為:'+str(c)print ('其他字符的個(gè)數(shù)為:'+str(d)或letter,space,digit,other=0,0,0,0s = input('input a string:')for c in s: if c.isalpha(): letter +=1 elif c.isspace(): space

34、 +=1 elif c.isdigit(): digit +=1 else: other +=1print("字母數(shù):%dn空格數(shù):%dn數(shù)字?jǐn)?shù):%dn其他字符數(shù):%dn"%(letter,space,digit,other)2小王希望用電腦記錄他每天掌握的英文單詞。請?jiān)O(shè)計(jì)程序和相應(yīng)的數(shù)據(jù)結(jié)構(gòu),使小王能記錄新學(xué)的英文單詞和其中文翻譯,并能很方便地根據(jù)英文來查找中文。(參考:數(shù)據(jù)結(jié)構(gòu)建議用集合。集合添加:dickey=value 判斷key是否在集合中:if key in dic)。參考答案:def add_dic(dic): while True: word=input(&

35、quot;請輸入英文單詞(直接按回車結(jié)束):") if len(word)=0: break; meaning=input("請輸入中文翻譯:") dicword=meaning print("該單詞已添加到字典庫。") returndef search_dic(dic): while True: word=input("請輸入要查詢的英文單詞(直接按回車結(jié)束):") if len(word)=0: break; if word in dic: print("%s的中文翻譯是%s"%(word,dicwo

36、rd) else: print("字典庫中未找到這個(gè)單詞") returnworddic=dict()while True: print("請選擇功能:n1:輸入n2:查找n3:退出") c=input() if c="1": add_dic(worddic) elif c="2": search_dic(worddic) elif c="3": break else: print("輸入有誤!")五異常處理部分:1以下是兩數(shù)相加的程序:x = int(input("

37、;x=")y = int(input("y=")print("x+y=",x+y);該程序要求接收兩個(gè)整數(shù),并輸出相加結(jié)果。但如果輸入的不是整數(shù)(如字母、浮點(diǎn)數(shù)等),程序就會終止執(zhí)行并輸出異常信息。請對程序進(jìn)行修改,要求輸入非整數(shù)時(shí),給出“輸入內(nèi)容必須為整數(shù)!”的提示,并提示用戶重新輸入,直至輸入正確。參考答案:while True: try: x = int(input("x=") except ValueError: print("輸入內(nèi)容必須為整數(shù)!") else: breakwhile True:

38、 try: y = int(input("y=") except ValueError: print("輸入內(nèi)容必須為整數(shù)!") else: breakprint("x+y=",x+y)2編程,請輸入一個(gè)文件路徑名或文件名,查看該文件是否存在,如存在,打開文件并在屏幕上輸出該文件內(nèi)容;如不存在,顯示“輸入的文件未找到!”并要求重新輸入;如文件存在但在讀文件過程中發(fā)生異常,則顯示“文件無法正常讀出!”并要求重新輸入。(提示:請使用異常處理。“文件未找到”對應(yīng)的異常名為:FileNotFoundError,其他異常直接用except匹配)

39、參考答案:while True: try: filename=input('請輸入文件路徑名或文件名:') f=open(filename.strip() print(f.read() except FileNotFoundError: print("輸入的文件未找到!") except: print("文件無法正常讀出!") else: breakf.close()五 函數(shù)部分:1. 寫一判素?cái)?shù)的函數(shù),在主函數(shù)中輸入一個(gè)整數(shù),調(diào)用該函數(shù)進(jìn)行判斷并輸出結(jié)果。參考答案:def shushu(n): import mathi,w=2,0if

40、n<=1:w=1 while i <= int(math.sqrt(n) and w=0: if n%i = 0: w = 1 break else: i = i+1 return wn=int(input('n=')if shushu(n)=0: print(n,"是素?cái)?shù)!")else: print(n,"不是素?cái)?shù)!")2. 當(dāng)前目錄下有一個(gè)文件名為score3.txt的文本文件,存放著某班學(xué)生的學(xué)號和其兩門專業(yè)課的成績。分別用函數(shù)實(shí)現(xiàn)以下功能:(1) 定義函數(shù)function1,計(jì)算每個(gè)學(xué)生的平均分(取整數(shù)),并將所有學(xué)生

41、的學(xué)號和平均分在屏幕上輸出。(函數(shù)參數(shù)為要讀取文件的文件名)def function1(flname):#函數(shù)代碼function1("c:testscore3.txt")參考答案:def function1(flname): f=open(flname) a=f.readlines() del a0 L3= for line in a: line=line.strip() L1=line.split() avg_score=int(int(L11)+int(L12)/2) L3.append(L10,avg_score) f.close() print("學(xué)號

42、平均分") for L2 in L3: print(L20+" "+str(L21)(2) 定義函數(shù)calAvg(),計(jì)算某一門課程的平均分(函數(shù)參數(shù)為某門課成績對應(yīng)的列表名,返回值為該門課的平均分)def calAvg(L): #函數(shù)代碼f=open("c:testscore3.txt")a=f.readlines()del a0L2=L3=for line in a: line=line.strip() L1=line.split() L2.append(int(L11) L3.append(int(L12)f.close()print("專業(yè)課1的總平均分為",calAvg(L2)print("專業(yè)課2的總平均分為",calAvg(L3)參考答案:def calAvg(L): sum,count=0,0 for score in L: sum+=score count+=1 avg_score=int(sum/count) return avg_score3. 用函數(shù)或函數(shù)的遞歸實(shí)現(xiàn)求n!的算法。(主程序已給出)。同時(shí)估計(jì)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論