任务:
每个学生记录都表示为tuple
,它由学生的预科编号和姓名组成。
示例:('B0094358N', 'Shao Hong')
编写一个函数get_student_name
,当学生的入学编号和学生记录作为参数传递给函数时,它返回学生的姓名。如果矩阵编号与数据库中的任何记录都不匹配,则应返回字符串'Not found'
。
get_student_name('B2245467C', student_records)
'Yang Shun'
请帮我查一下我的代码:
def get_student_name(matric_num, records):
l = student_records
for i in l:
if matric_num == i[0]:
return (i[1])
elif matric_num != i[0]:
continue
if matric_num not in l:
return ('Not found')
我得到了硬编码的错误,但我不知道为什么。
答案 0 :(得分:1)
试试这个简化版。您不需要else条件或continue
,因为循环将在第一次匹配时返回。
>>> def get_student_name(matric_num, records):
... for i in records:
... if i[0] == matric_num:
... return i[1]
... return 'Not Found'
...
>>> records = [('123','Jim'),('456','Bob'),('890','Sam')]
>>> get_student_name('999', records)
'Not Found'
>>> get_student_name('123', records)
'Jim'
答案 1 :(得分:0)
目前尚不清楚您的student_records结构如何。从您的代码中猜测,它看起来像是一个元组列表,所以这就是我们所假设的。
我认为问题在于for循环后的if条件。如果您返回for循环而没有返回,则表示您的学生记录中不存在matric_num。所以你可以试试这个 -
def get_student_name(matric_num, records):
l = student_records
for i in l:
if matric_num == i[0]:
return (i[1])
elif matric_num != i[0]:
continue
return ('Not found')
或者,更多pythonic -
def get_student_name(matric_num, records):
l = student_records
student_name = [i[1] for i in l if i[0] == matric_num]
return student_name if len(student_name) > 0 else "Not found"