Рекурсивная функция - хорошая идея
def expand_vowels(word):
, если в word
нет диких символов, мы выдаем неизменное слово и используем оператор return
, чтобы сигнализировать, что рекурсия закончена
if '*' not in word: yield word ; return
если мы здесь, то есть хотя бы один '*'
в word
for new_word in (word.replace('*', vw, 1) for v in 'aeiou'):
for new2_word in expand_vowels(new_word): yield new2_word
Все это легко собрать вместе с помощью нескольких простых тестов
$ cat vow.py
def expand_vowels(word):
if '*' not in word: yield word ; return
for new_word in (word.replace('*', v, 1) for v in 'aeiou'):
for new2_word in expand_vowels(new_word): yield new2_word
for w in ('a', 'a*', 'a**'):
print(list(expand_vowels(w)))
good = ['aei', 'bwe']
for wild in ('a**', 'b**'):
for word in expand_vowels(wild):
if word in good:
print(word, 'is in the good words')
break
else:
print(wild, 'doesn\'t generate a good word')
$ python vow.py
['a']
['aa', 'ae', 'ai', 'ao', 'au']
['aaa', 'aae', 'aai', 'aao', 'aau', 'aea', 'aee', 'aei', 'aeo', 'aeu', 'aia', 'aie', 'aii', 'aio', 'aiu', 'aoa', 'aoe', 'aoi', 'aoo', 'aou', 'aua', 'aue', 'aui', 'auo', 'auu']
aei is in the good words
b** doesn't generate a good word
$