python练习集100题(21-40)
題目21:兩個乒乓球隊進行比賽,各出3人。甲隊為a,b,c三人,乙隊為x,y,z三人。以抽簽決定比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x、z比,請編程找出三隊比賽名單。
first_list=['x','y','z'] for?i?in?first_list:????????#i是a的對手,j是b的對手,k是c的對手for?j?in?first_list:if(j!=i):???????????for?k?in?first_list:if(k!=i)and(k!=j):if(i!='x')and(k!='x')and(k!='z'):print('a?pk?%s,b?pk?%s,c?pk?%s'?%(i,j,k)) 輸出結果:a?pk?z,b?pk?x,c?pk?y題目22:有一分數序列:2/1,3/2,5/3,8/5,8/13,21/13...求出這個序列的前20項之和。
def?denominator(n):??????#定義分母if?n==1:return?1elif?n==2:return?2else:return?denominator(n-1)+denominator(n-2) sum_list=0 for?i?in?range(1,21):sum_list?+=denominator(i+1)/denominator(i)if?i==20:print('%d/%d'??%(denominator(i+1),denominator(i)),end='=')else:print('%d/%d'??%(denominator(i+1),denominator(i)),end='+') print(sum_list) 輸出結果: 2/1+3/2+5/3+8/5+13/8+21/13+34/21+55/34+89/55+144/89+233/144+377/233+610/377+987/610+1597/987+2584/1597+4181/2584+6765/4181+10946/6765+17711/10946=32.66026079864164題目23:利用遞歸函數調用方法,將所輸入的5個字符,以相反順序打印出來。
def?reverse_string(i):if?i==string_len-1:??????????????#讀取到最后一個字符print(input_string[i],end='')else:reverse_string(i+1)??????????#反向輸出print(input_string[i],end='') input_string=input('請輸入字符串:') string_len=len(input_string) reverse_string(0) 輸出結果:請輸入字符串:abcdefghijkkjihgfedcba題目24:有5個人坐在一起,問第五個人多少歲?她說比第四個人大2歲。問第四個人歲數,他說比第三個人大2歲。問第三個人,他又說比第二個人大2歲。問第二個人,說比第一個人大2歲。問最后一個人,她說是10歲。問第五個人多少歲。
def?get_age(num):???#遞歸計算if?num==1:return?10else:?return?2+get_age(num-1) var_gae=get_age(5) print('第一個人的年齡為:%d'??%var_gae) 輸出結果:第一個人的年齡為:18題目25:給一個不多于5位的正整數,要求:一、求它是幾位數,二、逆序打印出各位數字。
def?rever_num(num):??????????????????????#遞歸輸出if?num==num_len-1:print(input_number[num],end='')else:rever_num(num+1)print(input_number[num],end='') input_number=input('請輸出數字:') num_len=len(input_number) print('該數字有%d?位'?%num_len) rever_num(0) 輸出結果:請輸出數字:54682該數字有5?位28645題目26:《算經》中有這樣一個問題:今有雞翁一,值錢伍;雞母一,值錢三;雞鶵三,值錢一。凡百錢買雞百只,問雞翁、母、鶵各幾何?
for?i?in?range(21):??#i代表公雞for?j?in?range(34):#j代表母雞k=100-i-j????????#k代表小雞數量if(k%3==0)and?(i*5?+?j*3?+?k/3)==100:print('公雞%2d只,母雞%2d只,小雞%2d只'?%(i,j,k)) 輸出結果:公雞?0只,母雞25只,小雞75只公雞?4只,母雞18只,小雞78只公雞?8只,母雞11只,小雞81只公雞12只,母雞?4只,小雞84只題目27:漢諾塔問題,寺院里有3根柱子,第一根有N個盤子,從上往下越來越大。方丈要求小和尚A1把這N個盤子全部移到第三根柱子上,在移動過程中,始終只能小盤子壓著大盤子,而且每一次只能移動一個盤子。
def?move(n,x,y,z):???if?n==1:print('%s--->%s'??%(x,z))????#當只有最后一個盤子時,a--->celse:move(n-1,x,z,y)????print('%s--->%s'??%(x,z))move(n-1,y,x,z)num=int(input('輸入盤子的數量:')) print('移動%d個盤子的步驟如下:'?%num) move(num,'a','b','c') 輸出結果:輸入盤子的數量:3移動3個盤子的步驟如下:a--->ca--->bc--->ba--->cb--->ab--->ca--->c題目28:一年一度的歐洲杯比賽已經落幕,在其初賽階段采用循環制,設有n隊參加,初賽共進行n-1天,每對要求和其他各隊進行一場比賽,然后按照最后積分選拔進入決賽的球隊。要求每對每天只進行一場比賽,并且不能輪空。請安排比賽賽程。
題目29:編寫程序,實現輸入任意金額,可以由100、50、20、10、5、1、0.5、0.2、0.1這幾種面額組成。如找零68.9,可以由一張20塊、四張10塊、一張5塊、三張1塊、一張0.5、四張0.1組成。
parvalue=[10000,5000,2000,1000,500,100,50,10]??#找零的金額*100,方便計算 max_num=len(parvalue) num=[0,0,0,0,0,0,0,0] def?exchange(n):for?i?in?range(max_num):if(n>=parvalue[i]):num[i]?=n//parvalue[i]?n?-=parvalue[i]?*?num[i] input_number=float(input('請輸入要找零金額:')) input_number=int(input_number*100) exchange(input_number) print('%-6.2f元零錢的組成:'?%(input_number/100)) for?i?in?range(max_num):if?num[i]>0:print('%6.2f:%d張'?%(parvalue[i]/100,num[i])) 請輸入要找零金額:85.9 85.90?元零錢的組成:50.00:1張20.00:1張10.00:1張5.00:1張0.50:1張0.10:4張題目30:八皇后問題,在8*8的國際象棋上擺放八個皇后,使其不能相互攻擊,即任意兩個皇后都不能處于同一行、同一列或同一對角線上。
題目31:假設有一種29選7的彩票,每注由7個1-29的數字組成,且這7個號碼不能相同,編寫程序生成所有的組合。
MAXN=7???#每注彩票的位數 NUM=?29??#組成彩票的數字 num=[x?for?x?in?range(NUM)]??????????#29個數字 lottery=[x?for?x?in?range(MAXN)]?????#每一注彩票的號碼def?combine(n,m):for?i?in?range(m,n+1).__reversed__():lottery[m-1]=num[i-1]????????#保存一位數字if(m>1):combine(i-1,m-1)else:????????????????????????#m為1時輸出一注號碼for?j?in?range(0,MAXN).__reversed__():if?j==0:print('%d?'?%lottery[j])else:print('%d?'?%lottery[j],end='')for?i?in?range(NUM):num[i]=i+1 for?i?in?range(MAXN):lottery[i]=0combine(NUM,?MAXN) 輸出結果: ... 29?27?24?20?16?13?3? 29?27?24?20?16?13?2? 29?27?24?20?16?13?1? 29?27?24?20?16?12?11? 29?27?24?20?16?12?10? 29?27?24?20?16?12?9? 29?27?24?20?16?12?8? 29?27?24?20?16?12?7? ...題目32:輸入一個數字,使用變成方式求出其平方根是多少。
import?math num=int(input('請輸入數字:')) if?num?<0:print('輸入的數字應該為正數') else:x0=num/2x1=(x0+num/x0)/2while?True:x0=x1x1=(x0+num/x0)/2if(math.fabs(x0-x1)>=1e-6):break print('計算結果:%f'??%x1) print('公式計算結果?%f'?%math.sqrt(num)) 輸出結果:請輸入數字:2計算結果:1.416667公式計算結果?1.414214題目33:用計算機實現一個隨機1-100之間的數字,然后由用戶猜這個數字,根據用戶猜測的次數分別給出不同的提示。
題目34:模擬算法解決'擲骰子游戲',根據用戶輸入的骰子數量和參賽人數,由計算機隨機生成每一粒骰子的點數,再累加到每一個算首的總數。
from?random?import?randint def?play(n):t=0m=0for?i?in?range(n):t=randint(1,6)m+=tprint('??第%d粒:%d'?%((i+1),t))print('??總點數為:%d'?%m)while?True:n=int(input('設置骰子數量(輸入0表示退出:)'))??#骰子數量if?n==0:breakc=int(input('輸入參賽人數(輸入0表示退出:)'))??#參賽人數if?c==0:breakfor?i?in?range(c):print('第%d位選手擲出的骰子為:'?%(i+1))play(n) 設置骰子數量(輸入0表示退出:)3 輸入參賽人數(輸入0表示退出:)4 第1位選手擲出的骰子為:第1粒:3第2粒:6第3粒:2總點數為:11 第2位選手擲出的骰子為:第1粒:5第2粒:6第3粒:5總點數為:16 第3位選手擲出的骰子為:第1粒:3第2粒:4第3粒:3總點數為:10 第4位選手擲出的骰子為:第1粒:6第2粒:4第3粒:2總點數為:12 設置骰子數量(輸入0表示退出:)題目35:生成一個4*4的2維數組并將其順時針旋轉90度
list_data=[[?row?for?row?in?range(4)]?for?col?in?range(4)] for?i?in?range(4):print(list_data[i])print('-------------------------') for?r_index,row?in?enumerate(list_data):for?c_index?in?range(len(row)):if?r_index?<?c_index?:temp=list_data[r_index][c_index]list_data[r_index][c_index]=list_data[c_index][r_index]list_data[c_index][r_index]=temp for?i?in?range(4):print(list_data[i]) 輸出結果:[0,?1,?2,?3][0,?1,?2,?3][0,?1,?2,?3][0,?1,?2,?3]-------------------------[0,?0,?0,?0][1,?1,?1,?1][2,?2,?2,?2][3,?3,?3,?3]題目36:打印出楊輝三角形。??
1?
1 1?
1 2 1?
1 3 3 1?
1 4 6 4 1?
1 5 10 10 5 1??
題目37:有n個整數,使其前面各數順序向后移m個位置,最后m個數變成最前面的m個數。
def?move_list(n):print('原列表:',list_a)b=list_a[num-n:]print('需要移動的數:',b)for?i?in?range(num-n):b.append(list_a[i])print('移動后的列表:',b)num=int(input('輸入要生成的列表長度:')) list_a=[x?for?x?in?range(num)] move_m=int(input('要移動的長度:')) move_list(move_m) 輸出結果:輸入要生成的列表長度:15要移動的長度:4原列表:[0,?1,?2,?3,?4,?5,?6,?7,?8,?9,?10,?11,?12,?13,?14]需要移動的數:[11,?12,?13,?14]移動后的列表:?[11,?12,?13,?14,?0,?1,?2,?3,?4,?5,?6,?7,?8,?9,?10]?題目38:有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。?
num=int(input('請問一共有多少人:')) list_num=[x?for?x?in?range(1,num+1)] print(list_num) quit_num=0?#出圈人數 k=0????????#計數3 i=0????????#計數數組 while(quit_num<len(list_num)-1):if(list_num[i]!=0):k+=1?if(k==3):??????????#數到三出局print('出局者:%d'??%list_num[i])?list_num[i]=0?quit_num+=1?k=0?i+=1if(i==len(list_num)):??#數到最后,重新數i=0? for?i?in?range(len(list_num)):?if(list_num[i]!=0):print("最后剩下的:%d"?%list_num[i])? 請問一共有多少人:15 [1,?2,?3,?4,?5,?6,?7,?8,?9,?10,?11,?12,?13,?14,?15] 出局者:3 出局者:6 出局者:9 出局者:12 出局者:15 出局者:4 出局者:8 出局者:13 出局者:2 出局者:10 出局者:1 出局者:11 出局者:7 出局者:14 最后剩下的:5題目39:我們來玩一個數字游戲,我已經想好了一個三位數abc(a是百位,b是十位,c是個位)。并且告訴你acb、bac、bca、cab、cba的和是2012。你知道我所想的那個數是多少嗎?
for?i?in?range(100,1000):a=i//100b=(i%100)//10c=i%10sum_num=(a+b+b+c+c)*100+(c+a+c+a+b)*10+b+c+a+b+aif?sum_num==2012:print(i) 輸出結果: 208題目40:神奇的125874,125874,125874*2=251748,125874和他的兩倍251748是由相同的數構成,位置不同而已; 求最小的x,使得x,2x,3x,4x,5x,6x的倍數所組成的數和本身一樣。
set_num=set()????#原數字組成的集合 set_numx=set()???#倍乘后組成的集合 n=1??????????????#起始數字 def?jud_num(num):for?i?in?str(num):set_num.add(i)???#原數字組成的集合?for?i?in?range(1,7):num_i=num*ifor?j?in?str(num_i):??set_numx.add(j)??#倍乘后組成的集合if??set_numx.issubset(set_num):set_numx.clear()else:?set_numx.clear()set_num.clear()return?0return?1 while?True:ret=jud_num(n)if?ret==1:print('該數字為:%d'?%n)for?i?in?range(1,7):print('%d*%d=%d'?%(n,i,n*i))breakn+=1 輸出結果:該數字為:142857142857*1=142857142857*2=285714142857*3=428571142857*4=571428142857*5=714285142857*6=857142本文轉自 夢想成大牛 51CTO博客,原文鏈接:http://blog.51cto.com/yinsuifeng/1906088,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的python练习集100题(21-40)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我为NET狂-----大前端专帖
- 下一篇: SaltStack实战之配置管理-Jin