我正在编写一个函数,使用以下函数检查字符串中'a'和'b'之间的距离是否为3。对于输入字符串“Laura sobs”,'s'的值存储为1(最早出现'a')而不是4(最后一次出现'a')并且输出错误。我该如何解决这个问题?
def ABCheck(str):
for i in str:
if i == 'a':
s = str.index(i)
elif i == 'b':
t = str.index(i)
# print (b)
return (abs(s-t)==4)
答案 0 :(得分:0)
您的代码似乎非常硬编码,只检查差异为3的实例,字母必须是'a'或'b'而不是从某处输入。
如果你是初学者试图建立一些东西,我认为这不是一个好习惯。但是,如果您非常确定这是您想要的(仅处理此特定情况的函数),那么无论如何:
def ABCheck(str):
s = -1
t = -1
for i in str:
if i == 'a' and s == -1:
s = str.index(i)
elif i == 'b' and t == -1:
t = str.index(i)
# print (b)
return (abs(s-t)==3)
只需初始化为-1并检查它。一旦他们的值第一次被覆盖,他们将不再更新。
编辑:
def ABCheck(string):
s = -1
t = -1
for i in string:
if i == 'a' and s == -1:
s = string.index(i)
elif i == 'b' and t == -1:
t = string.index(i)
# print (b)
return (abs(s-t)==4)
它不起作用,因为你的代码(我复制了)最初使用str是保留关键字。
答案 1 :(得分:0)
使用enumerate
循环遍历字符串,同时保持索引。然后,当您找到' a'时,只需检查字符3是否位于' b'。
def abcheck(s): # Don't use str, it's the name of a builtin
for idx, c in enumerate(s[:-3]): # No need to iterate over the last part
if c == 'a' and s[idx+3] == 'b':
return True
return False