2.2.编写一个学生类,
具有以下属性:
类属性
role,赋值'student'
实例属性:
信息列表, 包含: 学号,姓名,性别,年龄,成绩列表
类方法:
更改类属性值
实例方法:
构造函数
打印学生信息函数
修改学生信息函数
main函数主体:
创建学生类信息空列表,
输入学生信息,
将学生信息放入学生类信息列表
将该列表写入到一个cvs文件中保存
1.代码:
import csv
class Student:
role = "student"
def __init__(self, id, name, gender, age, scores):
self.id = id
self.name = name
self.gender = gender
self.age = age
self.scores = scores
def print_1(self):
print(f"学号:{self.id},姓名:{self.name},性别:{self.gender},年龄:{self.age},成绩:{self.scores}")
def main():
students = []
while True:
id = input("请输入学号(输入t退出):")
if id == 't':
break
name = input("请输入姓名:")
gender = input("请输入性别:")
age = input("请输入年龄:")
scores_input = input("请输入成绩(用逗号分隔):")
scores = list(map(int, scores_input.split(','))) # 假设成绩是整数并用逗号分隔
student = Student(id, name, gender, age, scores)
students.append(student)
for student in students:
student.print_1()
# 循环结束后一次性写入 CSV 文件
with open('students.csv', 'w', newline='',encoding='utf-8') as csvfile:
fieldnames = ['学号', '姓名', '性别', '年龄', '成绩']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for student in students:
writer.writerow({'学号': student.id, '姓名': student.name, '性别': student.gender, '年龄': student.age,
'成绩': ','.join(map(str, student.scores))}) # 将成绩列表转换回逗号分隔的字符串
if __name__ == "__main__":
main()
- 截图:
分析:类定义 Student
Student 类定义了一个学生对象,包含属性如 id, name, gender, age, 和 scores。
role 是一个类变量,但在这个脚本中并没有使用到。
__init__ 方法用于初始化学生的信息。
print_1 方法用于打印学生的所有信息。
main 函数
初始化一个空列表 students 来保存所有的学生对象。
使用 while 循环持续获取用户输入的学生信息,直到用户输入 t。
在每次循环中,代码会:
1.获取用户输入的学生信息。
2.将成绩字符串(逗号分隔)转换为整数列表。
3.创建一个 Student 对象并添加到 students 列表中。
4.打印出当前 students 列表中的所有学生信息(包括新添加的学生)。
退出 while 循环后,代码会:
1.打开一个名为 students.csv 的文件以写入模式。
2.创建一个 csv.DictWriter 对象来写入CSV文件。
3.写入CSV文件的表头。
4.遍历 students 列表,并将每个学生的信息写入CSV文件。注意,成绩列表被转换回逗号分隔的字符串格式。
newline='',encoding='utf-8')
确保csv文件能储存中文