大噶好,我在生活中遇到一个同学的提问,他的问题是现在有一个如图的文件:
该文本文件中保存了学生的学号、姓名信息,每个学生的信息占一行。
要求统计并输出每个姓氏的学生信息。
我们可以使用try……expect……作为判断姓名和学号的工具:
#用于储存所有学生信息
message = []
#用于储存学生姓氏和该姓氏的人数
surname = {}
with open("student.txt") as f:
for eachLine in f:
#将未知格式的学号和姓名拆分
number = ""
name = ""
for eachStr in eachLine:
try:
number += str(int(eachStr))
except ValueError:
name += eachStr
再利用list类型打包每个学生的姓名和文件:
#将姓名和学号重新打包成列表,放进总列表里
#用strip()防止空格出现,其他未知字符没做处理
message.append([name.strip(), number])
#统计各姓氏人数
for each in message:
if each[0][0] not in surname:
surname[each[0][0]] = 1
else:
surname[each[0][0]] += 1
最后利用遍历输出学生的姓名和学号:
#打印各姓氏人数及学生信息
for each in surname:
print(f"\n【{each}】 姓学生有 【{surname[each]}】 名")
for i in range(len(message)):
if each in message[i][0]:
print(message[i])