Python费用分类代码分类失效、while循环异常终止问题排查
问题根因
代码存在两处核心逻辑错误,直接导致你遇到的两个异常:
- 条件判断写法不符合Python语法规则:你写的
if category == str("Bill") or str("bill")、if repeat == "No" or "no"这类写法中,or关键字后直接跟的非空字符串会被Python解释器判定为永久真值。因此分类判断时第一个if分支永远成立,所有条目都会被追加到bills列表;退出判断时不管输入什么内容,都会触发add_items = False直接终止循环。 - 输入采集位置错误:你把费用名称、金额、类别的输入语句放在了while循环外部,就算循环逻辑正常,也只会反复追加第一次输入的同一条费用,无法采集新的条目。
修正后可运行代码
# 创建按费用类别分类的记账程序 # 初始化不同类别的费用存储列表 bills = [] fun = [] take_out = [] def items_list(): """接收用户输入并按类别分类费用的函数""" print("请在此添加你的费用条目") add_items = True while add_items: # 把输入采集移到循环内部,每次循环都接收新条目 name = input("费用名称: ") cost = input("费用金额: ") category = input("费用类别(Bill/账单/Fun/娱乐/Take Out/外食): ").strip() expense = f"{name}, {cost}, {category}" # 统一转小写后判断类别,避免大小写输入导致匹配失败 cat_lower = category.lower() if cat_lower == "bill": bills.append(expense) elif cat_lower == "fun": fun.append(expense) elif cat_lower == "take out": take_out.append(expense) else: print("输入的类别无效,该条目未归类") # 修正退出判断逻辑,统一处理大小写和前后空格 repeat = input("是否要添加下一条费用?(Yes/No): ").strip() if repeat.lower() == "no": add_items = False items_list() print("账单类费用:", bills) print("娱乐类费用:", fun) print("外食类费用:", take_out)
额外优化点
- 用
.lower()统一把用户输入转成小写再判断,不用分别匹配首字母大写、全小写的输入情况,容错性更高 - 加了
.strip()处理用户输入前后不小心带的空格,避免因为多打了空格导致匹配失败 - 增加了无效类别的提示,用户输错类别时能得到明确反馈
内容的提问来源于stack exchange,提问作者self_taught_python
相关产品推荐
相关产品推荐

