生成X至Y间无重复数字的列表:Python代码调试求助
问题分析与代码修复
原代码的核心问题在于逻辑完全偏离了“检测数字是否有重复位”的需求,具体问题点:
- 错误修改了存储原始数字的列表
l,导致后续处理的是被整除后的数值(最终变成0) - 仅对比当前位和个位,无法覆盖所有数位的重复检测(比如11的两位都是1,这个逻辑无法识别)
- 结果收集的逻辑混乱,导致最终输出全是0
修复方案1:字符串法(简洁直观)
利用字符串的去重特性,判断数字转成字符串后的长度是否等于其字符集合的长度(集合自动去重,若长度一致则无重复数字):
x, y = map(int, input().split()) result = [] for num in range(x, y + 1): s = str(num) if len(s) == len(set(s)): result.append(str(num)) print(','.join(result))
输入10 20时,输出:10,12,13,14,15,16,17,18,19,20
修复方案2:数学方法(纯数字操作)
通过取余和整除操作逐位提取数字,用集合记录已出现的数位,判断是否有重复:
x, y = map(int, input().split()) result = [] for num in range(x, y + 1): temp = num digits = set() has_duplicate = False while temp > 0: digit = temp % 10 if digit in digits: has_duplicate = True break digits.add(digit) temp = temp // 10 if not has_duplicate: result.append(str(num)) print(','.join(result))
这个方法同样能得到符合预期的输出,适合需要避免字符串操作的场景。
内容的提问来源于stack exchange,提问作者Shinra
相关产品推荐
相关产品推荐

