You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python while循环终止问题:输入空白时如何结束循环?

修复月份天数查询程序的循环终止逻辑

你的代码存在几个关键问题导致无法实现输入空白终止的需求,同时还有一些可以优化的地方,以下是具体的修复方案:

核心问题分析

  • 直接将输入立即转为int,导致无法先判断输入是否为空;except month == ""是语法错误,except子句只接受异常类型,不能直接写条件判断。
  • days函数定义在循环的else块里,每次循环都会重复定义函数,完全没必要。

修改后的代码

# 定义各天数对应的月份列表,命名更语义化
months_31_days = [1, 3, 5, 7, 8, 10, 12]
months_30_days = [4, 6, 9, 11]

# 将天数计算函数移到循环外,避免重复定义
def get_month_days(month):
    if month in months_31_days:
        return 31
    elif month in months_30_days:
        return 30
    elif month == 2:
        return 28
    # 不在1-12范围内的月份返回None
    return None

while True:
    # 先获取原始输入,不立即转换类型
    user_input = input("Enter the number of the month: ")
    
    # 直接判断是否为空输入(按下回车),满足则终止循环
    if not user_input:
        print("Program ending")
        break
    
    # 仅在输入非空时尝试转换为整数
    try:
        month = int(user_input)
    except ValueError:
        print("Please enter a valid number")
        continue
    
    # 调用函数获取天数并处理输出
    days = get_month_days(month)
    if days is None:
        print("The number has to be between 1-12")
    else:
        print(f"This month has {days} days.")

关键修改说明

  1. 先处理空白输入:先捕获用户的原始输入,直接判断是否为空,这是最直接实现终止逻辑的方式。
  2. 重构函数位置:将天数计算函数移到循环外部,避免每次循环重复定义函数,提升代码效率和可读性。
  3. 修正异常处理:仅在尝试将输入转为整数时捕获ValueError,专门处理非数字输入的情况。
  4. 优化命名与格式:使用语义化的变量/函数名,用f-string简化输出格式,提升代码可读性。

内容的提问来源于stack exchange,提问作者Aruand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 10:50:22