提取元组元组中的元素

时间:2014-03-09 08:11:56

标签: python

任务:

每个学生记录都表示为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')

我得到了硬编码的错误,但我不知道为什么。

2 个答案:

答案 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"