Python如何用for循环将列表中符合7规则的数字替换为'BOOM'
代码问题排查
原有代码共有4处错误,逐一说明:
- 列表初始化写法错误:
[range(0, end_number + 1)]是把range迭代器作为单个元素存入列表,不会生成0到end_number的连续数值,正确生成序列的写法是list(range(0, end_number + 1)) - 包含7的判断逻辑错误:整数类型不支持切片操作
i[0:],判断数字是否含7需要先把数字转成字符串,判断字符'7'是否在字符串内即可,写法为'7' in str(i) - 替换逻辑错误:Python原生列表没有
replace()方法,不能直接调用替换元素;同时不能在循环过程中直接return,会导致函数第一次匹配到条件就直接终止,不会遍历完所有元素 - 多余的计数逻辑:for循环遍历序列时会自动取下一个元素,不需要手动写
i += 1
正确可运行代码
def seven_boom(end_number): # 初始化0到end_number(包含终止值)的列表 num_list = list(range(0, end_number + 1)) # 带索引遍历列表,方便直接修改对应位置的值 for idx, num in enumerate(num_list): # 满足能被7整除、或数字含7任意一个条件就替换为BOOM if num % 7 == 0 or '7' in str(num): num_list[idx] = 'BOOM' return num_list
效果验证
执行测试语句:
print(seven_boom(17))
得到的输出和预期完全匹配:
['BOOM', 1, 2, 3, 4, 5, 6, 'BOOM', 8, 9, 10, 11, 12, 13, 'BOOM', 15, 16, 'BOOM']
内容的提问来源于stack exchange,提问作者Natilir
相关产品推荐
相关产品推荐

