Python 家务扣减库存字典时键值未更新问题求助
问题原因分析
- 条件判断逻辑错误:你写的
while cupboard["cleaningspray"] <0.5判断逻辑完全相反,初始cleaningspray的数值是5,远大于0.5,所以循环内的代码根本不会执行,自然不会有任何数值更新。 - 扣减逻辑不符合需求:你写的字典推导式会把储物字典里所有物品的存量都扣减0.5,不符合只扣减
cleaningspray的需求;而且你生成的新字典cleaned没有赋值给原cupboard,也没有修改原字典的内容,就算进入循环也不会更新原字典的值。 - 入参未使用:定义的
cleaning函数接收的room参数在逻辑中完全没有用到,属于无效参数。
修复后的实现代码
基础版本可直接满足清洁一次扣减0.5个清洁喷雾的需求:
cupboard= {"cookies":30, "coffee":3, "washingpowder": 5, "cleaningspray": 5, 'Pasta': 0.5, 'Tomato': 4, 'Beef': 2, 'Potato': 2, 'Flour': 0.2, 'Milk': 1, "Burger buns": 6} cleaning_amount = 0.5 def cleaning(room_consumption): # 先判断清洁喷雾存量是否足够本次使用 if cupboard["cleaningspray"] >= room_consumption: # 只扣减清洁喷雾的存量,直接修改原字典对应键的值 cupboard["cleaningspray"] -= room_consumption print(f"清洁完成,剩余清洁喷雾存量:{cupboard['cleaningspray']}") else: print(f"清洁喷雾存量不足,剩余{cupboard['cleaningspray']},无法完成本次清洁") # 客厅清洁需要消耗0.5单位清洁喷雾 livingroom_consumption = 1 * cleaning_amount cleaning(livingroom_consumption) print(cupboard)
运行后输出结果:
清洁完成,剩余清洁喷雾存量:4.5 {'cookies': 30, 'coffee': 3, 'washingpowder': 5, 'cleaningspray': 4.5, 'Pasta': 0.5, 'Tomato': 4, 'Beef': 2, 'Potato': 2, 'Flour': 0.2, 'Milk': 1, 'Burger buns': 6}
扩展优化建议
如果后续要支持多个房间清洁的批量扣减,可以把函数逻辑调整为:
def batch_cleaning(room_count): total_need = room_count * cleaning_amount if cupboard["cleaningspray"] >= total_need: cupboard["cleaningspray"] -= total_need print(f"完成{room_count}个房间清洁,剩余清洁喷雾存量:{cupboard['cleaningspray']}") else: available_room = int(cupboard["cleaningspray"] // cleaning_amount) cupboard["cleaningspray"] -= available_room * cleaning_amount print(f"清洁喷雾仅够完成{available_room}个房间清洁,剩余清洁喷雾存量:{cupboard['cleaningspray']}")
内容的提问来源于stack exchange,提问作者Alexa Sievers
相关产品推荐
相关产品推荐

