如何在Python列表中查找最大、最小值对应的位置?降雨量统计作业求解
降雨量统计程序实现需求
本次作业需要编写一个程序,依次询问每个月的降雨量,用户输入的数值会被追加到列表中。收集完所有月份的数据后,程序将计算并输出总降雨量、平均降雨量、降雨量最高的月份和降雨量最低的月份。
目前需要解决的核心问题是获取降雨量最高和最低值对应的月份,要求不使用sort方法,优先通过遍历降雨量列表找到最值的索引位置,再从预定义的月份列表中匹配对应月份,也可采用其他将降雨量与对应月份绑定返回的实现方式。
现有可运行代码(未完成最值对应月份功能)
# 功能说明:本程序支持用户输入12个月的总降雨量,之后计算并输出总降雨量、平均降雨量、最高和最低降雨量 months = ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"] # 函数功能:获取每个月的降雨量,存入列表返回 def getRainFall(): nums = [] for i in range(len(months)): m = months[i] print(f"请输入{m}的降雨量:") x = input() x = float(x) nums.append(x) return nums # 函数功能:计算并返回总降雨量 def totalRain(nums): total = 0 for num in nums: total = total + num return total # 函数功能:计算并返回平均降雨量 def mean(nums): total = 0.0 for num in nums: total = total + num return total / len(nums) # 原有最值函数存在问题:1. 遍历逻辑会触发索引越界 2. 仅返回最值,未返回对应索引 def maxRain(nums): for i in range(len(nums)): if nums[i] > nums[i+1]: x = nums[i] else: x = nums[i+1] return x # 最低降雨量函数尚未实现 #def minRain(nums): def main(): rainList = getRainFall() rainAverage = mean(rainList) total = totalRain(rainList) highest = maxRain(rainList) #lowest = minRain(rainList) print("总降雨量:", total) print("平均降雨量:", rainAverage) print("最高降雨量:", highest) #print("最低降雨量:", lowest) # 程序结束等待 input("按<Enter>键退出程序") main()
修复后完整可运行代码
针对需求调整了最值函数逻辑,直接返回最值对应的索引,同时修复了原有遍历越界的问题:
# 功能说明:本程序支持用户输入12个月的总降雨量,之后计算并输出总降雨量、平均降雨量、最高和最低降雨量对应的月份与数值 months = ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"] # 函数功能:获取每个月的降雨量,存入列表返回 def getRainFall(): nums = [] for i in range(len(months)): m = months[i] print(f"请输入{m}的降雨量:") x = input() x = float(x) nums.append(x) return nums # 函数功能:计算并返回总降雨量 def totalRain(nums): total = 0 for num in nums: total = total + num return total # 函数功能:计算并返回平均降雨量 def mean(nums): total = 0.0 for num in nums: total = total + num return total / len(nums) # 函数功能:返回最高降雨量对应的索引 def maxRainIndex(nums): max_index = 0 for i in range(1, len(nums)): if nums[i] > nums[max_index]: max_index = i return max_index # 函数功能:返回最低降雨量对应的索引 def minRainIndex(nums): min_index = 0 for i in range(1, len(nums)): if nums[i] < nums[min_index]: min_index = i return min_index def main(): rainList = getRainFall() rainAverage = mean(rainList) total = totalRain(rainList) max_index = maxRainIndex(rainList) min_index = minRainIndex(rainList) print("总降雨量:", total) print("平均降雨量:", round(rainAverage, 2)) print(f"最高降雨量:{months[max_index]} {rainList[max_index]}") print(f"最低降雨量:{months[min_index]} {rainList[min_index]}") # 程序结束等待 input("按<Enter>键退出程序") main()
改动说明
- 重写了最值计算函数,遍历过程中记录最值对应的索引而非仅记录数值,避免后续匹配月份的额外开销
- 修复了原有
maxRain函数的索引越界问题,遍历从第二个元素开始和当前最值比较,无需访问i+1位置 - 主函数中通过返回的索引直接从
months列表取对应月份,无需使用sort方法打乱原有列表顺序
内容的提问来源于stack exchange,提问作者Fat_Rat_800xl
相关产品推荐
相关产品推荐

