【问题标题】:How to extract numbers with repeating digits within a range如何提取范围内重复数字的数字
【发布时间】:2022-01-10 00:29:31
【问题描述】:

我需要确定两个数字范围内不重复数字的数字计数。 假设 n1=11 和 n2=15。

有数字 11,有重复的数字,但 12、13、14 和 15 没有重复的数字。因此,输出为 4。

写了这段代码:

n1=int(input())
n2=int(input())

count=0

for i in range(n1,n2+1):
    lst=[]
    x=i
    while (n1>0):
        a=x%10
        lst.append(a)
        x=x//10
    for j in range(0,len(lst)-1):
      for k in range(j+1,len(lst)):
        if (lst[j]==lst[k]):
            break
        else:
            count=count+1
print (count)

在运行代码时,输​​入两个数字后,它不运行代码,但仍然接受输入。我错过了什么?

【问题讨论】:

    标签: python-3.x digits


    【解决方案1】:

    您的代码无法运行的原因是因为它卡在您的while 循环中,它永远无法退出该条件,因为n1 > 0 将永远没有机会被评估为False,除非输入本身就是<= 0

    无论如何,您的方法过于复杂,可读性不强,也不完全是pythonic。这是一种更简单、更易读的方法:

    from collections import Counter
    
    n1 = int(input())
    n2 = int(input())
    
    count = 0
    
    for num in range(n1, n2+1):
        num = str(num)
        digit_count = Counter(num)
        has_repeating_digits = any((True for count in digit_count.values() if count > 1))
    
        if not has_repeating_digits:
            count += 1
    
    print(count)
    

    在编写代码时,一般而言,您应该尽量避免嵌套太多东西(在您的原始示例中,您有 4 个嵌套循环,这是可读性和调试的噩梦),并尝试使用自描述变量名称(如 a、x、 j, k, b... 是一种禁忌)。

    如果您在 IPython 会话中运行 import this,您还可以阅读“Python 之禅”,它总结了编写正确 Python 代码的概念。

    【讨论】:

    • 是的,感谢您的解决方案。我通过使用 set() 尝试了另一种简化的方法,因为我不必找到重复的方法。 x=str(n1); if len(set(x))==len(x): count=count+1 但是 count 只打印范围之间的总数。我不知道为什么
    • 您的第二个解决方案也有效,它甚至比我的更简洁。如果 count 打印的是总数而不是您需要的数字,则可能是您编写的指令顺序的逻辑错误。尝试逐行仔细检查您的代码。顺便说一句,如果您喜欢这个答案并认为它是合适的,请不要忘记投票并将其标记为解决方案。
    猜你喜欢
    • 2021-10-21
    • 2021-08-09
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多