# 期末考 411135053 林序叡
## 1:
```python=
import re as r
def check_id(id_num):
with open('3.txt', 'r') as f:
content = f.read()
pattern = r'ID:{}\s*TEL:(\d+)-(\d+)-(\d+)'.format(id_num)
match = r.search(pattern, content)
if match:
print(''.join(match.groups()))
else:
print('學號不存在請重新輸入')
id_num = input('請輸入學號:')
check_id(id_num)
```


## 2:
```python=
department_dict = {
'中文系': '01',
'英美系': '02',
'歷史系': '03',
'應數系': '11',
'化學系': '12',
'生科系': '13',
'資工系': '21',
'材料系': '22',
'電機系': '23',
'光電系': '25'
}
def get_department_code(department):
return department_dict.get(department)
import csv
def read_csv(file_path):
records = []
with open(file_path, 'r') as csv_file:
reader = csv.DictReader(csv_file)
for row in reader:
records.append(row)
return records
students = read_csv('2.csv')
def generate_student_id(student, department_codes, department_counts):
department = student['Department']
department_code = department_codes[department]
department_count = department_counts[department]
student_id = f'4111{department_code}{department_count:03d}'
department_counts[department] += 1
return student_id
department_counts = {
department: 0
for department in department_dict
}
students = read_csv('2.csv')
for student in students:
student_id = generate_student_id(student, department_dict, department_counts)
print(student_id)
def update_csv(file_path, students):
with open(file_path, 'w') as csv_file:
fieldnames = ['Department', 'Name', 'Student ID']
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
for student in students:
writer.writerow(student)
for student in students:
student_id = generate_student_id(student, department_dict, department_counts)
student['Student ID'] = student_id
update_csv('students.csv', students)
students = read_csv('students.csv')
print(students)
```

### test code:
```python=
import finalexam2
def test_get_department_code():
assert get_department_code('中文系') == '01'
assert get_department_code('電機系') == '23'
assert get_department_code('光電系') == '25'
assert get_department_code('應數系') == '11'
def test_read_csv():
students = read_csv('students.csv')
assert students == [{'Department': '電機系', 'Name': 'Eva Pedrazzini'}, {'Department': '光電系', 'Name': 'Dott. Guarino Palumbo'}, {'Department': '歷史系', 'Name': '徐慧君'}, {'Department': '中文系', 'Name': '陳哲瑋'}, {'Department': '電機系', 'Name': 'Alice Boone'}]
def test_generate_student_id():
department_counts = {
department: 0
for department in department_dict
}
assert generate_student_id({'Department': '電機系', 'Name': 'Eva Pedrazzini'}, department_dict, department_counts) == '411123000'
assert generate_student_id({'Department': '光電系', 'Name': 'Dott. Guarino Palumbo'}, department_dict, department_counts) == '411125001'
assert generate_student_id({'Department': '歷史系', 'Name': '徐慧君'}, department_dict, department_counts) == '411123002'
assert generate_student_id({'Department': '中文系', 'Name': '陳哲瑋'}, department_dict, department_counts) == '411123003'
assert generate_student_id({'Department': '電機系', 'Name': 'Alice Boone'}, department_dict, department_counts) == '411123004'
test_get_department_code()
test_read_csv()
test_generate_student_id()
```
## 3:
```python=
import csv
class Student:
school = '東華大學'
def __init__(self, name, student_id, department):
self.name = name
self.student_id = student_id
self.department = department
def find_name_by_id(student_id):
for student in students:
if student.student_id == student_id:
return student.name
return '學號不存在'
def find_id_by_name(name):
for student in students:
if student.name == name:
return student.student_id
return '姓名不存在'
students = []
with open('2.csv', 'r') as csv_file:
reader = csv.DictReader(csv_file)
for row in reader:
students.append(Student(row['Name'], row['Student ID'], row['Department']))
#測試
print(Student.find_name_by_id('411123000'))
print(Student.find_name_by_id('411123001'))
print(Student.find_name_by_id('411112015'))
print(Student.find_id_by_name('周美玲'))
print(Student.find_id_by_name('Eva Pedrazzini'))
print(Student.find_id_by_name('Alice Boone'))
```
