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

求助调试transaction.split方法:股票收益计算函数报错

问题分析与修复方案

核心错误原因

你遇到的transaction.split()报错,是因为每个交易字符串(比如"buy 100 shares at 20 each")用默认split()拆分后会得到6个元素,而你试图把它解包给3个变量,导致值数量不匹配。

其他隐藏问题

  1. 缩进错误:stock_transactions的定义和函数调用代码写在了calculate_gain函数的return语句之后,这部分代码永远不会执行,函数直接返回0。
  2. 变量作用域问题:shares_sold只在sell分支里赋值,如果第一个交易是buy,后续while shares_sold > 0会触发未定义错误;且while循环应该放在sell分支内部,否则每次循环都会处理所有交易后的sell,逻辑混乱。
  3. 元组不可修改:从deque取出的shares是元组,shares[0] -= shares_sold会报错,元组元素无法修改。

修复后的代码

from collections import deque

def calculate_gain(stock_transactions):
    gain = 0
    shares_bought = deque()

    for transaction in stock_transactions:
        parts = transaction.split()
        action = parts[0]
        num_shares = int(parts[1])
        share_price = int(parts[4])

        if action == 'buy':
            # 用列表存储,方便后续修改数量
            shares_bought.append([num_shares, share_price])
        elif action == 'sell':
            shares_sold = num_shares
            current_sell_price = share_price
            while shares_sold > 0:
                if not shares_bought:
                    break  # 防止空队列报错,实际业务中需处理持仓不足情况
                shares = shares_bought.popleft()
                if shares[0] > shares_sold:
                    gain += shares_sold * (current_sell_price - shares[1])
                    shares[0] -= shares_sold
                    shares_bought.appendleft(shares)
                    shares_sold = 0
                else:
                    gain += shares[0] * (current_sell_price - shares[1])
                    shares_sold -= shares[0]

    return gain

stock_transactions = [
    "buy 100 shares at 20 each",
    "buy 20 shares at 24 each",
    "buy 200 shares at 36 each",
    "sell 150 shares at 30 each"
]

total_gain = calculate_gain(stock_transactions)
print(f"The total capital gain is ${total_gain}")

修复说明

  • 拆分交易字符串时,通过索引提取关键信息:动作(parts[0])、数量(parts[1])、价格(parts[4]),避免解包数量不匹配问题。
  • 将while循环移至sell分支内部,确保每次卖出时才处理持仓计算收益。
  • 用列表替代元组存储买入的股票数量和价格,支持后续修改剩余持仓数量。
  • 调整代码缩进,让stock_transactions定义和函数调用在函数外部正常执行。

内容的提问来源于stack exchange,提问作者kayjoneill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:19:52