请求出在 12345678 (含)至98765432(含)中,有多少个数中完全不包含2023。
完全不包含2023是指无论将这个数的哪些数位移除都不能得到2023。例如 20322175,33220022 都完全不包含2023,而20230415,20193213则含有2023(后者取第1,2,6,8个数位)。
解题步骤:计算出含2023数字的个数,然后再作差。
新手容易进入的误区:
for i in range(12345678,98765432+1):
if '2023' in str(i):
print(i)
这样只能匹配到数字中含有的2023是连在一起的。
显然,这不符合题目的要求。
正确的方式:
import re
pat = re.compile('\d*'+'\d*'.join('2023')+'\d*')
for i in ['2023', '1012023','12320123000','10213']:
match = re.search(pat, i)
if match:
print(match.group())
运行结果:
2023
1012023
12320123000
PS:
import re
pat = re.compile('\d*'.join('2023'))
for i in ['2023', '1012023','12320123000','10213']:
match = re.search(pat, i)
if match:
print(match.group())
运行结果:
2023
2023
2320123
只会输出匹配开始到匹配结束的一段数字,而不是把含有这段数字的整个数字输出
就是两段代码的区别