Python:使用while循环从单词中删除某些字符

时间:2017-09-22 17:22:38

标签: python python-3.x

鉴于某些角色是' 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)。同样的结果。

1 个答案:

答案 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'

希望这有帮助!