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

Python编写模拟门店商品总价统计程序出现double call问题如何解决

Python门店商品总价统计程序double call问题解决方案

问题根源

你遇到的double call问题由两个核心错误导致:

  • 类定义作用域内直接写入了执行逻辑,同时在for循环遍历用户选择的商品前,提前硬编码调用了三次商品统计方法,循环中又根据用户选择再次调用对应方法,导致每个商品的数量输入逻辑被触发两次
  • 类方法参数命名完全不符合Python规范,将实例参数命名为__init__、main造成逻辑混淆,同时条件判断items == ('socks' or 'sock')写法错误,无法匹配单数商品名称

最优修复方案

核心修改点

  1. 所有类实例方法的第一个参数统一使用规范命名self,不要用__init__、main等特殊名称当作参数名
  2. 将执行逻辑从类定义中移出,仅在类内部保留方法定义
  3. 删除循环前硬编码的三次商品统计方法调用,仅在遍历用户选择时按需调用对应方法
  4. 修正条件判断逻辑,用in关键字匹配商品单复数名称
  5. 总金额计算和打印移到循环结束后执行,避免重复输出

修复后代码示例

#!/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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 20:24:06