写一个函数getSumOfFirstDigit(numList),它接收一个正数列表并返回列表中所有第一个数字的总和?

时间:2013-09-11 15:01:57

标签: python

我正在pyschools.com上做python教程,为了回答上面的问题,我的方法是将每个整数转换为字符串,颠倒字符的顺序,然后将其转换回整数,除以10 ,并添加剩余部分。这可能是一种非常混乱的方法,但这是我能想到的唯一方法。

我的代码如下:`

def getSumOfFirstDigit(num): 
    answer=0
    for number in num:
        str(number)
        number[::-1]
        int(number)
        t = number%10
        answer=answer+t
    return answer`

当我使用示例getSumOfFirstDigit([12, 23, 34, 45, 56])运行它时,它会返回错误:

Traceback (most recent call last):
File "Code", line 5, in getSumOfFirstDigit
TypeError: 'int' object has no attribute '__getitem__'`

我认为“str(数字)”会处理错误所说的内容。

8 个答案:

答案 0 :(得分:3)

使用sum,列出切片和生成器表达式:

>>> sum(int(str(n)[0]) for n in [1, 23, 45, 234])
9

答案 1 :(得分:2)

这是一种不同的方法:你可以通过反复将数字除以10得到第一个数字,直到它小于10:

def first_digit(n):
    while n > 9:
        n /= 10
    return n

之后,只需要调用sum()函数来完成工作:

def sum_of_first_digits(seq):
    return sum(first_digit(n) for n in seq)

讨论

  • 假设:所有数字均为零或正数,没有检查否定数字或非数字输入
  • 如果不允许使用sum()函数,请编写循环

答案 2 :(得分:1)

当然会,但你需要以某种方式使用它。

试试这个:

answer = answer + int(str(number)[0])

或者代替回答=回答+某事,你可以这样做:

answer += int(str(number)[0])

答案 3 :(得分:1)

您收到该错误的原因是因为您写了:

    str(number)

以及后来:

    int(number)

但没有将它们分配给数字,所以它仍然是一个int。

替换为:

    number=str(number)
    number=int(number)

你应该没事。

答案 4 :(得分:1)

def getSumOfFirstDigit(num):
    sum1 = 0
    for x in num:
        temp = str(x)
        sum1 += int(temp[0])
    return sum1

答案 5 :(得分:1)

它告诉你TypeError:'int'对象没有属性' getitem ',因为你将变量“number”视为列表。它不是。它是num中的数字的整数,它们是整数。所以“数字[:: - 1]”是不是没有。一种方法是....

    def getSumOfFirstDigit(num): 
        answer=[]
        for number in num:
            number=str(number)
            number=number[0]
            answer.append(int(number))
        return sum(answer)

答案 6 :(得分:0)

这应该有效:

def getSumOfFirstDigit(num):
   sum = 0
   num_strings = map(str, num)
   for num in num_strings:
       sum += int(i[0])
   print (sum)

您的代码存在问题:

def getSumOfFirstDigit(num): 
    answer=0
    for number in num:
        str(number)           # you are not assigning the string to anything. Maybe you need to store it in a temporary variable
        number[::-1]          # number is an int here so you can't do this
        int(number)           # number is already an int
        t = number%10
        answer=answer+t
    return answer

你的代码应该是这样的(如果我正确理解你想做什么):

def getSumOfFirstDigit(num): 
    answer=0
    for number in num:
        temp = str(number)
        temp = [::-1]
        temp = int(number)
        t = temp%10
        answer += t
    return answer

答案 7 :(得分:0)

def getSumOfFirstDigit(numList): 
    total=0
    for item in numList:
        newItem=str(item)
        length=newItem[len(newItem)-len(newItem)]
        total+=int(length)
    return total