理解如何在Python中乘以元组中的特定值

1 投票
1 回答
1613 浏览
提问于 2025-04-18 01:35

我并不是专家,也不想自称是专家,但这个练习让我非常头疼。我一直搞不懂怎么从一个元组中提取值并进行乘法运算。我总是得到以下输出。

def cost( aBlock ):

 cost = portfolio[1]*portfolio[2]

print(cost)

output comes out to >>> function cost at 0x0594AD68

我不明白为什么他们让我使用“aBlock”这个参数...

我该从哪里开始这个程序呢?

股票块。一个股票块有很多属性,包括购买日期、购买价格、股票数量和股票代码。我们可以把这些信息记录在一个元组中,然后对这些股票块进行一些简单的操作。

假设我们有以下投资组合。

Purchase Date   Purchase Price  Shares  Symbol  Current Price
25 Jan 2001           43.50          25  CAT         92.45
25 Jan 2001           42.80          50  DD          51.19
25 Jan 2001           42.10          75  EK          34.87
25 Jan 2001           37.58          100 GM          37.58

我们可以用一个五元组来表示每个股票块,内容包括购买日期、购买价格、股票数量、股票代码和当前价格。

portfolio= [ ( "25-Jan-2001", 43.50, 25, 'CAT', 92.45 ),
( "25-Jan-2001", 42.80, 50, 'DD', 51.19 ),
( "25-Jan-2001", 42.10, 75, 'EK', 34.87 ),
( "25-Jan-2001", 37.58, 100, 'GM', 37.58 )
]

开发一个函数,检查每个股票块,把股票数量和购买价格相乘,计算出投资组合的总购买价格。

def cost( aBlock ):
 #compute price times shares
return cost

再开发一个函数,检查每个股票块,把股票数量分别和购买价格、当前价格相乘,以确定总的盈亏情况。

def roi( aBlock, priceToday ):
  #use cost( aBlock ) to get cost
  #compute priceToday times shares
return the difference

1 个回答

3

你可以通过两种方式来获取元组中的值:

  1. 通过索引:shares = block[2],也就是说你可以直接用位置来取值。
  2. 通过解包所有的值:purchase_date, purchase_price, shares, symbol, price = block,这意味着你可以把元组里的所有值都取出来,分别赋给不同的变量。

根据这两种方式,这里有两种可能的解决方案来处理你的问题:

def total_purchase_price(stocks):
    res = []
    for block in stocks:
        shares = block[2]
        purchase_price = block[1]
        res += [shares * purchase_price]
    return res

或者

def total_wins(stocks):
    win = 0
    for block in stocks:
        purchase_date, purchase_price, shares, symbol, current_price = block
        win += (purchase_price - current_price) * shares
    return win

你可以这样调用这些函数:

portfolio= [ ( "25-Jan-2001", 43.50, 25, 'CAT', 92.45 ),
( "25-Jan-2001", 42.80, 50, 'DD', 51.19 ),
( "25-Jan-2001", 42.10, 75, 'EK', 34.87 ),
( "25-Jan-2001", 37.58, 100, 'GM', 37.58 )
]

print total_purchase_price(portfolio)
print total_wins(portfolio)

撰写回答