如果输入数字重复的场景

Scenario if in input numbers are repeat

代码:

n = int(input("Type n: "))

def some_function(n):
    numbers, numbers_sum = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], 45
    while True:
        digit = n % 10
        n //= 10
        if digit in numbers:
            numbers.remove(digit)
            numbers_sum -= digit
        else:
            break
    return numbers_sum

print(some_function(n))

程序需要打印输入中未找到的数字的总和。

我介绍了数字不重复的情况,对于这种情况,如果输入是 234567890 输出是 1 。 但是当数字为 repeating.Etc 时,对场景一无所知。如果输入是 22334567890223344556677889900 输出仍然需要是 1 但它不是。

P.S。 我不能用字符串来做。 我知道 0 没有什么区别,因为我们使用的是 - 和 +。

更简单的方法是将其转换为字符串并进行集合操作

>>> n=22334567890
>>> numbers=set("123456789")
>>> numbers-set(str(n))
{'1'}
>>> 

然后转换回整数

>>> sum(map(int,{'1'}))
1
>>> 

如果您不想进行字符串转换,只需创建一个函数来为您提供数字的数字并执行相同的操作

>>> def digits(n): #this is a generator function
        if n==0:
            yield 0
        while n:
            n,d = divmod(n,10)
            yield d


>>> n=22334567890            
>>> numbers=set(range(10))
>>> numbers
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> list(digits(n))
[0, 9, 8, 7, 6, 5, 4, 3, 3, 2, 2]
>>> 
>>> numbers - set(digits(n))
{1}
>>> sum({1})
1
>>> 

我解决了it.Code:

n, finish = int(input("Type n: ")), 0
dig_list, num_list = [], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

def sum(n):
    while n > 0:
        digit = n % 10
        n //= 10
        dig_list.append(digit)
    for i in range (0, 11):
        if i in dig_list:
            num_list.remove(i)
    return num_list

for e in (sum(n)):
    finish += e

print(finish)

代码的用途。

解释: 首先,我们创建 2 个列表。 第一个(dig_list)没有元素,我们将把输入(n)的所有数字放在那里。 第二个列表是从 0 到 9 (num_list) 的数字列表。 然后我们将 n 的所有数字放入第一个 list.Then 使用 for 循环 我们遍历第一个 list.If 从 0 到 9 的数字在第一个列表中找到我们从第二个列表中删除它们。 最后,我们将第二个列表剩余元素的sum(+)保存到一个变量sum.