【问题标题】:Compare each number from the same integer比较同一整数中的每个数字
【发布时间】:2020-10-17 10:34:50
【问题描述】:

我正在玩 Python,我想打印从 0000 到 9999 的每个数字,但前提是这些数字不重复。

我这样开始只是为了打印每个数字:

for i in range(0000, 10000):
   print(f"Checking: {1:04}")

打印最多 9999 的每个数字 我想打印每个没有重复数字的数字。 这是我的尝试:

for i in range(0000, 10000):
   for n in i:
      if i[n] != i[n + 1]
         print(f"checking: {i:04}")

打印的错误是:

Traceback (most recent call last):
  File "test.py", line 2, in <module>
    for n in i:
TypeError: 'int' object is not iterable

谢谢,感谢任何提示!

【问题讨论】:

  • 使用整数除法和取模我们可以验证一个数的唯一性;
  • 该错误表示不能迭代整数类型;
  • 这会失败,因为 int 对象不可迭代,因为它们不能像字符串一样循环。一种有点笨拙的解决方法是将整数转换为字符串,然后循环遍历它。此外,您需要在前面加上适当数量的零,因为整数会忽略多余的数字。
  • 您可以使用可迭代的str(i)。但是,您尝试使用的条件(如果已修复)将打印那些不是 aaaa 形式的数字。那是你想要的吗?或者您是否还想跳过一个数字重复但不是在所有四个位置都重复的数字,例如 abcb?
  • 如果我正确理解了这个问题,那么 123 以下的任何内容都不会起作用,主要是因为两个零。

标签: python


【解决方案1】:

您可以先将每个数字转换为str,然后再转换为set()

如果set中的元素数量与原始字符串中的元素数量相同,
这意味着数字中没有重复的数字。

for i in range(0000, 10000):
    if len(set(str(i))) == len(str(i)):
        print(i)

输出:

0
1
2
3
4
5
6
7
8
9
10
12
13
14
15
16
17
18
19
20
21
23
24
25
26
27
28
...
9846
9847
9850
9851
9852
9853
9854
9856
9857
9860
9861
9862
9863
9864
9865
9867
9870
9871
9872
9873
9874
9875
9876

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 2015-05-20
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多