如何一次将多个列表添加到一起,并使用while语句替换if语句?

2024-06-09 14:42:24 发布

您现在位置:Python中文网/ 问答频道 /正文

现在,我将列表中的每个片段[]分别转换为int(),然后将它们逐个相加。我知道我正在使用一个非常低效的方法,并希望得到一些反馈,我应该如何着手清理这个。你知道吗

我们的目标是取一个像123这样的数字,将每个数字分开,然后将它们相加,得到一个数字6。如果使用if语句,那么如果我使用一个更大的数字,比如655,并且以16结束,那么这个数字将再次被分隔为“1”、“6”,再加起来等于7,一个单一的数字。你知道吗

虽然现在我只限于长度为3的数字,因为我不知道如何转换整个字符串。你知道吗

val = input('Enter Value:')
#val = int(val)

#individual value
ival = list(val)
iv0 = int(ival[0])
iv1 = int(ival[1])
iv2 = int(ival[2])
print(iv2)


ivs = (iv0+iv1+iv2)
print(ivs)

if ivs > 9:
    ivs = str(ivs)
    ivss = list(ivs)
    fiv0 = int(ivss[0])
    fiv1 = int(ivss[1])
    fivs = (fiv0+fiv1)
    print(fivs)
    if fivs > 9:
        fivs = str(fivs)
        ivss = list(fivs)
        fiv0 = int(ivss[0])
        fiv1 = int(ivss[1])
        fivs = (fiv0+fiv1)
        print(fivs)
else:
    print(ivs)

Tags: if数字vallistintprintivsiv1
3条回答

你可以用算术的方法来计算,但我认为最简单的方法是得到数字的字符串表示形式并使用它。你知道吗

def sum_digits(n):
    s = sum(int(c) for c in str(n))
    if s > 9:
        return sum_digits(s)
    return s

这应该是你想要的:

def maths(given_value):
    retval = 0
    for i in given_value:
        retval += int(i)
    return retval

value = raw_input("enter a number: ")

你可以用这个密码。你知道吗

d = val
while d > 9:
    d = sum(int(c) for c in str(d))

这正是你所描述的。然而,有一个更简单的方法。重复地加上一个数字的十进制数字叫做casting out nines,结果就是这个数字的digital root。这几乎等于数字被9除后的余数,只是希望得到9而不是0的结果。所以更简单更快的代码

d = val % 9
if d == 0:
    d = 9

或者是更短但更棘手的

d = (val - 1) % 9 + 1

或者更棘手的问题

d = val % 9 or 9

(请注意,我在给this previous question的答案中包含了这些信息。)

相关问题 更多 >