Python编写模拟门店商品总价统计程序出现double call问题如何解决
Python门店商品总价统计程序double call问题解决方案
问题根源
你遇到的double call问题由两个核心错误导致:
- 类定义作用域内直接写入了执行逻辑,同时在
for循环遍历用户选择的商品前,提前硬编码调用了三次商品统计方法,循环中又根据用户选择再次调用对应方法,导致每个商品的数量输入逻辑被触发两次 - 类方法参数命名完全不符合Python规范,将实例参数命名为
__init__、main造成逻辑混淆,同时条件判断items == ('socks' or 'sock')写法错误,无法匹配单数商品名称
最优修复方案
核心修改点
- 所有类实例方法的第一个参数统一使用规范命名
self,不要用__init__、main等特殊名称当作参数名 - 将执行逻辑从类定义中移出,仅在类内部保留方法定义
- 删除循环前硬编码的三次商品统计方法调用,仅在遍历用户选择时按需调用对应方法
- 修正条件判断逻辑,用
in关键字匹配商品单复数名称 - 总金额计算和打印移到循环结束后执行,避免重复输出
修复后代码示例
#!/usr/bin/env python3 #Lukas Robin #07.06.2021 class Stonk: def __init__(self): self.name = '' self.price = {} self.quantity = 0 self.total = 0 self.shirtTotal = 0 self.sockTotal = 0 self.jeanTotal = 0 def main(self): self.total = 0 self.shirtTotal = 0 self.sockTotal = 0 self.jeanTotal = 0 self.price = {'shirts' : 25, 'socks': 12, 'jeans' : 50} self.name = input("Are you buying shirts, socks and/or jeans? ") def count_shirts(self): self.quantity = int(input("How many shirts would you like? ")) self.shirtTotal += self.quantity * self.price['shirts'] print("The price of the shirts is, " + str(self.shirtTotal)) return self.shirtTotal def count_socks(self): self.quantity = int(input("How many socks would you like? ")) self.sockTotal += self.quantity * self.price['socks'] print("The price of the socks is, " + str(self.sockTotal)) return self.sockTotal def count_jeans(self): self.quantity = int(input("How many jeans would you like? ")) self.jeanTotal += self.quantity * self.price['jeans'] print("The price of the jeans is, " + str(self.jeanTotal)) return self.jeanTotal # 执行逻辑放在类外部 if __name__ == "__main__": stonk = Stonk() stonk.main() options = stonk.name.split(", ") for item in options: if item in ('socks', 'sock'): stonk.count_socks() elif item in ('shirts', 'shirt'): stonk.count_shirts() elif item in ('jeans', 'jean'): stonk.count_jeans() stonk.total = stonk.shirtTotal + stonk.sockTotal + stonk.jeanTotal print("Your total is " + str(stonk.total))
内容的提问来源于stack exchange,提问作者empty-engineer
相关产品推荐
相关产品推荐

