Python 3.x python替换'';不连续或不在前面的字符

Python 3.x python替换'';不连续或不在前面的字符,python-3.x,Python 3.x,我试图解开一个谜语,挑战在于不使用字符串中的前一个或后一个字符来替换字符串中的问号 例如:- 谜语='abcd?ef?' 预期输出='abcdiefa' 谜语='???' 预期的_out='aea' 这是我尝试过的解决方案,但由于某些原因它不起作用 successor_element = '' predecessor_element = '' my_pre_succ_elements = [] riddle = "ab?ac?" required_list = [] def

我试图解开一个谜语,挑战在于不使用字符串中的前一个或后一个字符来替换字符串中的问号

例如:- 谜语='abcd?ef?' 预期输出='abcdiefa'

谜语='???' 预期的_out='aea'

这是我尝试过的解决方案,但由于某些原因它不起作用

successor_element = ''
predecessor_element = ''
my_pre_succ_elements = []
riddle = "ab?ac?"
required_list = []
def solution(riddle):
    my_replacers = ['a','e','i']
    j = len(riddle)
    print(j)
    for e in range(0,j):
        req_element = riddle[e]
        print(e)
        print(req_element)
        if req_element == '?':
            if e == 0:
                successor_element = riddle[e+1]
            if e  == j-1:
                predecessor_element = riddle[e-1] 
            if (e!= 0) and (e != j-1):
                successor_element = riddle[e+1]
                predecessor_element = riddle [e-1]
            my_pre_succ_elements.extend(successor_element)
            my_pre_succ_elements.extend(predecessor_element)
            required_list = list(set(my_pre_succ_elements)^set(my_replacers))
            substitutor = required_list[0]
            riddle = str(riddle[0:e]) + str(substitutor) + str(riddle[e + 1:])
    print(riddle)
    pass

你很接近。这应该起作用:

        if req_element == '?':
            possibles = ['a','e','i']
            if e > 0 and riddle[e-1] in possibles:
                possibles.remove(riddle[e-1])
            if e < j-1 and riddle[e+1] in possibles:
                possibles.remove(riddle[e+1])
            substitutor = possibles[0]
            riddle = riddle[:e] + substitutor + riddle[e+1:]
如果请求元素=='?':
可能性=['a','e','i']
如果e>0且在可能的情况下谜语[e-1]:
可能。移除(谜语[e-1])
如果e
根据您的规格,有几乎无限多的解决方案。“aaa”将是“?”可接受的解决方案。您的代码使用“aei”作为替换列表。这是要求吗?你没有这么说。为什么在第一个“谜语”中不能用
a
替换
?我不相信你已经解释了所有的“规则”。Tsk,这是你应该能够理解的。将您的
打印(谜语)
替换为
返回谜语
。当然,
pass
也没用。