习题解析之:上课 or 休息
【问题描述】
按照武汉理工大学课表时间安排,编写一个根据输入的时间输出课堂的节数or休息。

按上图所示,根据输入的时间hh:mm,输出第n节课其中1<=n<=13或者休息。
本题中不允许使用eval()转换数据类型,每节课的最后一分钟是上课时间。
测试保证输入的时间格式完整并合法,范围在00:00至23:59
示例1
输入:
04:35
输出:
休息
示例2
输入:
14:25
输出:
第6节课
【编程思路1】
由于题目保证输入的时间格式完整并合法,范围在00:00至23:59。因此本题可以直接采用字符串比较。
按照题目所给的上课时间表,创建一个包含 13 个数据元素的列表 ls,列表中每个数据元素为一个元组,每个元组中包含 2 个元素,分别是表示一节课开始时间和结束时间的字符串。

【编程思路2】
由于时间比较不采用字符串比较,因此需要将每节课的开始时间也转换为距离 00:00 的分钟数。
对于一个表示时间的字符串 x = ’hh:mm' 来说,x[0:2] 代表小时,x[3:5] 代表分钟,因此转换为距离 00:00 的分钟数的表达式为 int(x[0:2]) * 60 + int(x[3:5])。
可以用列表推导式来生成一个表示每节课开始时间距离 00:00 的分钟数的列表,如下:
用循环 for i in range(len(lt)): 对每节课进行遍历处理,将输入的时间 time转换后的分钟数 num 与列表 lt 中当前元素给定的分钟数 lt[i]进行比较:

【编程思路3】
每天13节课,再加上休息,一共 14 种情况。因此本题也可以不使用列表,直接用分支结构处理 14 种情况即可。
编写的源程序如下,不过显得累赘些。
