我正在寻找一个函数,该函数接收两个四位数的数字(m
,n
),该数字计算m
和{{1}之间有多少位数相同},包括左侧的重复项和零。问题是,我的教授只教我们如何使用循环,而不希望我们使用列表和交集,而我无能为力。
例如,如果n
和m = 331
,应返回n = 3
作为相等位数,如果返回2
,则应返回3个相同位数。 / p>
n = 33
编辑:这是我之前创建的代码,它计数的位数比应有的多,但是中心思想是使用%和//来读取每个数字,但不起作用...
>>> compare_digits(331, 3)
2
>>> compare_digits(332, 33)
3
输出非常混乱,我什至无法识别任何模式。
答案 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
谢谢大家的帮助:)