2017-03-22 130 views
1

所以,我有两个列表:功能问题

  • typeList - 交易类型的字符串列表(加法,减法)
  • valueList - 加上或减去值的列表。

因为值和类型都附加到列表中相同的索引,我需要做一个函数来计算总增加值和减去总值的总和,但我一直坚持它很长一段时间试图让我的头脑只是如何做到这一点。 desiredType只是正在查找的交易类型。你会看到,我每次调用函数两次。 我知道索引值需要在两个列表之间获取和使用,但不知道如何将这些值相加。

def showInfo(typeList, valueList, desiredType): 
    for i in range(len(valueList)): 
     if typeList[i] == desiredType: 
      total = total + valueList[i] 
      return (total) 

调用该函数:

if choice == "I": #Prints transaction information 
    print (showInfo(transactionTypes,transactionAmounts, "Addition")) 
    print (showInfo(transactionTypes,transactionAmounts, "Subtraction")) 

任何帮助,将不胜感激,以及它是如何做的解释。

+1

你有没有得到任何例外,例如NameError? –

+0

第一次定义“总数”在哪里? –

+0

的可能的复制[VAR functionName =函数(){} VS功能使用functionName(){}](http://stackoverflow.com/questions/336859/var-functionname-function-vs-function-functionname) – ytkjxgfn

回答

1

可以zip那些2只列出了一起,那么你没有保持跟踪指数的你看:

def transaction_total(types, amounts, desired_type): 
    total = 0 
    for transaction_type, amount in zip(types, amounts): 
     if transaction_type == desired_type: 
      total += amount 
    return total 

但是,你真的只是筛选值,然后合计起来。蟒蛇使得这个吸尘器使用生成器表达式和sum功能:

def transaction_total(types, amounts, desired_type): 
    return sum(amount for transaction_type, amount in zip(types, amounts) 
       if transaction_type == desired_type) 
0

如果你需要保持你的数据修改,你可以让你的功能更有效(只需一个电话):

def showInfo(typeList, valueList): 
    for i in range(len(valueList)): 
     if typeList[i] == "Addition": 
      total_add = total_add + valueList[i] 
     else: 
      total_sub = total_sub - valueList[i] 
    return (total_add, total_sub)