查看: 231|回复: 0

Python嵌套列表成绩查询:return与print输出差

[复制链接]
发表于 1 小时前 | 显示全部楼层 |阅读模式
在Python里,普通一维列表遍历容易理解,但嵌套列表按姓名查成绩时,函数究竟该return结果还是直接print输出,容易混淆。本文基于一个学生成绩查询示例,说明两种常见写法差异、调用方式和边界处理。示例数据student_score = [[1, 'Lily', 95], [2, 'Bob', 83], [3, 'Tom'], [4, 'Lis', 89]],子列表结构为[编号,姓名,成绩],其中Tom没有第三项,因此访问student[2]时会触发IndexError。

方式一:函数只负责返回数据,print交给调用方
函数get_grade(student_score,name)遍历student_score,如果student[1]等于name,尝试取student[2]作为grade并return grade。若子列表缺少成绩项,捕获IndexError并return '找不到该同学的成绩'。遍历结束仍未匹配,return '找不到该同学的信息'。调用时用a=get_grade(...); print(a)输出。适用于需要复用返回值、测试断言、后续计算的场景。
  1. def get_grade(student_score, name):
  2.     for student in student_score:
  3.         if student[1] == name:
  4.             try:
  5.                 grade = student[2]
  6.                 return grade
  7.             except IndexError:
  8.                 return '找不到该同学的成绩'
  9.     return '找不到该同学的信息'
  10. student_score = [[1, 'Lily', 95], [2, 'Bob', 83], [3, 'Tom'], [4, 'Lis', 89]]
  11. a = get_grade(student_score, 'Tom')
  12. print(a)
  13. b = get_grade(student_score, '234')
  14. print(b)
  15. c = get_grade(student_score, 'Lily')
  16. print(c)
复制代码
对于Tom返回“找不到该同学的成绩”;对于234返回“找不到该同学的信息”;Lily返回95。

方式二:函数内部直接print,再用return结束流程
同样遍历和匹配,命中后取grade,print('{}的成绩是:{}'.format(name, grade)),然后return。若IndexError,print('找不到该同学的成绩')并return。循环外print('找不到该同学的信息')并return。调用时不需要print返回值,直接get_grade(...)。这适合只关心控制台输出的脚本,但不便于获取结果做二次处理。
  1. def get_grade(student_score, name):
  2.     for student in student_score:
  3.         if student[1] == name:
  4.             try:
  5.                 grade = student[2]
  6.                 print('{}的成绩是:{}'.format(name, grade))
  7.                 return
  8.             except IndexError:
  9.                 print('找不到该同学的成绩')
  10.                 return
  11.     print('找不到该同学的信息')
  12.     return
  13. student_score = [[1, 'Lily', 95], [2, 'Bob', 83], [3, 'Tom'], [4, 'Lis', 89]]
  14. get_grade(student_score, 'Bob')
  15. get_grade(student_score, 'Tom')
  16. get_grade(student_score, '234')
复制代码
输出分别为Bob的成绩是83,Tom找不到成绩,234找不到信息。

对比与适用场景
方式一函数返回数据,调用方控制输出,适合模块化、复用和测试;方式二函数耦合打印,调用简单,但返回值不可用,适合临时脚本或一次性查看结果。IndexError的原因是Tom子列表只有两个元素,访问student[2]越界。两种方式都基于Python基础语法,无需额外库。实际写脚本时,如果需要继续处理成绩值,建议采用方式一;如果只是运行后看控制台结果,可以采用方式二。注意两种写法都通过return终止函数流程,避免后续分支继续输出。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-9-11 16:44 , Processed in 0.022586 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部