0

我在 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`

当我使用 example: 运行它时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(number)”会处理错误所说的内容。

4

8 回答 8

3

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

>>> sum(int(str(n)[0]) for n in [1, 23, 45, 234])
9
于 2013-09-11T15:12:08.017 回答
2

这是一种不同的方法:您可以通过将数字反复除以十直到小于十来获得第一个数字:

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() 函数,请编写一个循环
于 2013-09-11T15:08:38.313 回答
1

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

    str(number)

后来:

    int(number)

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

将它们替换为:

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

你应该没事。

于 2013-09-11T15:16:45.053 回答
1

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

尝试这个:

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

或者不做 answer = answer + something ,你可以这样做:

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

于 2013-09-11T15:05:57.940 回答
1
def getSumOfFirstDigit(num):
    sum1 = 0
    for x in num:
        temp = str(x)
        sum1 += int(temp[0])
    return sum1
于 2015-10-24T14:06:49.380 回答
1

它告诉您 TypeError: 'int' object has no attribute ' getitem ' 因为您将变量“number”视为一个列表。它不是。它是 num 中的整数的一致性。所以“number[::-1]”是不可以的。一种方法是......

    def getSumOfFirstDigit(num): 
        answer=[]
        for number in num:
            number=str(number)
            number=number[0]
            answer.append(int(number))
        return sum(answer)
于 2016-01-02T20:09:03.300 回答
0
def getSumOfFirstDigit(numList): 
    total=0
    for item in numList:
        newItem=str(item)
        length=newItem[len(newItem)-len(newItem)]
        total+=int(length)
    return total
于 2014-01-29T17:37:15.497 回答
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
于 2013-09-11T15:07:48.073 回答