python學習--小練習題(二)
階段性總結2
201802231.求0—7所能組成的奇數個數。程式分析:組成1位數是4個。組成2位數是7*4個。組成3位數是7*8*4個。組成4位數是7*8*8*4個。......try: number = int(raw_input("please input a number 1~7:"))except: print "error occur"if number ==1: print "4"else: print eval((str(4)+"*"+str(7)+"*"+"*".join([str(8)]*(number-2))).strip("*"))2.某個公司採用公用電話傳遞資料,資料是四位的整數,在傳遞過程中是加密的,加密規則如下:每位數字都加上5,然後用和除以10的餘數代替該數字,再將第一位和第四位交換,第二位和第三位交換。try: number = raw_input("please input 4 numbers :")except: print "error occur"newnum=[]for i in number: j = (int(i)+5)%10 newnum.append(j)print newnumnewnum[0],newnum[3]=newnum[3],newnum[0]newnum[1],newnum[2]=newnum[2],newnum[1] print newnum3.計算一個四乘四矩陣的所有元素的和,以及對角線之和a =[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],]sum=0sum2=0for i in a: for j in i: sum=sum+jprint "sum",sumfor i in range(0,len(a)): sum2+=a[i][i]print "sum2",sum2201802241.輸入陣列,最大的與第一個元素交換,最小的與最後一個元素交換,輸出陣列。listnum=[]while 1: try: num = raw_input("please input a num:") if num.strip() =='stop': break else: listnum.append(num) except: print "input error occur"print listnummaxnum = max(listnum)minnum = min(listnum)maxindex = listnum.index(maxnum)minindex = listnum.index(minnum)listnum[0],listnum[maxindex]=listnum[maxindex],listnum[0]listnum[-1],listnum[minindex]=listnum[minindex],listnum[-1]print listnum2.有n個整數,使其前面各數順序向後移m個位置,最後m個數變成最前面的m個數listnum =[1,2,3,4,5,6]m =2lastnum=listnum[-m:]print lastnumfrontnum = listnum[0:-m]print frontnumprint lastnum+frontnum3:給一個不多於5位的正整數,要求:一、求它是幾位數,二、逆序打印出各位數字。程式分析:學會分解出每一位數。num=raw_input("please input a number")if len(num)>5: print "len num is too long"else: print len(num) print num[::-1]4.請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續判斷第二個字母。weekday={"m":"monday","tu":"tuesday","w":"wensday","th":"thursday","f":"friday","sa":"saturday","su":"sunday"}input_letter=raw_input("please input a day")if weekday.has_key(input_letter): print weekday[input_letter]else: input_second=raw_input("please input a day second letter") inputall =input_letter+input_second if weekday.has_key(input_letter): print weekday[inputall] else: print "you input wrong"5.輸入一行字元,判斷有多少數字,多少字母,多少空格,多少其他字元inputstr=raw_input("please input a sentence")letter_num=0digit_num=0space_num=0other_num=0for i in inputstr: if i.isalpha(): letter_num+=1 elif i.isdigit(): digit_num+=1 elif i.isspace(): space_num+=1 else: other_num+=1 print u"共有字母:",letter_numprint u"共有數字:",digit_numprint u"共有空格:",space_numprint u"共有其他字元:",other_numprint u"共有字母:",letter_numprint u"共有數字:",digit_numprint u"共有空格:",space_numprint u"共有其他字元:",other_num6.輸入a, n result = a+aa+aaaa = raw_input("please input a")n= int(raw_input("please input n"))print "+".join([a*i for i in range(1,n+1)]) 方法2:a=int(raw_input("input a value:"))times=int(raw_input("input count times:"))sum=ab=afor i in range(times-1): sum=a*10+a%10+sum a=a*10+a201802251.有四個數字:1、2、3、4,能組成多少個互不相同且無重複數字的三位數?各是多少?程式分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去 掉不滿足條件的排列。num=[1,2,3,4]result=[]for i in num: for j in num: for z in num: if i!=j and i!=z and j!=z: newnum=str(i)+str(j)+str(z) result.append(newnum)print result2.題目:輸入三個整數x,y,z,請把這三個數由小到大輸出。程式分析:我們想辦法把最小的數放到x上,先將x與y進行比較,如果x>y則將x與y的值進行交換,然後再用x與z進行比較,如果x>z則將x與z的值進行交換,這樣能使x最小。x,y,z = raw_input("please input 3 nums:a,b,c").split(",")if x>y: x,y=y,xif x>z: x,z=z,xif y>z: y,z=z,yprint x,y,z3.做個抽獎程式,可以輸入一個人的名字和抽獎號,然後隨機抽取存在的抽獎號,程式可以指定抽取次數,抽取後顯示抽獎號和名字,全部抽取完成後輸出抽獎的總結果import random#輸入一個抽獎池~~~~peopledict={}while 1: try: name,num = raw_input("please input name and num,split,").split(",") peopledict[num]=name except: breakprint peopledict#抽獎結果resultdict={}#請輸入抽獎次數try: num = int(raw_input("please input num:"))except: print "input error"#進行抽獎啦啦啦while num>0: result = random.choice(peopledict.keys()) resultdict[result]=peopledict[result] #防止一個噁心的人被連續中獎兩次!!! del peopledict[result] num-=1print resultdict.values()4.將一個句子中的所有數字和標點符號刪除掉s="i am a gitl 123,@#$"result=''for i in s: if i in [1,2,3,4,5,6,7,8,9,",","!","."]: continue else: result+=iprint result2018.2.261.有一個長度是101的陣列,存在1~100的數字,有一個是重複的,拿重複的找出來import randoma=range(100)random_num = random.randint(0,99)a.insert(random_num,random_num)print random_numnumber = [i for i in a if a.count(i)==2]print number[0]---------------------------------------------------------------------------------------------------------------------------2.2個長度相同的list,一個裡面的做字典的key,另一個做value,請寫個函式實現a=[1,"2",[3,4],(5,6),{7:8}]b=[0,1,2,3]d={}for i in range(len(a)): if not isinstance(a[i],(int,float,complex,long,str,unicode,tuple)): continue else: d[a[i]]=b[i]print d---------------------------------------------------------------------------------------------------------------------------a=[1,"2",[3,4],(5,6),{7:8}]b=[0,1,2,3]d={}for i in range(len(a)): if not isinstance(a[i],(int,float,complex,long,str,unicode,tuple)): continue else: d[a[i]]=b[0] del b[0]print d3.統計一個字串中每個字母累積出現的字母個數統計一個字串中每一個字母一共累計出現的次數。思路:"aabbaabbccddee" a4 b4 c2遍歷:沒有記過數,則值為1,記過數+1k,vd.has_key----------------------------------------------------------------------------------------------#coding=utf-8a="aabbaabbccddee"dict={}for i in a: if dict.has_key(i): dict[i]+=1 else: dict[i]=1print dict201802271.有一個長度為101的陣列,存在1-100的數字,有一個是重複的,把重複的找出來import randomlistnum=[]for i in range(0,101): listnum.append(i)#print listnuma =random.randint(1,100)listnum.append(a)result =[i for i in listnum if listnum.count(i)==2]print result[0]2.2個長度相同的list,一個裡面的作字典的key,另一個做value,請寫個函式實現a=["a","b","c",1,(3,4)]b=[1,2,3,4,5]dictnum={}for i in range(len(a)): if not isinstance(a[i],(int,float,complex,long,str,unicode,tuple)): continue else: dictnum[a[i]]=b[i]print dictnum3.將一個多重巢狀的列表的元素進行互換,存到另一個同等維度的巢狀列表中,例如:[[1,2,3],[4,5,6]]互換後變成[[1,4],[2,5],[3,6]]a=[[1,2,3],[4,5,6]]print [[j[i] for j in a] for i in range(3)]