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