【Python】Python 100题 分类入门练习题 - 新手友好
Python 100题 分类入门练习题 - 新手友好篇 - 整合篇
- 一、数学问题
- 题目1:组合数字
- 题目2:利润计算
- 题目3:完全平方数
- 题目4:日期天数计算
- 题目11:兔子繁殖问题
- 题目18:数列求和
- 题目19:完数判断
- 题目21:猴子吃桃
- 题目24:分数序列求和
- 题目25:阶乘累加
- 题目26:阶乘递归
- 题目28:年龄推理
- 题目80:猴子分桃问题
- 题目83:奇数组合数
- 题目85:9的倍数验证
- 题目81:数学等式验证
- 二、字符串操作
- 题目13:水仙花数
- 题目17:字符统计
- 题目33:列表转字符串
- 题目62:子串查找
- 题目89:加密算法
- 题目96:子串计数
- 题目98:大小写转换
- 题目60:字符串长度
- 题目86:字符串连接
- 题目31:星期判断
- 三、列表与字典操作
- 题目5:三数排序
- 题目38:矩阵对角线
- 题目44:矩阵相加
- 题目68:数组循环移位
- 题目69:约瑟夫环问题
- 题目72:创建链表
- 题目73:反向链表
- 题目100:列表转字典
- 题目39:数组插入排序
- 题目67:数组极值交换
- 题目79:字符串排序
- 题目66:数组逆序输出
- 题目40:数组逆序
- 四、文件操作
- 题目97:写入文件
- 题目98:文件保存
- 题目99:文件合并排序
- 五、日期时间处理
- 题目10:格式化时间
- 题目16:日期输出
- 题目95:日期解析
- 题目91:时间函数示例1
- 题目92:时间函数示例2
- 题目93:时间函数示例3
- 题目94:反应速度测试
- 六、图形绘制
- 题目56:圆形绘制
- 题目57:直线绘制
- 题目58:方形绘制
- 题目59:综合图形
- 题目63:椭圆绘制
- 题目64:图形组合
- 题目65:艺术图案
- 题目23:菱形打印
- 七、算法与数据结构
- 题目6:斐波那契数列
- 题目12:素数筛选
- 题目20:小球弹跳计算
- 题目22:比赛名单排列
- 题目61:杨辉三角生成
- 题目76:分段函数计算
- 题目77:循环输出列表
- 题目78:最大年龄查找
- 题目84:列表极值交换
- 题目8:九九乘法表
- 题目9:延时输出
- 题目14:质因数分解
- 题目15:成绩分级
- 八、位运算
- 题目51:按位与
- 题目52:按位或
- 题目53:按位异或
- 题目54:位截取
- 题目55:按位取反
- 题目82:八进制转十进制
- 九、其他编程问题
- 题目27:递归逆序
- 题目29:数字拆分统计
- 题目30:回文数判断
- 题目32:列表逆序输出
- 题目34:三次输出函数
- 题目35:文本颜色设置
- 题目36:素数筛选
- 题目37:十数排序
- 题目41:静态变量
- 题目42:自动变量
- 题目43:静态变量案例
- 题目45:数字累加
- 题目46:平方阈值判断
- 题目47:变量交换
- 题目48:数字比较
- 题目49:匿名函数
- 题目50:随机数生成
- 题目71:学生数据IO
- 题目87:结构体变量传递
- 题目88:星号打印
一、数学问题
题目1:组合数字
题目1: 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? # 正常 num =[] for a in range(1,5): for b in range(1,5): for c in range(1,5): if (a != b and a!= c and b!=c) : # if a != b != c 只判断了a不等于b,b不等于c,没有判断a和c的关系 num.append(a*100 + b*10 + c) print(num) # 简写: x = [1,2,3,4] num = [i*100 + j*10 + k for i in x for j in x for k in x if (j != i and k != j and k != i)] # itertools ,结果需处理 import itertools num = [] x=[1,2,3,4] for i in itertools.permutations(x,3): num.append(i) print(num)
题目2:利润计算
题目2:企业发放的奖金根据利润提成。 利润(I)低于或等于10万元时,奖金可提10%; 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%; 20万到40万之间时,高于20万元的部分,可提成5%; 40万到60万之间时高于40万元的部分,可提成3%; 60万到100万之间时,高于60万元的部分,可提成1.5%, 高于100万元时,超过100万元的部分按1%提成, 从键盘输入当月利润I,求应发放奖金总数? """ # 比较简单,直接上答案 def get_bonus(profit): bonus = 0 if profit 1: if i % 3 == 0: n.pop(0) else: n.insert(len(n),n.pop(0)) # 同68 考验逻辑 i += 1 print(n)
题目72:创建链表
题目72:创建一个链表。 """ l=[ input("please input a number:\n") for i in range(5)] print(l)
题目73:反向链表
题目73:反向输出一个链表。 """ l=[ input("please input a number:\n") for i in range(5)] l.reverse() print(l)
题目100:列表转字典
题目100:列表转换为字典。 """ # 从列表创建字典 i = ['a','b','c'] l = [1,2,3] b=dict(zip(i,l)) print(b)
题目39:数组插入排序
题目39:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 """ 分析: 题目其实说的不太明确,所以要挖掘隐藏条件: 已经排好序则代表按顺序大小排, 新输入的数,也需要从小到大排; 所以思路整体上就是循环比大小; a = [1,2,3,5,6,7] 插入数字 4 a.append(4) sorted(a) 但显然题目考察的是希望自己能写这个逻辑,纯循环遇上数字较多的效率会比较低,所以可以折半选取再循环; a = [1,2,3,5,6,7] b = 4 for i in range(len(a)-1): if b >= a[i] and b i: print('please input a little smaller') guess = int(input('input your guess:\n')) else: print('please input a little bigger') guess = int(input('input your guess:\n')) end = time.clock() b = time.time() var = (end - start) / 18.2 print (var) # print 'It took you %6.3 seconds' % time.difftime(b,a)) if var
六、图形绘制
题目56:圆形绘制
题目56:画图,学用circle画圆形。 """ 分析: 主要为turtle包的使用 import turtle turtle.title("打开画图软件") turtle.setup(800,600,0,0) pen=turtle.Turtle() pen.color("blue") pen.width(5) pen.shape("turtle") pen.speed(10) pen.circle(100)
题目57:直线绘制
题目57:画图,学用line画直线。 """ 分析: 主要为turtle包的使用 import turtle def drawline(n): t=turtle.Pen() t.color(0.3,0.8,0.6) #设置颜色,在0--1之间 t.begin_fill() #开始填充颜色 for i in range(n): #任意边形 t.forward(50) t.left(360/n) t.end_fill() #结束填充颜色 drawline(4)
题目58:方形绘制
题目58:画图,学用rectangle画方形。 """ 分析: 考察tkinter包的使用 from tkinter import * root = Tk() root.title('Canvas') canvas = Canvas(root,width = 400,height = 400,bg = 'yellow') x0 = 263 y0 = 263 y1 = 275 x1 = 275 for i in range(19): canvas.create_rectangle(x0,y0,x1,y1) x0 -= 5 y0 -= 5 x1 += 5 y1 += 5 canvas.pack() root.mainloop()
题目59:综合图形
题目59:画图,综合例子。 """ 分析: 考察tkinter包的使用 if __name__ == '__main__': from Tkinter import * canvas = Canvas(width = 300,height = 300,bg = 'green') canvas.pack(expand = YES,fill = BOTH) x0 = 150 y0 = 100 canvas.create_oval(x0 - 10,y0 - 10,x0 + 10,y0 + 10) canvas.create_oval(x0 - 20,y0 - 20,x0 + 20,y0 + 20) canvas.create_oval(x0 - 50,y0 - 50,x0 + 50,y0 + 50) import math B = 0.809 for i in range(16): a = 2 * math.pi / 16 * i x = math.ceil(x0 + 48 * math.cos(a)) y = math.ceil(y0 + 48 * math.sin(a) * B) canvas.create_line(x0,y0,x,y,fill = 'red') canvas.create_oval(x0 - 60,y0 - 60,x0 + 60,y0 + 60) for k in range(501): for i in range(17): a = (2 * math.pi / 16) * i + (2 * math.pi / 180) * k x = math.ceil(x0 + 48 * math.cos(a)) y = math.ceil(y0 + 48 + math.sin(a) * B) canvas.create_line(x0,y0,x,y,fill = 'red') for j in range(51): a = (2 * math.pi / 16) * i + (2* math.pi / 180) * k - 1 x = math.ceil(x0 + 48 * math.cos(a)) y = math.ceil(y0 + 48 * math.sin(a) * B) canvas.create_line(x0,y0,x,y,fill = 'red') mainloop()
题目63:椭圆绘制
题目63:画椭圆。 """ 分析: 考察tkinter包的使用 if __name__ == '__main__': from Tkinter import * x = 360 y = 160 top = y - 30 bottom = y - 30 canvas = Canvas(width = 400,height = 600,bg = 'white') for i in range(20): canvas.create_oval(250 - top,250 - bottom,250 + top,250 + bottom) top -= 5 bottom += 5 canvas.pack() mainloop()
题目64:图形组合
""" 题目64:利用ellipse 和 rectangle 画图。。 """ if __name__ == '__main__': from Tkinter import * canvas = Canvas(width = 400,height = 600,bg = 'white') left = 20 right = 50 top = 50 num = 15 for i in range(num): canvas.create_oval(250 - right,250 - left,250 + right,250 + left) canvas.create_oval(250 - 20,250 - top,250 + 20,250 + top) canvas.create_rectangle(20 - 2 * i,20 - 2 * i,10 * (i + 2),10 * ( i + 2)) right += 5 left += 5 top += 10 canvas.pack() mainloop()
题目65:艺术图案
题目65:一个最优美的图案。 """ import math class PTS: def __init__(self): self.x = 0 self.y = 0 points = [] def LineToDemo(): from Tkinter import * screenx = 400 screeny = 400 canvas = Canvas(width = screenx,height = screeny,bg = 'white') AspectRatio = 0.85 MAXPTS = 15 h = screeny w = screenx xcenter = w / 2 ycenter = h / 2 radius = (h - 30) / (AspectRatio * 2) - 20 step = 360 / MAXPTS angle = 0.0 for i in range(MAXPTS): rads = angle * math.pi / 180.0 p = PTS() p.x = xcenter + int(math.cos(rads) * radius) p.y = ycenter - int(math.sin(rads) * radius * AspectRatio) angle += step points.append(p) canvas.create_oval(xcenter - radius,ycenter - radius, xcenter + radius,ycenter + radius) for i in range(MAXPTS): for j in range(i,MAXPTS): canvas.create_line(points[i].x,points[i].y,points[j].x,points[j].y) canvas.pack() mainloop() if __name__ == '__main__': LineToDemo()
题目23:菱形打印
题目23:打印出如下图案(菱形): * *** ***** ******* ***** *** * """ def pic(n): for i in range(0,n): a = abs(i - int(n/2)) b = n - abs(i - int(n/2)) print(" "*a+"*"*(b-a)) pic(7)
七、算法与数据结构
题目6:斐波那契数列
题目6:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。 """ 从第3个数起,每一个数等于前2个数的和; num = f(n-1)+f(n-2) (n>=2) def Fibonacci_sequence(n): a, b = 0, 1 while n>0: a, b, n = b, a + b, n - 1 print(a) Fibonacci_sequence(10)
题目12:素数筛选
题目12:判断101-200之间有多少个素数,并输出所有素数。 """ 分析: 判断素数x方法: 从2-->(x-1)之间能有一个数被整除 则非素数; num = [] for a in range(101,200): for b in range(2,a-1): if a%b == 0 : break else: # 这里位置不能写错,不然容易陷入无限循环; num.append(a) print(num)
题目20:小球弹跳计算
题目20:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? """ 落下高度 返回高度 落地时经过距离 第一次 100 50 100 第二次 50 25 100 + 100 = 200 第三次 25 12.5 50 + 100 + 100 = 250 第四次 12.5 6.25 25 + 100 + 100 +50 = 275 可以看到规律 第n次 分析找出规律即可 def fall(n): height = 100 far = 100 for i in range(2, n+1): far = far + height height = height / 2 return far,height/2 fall(10)
题目22:比赛名单排列
题目22:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。 a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 """ 分析: 直接可以得出答案,c和y, a和z,b和x ,用变成实现则将判断逻辑写下即可; for a in ['x','y','z']: for b in ['x', 'y', 'z']: for c in ['x', 'y', 'z']: if(a!=b)and(b!=c)and(c!=a) and (a!='x') and (c!='x') and (c!='z'): print('a和%s比赛,b和%s比赛,c和%s比赛' %(a,b,c)) 法2: m=['a','b','c'] n=['x','y','z'] L=[] for i in range(0,3): for j in range(0,3): L.append(m[i]+n[j]) L.remove('ax') L.remove('ay') L.remove('by') L.remove('bz') L.remove('cx') L.remove('cz') print(L)
题目61:杨辉三角生成
题目61:打印出杨辉三角形(要求打印出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.第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。 2.每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。 即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即 C(n+1,i)=C(n,i)+C(n,i-1)。 def Yh_triangles(): L = [1] while True: yield L L = [sum(i) for i in zip([0]+L, L+[0])] def Yh_triangles(num = 10): L = [[1]] for i in range(1,num): L.append([(0 if j== 0 else L[i-1][j-1])+ (0 if j ==len(L[i-1]) else L[i-1][j]) for j in range(i+1)]) return L
题目76:分段函数计算
题目76:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n """ # 比较简单,直接上代码 def num(n): sum = 0 if n%2 == 0 : for i in range(1,int(n/2)+1): sum += 1/(2*i) return sum if n%2 != 0 : for i in range(1,int((n+1)/2)+1): sum += 1/(2*i-1) return sum num(5) # 同理,应用range()的步长会更高效; def num(n): sum_tmp = [1/i for i in range(n,0,-2)] return sum(sum_tmp) num(4)
题目77:循环输出列表
题目77:循环输出列表 """ ls = ['Kobe','24','8'] for i in range(len(ls)): print(ls[i])
题目78:最大年龄查找
题目78:找到年龄最大的人,并输出。请找出程序中有什么问题。 """ person_age = {"li":18,"wang":50,"zhang":20,"sun":22} def get_max(dict): max_age = 0 for key, value in dict.items(): if value > max_age: max_age = value name = key print(name) print(max_age) get_max(person_age)
题目84:列表极值交换
题目84:连接字符串。 """ list1 = ['Kobe','8','24'] list2 = ['Iverson','3'] print(list1 + list2)
题目8:九九乘法表
题目8:输出 9*9 乘法口诀表。 """ 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 for a in range(1,10): for b in range(1,10): print( str(a),"*",str(b),"=",a*b )
题目9:延时输出
题目9:暂停一秒输出。 程序分析:使用 time 模块的 sleep() 函数。 """ # 没有具体要求,能实现延迟即可; import time id = [1,2,3] for i in range(len(id)): print(i) time.sleep(2)
题目14:质因数分解
题目14:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 """ 分析: 要找出全部因数比较容易,第一次写输出的是[2,3,5],没有考虑到重复因子的情况,所以要加while判断的逻辑; def get_factor(n): print ('{} = '.format(n), end=" ") if not isinstance(n, int) or n =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 """ def score(n): if n>=90: print("A") elif 60=7位,然后取右端开始的4-7位, 考核截取字符串; num = input("输入整数: ") num = list(num)[-7:-3] 举一反三: str = '0123456789' print(str[:]) # 截取字符串的全部字符 print(str[0:3]) # 截取第1位到第3位的字符 print(str[6:]) # 截取第7个字符到结尾 print(str[:-3]) # 截取从头开始到倒数第3个字符之前 print(str[2]) # 截取第3个字符 print(str[-1]) # 截取倒数第1个字符 print(str[::-1]) # 创造1个与原字符串顺序相反的字符串 print(str[-3:-1]) # 截取倒数第3位到倒数第1位之前的字符 print(str[-3:]) # 截取倒数第3位到结尾 print(str[:-5:-2]) # 逆序截取==> 先截取,再进行逆序.逆序为下标 https://blog.csdn.net/weixin_41613094/article/details/122325983?spm=1001.2014.3001.5501 value: 012 0123456789 6789 0123456 2 9 9876543210 78 789 97 逆袭截取解释: str = 'abcdefghijklmn' 位置编号: 012345678910111213 对应编号: -14-13-12-11-10-9-8-7-6-5-4-3-2-1 # 官方方法 分析: (1)先使a右移4位。 (2)设置一个低4位全为1,其余全为0的数。可用~(~0
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。