如何在仅用>、<运算符时,从输入中找出第二大值(输入至负数停止)
仅用>、<运算符实现输入序列的最大值与第二大值统计
需求说明
- 仅允许使用
>、<运算符,禁止调用min()/max()函数 - 程序持续请求用户输入数值,直到输入负数时终止运行
- 第一个输入的数值同时作为初始最大值和第二大值
- 后续输入的数值按以下规则更新最大值与第二大值:
- 第二个输入:
- 若大于当前最大值 → 该数值成为新的最大值,原最大值降级为第二大值
- 若小于当前最大值 → 该数值成为新的第二大值,原最大值保持不变
- 第三个及以后的输入:
- 若大于当前最大值 → 原最大值降级为第二大值,该数值成为新的最大值
- 若小于当前最大值但大于第二大值 → 该数值成为新的第二大值
- 若小于等于第二大值 → 最大值与第二大值均保持不变
- 第二个输入:
现有代码
seclarg = 0 large = 0 while n >= 0 : n = int(input("Value: ")) if n > large : large = n if n > seclarg : seclarg = n print(f"Largest: {large}") print(f"Second largest: {seclarg}")
修正后的代码
# 先处理第一个输入 n = int(input("Value: ")) if n < 0: print("无有效输入") else: large = n seclarg = n # 循环处理后续输入 while True: n = int(input("Value: ")) if n < 0: break # 根据规则更新最大值和第二大值 if n > large: seclarg = large large = n elif n > seclarg and n < large: seclarg = n # 等于最大值或第二大值的情况无需处理,保持原有值 print(f"Largest: {large}") print(f"Second largest: {seclarg}")
代码逻辑说明
- 先获取第一个输入,若为负数直接提示无有效输入;否则将该数值同时赋值给最大值
large和第二大值seclarg - 进入循环后,每次获取新输入,若输入为负数则终止循环
- 对新输入的数值进行判断:
- 当数值大于当前最大值时,将原最大值转移给第二大值,再把新数值设为最大值
- 当数值介于最大值和第二大值之间时,直接更新第二大值为该数值
- 当数值等于最大值、等于第二大值或小于第二大值时,不做任何更新,确保符合需求中的规则
期望运行结果
Value: 5 Value: 5 Value: -1 Largest: 5 Second largest: 5
内容的提问来源于stack exchange,提问作者Bobby Jackson
相关产品推荐
相关产品推荐

