2011-10-24 38 views
1

我想函数获取列表中每个数字的最后一位数字并将它们汇总在一起。因此,例如,下面的函数将返回“10”。Python函数来总结数字

def getSumOfLastDigits(numList): 
    x = sum(int(num[-1:]) for num in numList) 
    print x 

getSumOfLastDigits([1, 23, 456]) 
>>>10 

这是我收到的而不是预期了 “10”

def getSumOfLastDigits(numList): 
    x = sum(int(num[-1:]) for num in numList) 
    print x 
    getSumOfLastDigits([1, 23, 456]) 
+0

WHE你卡住了? –

+1

我认为你为你的'实际输出'复制并粘贴了错误的东西。 –

+0

其实我没有把10作为预期的输出。当我运行上面的代码时,这不是实际的输出。 – shaytac

回答

3

太多的工作。

def getSumOfLastDigits(numList): 
    return sum(x % 10 for x in numList) 
+0

如果这个数字是负数呢? – JBernardo

+0

@JBernardo:不知道。你必须问问提问者。 –

+0

他问最后一位数字。 '(-1)%10'为9而不是1 – JBernardo

2

x = sum(num%10 for num in numList)

+0

谢谢你的回答。 – shaytac

2

你不能索引到一个号码;一个数字不是一个数字序列(内部,它不是以10为底数表示)。您可以使用数学运算来获取数字的最后一位数字:除以10后的余数。我们使用%运算符执行此操作。

另外:

  • 不打印在你的函数值,返回它。让调用代码决定如何处理该值。计算和输出是独立的任务,应该分开。

  • 避免在变量名中指示数据类型 - 是的,即使在Python中。建立实际上不必要的假设并不是一个好主意。例如,您可以在这里使用任何类型的序列。指示您有多个号码的最简单方法是使用复数numbers。这也意味着你使用一个完整的单词,并且人们不必考虑'num'是什么短的。

  • 如果您只打算使用一次,并且立即使用,则无需将表达式的结果分配给临时变量。名称x不会告诉我们任何事情,所以切断它。

  • get被大多数Pythonistas视为一个丑陋的函数名称前缀。它应该已经很明显,函数计算并返回一个值。对这些函数使用名词类型名称,对于主要用于处理一些现有数据的函数,使用动词类型名称。

这样:

def sum_of_last_digits(numbers): 
    return sum(number % 10 for number in numbers) 
0
def getSumOfLastDigits(numList): 
    total=0 
    for item in numList: 
     newItem=str(item) 
     length=newItem[len(newItem)-1] 
     total+=int(length) 
    return total