比较并计算两个数字之间的相同数字

时间:2019-03-30 23:35:28

标签: python

我正在寻找一个函数,该函数接收两个四位数的数字(mn),该数字计算m和{{1}之间有多少位数相同},包括左侧的重复项和零。问题是,我的教授只教我们如何使用循环,而不希望我们使用列表和交集,而我无能为力。

例如,如果nm = 331,应返回n = 3作为相等位数,如果返回2,则应返回3个相同位数。 / p>

n = 33

编辑:这是我之前创建的代码,它计数的位数比应有的多,但是中心思想是使用%和//来读取每个数字,但不起作用...

>>> compare_digits(331, 3)
2
>>> compare_digits(332, 33)
3

输出非常混乱,我什至无法识别任何模式。

2 个答案:

答案 0 :(得分:2)

您可以将collections.Counter()与设置的交集一起使用:

from collections import Counter

def compare_digits(m, n):
    m_counts = Counter(str(m).zfill(4))
    n_counts = Counter(str(n).zfill(4))

    return sum(min(m_counts[k], n_counts[k]) for k in m_counts.keys() & n_counts.keys())

print(compare_digits(331, 3))  # 2
print(compare_digits(332, 33)) # 3
print(compare_digits(3, 331))  # 2

答案 1 :(得分:0)

好吧,我决定将位数限制为4,而不是通用的,所以我写了这个,效果很好:

def compare_digits(m, n):
a = m % 10
m //= 10
b = m % 10
m //= 10
c = m % 10
m //= 10
d = m % 10

read_ndigits = 0
same_digits = 0

while read_ndigits < 4:
    current = n % 10
    if current == a:
        same_digits += 1
        a = None
    elif current == b:
        same_digits += 1
        b = None
    elif current == c:
        same_digits += 1
        c = None
    elif current == d:
        same_digits += 1
        d = None
    n //= 10
    read_ndigits += 1

return same_digits

谢谢大家的帮助:)