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

Python函数返回失效:输入多位小数后陷入While Not Loop循环

嘿,我完全懂你碰到的这个糟心问题!作为Python新手搞项目时,遇到这种循环卡壳、退不出来的情况真的挺让人挠头的,我来帮你拆解一下~

先给你一个能正常工作的参考写法

这个版本既能处理多位小数,输入0也能稳稳退出,还做了一些容错处理:

def get_item_prices():
    prices = []
    while True:
        user_input = input("请输入商品价格(输入数字0结束输入):")
        # 先处理空输入的情况
        if not user_input.strip():
            print("别输入空内容呀,请输入有效的价格!")
            continue
        # 尝试把输入转成浮点数
        try:
            price = float(user_input)
            # 用绝对值判断是否为0,避免极端情况下的浮点数精度问题
            if abs(price) < 0.0001:
                print("好的,结束价格输入啦!")
                return prices
            # 价格不能是负数,加个小判断
            if price < 0:
                print("价格可不能是负数哦,请重新输入!")
                continue
            prices.append(price)
        except ValueError:
            print("格式不对哦,请输入数字,比如19.999或者20这种!")
            continue

你可能踩的几个坑

  • 循环条件逻辑写反或变量未更新
    比如你如果写了while not price == 0,但price的初始值设成了非0的数,而且输入0时没有正确把price更新为0,循环就会一直跑下去。或者你把return语句的缩进搞错了,放到了循环外面,那永远也触发不了退出。
  • 对浮点数精度的误解(概率稍低)
    19.999转成float后确实是近似值,但输入0转成float是精确的0.0,所以直接判断price == 0其实是有效的,但用abs(price) < 1e-4这种绝对值判断会更稳妥,能避免一些极端误触情况。
  • 异常处理的疏漏
    如果你的代码里加了try-except,但except块里直接写了continue,万一输入0时不小心触发了异常(比如你错误限制了输入必须带小数?),就会跳过return,继续循环。

调试小技巧

你可以在循环里加一行打印,看看每次输入后的变量情况:

print(f"当前输入内容:{user_input},转换后的价格:{price}")

这样就能清楚看到输入0的时候,price是不是0.0,判断条件有没有正常触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:23:00