计算机二级Python 操作题知识点及例题总结
- format输出
- Unicode
- 精度控制
- 循环段
- 计数器
- jieba
- len()
- turtle
- 箭头在结尾
- 箭头在开头
- 字符串基本统计
- 利用get()作计数器
- 字典转列表
- random
- 数学
- 两点距离
- 素数
- 文本处理
- title()
- set()
- [::-1]
- reverse()
- strip()
- 异常处理结构
- calendar()
- replace()
format输出
例1. 输出字符串s,格式要求:宽度30字符,星号字符*填充,居中对齐。
如果字符串超过30位,则全部输出。
s = input("请输入一个字符串:")
print("{:*^30}".format(s))
{冒号+填充符+对齐方式+宽度}
对齐方式^居中 <左对齐 >右对齐
例2:输出n,格式:宽度30,填充符@,右对齐,带千位分隔符
n = eval(input("请输入正整数:"))
print("{:@>30,}".format(n))
格式 :+填充符+对齐方式+width+千分位符
Unicode
例3. 输入9800-9811之间的正整数n,作为Unicode编码,把n-1,n,n+1三个unicode编码对应字符按照如下格式输出:
宽度11字符,填充符+,居中
n = eval(input("请输入一个数字:"))
print("{:+^11}".format(chr(n-1)+chr(n)+chr(n+1)))
注意点 1. 田中宽!
2. chr(i)函数返回i的Unicode
3. Unicode是字符串类型,可以用+连接
例4. 输入1-26的数字出现对应索引的英文字母
如: 输入1,输出大写字母A
s = eval(input("请输入一个数字:"))
ls = [0]
for i in range(65,91):
ls.append(chr(i))
print("输出大写字母:{}".format(ls[s]))
注意点 1. 1-A,2-B,所以ls一开始需要填充0位置
2. chr()中65-90对应A-Z
精度控制
例5. 输入一个十进制数转换成二进制数
s = input("请输入一个十进制数:")
num = int(s)
print("转换成二进制数是:{:b}".format(num))
注意点 1. input()返回的是字符串,需要用int()变成数字
2. {:.2f}保留两位小数
{:b}转换二进制binary system
{:d}转换十进制decimalism
例6. 输入直角三角形两条直角边长度,计算三角形面积(保留一位小数)
a = float(input("输入三角形第一条直角边长:"))
b = float(input("输入三角形第二条直角边长:"))
area=1/2*a*b
print("直角三角形的面积为:{:.1f}".format(area))
例7. 将十进制整数转化成二进制数,八进制数,十六进制(大写)数。
num = eval(input("输入数字:"))
print("对应的二进制数:{0:b}\n八进制数:{0:o}\n十六进制(大写)数:{0:X}".format(num))
注意点 1. 这里num只有一个,但是{}有三个
所以要加位置0,代表num
循环段
例1. 根据斐波拉契数列,输出不大于50的数列元素
a, b = 0, 1
while a<=50:
print(a, end=',')
a, b = b,a+b
因为只输出a,所以要把b的值传给a
例2. 某店出售服装,每件定价150,买1件不打折,2-3件打九折,4-9件打八折,10件以上打七折
输入购买数量,输出总额(保留整数)
n = eval(input("请输入数量:"))
if n==1:
cost=150
elif n==2 or n==3:
cost=int(n*150*0.9)
elif n>=4 and n<=9:
cost=int(n*150*0.8)
elif n>=10:
cost=int(n*150*0.7)
print("总额为:",cost)
注意点 1. 判断格式中是双==
2. 最后一个elif不可以用else 因为还是有判断规则大于10
3. eval()指把字符串换成可以计算的格式
4. 利用int()函数取整数
例3:计算a,b两列表对应元素累计相乘之和
a = [11,3,8]
b = eval(input()) #例如:[4,5,2]
s=0
for i in range(3):
s += a[i]*b[i]
print(s)
例4. 判断闰年:能被4整除但不能被100整除,但是世纪闰年是被400整除。
- 写了一个算法效率很低但是很清晰的方法
def judge_year(year):
if year % 4 ==0:
if year % 100 == 0:
if year % 400 == 0:
print("{}是闰年".format(year))
else:
print("{}不是闰年".format(year))
else:
print("{}是闰年".format(year))
else:
print("{}不是闰年".format(year))
year = eval(input("请输入年份:"))
judge_year(year)
- 第二种就是善用逻辑语,效率提高
def judge_year(year):
if year % 4 ==0 and year % 100!=0 or year %400 == 0:
print(year,"是闰年")
else:
print(year,"不是闰年")
year = eval(input("请输入年份:"))
judge_year(year)
例5. 输入一个水果名,判断是否在列表lis中
fruit = input('输入水果:')
lis = ['苹果','哈密瓜','橘子','猕猴桃','杨梅','西瓜']
if fruit in lis:
print(fruit+"在列表lis中")
else:
print(fruit+"不在列表lis中")
计数器
例6. 循环输出1-50之间的奇数
count = 0
while count < 50:
count += 1
if count % 2 == 0:
continue
print(count,end=",")
jieba
例1. 用jieba分词后,将切分的词组逆序输出,词组中没有空格
输入:我爱老师 输出:老师爱我
import jieba
txt = input("请输入一段中文文本:")
ls=jieba.lcut(txt)
for i in ls[::-1]:
print(i,end="")
注意点 1. jieba.lcut(str)精确模式,返回一个列表
2. ls[::-1]代表逆序输出
3. 最后一行不加end,词组之间会转行
len()
例2. 输出s中文字符个数和中文词语个数
import jieba
s = input("请输入一个字符串")
#n = len(s)
#m = len(jieba.lcut(s))
print("中文字符数为{},中文词语数为{}。".format(n, m))
用len来计算个数
例3. 输入一段中文文本,用jieba对其进行分词,输出该文本中词语的平均长度,保留一位小数
import jieba
txt = input("请输入一段中文文本:")
ls=jieba.lcut(txt)
print("{:.1f}".format(len(txt)/len(ls)))
例4. 输入中文字符串s,包含标点符号
如:问君能有几多愁?恰似一江春水向东流。
计算输出字符串的中文词语数
import jieba
s = input("请输入一个中文字符串,包含标点符号:")
m =jieba.lcut(s)
print("中文词语数:{}".format(len(m)))
turtle
箭头在结尾
例1. 利用turtle.fd()和turtle。seth()绘制一个边长100的三角形。
import turtle
for i in range(3):
turtle.seth(i*120)
turtle.fd(100)
seth角表示与向右的水平线的夹角
range(3) 是列表[0,1,2]
所以三次基准角是0,120,240
箭头在开头
例2. 使用turtle.right()和turtle.fdd()绘制五角星,边长为200,内角度数为36
from turtle import *
for i in range(5):
fd(200)
right(144)
注意点 1. 第一行的写法 后面的函数不用加turtle前缀
2. right()是重复性操作 所以for语句直接重复5次
例3. 利用turtle.fd()和turtle.seth()函数绘制边长200,画笔为2号笔的正五边形,内角为108°
import turtle
turtle.pensize(2)
d=72
for i in range(5):
turtle.seth(d)
d=d+72
turtle.fd(200)
注意点:箭头→代表最后停留的一条线
所以基准角seth就是72°
例4. 用turtle.fd()和turtle.seth()绘制正方形,边长200像素
import turtle
d = 0
for i in range(4):
turtle.fd(200)
d = 90*(i+1)
turtle.seth(d)
注意点 这个是先fd后seth!!!
例5. 画边长200的太阳花
import turtle
turtle.color("red","yellow")
turtle.begin_fill()
for i in range(36):
turtle.fd(200)
turtle.left(170)
turtle.end_fill()
注意点 1. turtle.color(画笔颜色,填充颜色)
2. turtle.begin_fill()准备填充
3. turtle.end_fill()填充完成
4. turtle.left(170)是固定值!
range(36)可以变
例6. 绘制黄底黑边的圆形,半径为50
import turtle
turtle.color('black','yellow')
turtle.begin_fill()
turtle.circle(50)
turtle.end_fill()
例7. 画五角星
import turtle
turtle.color("black","yellow")
turtle.begin_fill()
for i in range(5):
turtle.fd(200)
turtle.right(144)
turtle.end_fill()
例8. 画四瓣花图形
import turtle
for i in range(4):
turtle.seth(90*i)
turtle.circle(50,90)
turtle.seth(90*(i-2))
turtle.circle(50,90)
turtle.hideturtle()
注意点 1. 保持seth两边成180°
例9. 用pencolor()和fillcolor()着色,用setup()在桌面屏幕(400,400)位置创建600*600大小的画布窗体
from turtle import *
def curvemove():
for i in range(200):
right(1)
forward(1)
setup(600,600,400,400)
hideturtle()
#pencolor('black')
#fillcolor("red")
pensize(2)
begin_fill()
left(140)
forward(111.65)
curvemove()
left(120)
curvemove()
forward(111.65)
end_fill()
penup()
goto(-27, 85)
pendown()
done()
字符串基本统计
利用get()作计数器
例1. 输入一组水果名,以空格分隔:
苹果 芒果 草莓 芒果 苹果 草莓 芒果 香蕉 芒果 草莓
统计各类型数量,以从多到少的顺序输出水果名和其数量,以冒号分隔,每个类型一行
#后的为考试要填的
fo = open("PY202.txt","w")
txt = input("请输入类型序列: ")
#fruits=txt.split(" ")
d = {}
#for fruit in fruits:
# d[fruit]=d.get(fruit,0)+1
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True) # 按照数量排序
for k in ls:
fo.write("{}:{}\n".format(k[0], k[1]))
fo.close()
注意点 1. 用split(" ")用空格分隔 创建fruits列表
2. get(键,default)
如果d列表没有这个水果名,就创建键值对,default=1 如苹果,1
如果d已经有苹果了,再次遍历到苹果,就变成苹果,2
例2. 输入: 空格间隔 每人一行 空行回车结束录入(下图录入4次)
张猛 男 35
杨青 女 18
汪海 男 26
孙倩 女 22
计算并输出这组人员的平均年龄和女性人数
fo = open("PY202.txt","w")
data = input("请输入一组人员的姓名、性别、年龄:") # 姓名 性别 年龄
woman_num=0
age_sum=0
person_num=0
while data:
name,sex,age=data.split(" ")
if sex == '女':
woman_num+=1
person_num+=1
age_sum+=int(age)
data = input("请输入一组人员的姓名、性别、年龄:")
average_age=age_sum/person_num
fo.write("平均年龄是{:.1f} 女性人数是{}".format(average_age,woman_num))
fo.close()
注意点 1. 注意变量第一次出现 要赋值为0
2. sex判断语句是双==,字符串要加引号
3. split切片返回列表,里面的元素是字符串格式,要用int()函数转换成数字
4. 本题特殊在输入4次,所以input在循环段里
5. while data:相当于迭代器,有data就条件成立
字典转列表
例3. 输入某班同学就业的行业名称,统计各行业的就业学生数量,从高到低输出。
如 护士 旅游 老师 护士 老师 老师
输出格式为按【行业名】:【数量】
fo = open("PY202.txt","w")
names=input("请输入各个同学行业名称,行业名称之间用空格间隔(回车结束输入):")
#name_list=names.split(" ")
d = {}
#for item in name_list:
# d[item]=d.get(item,0)+1
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True) # 按照数量排序
for k in ls:
# fo.write("{}:{}\n".format(k[0],k[1]))
fo.close()
注意点 1. split()函数返回的是一个列表
2. 考试里计数方式就是get()函数
3. list(dic.items())将字典转换成列表,每个键值对变成了列表里的一对元组,转换原因是后面sort()函数只能用于列表
4. k代表迭代了列表里的元组,所以k[0]是键,k[1]是值
例4. 键盘输入考试情况,每个课程一行
数学 98
语文 89
英语 94
物理 74
科学 87
输出最高分课程是数学98,最低分课程是物理74,平均分是88.40
data=input("请输入课程名及对应的成绩:")
course_score_dict={}
while data:
course,score=data.split(" ")
course_score_dict[course]=eval(score)
data=input("请输入课程名及对应的成绩:")
score_list=sorted(course_score_dict.values())
max_score=score_list[-1]
min_score=score_list[0]
average_score=sum(score_list)/len(score_list)
for item in course_score_dict.items():
if item[1]==max_score:
max_course=item[0]
if item[1]==min_score:
min_course=item[0]
print("最高分课程是{}{},最低分课程是{}{},平均分是{:.2f}".format(max_course,max_score,min_course,min_score,average_score))
注意点 1. split()函数产生的列表可以给变量依次赋值,但是都是字符串
2. sorted()函数只对列表有效,所以用value()函数把分数单独提出来放在一个列表里
3. 位置-1是最大值
4. 列表的len()就是列表的元素个数
5. items()函数把字典转换成列表里面套元组,item就是在一个个迭代元组
random
例1. 随机输出一个手机品牌
import random
brandlist = ['三星','苹果','vivo','OPPO','魅族']
random.seed(0)
#name=brandlist[random.randint(0,4)]
print(name)
这道题是把列表的位置作为随机数设置
(0,4)对应其中的5个位置,列表从0开始
例2. 设255为随机数种子,随机生成1-50之间的随机整数,输出随机数之间空格分隔
import random
random.seed(255)
for i in range(5):
print(random.randint(1,50), end=" ")
数学
两点距离
例1. 键盘输入4个数字x0,y0,x1,x2
计算两点(x0,y0)和(x1,y1)之间的距离
ntxt = input("请输入4个数字(空格分隔):")
nls = ntxt.split(" ")
x0 = eval(nls[0])
y0 = eval(nls[1])
x1 = eval(nls[2])
y1 = eval(nls[3])
r = pow(pow(x1-x0, 2) + pow(y1-y0, 2), 0.5)
print("{:.1f}".format(r))
注意点 1. split()函数返回列表,元素是字符串
2. 用eval()函数把字符串转换成数字
3. 平方是pow(x,2) 开根号是pow(x,0.5)
素数
例2. 将列表ls=[51,33,54,56,67,88,431,111,141,72,45,2,78,13,15,5,69]中的素数去除,并输出去除后的元素个数
def prime(num):
for i in range(2,num):
if num%i==0:
return False
ls = [51,33,54,56,67,88,431,111,141,72,45,2,78,13,15,5,69]
lis = []
for i in ls:
if prime(i) == False:
lis.append(i)
print(">>>{},列表长度为{}".format(lis,len(lis)))
注意点 1. range(a,b)是左闭右开
2. 这道题没有用删除的方法
而是append把合数放进去
例3. 输出两个整数之间的所有素数
lower = int(input('输入区间最小值:'))
upper = int(input('输入区间最大值:'))
def prime(num):
for i in range(2,num):
if num%i==0:
return False
for number in range(lower+1,upper):
if prime(number)==None:
print(number)
文本处理
title()
例1. 将每个单词首字母都变为大写,输出到屏幕
line = "After fresh rain in mountains bare "
print(line.title())
set()
例2. 将列表重复元素删除,并输出列表
lis = [2,8,3,6,5,3,8]
new_lis = list(set(lis))
print(new_lis)
[::-1]
例3. 反转字符串
def str_change(str) :
return str[::-1]
str = input("输入字符串:")
print(str_change(str))
reverse()
例4. 字符串的列表倒序输出
animals = ['cow', 'duck', 'cat', 'dog']
animals.reverse()
#ls=animals[::-1]
print(animals)
strip()
例5. 去掉字符串左侧或右侧的空格
word = " 窗前明月光,疑是地上霜。 "
print(word.strip())
异常处理结构
例6. 要求底数>0且不等于1,真数大于0,且输入为实数,否则抛出相应的异常
import math
try:
a = eval(input('请输入底数:'))
b = eval(input('请输入真数:'))
c = math.log(b,a)
except ValueError:
if a<=0 and b>0:
print("底数不能小于等于0")
elif a>0 and b<=0:
print("真数不能小于等于0")
elif a<=0 and b<=0:
print("真数和底数都不能小于等于0")
except ZeroDivisionError:
print('底数不能为1')
except NameError:
print('输入必须为实数')
else:
print(c)
calendar()
例7. 输入年份,输出当年的日历
import calendar
year = int(input("请输入年份:"))
table = calendar.calendar(year)
print(table)
注意点 1. int()函数把字符串转成数字
2. calendar输两次
replace()
将 “八百标兵奔北坡,炮兵并排北边跑”中的兵都换成将,输出替换后的字符串。
s = input("请输入绕口令:")
print(s.replace("兵","将"))