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
相关产品推荐
相关产品推荐

