如何用for循环实现鱼群探测器深度读数判断的Python功能?
用for循环实现鱼群探测器深度读数判断
题目背景
鱼群探测器(fish-finder)是垂钓者用于在湖中寻找鱼类的设备,若探测到鱼则会触发警报,它通过深度读数判断是否触发警报。判定规则如下:
- 四个连续深度读数构成严格递增序列(如3 4 7 9),输出"Fish Rising";
- 四个连续深度读数构成严格递减序列(如9 6 5 2),输出"Fish Diving";
- 四个读数完全相同,输出"Constant Depth";
- 其他情况输出"No Fish"。
输入为四个每行一个的正整数,输出对应结果。
现有实现代码
用户已通过if-elif语句完成功能,代码如下:
d1, d2, d3 ,d4 = input("Enter first depth reading:"), input("Enter second depth reading:"), input("Enter third depth reading:"), input("Enter fourth depth reading:") if int(d4) > int(d3) > int(d2) > int(d1): print("Fish Rising") elif int(d1) > int(d2) > int(d3) > int(d4): print("Fish Diving") elif int(d1) == int(d2) == int(d3) == int(d4): print("Constant Depth") else: print("No Fish")
需求
需要将上述逻辑改用for循环实现。
解决方案
核心思路是先把四个深度值存入列表,通过for循环遍历相邻元素,统计递增、递减、相等的状态,最后根据状态判断输出结果。
代码实现:
# 读取四个深度值并转为整数列表 depths = [] for idx in range(4): depth = int(input(f"Enter depth reading {idx+1}: ")) depths.append(depth) # 初始化状态标记 is_rising = True is_diving = True is_constant = True # 用for循环检查所有相邻元素的关系 for i in range(3): curr = depths[i] next_d = depths[i+1] # 只要有一组不满足递增,就标记为非递增 if next_d <= curr: is_rising = False # 只要有一组不满足递减,就标记为非递减 if next_d >= curr: is_diving = False # 只要有一组不相等,就标记为非常量 if next_d != curr: is_constant = False # 根据状态输出结果 if is_rising: print("Fish Rising") elif is_diving: print("Fish Diving") elif is_constant: print("Constant Depth") else: print("No Fish")
代码说明
- 第一个
for循环负责读取四次输入,把深度值存入整数列表,比原代码的多变量赋值更简洁,后续要扩展读取更多值时也只需修改循环次数。 - 初始化三个布尔变量,分别标记序列是否为严格递增、严格递减、完全相等。
- 第二个
for循环遍历列表的前3个元素(因为要和下一个元素对比,共3组相邻元素),逐一验证状态标记:- 只要有一组相邻元素不是后一个大于前一个,就把
is_rising设为False; - 只要有一组相邻元素不是后一个小于前一个,就把
is_diving设为False; - 只要有一组相邻元素不相等,就把
is_constant设为False;
- 只要有一组相邻元素不是后一个大于前一个,就把
- 最后根据三个标记的结果,输出对应的字符串。
内容的提问来源于stack exchange,提问作者Mr. RWord
相关产品推荐
相关产品推荐

