2014-02-17 6 views
-2

Я работаю над программой, которая получает строку из любой переменной (var, var2) и изменяет гласную на любую случайную гласную. Я попытался сделать это, но мой код не работает, он всегда печатает, что нет гласного.Python Letter Changer

import random 
alph = list('abcdefgkijklmnopqrstuvwxyz') 
vow = list('aeiou') 
Alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p', 'q' ,'r' ,'s', 't', 'u', 'v', 'w', 'x' ,'y','z'] 
Vowels = ['a', 'e', 'i', 'o', 'u'] 
Consences = ['b','c','d','f','g','h','j','k','l','m','n','p', 'q' ,'r' ,'s', 't', 'v', 'w', 'x' ,'y','z'] 

ranVowel= random.choice(Vowels) 
print(ranVowel) 


var2 = ['i'] 
var = list("cat") 

def ifVowel(x): 
    if (Vowels in x): 
     print 'there is a vowel' 
     var[var.index(vow)] = ranVowel 
    elif (Vowels not in x): 
     print 'there is no vowel' 
    else: print 'no vowels' 

ifVowel(var2) 
+4

«но мой код не работает»: хотя в этом случае проблему довольно легко обнаружить, это недостаточно для того, чтобы быть частью хорошего вопроса. Что вы ожидали от своего кода? Что делает ваш код вместо этого? Какую часть кода вы можете ограничить неожиданным поведением? Каковы значения и типы задействованных переменных в этой точке? И т. Д. – DSM

ответ

3

Ваш тест

if (Vowels in x): 

проверяет, является ли весь список Vowels = ['a', 'e', 'i', 'o', 'u'] является in x, и, вероятно, никогда не будет True. Вместо этого вы хотите:

if any(vowel in x for vowel in Vowels): 

который проверяет каждый отдельно. Также

var[var.index(vow)] = ranVowel 

заменит только первый гласный. Вы должны петле над строкой, чтобы заменить все гласные, например:

replaced = "".join(c if c not in Vowels else random.choice(Vowels) for c in x) 

Обратите внимание, что все это будет работать только для нижнего регистра, так что вы можете захотеть использовать x.lower() или иметь дело с прописными буквами в явном виде.

Наконец, вещи, которые не являются гласными, являются согласными.

3

Может просто использовать re с заменой функции ..., например:

>>> import re, random 
>>> vowels = 'aeiou' 
>>> text = 'this is something with vowels in' 
>>> re.sub('[aeiou]', lambda L: random.choice(vowels), text, flags=re.I) 
'thos is semithung wath vawuls in' 
+0

Я ожидал бы, что это будет самым эффективным и эффективным решением. +1 –