前言
这些题都是在B站的练习题,链接在这
对于刚学python的新手来说十分的适合,
可以加强和巩固我们的基础。
嘿嘿 一起噶油吧!🍉
🍉1.对学生成绩排序
# 这里对字典进行排序,同事使用到了sorted函数
# 这个是十分经典的一个题目 ,童鞋们必须掌握哟
students = [
{'sno': 101, "sname": '小张', 'sgrade': 90},
{'sno': 102, "sname": '小李', 'sgrade': 99},
{'sno': 103, "sname": '小王', 'sgrade': 98},
{'sno': 104, "sname": '小赵', 'sgrade': 88},
]
# sort函数只对列表好使,但是对其他序列不好使,因此我们使用sorted函数
students_sorted = sorted(students, lambda = x:x['sgrade'], reverse = True)
# 函数有三个参数 ,第一个是需要进行排序的字典,也可以是其他的可迭代对象
# 第二个参数是一个匿名函数 指出进行排序的键是x对象的'sgrade'属性,
# 这个我们可以看到 students作为匿名函数的第一个参数传入进去了
# 第三个参数表示这个排序的结果需不需要逆置 True表示降序排列
# 最后我们输出这个结果
print(f"学生{students},成绩结果{students_sorted}")
🍉2.读取成绩文件进行排序
# 从这里开始就涉及到操纵文件了
# 我们在目录下创建一个学生成绩文件夹,里面放着学生的基本信息和成绩,.py与文本文件在同一级别下
# 第一步:读取文件
def read_file():
result = []
# 使用with open 打开一个文件,并将结果 作为fin
with open('./stu_grade_input.txt',encoding = 'utf-8') as fin:
for line in fin:
line = lin[:-1] # [0,-2] 即不包含最后一个
print(line, type(line)) # 101,小张,65 <class 'str'>
list_read = line.split(',')
print(list_read, type(list_read)) # ['103', '小天', '67'] <class 'list'>
result.append(line.split(',')) # 将每一行以','号分割,并添加到数组末端
print("result", result) # [['101', '小张', '65'], ['102', '小胡', '45'], ['103', '小天', '67'], ['104', '小都', '79'], ['105', '小习', '98'], ['106', '小李', '100'], [''], [''], ['']]
# 发现后面有三个空的数据
# 我们利用切片把他去掉再返回
print("result_clip", result[:-3]) # 正常的数据
return result[:-3]
datas = read_file()
# 第二步: 排序数据
def student_sorted(datas):
return sorted(datas,lambda x:int(x[2]),reverse:Ture)
datas = student_sorted(datas)
print(datas) # 这里为排序好的数据
# 第三步: 写出文件
def write_file(datas):
# 注意这里要加上encodeing= 'utf-8',不然可能会出现乱码
# 此外 这里的文件模式是w
with open('./stu_grade_sorted_output.txt','w',encodeing= 'utf-8') as fout:
for data in datas:
fout.write(','.join(data)+'\n')
write_file(datas) # 将排序好的数据写出文件
🍉3.读取成绩文件计算最高分和最低分
# 第一步:读取文件
def read_file():
scores = []
with open('./stu_grade_input.txt',encoding="utf-8") as fin
for line in fin:
line = line[:-1]
fields = line.split(",")
# 把最后一个成绩放入数组中,而不是把整个数组
scores.append(int(fields[-1] ))
print('scores',scores)
max_score = max(scores)
max_score = min(scores)
avg_score = sum(score) / len(scores)
return max_score ,min_score,avg_score
# 解包拆包
max_score ,min_score , avg_score = read_file()
print(f"最大值{max_score },最小值{min_score },平均值{avg_score }")
🍉4.统计英文文章单词出现的次数
# 这里使用字典存储,单词和单词出现的次数
word_count = {} # 创建一个空字典
with open('./english_python.txt') as fin:
for line in fin:
line = line[:-1]
words = line.split() # 是一个数组
print("words",words)
# 此时的word表示列表的值
for word in words:
if word not in word_count:
word_count[word] = 0
else word_count[word]+=1
print(word_count) # 输出这个字典
result = sorted(word_count,lambda x : x[1],reverse = True)
print(type(result)) # <class 'list'>
result = result[:5] # 只取前五位
print(result )
🍉5.统计目录下文件的大小
import os
# os.path.getsize 方法获取文件文本的大小
print(os.path.getsize("english_python.txt"))
sum_size = 0
# 遍历根目录下的所有文件和文件夹 使用os.listdir
for file in os.listdir("./")
#如果是文件 那么计算文件的大小
if os.path.isfile(file):
print(file)
sum_size += os.path.getsize(file)
print(f"所有的文件大小是{sum_size /1024}KB")
6.计算班级的最高分和最低分
# 和上题类似 ,字典的键为科目,值为分数
# 创建一个空的子带你
course_grades = {}
# 编码格式为utf-8 如果不加的话,可能乱码
with open("course_student_grade_input.txt",encoding = "utf-8") as fin:
for line in fin:
line = line[-1] # 去掉最后一个换行符
# 解包和拆包
course, sno, sname, grade = line.spilt(",")
if course not in course_grades:
# 将课程的值赋值为一个数组,里面放成绩
course_grades[course] = [] # 键名叫course课程名,键值为数组,里面拼接成绩
else course_grade[course].append(int(grade))
print(course_grades)
# 输出这个字典中的课程名 和对应课程的最大最小和平均分
# 通过course_grades.items() 获取到一对键值对
#如果是values 获取的是一组values值
# 如果是keys 获取的是一组keys值
for course, grades in course_grades.items()
print(course,max(grades ),min(grades),sum(grades)/len(grades))
🍉7.按文件后缀名整理文件夹
# 怎么获取文件名?
# import os
# os.path.splitext('/path/to/aaa.mps') # 会返回前面的路径和后缀名
# 怎么移动后缀名文件达到整理相同文件的作用呢?
# import shutil
# shutil.move('aaa.text','dir/')
import os
import shutil
dir = './arrange_dir' # 把整理的文件放在这个文件夹下面
for file in os.listdir(dir) # 获取目录下所有的文件名
print(file)
ext = os.path.splitext(file)[1] # 获取到文件名,将文件名拆分并获取到他的第二个元素,即后缀名
print(file,ext) # 查看文件的后缀名和
ext = ext[1:]
# 如果没有文件夹,就创建一个文件夹,以后缀名创建一个文件夹
if not os.path.isdir(f'{dir}/{ext}'):
os.mkdir(f'{dir}/{ext}')
# 开始移动文件,使用shutil库
source_path = f("{dir} / {dile}")
target_path = f("{dir} / {ext}/{file}")
shutil.move(source_path,target_path)
print(file,ext)
🍉8.实现不同文件的数据关联
# 本题是想将两个表关联起来
# 一个是学生成绩信息表,一个是教师信息表
# 当然是需要用到字典的
course_teacher_map = {}
with open("./course_teacher.txt",encoding = 'utf-8') as fin:
for line in fin:
line = line[:-1]
course,teacher = line.split(",")
course_teacher_map[course] = teacher
print(course_teacher_map)
with open("./course_student_grade_input.txt",encoding="utf-8") as fin:
for line in fin:
line = line[:-1]
course,sno,sname,sgrade = line.split(",")
teacher = course_teacher_map.get(course) # 将字典中老师的名字赋值给teacher这个属性
print(teacher ,course,sno,sname,sgrade)
🍉9.批量合并多个txt文件
# 小知识 :py读取文件的两种方法
# 方法1:按行读取 for line in fin
# 方法2:一次读取所有内容到一个字符串 content = fin.read()
import os
contents = []
data_dir = "./arrange_dir/txt"
#读取目标文件下所有的文件
for file in os.listdir(data_dir):
# 将文件名放在data_dir下面
file.path = f'{data_dir}/{file}'
# 如果是文件并且这个文件的后缀名是txt 那么将这个文件写入到content中
# 这里调入的是fin.read()是将所有的内容都读入到content中,而不是一行一行的读
if os.path.isfile(file_path) and file.endswith(".txt"):
with open(file_path) as fin:
content.append(fin.read())
print(file_path)
final_content = "\n".join(contents)
with open("./arrange_dir/many_txt", "w") as fout:
fout.write(dinal_content)
🍉10.统计每个兴趣的学生人数
# 很明显是一个字典
# 兴趣为键,学生人数为值
like_count = {}
like_list = []
# 先读取文件
with open("./student_like.txt", encoding="utf-8") as fin:
for line in fin:
line = line[:-1]
sname, likes = line.split(" ")
print(sname, type(sname)) # 小张 <class 'str'>
print(likes, type(likes)) # 篮球,羽毛球 <class 'str'>
like_list = likes.split(" ") # 此时的like_list是数组
for like in like_list:
if like not in like_count:
like_count[like] = 0
like_count[like] += 1
print(like_count)
🍉 学无止境,都看到这了,点个赞关注支持一下呗!嘿嘿(* ̄︶ ̄)