计算机二级Python 操作题知识点及例题总结

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) 是列表[012]
所以三次基准角是0120240

箭头在开头

例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("兵","将"))
  • 64
    点赞
  • 309
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值