当前位置: 首页 > news >正文

Python:计算机二级:简单应用

文章目录

  • 简单应用
    • 第一题
    • 第二题
    • 第三题
    • 第四题
    • 题型共同特点
      • 核心知识点讲解
      • 解题通用方法步骤
    • 操作的难点
      • 1.数据的统计
      • 2.数据的筛选
        • 1. **条件判断筛选**
        • 2. **结合文件操作筛选**
        • 3. **多条件组合筛选**
    • 类似题目
    • 其它一题

简单应用

第一题

题目
在考生文件夹下的PY202.py文件中,编写Python代码实现以下功能:

通过键盘输入某班同学就业的行业名称,行业名称之间用空格间隔,回车结束输入。统计各个行业就业的学生数量,并按照数量从高到低的方式输出,输出格式为 “行业名称:数量”,冒号为英文冒号。
解答

names = input("请输入各个同学行业名称,行业名称之间用空格间隔(回车结束输入):")
t = names.split(" ")
d = {}
for i in range(len(t)):
    d[t[i]] = d.get(t[i], 0) + 1
ls = list(d.items())
ls.sort(key=lambda x: x[1], reverse=True)  # 按照数量排序
for k in ls:
    # 直接解包 k
    zy, num = k
    print("{}:{}".format(zy, num))

第二题

题目
在考生文件夹下的PY202.py文件中编写代码,实现以下功能:

通过键盘输入小明学习的课程名称及考分信息,信息间用空格分隔,每个课程一行,空行回车结束录入。之后在屏幕输出得分最高的课程及成绩,得分最低的课程及成绩,以及平均分(保留2位小数),输出格式为 “最高分课程是[课程名] [分数],最低分课程是[课程名] [分数],平均分是[平均分]”,其中逗号为英文逗号。

解答

data = input()  # 课程名 考分
scores = []  # 用于存储课程名和分数的列表
while data:
    course, score = data.split()  # 拆分输入的课程名和分数
    scores.append((course, int(score)))  # 将课程名和转换为整数的分数存入列表
    data = input()
# 提取所有分数
all_scores = [s[1] for s in scores]
# 找到最高分和对应的课程
max_course, max_score = max(scores, key=lambda x: x[1])
# 找到最低分和对应的课程
min_course, min_score = min(scores, key=lambda x: x[1])
# 计算平均分
average_score = sum(all_scores) / len(all_scores)
print("最高分课程是{} {}, 最低分课程是{} {}, 平均分是{:.2f}".format(
    max_course, max_score, min_course, min_score, average_score))

第三题

问题
这是一道Python编程题目,要求使用字典和列表型变量完成村长选举相关功能:

  1. name.txt 获取40名有选举权和被选举权的村民名单,从 vote.txt 获取投票信息。
  2. 问题1:从 vote.txt 中筛选出无效票(选票中名字数量不为1或者名字不在 name.txt 列表中的票),并写入 vote1.txt
  3. 问题2:找出当选村长的名字及其得票数。
    需要补充考生文件夹下 PY202.py 中的代码来完成程序。

解答

f=open("name.txt")
names=f.readlines()
f.close()
f=open("vote.txt")
votes=f.readlines()
f.close()
f=open("vote1.txt","w")
D={}
NUM=0
for vote in votes:
    num = len(vote.split())
    if num==1 and vote in names:
        D[vote[:-1]]=D.get(vote[:-1],0)+1
        NUM+=1
    else:
        f.write(vote)
f.close()        
l=list(D.items())
l.sort(key=lambda s:s[1],reverse=True)
name=l[0][0]
score=l[0][1]
print("有效票数为:{} 当选村长村民为:{},票数为:{}".format(NUM,name,score))

第四题

题目
这是一道Python编程题目,要求利用字典和列表变量对明星投票数据进行分析,投票信息在vote.txt文件中。具体有两个问题:

  • 问题1:统计有效票张数,需补充PY202 - 1.py中的代码完成程序,分值7分。
  • 问题2:给出当选最有人气明星的姓名和票数,需补充PY202 - 2.py中的代码完成程序,分值8分。有效票指一行只有一个明星姓名的投票,在有效票中得票最多的明星当选 。

解答

f = open("vote.txt")
names = f.readlines()
f.close()
n = 0
for name in names:
    num = len(name.split())
    if num==1:
        n+=1
print("有效票{}张".format(n))
f = open("vote.txt")
names = f.readlines()
f.close()
D = {}
for name in names:
    if len(name.split()) == 1:
        # 修正此处,保证键的一致性
        D[name[:-1]] = D.get(name[:-1], 0) + 1
l = list(D.items())
l.sort(key=lambda s: s[1], reverse=True)
name = l[0][0]
score = l[0][1]
print("最具人气明星为:{},票数为:{}".format(name, score))

题型共同特点

这些题目均围绕 数据统计与分析 展开,核心场景包括:

  • 数据输入:通过文件读取(如 vote.txt)或键盘输入获取原始数据。
  • 数据处理:对数据进行筛选(如判断有效票)、统计(如行业数量、票数统计)。
  • 结果输出:对处理后的数据排序,按指定格式输出关键结果(如统计数量、最值信息)。

核心知识点讲解

  1. 文件操作
    • 打开与读取:使用 open("文件名", "r") 打开文件,readlines() 读取所有行,处理后用 close() 关闭文件。
    • 写入文件:以写模式 open("文件名", "w") 打开文件,用 write() 写入内容。
  2. 字符串处理
    • 分割字符串split() 方法按空格等分隔符拆分字符串,如 name.split() 用于获取每行的元素数量。
  3. 字典统计
    • 利用字典键值对统计数据,如 D[key] = D.get(key, 0) + 1D.get(key, 0) 避免键不存在时报错,初始值为 0,每次出现对应键时数量加 1
  4. 列表排序
    • list.sort(key=lambda x: x[1], reverse=True):按列表元素的第二个值(如票数、分数)降序排序,lambda 定义排序依据。
  5. 输入输出
    • 输入input() 接收键盘输入,结合循环处理多行输入。
    • 输出格式化print("{}:{}".format(zy, num)),用占位符 {} 匹配变量,实现指定格式输出。

解题通用方法步骤

  1. 数据读取
    • 文件场景:用 open() 打开文件,readlines() 读取内容,关闭文件。
    • 输入场景:input() 接收输入,循环处理多行数据。
  2. 数据筛选与统计
    • 遍历数据,用条件判断(如 if len(name.split()) == 1)筛选有效数据。
    • 借助字典统计数量(如行业数、票数)。
  3. 结果处理
    • 将字典转换为列表(如 list(D.items())),排序获取最值(如最高票数、最低分)。
  4. 格式化输出
    • 按题目要求格式,用 format() 或 f-string 输出结果,如 print("最具人气明星为:{},票数为:{}".format(name, score))

操作的难点

1.数据的统计

这一部分主要要用到字典的键值对特性,将需要统计的对象(如明星姓名、行业名称)作为键,出现次数作为值。
代码的模板为:

data_dict = {}  
for item in data_list:  
    data_dict[item] = data_dict.get(item, 0) + 1  # 若键存在,值+1;若不存在,初始化为0再+1  

代码的解释:

  • 首先,创造一个字典
  • 其次,在我们上面从文本中读取的字符串进行循环,逐一判断是谁的票,是这个人的票就加一,不是这个人的票就创建这个人的键,然后初始为0,再加1
  • 这个循环过后,我们就得到了一个统计数据的键值对——字典。
    存在这样的一种:若数据包含多种属性(如课程名 + 分数),可先提取统计关键项再操作,我们通过解包操作加以实现:
    示例代码
course_data = [("数学", 90), ("语文", 85), ("数学", 95)]  
course_count = {}  
for course, _ in course_data:  
    course_count[course] = course_count.get(course, 0) + 1  
# 结果:{'数学': 2, '语文': 1}  

2.数据的筛选

1. 条件判断筛选

通过 if 语句定义筛选规则,常见场景:

  • 格式筛选:如“一行只有一个姓名的投票才有效”,用 len(name.split()) == 1 判断。
  • 范围筛选:如“分数在 60 分以上为及格”,用 score >= 60 判断。
  • 代码模板
    valid_data = []  
    for item in raw_data:  
        if 筛选条件:  # 如 len(item.split()) == 1  
            valid_data.append(item)  
    
2. 结合文件操作筛选

从文件读取数据时,边读取边筛选。

  • 示例:筛选有效投票并写入新文件
    with open("vote.txt", "r") as f:  
        votes = f.readlines()  
    valid_votes = []  
    for vote in votes:  
        if len(vote.split()) == 1:  # 一行一个姓名  
            valid_votes.append(vote.strip())  # 去除换行符  
    # 将有效投票写入新文件  
    with open("valid_vote.txt", "w") as f:  
        f.writelines(valid_votes)  
    
    3. 多条件组合筛选

复杂场景需多个条件组合,用逻辑运算符(and/or)连接。

  • 示例:筛选既有效又符合特定范围的数据
    # 假设数据格式为 [姓名, 票数]  
    data = [("张三", 10), ("李四", 5), ("王五", 20)]  
    filtered_data = []  
    for name, count in data:  
        if len(name) > 2 and count > 10:  # 姓名长度超2字且票数超10  
            filtered_data.append((name, count))  
    # 结果:[("王五", 20)]  
    

类似题目

题目
考生文件夹下存在3个Python源文件(分别对应3个问题)与1个文本文件(输入数据“命运.txt”),需按源文件内部说明修改代码,实现以下功能:

  • 问题1(5分):在PY301-1.py中修改代码,对“命运.txt”进行字符频次统计,输出频次最高的中文字符(不含标点符号)及其频次,格式为“字符:频次”(如“理:224”)。
  • 问题2(5分):在PY301-2.py中修改代码,对“命运.txt”进行字符频次统计,按频次由高到低,屏幕输出前10个频次最高的字符(不含回车符),字符连续无间隔输出。
  • 问题3(10分):在PY301-3.py中修改代码,对“命运.txt”进行字符频次统计,将所有字符(含中文、标点、英文等符号,不含空格和回车)按频次从高到低排序,将排序后的字符及频次输出到考生文件夹下的“命运-频次排序.txt”。字符与频次间用英文冒号“:”分隔,字符间用英文逗号“,”分隔(参考CSV格式,最后无逗号)。

解答

# 打开文件
with open('命运.txt', 'r', encoding='utf-8') as f:
    txt = f.read()

# 定义字典用于统计字符频次
d = {}
# 遍历文本中的每个字符
for i in txt:
    # 过滤掉标点符号
    if i not in ",。?!《》【】[]“”‘’":
        # 统计字符频次
        d[i] = d.get(i, 0) + 1

# 将字典的键值对转换为列表
ls = list(d.items())
# 对列表按字符频次从高到低排序
ls.sort(key=lambda x: x[1], reverse=True)
# 输出频次最高的字符及其频次
print("{}:{}".format(ls[0][0], ls[0][1]))
    
# 打开文件
with open('命运.txt', 'r', encoding='utf-8') as f:
    txt = f.read()

# 定义字典用于统计字符频次
d = {}
# 遍历文本中的每个字符
for i in txt:
    # 过滤掉回车符
    if i not in '\n':
        # 统计字符频次
        d[i] = d.get(i, 0) + 1

# 将字典的键值对转换为列表
ls = list(d.items())
# 对列表按字符频次从高到低排序
ls.sort(key=lambda x: x[1], reverse=True)

# 输出前 10 个频次最高的字符
for k in range(10):
    print(ls[k][0], end='')
    
# 打开命运.txt 文件用于读取
with open('命运.txt', 'r', encoding='utf-8') as f:
    txt = f.read()

# 定义字典用于统计字符频次
d = {}
# 遍历文本中的每个字符
for i in txt:
    # 过滤掉空格和回车符
    if i not in ' \n':
        # 统计字符频次
        d[i] = d.get(i, 0) + 1

# 将字典的键值对转换为列表
ls = list(d.items())
# 对列表按字符频次从高到低排序
ls.sort(key=lambda x: x[1], reverse=True)

# 用于存储格式化后的字符和频次字符串
result_str = []
# 遍历排序后的列表
for char, freq in ls:
    result_str.append(f"{char}:{freq}")

# 将列表元素用逗号连接成字符串
output_str = ','.join(result_str)

# 打开命运-频次排序.txt 文件用于写入
with open('命运-频次排序.txt', 'w', encoding='utf-8') as fi:
    fi.write(output_str)
    

其它一题

题目
题目是在 PY202.py 中完善代码,根据字典查找用户信息,生成验证码。首先,导入随机模块生成验证码。然后,获取用户输入,检查是否在字典中。存在的话,生成四位数验证码,输出信息;不存在则提示。
解析

import random
random.seed(2)
pdict = {
    'Alice': ['123456789'],
    'Bob': ['234567891'],
    'Lily': ['345678912'],
    'Jane': ['456789123']
}
name = input('请输入一个人名:')
if name in pdict:
    print("{} {} {}".format(name, pdict.get(name)[0], random.randint(1000, 9999)))
else:
    print("对不起,您输入的用户信息不存在。")

相关文章:

  • g对象在flask中主要是用来实现什么
  • 【Linux】Linux_Ubuntu与Windows之间的文件传输
  • 3.26品优购
  • Linux之编辑器vim命令
  • 力扣HOT100之普通数组:53. 最大子数组和
  • Linux编译器gcc/g++使用完全指南:从编译原理到动静态链接
  • 【leetcode hot 100 215】数组中的第K个最大元素
  • kubeadm部署k8s-1.32版本集群(1个master,1个worker)
  • PX4飞控-接收MAVLINK消息(2)-生成MAVLINK_MSG_ID_***.h文件
  • QEMU源码全解析 —— 块设备虚拟化(10)
  • [笔记] 系统分析师 第二章 经济管理与应用数学 (未完待续)
  • Linux系统离线安装ollama【详细版】
  • <command-line>:0:1: error: macro names must be identifiers m
  • 2000-2019年各省地方财政行政事业性收费收入数据
  • 【数据采集】技术对比:PCIe、PXIe、PCI、PXI、网口与USB
  • 线上分享会 如何用deepseek和豆包等AI平台获客?
  • 基于SSM+Vue物流信息管理系统(附源码)
  • 信竞资讯
  • MacOS 15 无法打开Docker问题(Malware Blocked)解决
  • 机器人SDF模型写法官方例子
  • 印度杰纳布河上游两座水电站均已重新开闸
  • 如此城市|上海老邬:《爱情神话》就是我生活的一部分
  • 教育部、国家发改委联合启动实施教师教育能力提升工程
  • A股低开高走全线上涨:军工股再度领涨,两市成交12934亿元
  • “20后”比“60后”更容易遭遇极端气候事件
  • 江苏省泰州市委常委、宣传部部长刘霞接受审查调查