Python使用超集判断数字包含全部10位数字时的逻辑错误
问题原因
- 集合
A只在进入while循环前被赋值了一次,对应初始值n=1234567880的字符集合。后续循环中你每次给n加1,但没有重新计算n对应的集合更新A,导致每次超集判断用的都是初始的、缺少数字9的集合,判断结果永远为False。 - 因为判断永远不满足
A.issuperset(C) == True的条件,complete变量永远不会被赋值为False,while循环会一直执行else分支,无限累加打印n,永远不会输出符合要求的结果。
修复方案
你只需要在每次n更新后,同步更新集合A的值即可,修正后代码如下:
n = 1234567880 d = 1234567890 C = set(str(d)) complete = True while complete == True: A = set(str(n)) # 每次循环都重新计算当前n对应的集合 if A.issuperset(C) == True: print(n) complete = False else: n = n + 1 print(n) else: print("completed")
修改后程序运行到n=1234567890时就会触发判断条件,和你预期的执行10次左右就能输出结果的逻辑一致。
内容的提问来源于stack exchange,提问作者Ben Again
相关产品推荐
相关产品推荐

