Python123练习题-示例
练习题1:Hello World输出
1.1 描述要求如下:
1.2 PyCharm 运行结果如下:
test = eval(input(\"请输入任意数字后回车:\"))if test == 0: print(\"Hello World\")elif test > 0: print(\"He\\nll\\no \\nWo\\nrl\\nd\")else: print(\"H\\ne\\nl\\nl\\no\\n \\nW\\no\\nr\\nl\\nd\")
练习题2:数值运算
2.1 描述要求如下:
2.2 PyCharm 运行结果如下:
2.3 代码示例如下:
num = input(\"请输入算式(如:1+2):\")print(\"{:.2f}\".format(eval(num)))
练习题3:turtle八边形绘制
3.1 描述要求如下:
3.2 PyCharm 运行结果如下:
3.3 代码示例如下:
import turtle as tt.pensize(2)for i in range(8): t.fd(100) t.left(45)
练习题4:turtle八角图形绘制
4.1 描述要求如下:
4.2 PyCharm 运行结果如下:
4.3 代码示例如下:
import turtle as tt.pensize(2)for i in range(8): t.fd(150) t.left(135)
练习题5:平方根格式化
5.1 描述要求如下:
5.2 PyCharm 运行结果如下:
5.3 代码示例如下:
# 平方根格式化a = int(input(\"请输入整数:\"))res = pow(a, 0.5)print(\"{:+>30.3f}\".format(res)) # \">\"表示右对齐,30表示总宽度为30个字符,\".3f\"表示保留小数点后3位
练习题6:字符串分段组合
6.1 描述要求如下:
6.2 PyCharm 运行结果如下:
6.3 代码示例如下:
# 字符串分段组合s = input(\"请输入一段字符串(包含减号-):\")ls = s.split(\'-\')print(ls[0] + \"+\" + ls[-1])
练习题7:四位玫瑰数
7.1 描述要求如下:
7.2 PyCharm 运行结果如下:
7.3 代码示例如下:
for i in range(1000, 10000): t = str(i) if pow(eval(t[0]), 4) + pow(eval(t[1]), 4) + pow(eval(t[2]), 4) + pow(eval(t[3]), 4) == i: print(i)
练习题8:100以内素数之和
8.1 描述要求如下:
8.2 PyCharm 运行结果如下:
8.3 代码示例如下:
sum = 0for i in range(2, 100): for k in range(2, i): if i % k == 0: break else: sum += iprint(sum)
练习题9:随机密码生成
9.1 描述要求如下:
9.2 PyCharm 运行结果如下:
9.3 代码示例如下:
import randomdef genpwd(length): a = 10**(length - 1) # 计算10的(length-1)次方,得到指定位数的最小值,例如length=3时,a=100 b = 10**length - 1 # 计算10的length次方减1,得到指定位数的最大值,例如length=3时,b=999 return \"{}\".format(random.randint(a, b))length = eval(input(\"请输入整数:\"))random.seed(17)for i in range(3): print(genpwd(length))
练习题10:连续质数计算
10.1 描述要求如下:
10.2 PyCharm 运行结果如下:
10.3 代码示例如下:
def prime(m): for i in range(2, m): # 遍历从2到m-1的所有整数 if m % i == 0: return False return Truen = eval(input(\"请输入数字:\"))num = int(n) # 将输入转为整数num = num + 1 if num 0: if prime(num): if count > 1: print(num, end=\",\") # 如果不是最后一个素数,输出素数加逗号 else: print(num, end=\"\") # 如果是最后一个素数,只输出数字不加逗号 count -= 1 # 找到一个素数,计数器减1 num += 1
练习题11:数字不同数之和
11.1 描述要求如下:
11.2 PyCharm 运行结果如下:
11.3 代码示例如下:
num = set(input(\"请输入整数:\")) # 获取用户输入,将输入字符串转换为集合(重复的数字会被去重)s = 0for i in num: s += eval(i)print(s)
练习题12:人名最多数统计
12.1 描述要求如下:
12.2 PyCharm 运行结果如下:
12.3 代码示例如下:
s = \'\'\'双儿 洪七公 赵敏 赵敏 逍遥子 鳌拜 殷天正 金轮法王 乔峰 杨过 洪七公 郭靖 杨逍 鳌拜 殷天正 段誉 杨逍 慕容复 阿紫 慕容复 郭芙 乔峰 令狐冲 郭芙 金轮法王 小龙女 杨过 慕容复 梅超风 李莫愁 洪七公 张无忌 梅超风 杨逍 鳌拜 岳不群 黄药师 黄蓉 段誉 金轮法王 忽必烈 忽必烈 张三丰 乔峰 乔峰 阿紫 乔峰 金轮法王 袁冠南 张无忌 郭襄 黄蓉 李莫愁 赵敏 赵敏 郭芙 张三丰 乔峰 赵敏 梅超风 双儿 鳌拜 陈家洛 袁冠南 郭芙 郭芙 杨逍 赵敏 金轮法王 忽必烈 慕容复 张三丰 赵敏 杨逍 令狐冲 黄药师 袁冠南 杨逍 完颜洪烈 殷天正 李莫愁 阿紫 逍遥子 乔峰 逍遥子 完颜洪烈 郭芙 杨逍 张无忌 杨过 慕容复 逍遥子 虚竹 双儿 乔峰 郭芙 黄蓉 李莫愁 陈家洛 杨过 忽必烈 鳌拜 王语嫣 洪七公 韦小宝 阿朱 梅超风 段誉 岳灵珊 完颜洪烈 乔峰 段誉 杨过 杨过 慕容复 黄蓉 杨过 阿紫 杨逍 张三丰 张三丰 赵敏 张三丰 杨逍 黄蓉 金轮法王 郭襄 张三丰 令狐冲 赵敏 郭芙 韦小宝 黄药师 阿紫 韦小宝 金轮法王 杨逍 令狐冲 阿紫 洪七公 袁冠南 双儿 郭靖 鳌拜 谢逊 阿紫 郭襄 梅超风 张无忌 段誉 忽必烈 完颜洪烈 双儿 逍遥子 谢逊 完颜洪烈 殷天正 金轮法王 张三丰 双儿 郭襄 阿朱 郭襄 双儿 李莫愁 郭襄 忽必烈 金轮法王 张无忌 鳌拜 忽必烈 郭襄 令狐冲 谢逊 梅超风 殷天正 段誉 袁冠南 张三丰 王语嫣 阿紫 谢逊 杨过 郭靖 黄蓉 双儿 灭绝师太 段誉 张无忌 陈家洛 黄蓉 鳌拜 黄药师 逍遥子 忽必烈 赵敏 逍遥子 完颜洪烈 金轮法王 双儿 鳌拜 洪七公 郭芙 郭襄 赵敏\'\'\'ls = s.split() # 将字符串按空格分割成列表d = {} # 初始化空字典,用于统计人名出现次数for i in ls: d[i] = d.get(i, 0) + 1 # 使用字典的get方法统计每个人名出现次数;如果人名不存在于字典中,返回默认值0再加1;如果已存在,则获取当前值再加1max_name, max_cnt = \"\", 0 # 初始化变量,用于记录出现次数最多的人名和次数for k in d: if d[k] > max_cnt: # 比较当前人名的出现次数与最大值 max_name, max_cnt = k, d[k]print(max_name)
练习题13:文本的平均列数
13.1 描述要求如下:
latex.log文件:
13.2 PyCharm 运行结果如下:
13.3 代码示例如下:
f = open(r\"C:\\Users\\admin\\PycharmProjects\\pythonProject\\learn\\latex.log\")s, c = 0, 0for line in f: line = line.strip(\"\\n\") # 去除每行末尾的换行符\"\\n\" if line == \"\": # 检查当前行是否为空行 continue # 如果是空行则跳过后续处理 s += len(line) # 非空行时,累加该行的字符长度到s c += 1 # 非空行计数器c加1print(round(s / c)) # 计算并打印有效行的平均字符长度,四舍五入取整
练习题14:CSV文件转换
4.1 描述要求如下:
4.2 PyCharm 运行结果如下:
4.3 代码示例如下:
f = open(r\"C:\\Users\\admin\\PycharmProjects\\pythonProject\\learn\\data.csv\")ls = f.readlines() # 读取文件所有行到列表ls中ls = ls[::-1] # 将行顺序反转(最后一行变第一行)lt = []for item in ls: item = item.strip(\"\\n\") # 去除行末的换行符 item = item.replace(\"\", \"\") lt = item.split(\",\") # 按逗号分割行内容 lt = lt[::-1] # 将字段顺序反转 print(\";\".join(lt))f.close()
练习题15:英文字符的鲁棒输入
15.1 描述要求如下:
15.2 PyCharm 运行结果如下:
15.3 代码示例如下:
s = input(\"请输入字符:\")for i in s: if((i >= \'A\' and i = \'a\' and i <= \'z\')): print(i, end=\'\')
练习题16:数字的鲁棒输入
16.1 描述要求如下:
16.2 PyCharm 运行结果如下:
16.3 代码示例如下:
s = input(\"请输入数字:\")try: if(complex(s) == complex(eval(s))): print(eval(s)**2)except: print(\"输入有误\")
练习题17:系统基本信息获取
17.1 描述要求如下:
17.2 PyCharm 运行结果如下:
17.3 代码示例如下:
import sysf1 = sys.getrecursionlimit()f2 = sys.executablef3 = sys.maxunicodeprint(\"RECLIMIT:{}, EXEPATH:{}, UNICODE:{}\".format(f1, f2, f3))
练习题18:二维数据表格输出
18.1 描述要求如下:
18.2 PyCharm 运行结果如下:
18.3 代码示例如下:
from tabulate import *data = [[\"北京理工大学\", \"985\", 2000], [\"清华大学\", \"985\", 3000], [\"大连理工大学\", \"985\", 4000], [\"深圳大学\", \"211\", 2000], [\"沈阳大学\", \"省本\", 2000],]print(tabulate(data, tablefmt=\"grid\"))
练习题19:无空隙输出
19.1 描述要求如下:
19.2 PyCharm 运行结果如下:
19.3 代码示例如下:
s = input(\"请输入字符:\")s = s.replace(\' \', \'\')print(s)
练习题20:关键行统计
20.1 描述要求如下:
20.2 PyCharm 运行结果如下:
20.3 代码示例如下:
dict = {}with open(r\"C:\\Users\\admin\\PycharmProjects\\pythonProject\\learn\\latex.log\", \'r\', encoding=\'utf-8\') as f: lines = f.readlines() for line in lines: rline = line dict[rline] = dict.get(rline, 0) + 1print(\'共{}关键行\'.format(len(dict)))
练习题21:字典翻转
21.1 描述要求如下:
21.2 PyCharm 运行结果如下:
21.3 代码示例如下:
s = input(\"请输入字典格式的字符串:\")try: dict_1 = eval(s) dict_2 = dict(zip(dict_1.values(), dict_1.keys())) print(dict_2)except: print(\'输入错误\')
练习题22:单词统计
22.1 描述要求如下:
22.2 PyCharm 运行结果如下:
22.3 代码示例如下:
import jiebaf = open(r\"C:\\Users\\admin\\PycharmProjects\\pythonProject\\learn\\沉默的羔羊.txt\", \'r\', encoding=\'utf-8\')ls = jieba.lcut(f.read()) # 读取文件全部内容并使用jieba进行精确模式分词,返回词语列表d = {}for w in ls: d[w] = d.get(w, 0) + 1 # 统计每个词语出现的次数,使用字典的get方法获取当前计数(默认为0)并加1maxc = 0 # 初始化最大出现次数为0maxw = \"\" # 初始化最频繁词语为空字符串for k in d: if d[k] > maxc and len(k) > 2: # 如果当前词语出现次数大于最大值且长度大于2 maxc = d[k] # 更新最大出现次数 maxw = k # 更新最频繁词语 if d[k] == maxc and len(k) > 2 and k > maxw: # 处理出现次数相同的情况,按字典序选择较大的词语 maxw = kprint(maxw)f.close()
练习题23:温度转换
23.1 描述要求如下:
23.2 PyCharm 运行结果如下:
23.3 代码示例如下:
temp = input(\"请输入温度(以C/F结尾):\")if temp[-1] in [\"C\", \"c\"]: F = (eval(temp[0:-1])) * 1.8 + 32 print(\"{:.2f}F\".format(F))elif temp[-1] in [\"F\", \"f\"]: C = (eval(temp[0:-1])-32) / 1.8 print(\"{:.2f}C\".format(C))else: print(\"输入格式错误\")
练习题24:数字形式转换
24.1 描述要求如下:
24.2 PyCharm 运行结果如下:
24.3 代码示例如下:
numStr = \"零一二三四五六七八九十\"num = input(\"请输入正整数:\")for i in num: print(numStr[eval(i)], end=\"\")
练习题25:货币转换
25.1 描述要求如下:
25.2 PyCharm 运行结果如下:
25.3 代码示例如下:
money = input(\"请输入数字(以RMB/USD开头):\")if money[0:3] == \"RMB\": USD = eval(money[3:]) / 6.78 print(\"USD{:.2f}\".format(USD))elif money[0:3] in [\"USD\"]: RMB = eval(money[3:]) * 6.78 print(\"RMB{:.2f}\".format(RMB))else: print(\"\")
练习题26:Python蟒蛇绘制
26.1 描述要求如下:
26.2 PyCharm 运行结果如下:
26.3 代码示例如下:
import turtle as tt.setup(650, 350, 200, 200) # 设置画布大小为650x350像素,窗口位置距离屏幕左上角200x200像素t.penup()t.fd(-250)t.pendown()t.pensize(25)t.pencolor(\'purple\')t.seth(-40) # 设置当前朝向为-40度(顺时针方向)for i in range(4): t.circle(40, 80) # 绘制半径为40像素,角度为80度的顺时针圆弧 t.circle(-40, 80)t.circle(40, 80/2)t.fd(40)t.circle(16, 180) # 绘制半径为16像素的180度半圆(蛇头部分)t.fd(40*2/3)t.done()
练习题27:风车绘制
27.1 描述要求如下:
27.2 PyCharm 运行结果如下:
27.3 代码示例如下:
import turtle as tt.pensize(2)for i in range(4): t.seth(90 * i) # 置当前朝向:第1次循环:0度(向右),第2次循环:90度(向上),第3次循环:180度(向左),第4次循环:270度(向下) t.fd(150) t.right(90) t.circle(-150, 45) # 绘制半径为150像素的逆时针圆弧(负半径),弧度为45度 t.goto(0, 0)
练习题28:文本进度条
28.1 描述要求如下:
28.2 PyCharm 运行结果如下:
执行进行中:
执行完成:
28.3 代码示例如下:
import timescale = 50print(\"执行开始\".center(scale//2, \'-\')) # 打印居中的\"执行开始\"提示,两侧用\'-\'填充start = time.perf_counter()for i in range(scale + 1): a = \'*\' * i b = \'-\' * (scale - i) c = (i / scale) * 100 # 计算当前完成百分比 dur = time.perf_counter() - start # 计算已耗时 print(\"\\r{:^3.0f}%[{}->{}]{:.2f}s\".format(c, a, b, dur), end=\'\') # 动态更新进度条:\\r 使光标回到行首实现覆盖效果,{:^3.0f}% 居中显示百分比 time.sleep(0.1)print(\"\\n\"+\"执行结束\".center(scale//2, \'-\'))
练习题29:恺撒密码
29.1 描述要求如下:
29.2 PyCharm 运行结果如下:
29.3 代码示例如下:
s = input(\"请输入字符串:\")C = \"\"for i in s: if \'a\' <= i <= \'z\': C += chr(ord(\'a\')+((ord(i) - ord(\'a\')) + 3) % 26) # ord(i) - ord(\'a\') 计算字母在字母表中的位置(0-25);+3向后移动3位;%26处理越界(如z→c) elif \'A\' <= i <= \'Z\': C += chr(ord(\'A\') + ((ord(i) - ord(\'A\'))+3) % 26) else: C += i # 非字母字符直接保留print(C)
练习题30:身体质量指数BMI
30.1 描述要求如下:
30.2 PyCharm 运行结果如下:
30.3 代码示例如下:
h = eval(input(\"请输入身高(m):\"))w = eval(input(\"请输入体重(kg):\"))bmi = w / pow(h, 2)print(\"BMI数值为:{:.2f}\".format(bmi))world, inner = \"\", \"\"if bmi < 18.5: world, inner = \"偏瘦\", \"偏瘦\"elif 18.5 <= bmi < 24: world, inner = \"正常\", \"正常\"elif 24 <= bmi < 25: world, inner = \"正常\", \"偏胖\"elif 25 <= bmi < 28: world , inner = \"偏胖\", \"偏胖\"elif 28 <= bmi < 30: world, inner = \"偏胖\", \"肥胖\"else: world, inner = \"肥胖\", \"肥胖\"print(\"BMI指标为:国际{0},国内{1}\".format(world, inner))
练习题31:水仙花数
31.1 描述要求如下:
31.2 PyCharm 运行结果如下:
31.3 代码示例如下:
s = \"\"for i in range(100, 1000): t = str(i) if pow(eval(t[0]), 3) + pow(eval(t[1]), 3) + pow(eval(t[2]), 3) == i: s += \"{},\".format(i) # 符合条件的数字添加到结果字符串,用逗号分隔print(s[:-1]) # s[:-1]方式不输出最后一个逗号
练习题32:斐波那契数列
32.1 描述要求如下:
32.2 PyCharm 运行结果如下:
32.3 代码示例如下:
def fib(n): if n == 1 or n == 2: return 1 else: return fib(n-1) + fib(n-2)n = eval(input(\"请输入整数:\"))print(fib(n))
练习题33:汉诺塔实践
33.1 描述要求如下:
33.2 PyCharm 运行结果如下:
33.3 代码示例如下:
steps = 0def hanoi(src, des, mid, n): global steps if n == 1: steps += 1 print(\"[STEP{:>4}] {}->{}\".format(steps, src, des)) else: hanoi(src, mid, des, n-1) steps += 1 print(\"[STEP{:>4}] {}->{}\".format(steps, src, des)) hanoi(mid, des, src, n-1)N = eval(input(\"请输入正整数:\"))hanoi(\"A\", \"C\", \"B\", N)
练习题34:科赫/雪花曲线
34.1 描述要求如下:
34.2 PyCharm 运行结果如下:
34.3 代码示例如下:
import turtle as tdef koch(size, n): if n == 0: t.fd(size) else: for angle in [0, 60, -120, 60]: t.left(angle) koch(size/3, n-1)def main(level): t.setup(600, 600) t.penup() t.goto(-200, 100) t.pendown() t.pensize(2) koch(400, level) t.right(120) koch(400, level) t.right(120) koch(400, level) t.hideturtle()try: level = eval(input(\"请输入科赫曲线的阶:\")) main(level)except: print(\"输入错误\")
练习题35:回文数
35.1 描述要求如下:
判断一个5位数是不是回文数。如:12321是回文数,即个位与万位相同,十位与千位相同。
35.2 PyCharm 运行结果如下:
35.3 代码示例如下:
num = input(\"请输入任意5位数字:\")a = 0b = len(num) - 1flag = Truewhile a < b: if num[a] != num[b]: print(\'不是回文串\') flag = False break a, b = a+1, b-1if flag: print(\'是回文串\')
练习题36:打印菱形
36.1 描述要求如下:
以空格和星号(*),打印出菱形
36.2 PyCharm 运行结果如下:
36.3 代码示例如下:
def draw(num): r = \"*\" * (2 * (6 - num) + 1) # 计算当前行要打印的星号数量 print(r.center(12, \' \')) if num != 1: draw(num - 1) print(r.center(12, \' \'))draw(6)
练习题37:九九乘法表
37.1 描述要求如下:
九九乘法表
37.2 PyCharm 运行结果如下:
37.3 代码示例如下:
for i in range(1, 10): # 变量i从1循环到9(包含1,不包含10) for j in range(1, i + 1): print(\'%d*%d=%2ld\' % (i, j, i*j), end=\' \') # %d格式化整数,%2ld格式化左对齐的两位数结果 print() # 换行
PS:Python-列表切片
list[起始索引:结束索引] 切片时包含起始索引位置的元素,但不包含结束索引位置的元素
索引为 0表示第一个,1表示第二个,-1表示最后一个,-2表示倒数第二个
list[-1]:返回最后一个数据
list[:1]:返回0到1的数据,故返回第一个数据
list[1:]:返回索引1到0的数据,故返回第二个到最后一个的数据(不包含结束索引位置0)
list[-1:]:返回从-1到0的数据,故返回最后一个数据
list[:-1]:返回从0到-1的数据,故返回第一个到倒数第二个的数据(不包含结束索引位置-1) list[::1]:表示步长为1,步长大于0时,返回序列为原顺序
list[::-1]: 表示从右往左以步长为1进行切片。步长小于0时,返回序列为倒序
list[::2]: 表示从左往右步长为2进行切片
示例及运行结果:
代码段:
list = [10, 20, 30, 40, 50, 60, 70, 80, 90]print(list[-1]) # 返回最后一个数据print(list[:1]) # 返回第一个数据print(list[1:]) # 返回第二个到最后一个的数据print(list[-1:]) # 返回最后一个数据print(list[:-1]) # 返回第一个 到 倒数第二个的数据print(list[::1]) # 原顺序输出print(list[::-1]) # 倒序输出print(list[::2]) # 步长为2进行切片