首页 > 解决方案 > 在两个数字之间找到两个相同的数字Python

问题描述

代码没有通过最后一次检查 (5000,50000)

程序必须在数字范围内找到至少 2 个相同的数字。例如:

import traceback


def two_identical(start, finish):
    count = 0
    check = 0
    while (start+1)<finish:     
        start = start + 1       
        govno = start           
        while govno>0:          
            b = govno % 10     
            c = govno // 10    
            while c>0:             
                check = c % 10    
                if check == b:     
                    count = count + 1     
                    govno = 0              
                    break                   
                c=c//10      
            govno=govno//10
    return (count)
    


# tests
try:
    assert two_identical(20, 33) == 1
    assert two_identical(0, 10) == 0
    assert two_identical(0, 101) == 10
    assert two_identical(0, 1000) == 261
    assert two_identical(5000, 50000) == 35198
except AssertionError:
    print("TEST ERROR")
    traceback.print_exc()
else:
    print("TEST PASSED")

标签: python

解决方案


您可以通过在代表每个数字的字符串列表中转换 int 并添加重复元素的数量来做到这一点:

def two_identical(start, finish):
    counter=0
    for i in range(start+1,finish,1):
        #Convert the digit in list of str. e.g 100 => ['1','0','0']
        i=[digit for digit in str(i)]
        #add the len of set of duplicate =>
        #e.g.: ['4', '9', '9', '7', '7'] => {'9','7'} => counter +=2
        #e.g.: ['4', '9', '9', '9', '7'] => {'9'} => counter +=1
        #e.g.:['4', '9', '9', '9', '4'] => {'9','4'} => counter +=2
        counter+=len(set([x for x in i if i.count(x) >1]))

    print(f"counter ({start},{finish}):{counter}")
    return counter

try:
    assert two_identical(20, 33) == 1
    assert two_identical(0, 10) == 0
    assert two_identical(0, 101) == 10
    assert two_identical(0, 1000) == 261
    assert two_identical(5000, 50000) == 35198
except AssertionError:
    print("TEST ERROR")
    #traceback.print_exc()
else:
    print("TEST PASSED")

结果:

counter (20,33):1
counter (0,10):0
counter (0,101):10
counter (0,1000):261
counter (5000,50000):35198
TEST PASSED

推荐阅读