我遇到了一个令人费解的挑战。我必须多次检查一个数字是否包含相同的数字。 11,424,66等。起初这似乎很容易,但我很难找到一个逻辑来检查这一点。任何想法?
这是我到目前为止所得到的。该函数接受一个列表。 (更新)
arr = [[1,20],[1,10]]
for i in arr:
l = list(range(i[0],i[1]))
for num in l:
if num < 11: continue
for c in str(num):
if str(num).count(c) > 1:
# dont know why code is popping off 12 and 13
print(l.pop(num))
答案 0 :(得分:8)
如果您的最终目标只是检测是否有双,则此功能可能有所帮助:
def has_doubles(n):
return len(set(str(n))) < len(str(n))
答案 1 :(得分:2)
我能想到的最好的方法是将数字转换成字符串并在其上做一个计数器
from collections import Counter
a = 98
c = Counter(str(a))
if any(value > 1 for value in c.values()):
print "The number has repeating digits"
@ Two-BitAlchemist感谢您的建议
答案 2 :(得分:0)
看起来你想要创建自己的算法,可能正在研究或学生练习,你只需要理解数字的属性除以10,其中1/10 = 0.1 10/10 = 1 13/10 = 1提醒3 13013 / 10 = 1301 rem 3因此我们可以创建一个函数,将提醒存储在一个数组中,检查它们对下一个数字的提醒,这里是使用递归的python算法,你可以实现相同的via循环
def countNumber(foundDigits,number):
next_number = int(number/10);
reminder = number % 10;
if(next_number < 1):
for num in foundDigits:
if(num == number or num == reminder):
return True
return False;
foundDigits.append(reminder);
return countNumber(foundDigits,next_number)
解释器中的示例可能是
digitsFound = list()
countNumber(digitsFound, 435229)
答案 3 :(得分:0)
解决了这个问题!我不知道基于位置而不是值的弹出执行!删除更适合这里。
arr = [[1,40],[1,10]]
for i in arr:
l = list(range(i[0],i[1]))
for num in l:
if num < 11: continue
for char in str(num):
if str(num).count(char) < 2: continue
l.remove(num)
break
print(l)