为什么我必须将整数更改为字符串才能在Python中进行迭代?

时间:2017-04-21 06:35:07

标签: python python-2.7

首先,我最近才开始在codeacademy.com上学习Python,这可能是一个非常基本的问题,所以感谢您的帮助,请原谅我缺乏知识。

下面的函数将正整数作为输入,并返回所有数字的总和。我不明白的是,为什么我必须首先将输入的类型更改为str,然后再更改为整数,以便将数字的数字相互添加。有人可以帮我解释一下吗?该代码适用于练习,但我觉得我在这里错过了大局。

def digit_sum(n):
    num = 0

    for i in str(n):
        num += int(i)    
    return num

2 个答案:

答案 0 :(得分:3)

整数不是数字序列。它们只是(整数)数字,所以它们不能被迭代。

通过将整数转换为字符串,您创建了一系列数字(字符),并且可以迭代字符串 。它不再是数字,现在是 text

将其视为一种表现形式;您也可以将相同的数字转换为十六进制文本,或八进制文本或二进制文本。它仍然是相同的数值,只是在文本中写得不同。

对字符串的迭代起作用,并为您提供单个字符,对于数字意味着每个字符也是一个数字。代码将该字符转换为带有int(i)的数字。

您不必使用该技巧。你也可以使用数学:

def digit_sum(n):  
    total = 0  
    while n:
        n, digit = divmod(n, 10)
        num += digit
    return num

这使用while循环,并重复将输入数除以10(保留余数),直到达到0。余数总和,给你数字总和。因此1234变为1234,然后变为123等。

答案 1 :(得分:0)

让我们说数字12345 所以我需要1,2,3,4,5来自给定的数字,然后总结。

那么如何获得个人数量。一个数学方法是@Martijn Pieters如何展示。

另一种方法是将其转换为字符串,并使其可迭代。

这是实现这一目标的众多方法之一。

>>> sum(map(int, list(str(12345))))
15

list()函数将字符串分成单个字母。所以我需要一个字符串。一旦我将所有数字作为单个字母,我就可以将它们转换为整数并将它们相加。