Python列表与循环:如何找出对应最大/最小时长的星期?
问题解决
你的代码核心错误在于尝试用字符串列表list1去索引数值列表list2,这不符合Python语法。要找到对应最大/最小时长的星期,需先获取时长列表中最值的索引,再通过索引匹配星期列表里的对应元素。
另外原代码还有两个小问题需要修正:
- 使用
sys.exit()前必须导入sys模块 - 循环中
total += num和total = sum(list2)重复,保留其中一种方式即可
以下是修正后的完整代码:
import sys list1 = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] list2 = [] total = 0 for x in range(len(list1)): try: num = float(input(f"Enter amount of hours of exercise for {list1[x]}: ")) list2.append(num) total += num except: print("Please enter a number.") sys.exit() # 获取最大时长对应的星期 max_hours = max(list2) max_day = list1[list2.index(max_hours)] # 获取最小时长对应的星期 min_hours = min(list2) min_day = list1[list2.index(min_hours)] print("Day with most amount of exercise: ", max_day) print("Day with least amount of exercise: ", min_day) print(f"Total exercise hours: {total}")
代码说明
- 先通过
max(list2)和min(list2)获取最大、最小时长数值 - 用
list2.index(最值)得到该数值在时长列表中的位置索引 - 用这个索引去
list1中取出对应的星期名称
如果存在多天时长相同且同为最值的情况,index()方法只会返回第一个出现该值的索引。如果需要处理这种多最值场景,可以遍历列表收集所有符合条件的星期:
# 处理多个最大值的情况 max_hours = max(list2) max_days = [list1[i] for i, val in enumerate(list2) if val == max_hours] print("Day(s) with most amount of exercise: ", ", ".join(max_days)) # 处理多个最小值的情况 min_hours = min(list2) min_days = [list1[i] for i, val in enumerate(list2) if val == min_hours] print("Day(s) with least amount of exercise: ", ", ".join(min_days))
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

