题目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天,每对要求和其他各队进行一场比赛,然后按照最后积分选拔进入决赛的球队。要求每对每天只进行一场比赛,并且不能轮空。请安排比赛赛程。

a=[[0 for col in range(9)] for row in range(9)]   #创建二维列表
def gamecal(k,n):                    #处理编号k开始的n个球队if n==2:a[k][1]=k      #参赛球队编号a[k][2]=k+1    #对阵球队编号 a[k+1][1]=k+1  #参赛球队编号a[k+1][2]=k    #对阵球队编号else:gamecal(k,n//2)gamecal(k+n//2,n//2)for i in range(k,k+n//2):for j in range(n//2+1,n+1):a[i][j]=a[i+n//2][j-n//2]for i in range(k+n//2,k+n):for j in range(n//2+1,n+1):a[i][j]=a[i-n//2][j-n//2]
j=2
m=int(input('参赛球队数:'))
for i in range(2,9):j=j*2if j==m :break
if i>=8:print('参赛对数必须为2的整数次幂,并且不超过64')
gamecal(1,m)
print('编号',end=' ')
for i in range(2,m+1):if i==m:print('%2d天' %(i-1))else:print('%2d天' %(i-1),end=' ')
for i in range(1,m+1):for j in range(1,m+1):if j==m:print('%4d' %a[i][j],end=' ')else:print('%4d' %a[i][j],end=' ')print(end='\n')
参赛球队数:8
编号  1天  2天  3天  4天  5天  6天  7天1    2    3    4    5    6    7    8 2    1    4    3    6    5    8    7 3    4    1    2    7    8    5    6 4    3    2    1    8    7    6    5 5    6    7    8    1    2    3    4 6    5    8    7    2    1    4    3 7    8    5    6    3    4    1    2 8    7    6    5    4    3    2    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的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后都不能处于同一行、同一列或同一对角线上。

solution=[x for x in range(8)]   #声称数组,每个元素代表每一行皇后应摆放的位置
N=8
sols=0
def place(row,col):    for j in range(row):  #错误摆放方式if (row - j == solution[row]-solution[j]) or (row + solution[row]==j+solution[j]) or (solution[j]==solution[row]):return 0return 1
def backtrack(row):global sols    #方法总数if(N==row):sols +=1for k in range(N):if k==N-1:print('%d ' %solution[k])else:print('%d ' %solution[k],end='')else:for i in range(N):solution[row] =iif(place(row,i)):backtrack(row+1)
def queens():backtrack(0)queens()
print('共有方案:%d' %sols)
输出结果:
...
6 4 2 0 5 7 1 3
7 1 3 0 6 4 2 5
7 1 4 2 0 6 3 5
7 2 0 5 1 4 6 3
7 3 0 2 5 1 6 4
共有方案:92

题目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之间的数字,然后由用户猜这个数字,根据用户猜测的次数分别给出不同的提示。

from random import randint
n=randint(1,100)
print('生成随机数为%d' %n)
i=0
while True:num=int(input('输入你猜的数字1-100:'))i+=1if(num>n):print('错误,数字太大了!')elif(num<n):print('错误,数字太小了!')else :print('回答正确')break
print('一共猜了 %d 次。' %i)
if i<=5:print('你太聪明了,这么快猜了出来!')
else:print('还需要改进方法,以便更快才出来!')
输出结果:生成随机数为47输入你猜的数字1-100:50错误,数字太大了!输入你猜的数字1-100:46错误,数字太小了!输入你猜的数字1-100:47回答正确一共猜了 3 次。你太聪明了,这么快猜了出来!

题目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 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1

num=int(input('输入要生成的杨辉三角行数:'))
triangle=[[ row for row in range(num)] for col in range(num)]
for i in range(num):triangle[i][0]=1triangle[i][i]=1for i in range(2,num):for j in range(1,i):triangle[i][j]=triangle[i-1][j-1]+triangle[i-1][j]for i in range(num):for j in range(i+1):if j==i:print(triangle[i][j])else:print(triangle[i][j],end=' ')
输出结果:
输入要生成的杨辉三角行数:10
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 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)相关推荐

  1. python练习集100题_8道关于python的练习题

    正所谓检验出真知,唯有通过做练习的方式才知道自己懂得多少.下面是一些基础的Python练习题,python编程的学习者可以根据自己的需求和学习程度,废话不多说,赶紧开始吧. 1.整型,讲讲python ...

  2. python零基础实例-零基础学习Python开发练习100题实例(1)

    零基础学习Python开发练习100题实例(1) 2018-02-25 09:37:59 2864浏览 1.题目:有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序 ...

  3. python入门经典100题-零基础学习Python开发练习100题实例(1)

    零基础学习Python开发练习100题实例(1) 2018-02-25 09:37:59 2854浏览 1.题目:有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序 ...

  4. python基础代码事例-零基础学习Python开发练习100题实例(2)

    零基础学习Python开发练习100题实例(2) 2018-02-26 13:11:39 1934浏览 11.题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个 ...

  5. Python 语感训练100题(参考答案)

    说明: Python 语感训练100题中,几乎每一道题都有多种解决方案,这里提供的答案仅供参考.答案陆续更新中.如有疑问,请联系我. 1. 将元组 (1,2,3) 和集合 {4,5,6} 合并成一个列 ...

  6. 【python】python基础测试100题

    python基础面试测试100题 Q1.什么是Python? Q2.Python的主要功能是什么? Q3.Python中支持的数据类型有哪些? Q4.列表和元组有什么区别? Q5.什么是Python模 ...

  7. Python 3.X 练习集100题 02

    企业发放的奖金根据利润提成.利润(I): 低于或等于10万元时,奖金可提10%: 高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%: 20万到40万之间 ...

  8. python趣味编程10例-Python趣味编程100题

    企业发放的奖金根据利润提成.利润(I)低于或等于 10万元时,奖金可提 10%:利润高于 10万元,低于 20 万元时,低于10 万元的部分按 10%提成,高于 10万元的部分,可提成 7.5%:20 ...

  9. python123平台作业答案循环结构棋盘放米_python练习集100题(1-20)

    题目1:有1.2.3.4四个数,能组成多少个互不相同且无重复的三位数?都是多少?list_num=[1,2,3,4] all_num=[] for i in list_num: for j in li ...

最新文章

  1. Android多模块覆盖率,Android代码覆盖率初探—问题已解决!
  2. 浮岛物语(FORAGER): 在 GameMaker 中做优化
  3. 无限流量手机怎样改服务器,无限流量手机服务器
  4. php怎么去除内容,php怎么把html标签去除?
  5. oracle join过滤数据,oracle join on 数据过滤问题
  6. 在哪里学python-python的强项在哪里
  7. caffe安装编译问题-ImportError: No module named caffe
  8. 王者荣耀空白代码_在线空白昵称代码复制
  9. Linux中移动光标cw什么意思,Linux下的vi命令详解
  10. idea android远程调试,idea 远程调试
  11. 【旺铺2012分享】导航CSS代码使用修改技巧!
  12. 工业物联网网关是什么?工业物联网网关有什么作用?
  13. 解析:学Java好还是HTML5好?
  14. 【正点原子FPGA连载】第十二章 呼吸灯实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
  15. BlumNet: Graph Component Detection for Object Skeleton Extraction阅读笔记
  16. 微信企业号用户验证php,企业号OAuth2.0验证企业用户接口
  17. 基于全景相机的深度学习综述
  18. Jquery选择器(一)
  19. nyoj82(迷宫寻宝)
  20. CentOS 定时运行脚本配置

热门文章

  1. docker commit 发布自己的镜像
  2. 深入理解yield from语法
  3. 将下图的nfa确定化为dfa_作业8 非确定的自动机NFA确定化为DFA
  4. ftok file php,Linux和PHP中的ftok函数返回值不一致问题跟踪
  5. 贝叶斯数据分析_周末说说数据分析(2)
  6. 2018年4月java自考真题,全国2018年4月自考互联网数据库考试真题
  7. 4.在master机器上配置环境变量
  8. 【数学和算法】奇异值分解在【图像压缩】中的应用
  9. 【Linux】9.ssh登录与scp文件拷贝
  10. 机器学习:林智仁libsvm 工具箱 在matlab下的应用总结