def search(): student_query = [] while True: id = "" name = "" if os.path.exists(filename): mode = input('按ID查找请输入1,按姓名查找请输入2') if mode == '1': id = input("请输入学生id:") elif mode == '2': name = input("请输入学生姓名:") else: print("您的输入有误,请重新输入") search() with open(filename, 'r', encoding='utf-8') as rfile: student = rfile.readlines() for item in student: d = dict(eval(item)) if id != '': if d['id'] == id: student_query.append(d) elif name != '': if d['name'] == name: student_query.append(d) # 显示查询结果 show_student(student_query) # 清空列表 student_query.clear() answer = input("是否要继续查询y/n\n") if answer == 'y': continue elif answer == 'n': break else: print("暂未保存学生信息!!!")
时间: 2024-02-10 07:24:58 浏览: 32
这段代码是一个查询学生信息的函数。它通过循环让用户选择按照学生ID还是姓名进行查询。然后打开存储学生信息的文件,逐行读取文件内容,并将每行内容转换为字典。根据用户选择的查询方式,将符合条件的学生信息添加到查询结果列表中。最后显示查询结果,清空查询结果列表,并询问用户是否继续查询。如果回答是,则继续循环,否则退出循环。如果找不到保存学生信息的文件,会显示相应的提示信息。
相关问题
def _has_cache(cache): has_cache = True for value in cache.values(): if not os.path.exists(value): has_cache = False break return has_cache
这段代码定义了一个 `_has_cache` 方法,用于检查缓存中的文件是否存在。下面是对该方法的解释:
- `cache` 是一个字典,其中键是缓存项的名称,值是缓存项的路径。
- `has_cache` 是一个布尔变量,初始值为 `True`。
- 在一个循环中,遍历 `cache` 字典中的所有值:
- `value` 是当前缓存项的路径。
- `os.path.exists(value)` 检查该路径是否存在。如果不存在,则将 `has_cache` 设置为 `False` 并跳出循环。
- 返回 `has_cache`,表示缓存中的所有文件是否存在。
该方法用于在代码中检查缓存项的文件是否存在。如果某个缓存项的文件不存在,可以根据需要采取相应的处理措施,例如重新生成缓存或从其他位置加载数据。
def search(self): student_query = [] while True: id = '' name = '' if os.path.exists(self.filename): # 判断文件是否存在 mode = input('按id查找请输入1,按姓名查找请输入2\n') if mode == '1': id = input('请输入要查找的id:') elif mode == '2': name = input('请输入要查找的姓名:') else: print('您的输入有误,请重新输入') continue with open(self.filename, 'r') as rfile: allstudent = csv.DictReader(rfile) # 读取csv文件 for item in allstudent: if item['id'] == id or item['姓名'] == name: student_query.append(item) # 查询是否有对应id或姓名的学生,找到之后放到查询结果列表中 # 显示查询结果 self.show_student(student_query) answer = input('是否要继续查询?y/n\n') if answer == 'y' or answer == 'Y': # 清空列表 student_query.clear() continue else: break else: print('暂未保存该学生信息') return # 展示所有学生 def show(self): if os.path.exists(self.filename): with open(self.filename, 'r') as rfile: reader = csv.reader(rfile) # 读取csv文件 student_information = [] # 将结果转换为列表 for row in reader: student_information.append(row) if student_information != []: self.formet.output(student_information) # 调用格式化的展示函数 else: print('暂未保存学生信息')请你帮我修正错误
这段代码中似乎没有明显的错误,但是可以做一些改进和优化:
1. 在查询学生信息时,可以使用 `input` 函数的参数来限制用户输入的值,而不是用 `continue` 语句来强制用户重新输入。例如:
```
mode = input('按id查找请输入1,按姓名查找请输入2\n[1/2]: ')
while mode not in ['1', '2']:
print('您的输入有误,请重新输入')
mode = input('按id查找请输入1,按姓名查找请输入2\n[1/2]: ')
```
2. 在读取 CSV 文件时,可以使用 `csv.DictReader` 函数来读取,这样可以直接将每行数据转换为字典格式,方便查询和处理。
3. 在展示学生信息时,可以使用 `csv.reader` 函数的 `DictReader` 类来读取,这样可以直接将每行数据转换为字典格式,方便展示和处理。
4. 可以添加一些异常处理机制,例如文件不存在或者读取错误时,给出提示和处理方法。
下面是修改后的代码:
```
import csv
import os
class Student:
def __init__(self, filename, formet):
self.filename = filename
self.formet = formet
def search(self):
student_query = []
while True:
id = ''
name = ''
if not os.path.exists(self.filename):
print('暂未保存该学生信息')
return
mode = input('按id查找请输入1,按姓名查找请输入2\n[1/2]: ')
while mode not in ['1', '2']:
print('您的输入有误,请重新输入')
mode = input('按id查找请输入1,按姓名查找请输入2\n[1/2]: ')
if mode == '1':
id = input('请输入要查找的id:')
elif mode == '2':
name = input('请输入要查找的姓名:')
with open(self.filename, 'r') as rfile:
allstudent = csv.DictReader(rfile)
for item in allstudent:
if item['id'] == id or item['姓名'] == name:
student_query.append(item)
if student_query:
self.show_student(student_query)
else:
print('未找到符合条件的学生信息')
answer = input('是否要继续查询?[y/n]: ')
if answer.lower() != 'y':
break
student_query.clear()
def show(self):
if not os.path.exists(self.filename):
print('暂未保存学生信息')
return
with open(self.filename, 'r') as rfile:
reader = csv.DictReader(rfile)
student_information = []
for row in reader:
student_information.append(row)
if student_information:
self.formet.output(student_information)
else:
print('暂未保存学生信息')
def show_student(self, students):
headers = ['id', '姓名', '性别', '年龄', '成绩']
student_information = [headers]
for student in students:
row = [student[h] for h in headers]
student_information.append(row)
self.formet.output(student_information)
class Formet:
def output(self, student_information):
for row in student_information:
print('\t'.join(row))
filename = 'students.csv'
student = Student(filename, Formet())
student.search()
```