鉴于某些角色是' abcdef' = char 我想1)删除单词中连续3个字符的第3个 char ,2)从更改的单词中删除第2个 char 单词中连续的2个字符。
E.g。如果有一个词' bacifeaghab'它应该
1)首先删除' c'并且' a',即ba(c)ife(a)hab并将单词改为' baifehab'
2)删除' a''' b',b(a)if(e)ha(b)并更改单词进入' bifha'
这是我到目前为止所做的,但是当我运行它并在其中加入信息时,它并没有提供任何东西。甚至没有错误或空白(''),它只是在没有'>>>'的情况下转到下一行。
def removal(w):
x,y = 0,0
while y < len(w)-2:
if (w[y] and w[y+1] and w[y+2]) in 'abcdef':
w = w[:y+2] + w[y+3:]
while x < len(w):
if w[x] in 'abcedf':
w = w[:x+1] + w[x+2:]
x = x+1
else :
x = x+1
return(w)
有人能找出错误吗?
由于这是我第一次使用while循环,我认为使用double while循环可能是个问题,所以也试过了,
def removal(w):
x,y,z = 0,0,0
while y < len(w)-2:
if (w[y] and w[y+1] and w[y+2]) in 'abcdef':
w = w[:y+2] + w[y+3:]
return(w)
但同样的结果。我还在功能结束时尝试了print(w)。同样的结果。
答案 0 :(得分:2)
我在代码中纠正了2
个错误。第一个原因是你没有正确递增x
(因为你不需要elif
)而你忘记完全增加y
!
我更正了这些内容,然后在if
条件下,您的语法不正确。括号中的部分计算到最后一个元素,然后检查它是否在字符串'abcdef'
中。我现在纠正了这个问题,依次检查每个单独的元素。
现在功能是:
def removal(w):
chars = 'abcdef'
x,y = 0,0
while y < len(w)-2:
if w[y] in chars and w[y+1] in chars and w[y+2] in chars:
w = w[:y+2] + w[y+3:]
y += 3
while x < len(w):
if w[x] in 'abcedf' and w[x+1] in 'abcdef':
w = w[:x+1] + w[x+2:]
x += 2
return w
并使用'bacifeahab'
调用它(没有'g'
,我认为这是你的错字。)
removal("bacifeahab")
returns
你想要的是什么:
'bifha'
希望这有帮助!