我这代码还能抢救一下吗?
本帖最后由 jcpython2 于 2022-10-9 21:21 编辑题目要求已经在另一个帖子解决了,但是自己写的代码有问题不知道问题所在,比较纠结
代码求的是b在a中出现了什么位置
a,b= 'aaabbbbbabcab','ab'
j = 0
total = []
k = 0
while j < len(a):
if a.find(b,k) != -1:
total.append(a.find(b,k))
k = k + a.find(b,k) +1
j += 1
print(total)
理论上'ab'出现了三次,但最后只输出了但最后只输出 a,b= 'aaabbbbbabcab','ab'
j = 0
total = []
k = 0
for j in range(len(a)):
if a.find(b,k,14) != -1:
total.append(a.find(b,k,14))
k = a.find(b,k,14) + len(b) # 问题出在此句
j += 1
print(total) a,b= 'aaabbbbbabcab','ab'
j = 0
total = []
k = 0
while j < len(a):
k = k + a.find(b,k)
if a.find(b,k) != -1:
total.append(a.find(b,k))
# k = k + a.find(b,k) +1
j += 1
print(total)
问题已经解决,用直觉把错误的第9行挪到第6行即可
但我依然不知道具体错误{:10_264:} jackz007 发表于 2022-10-9 21:22
我刚试出来就看到你也发了,我在3楼比你迟了十来秒 本帖最后由 阿奇_o 于 2022-10-9 21:28 编辑
要不换个思路:
a,b= 'aaabbbbbabcab','ab'
for i in range(len(a)):
if a == b:
print(i, a)
2 ab
8 ab
11 ab
jackz007 发表于 2022-10-9 21:22
我审题错误了,我一直纠结一个问题,字符串会重叠,我必须+1+1来走让他每个字符串检索,但其实题目我细心看了两百次,发现原来他强调不会重叠字符串,也就是bbbb如果找bb的话只算两次,而我一开始的思路是会找3次 jcpython2 发表于 2022-10-9 21:27
我审题错误了,我一直纠结一个问题,字符串会重叠,我必须+1+1来走让他每个字符串检索,但其实题目我细心 ...
k = a . find(b , k , 14) + len(b)
+ len(b) 的目的,就是为了跳过才找到的整个子串,避免在查找这种叠字子串的时候发生误判。 阿奇_o 发表于 2022-10-9 21:26
要不换个思路:
这思路也是棒棒的,帮助也很大,奖个鱼币 jackz007 发表于 2022-10-9 21:37
+ len(b) 的目的,就是为了跳过才找到的整个子串,避免在查找这种叠字子串的时候发生误判。
感谢各位,已经彻底弄懂错处
原代码的 k +是多余的,因为k需要重置指针,不需要叠加前K的值,每一次a.find(b,k) 已经有新值,以目标字符串len(b)迭代即可
k = k + a.find(b,k) +1
页:
[1]