2017-01-09 2 views
0

Назначается, чтобы превратить данную строку в язык шведских грабителей, то есть каждый согласный во фразе удваивается с «o», размещенным между ними. Например, «это весело» будет превращено в «tothohisos isos fofunon». Он также должен быть в функции «translate». Дайте мне знать, что я делаю неправильно. Пожалуйста, попробуйте объяснить довольно просто, я не очень продвинутый :)Шведский грабительский перевод

old_string="this is fun" 

vowels=("a", "A", "e", "E", "i", "I", "o", "O", "u", "U") 

def translate(old_string): 

l=len(old_string) 

for let in old_string[0:l]: 
    for vow in vowels: 
     if let!=vow: 
      print str(let)+'o'+str(let) 

print translate(old_string) 

Выход я получаю «карапуз карапуз карапуз карапуз карапуз карапуз карапуз карапуз карапуз карапуз None

ответ

-1

Попробуйте это:

def translate(old_string): 
    consonants = set("bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ") 
    return ''.join(map(lambda x: x+"o"+x if x in consonants else x, old_string)) 

Рабочая скрипка here.

EDIT: вот исправленный вариант вашего решения:

old_string="this is fun" 

vowels=("a", "A", "e", "E", "i", "I", "o", "O", "u", "U") 

def translate(old_string): 

    l=len(old_string) 
    translated = "" 
    for let in old_string[0:l]: 
     if let not in vowels and let != " ": 
     translated += let + "o" + let 
     else: 
     translated += let 
    return translated 

print translate(old_string) 

Работа скрипку here.

+0

Эй, спасибо, но я не знаю, что такое карта и лямбда. Можете ли вы немного упростить его? Это нормально, если требуется еще несколько строк. Благодаря! – Addison

+1

Вы понимаете, что это совершенно другое решение, верно? И что вы представили более продвинутые концепции? Это не ответ на вопрос. Это «ваш» ответ на начальную заявленную проблему. –

+0

@Addison 'map' отображает функцию в коллекцию, а' lambda' позволяет создавать анонимные функции (например, функции, не связанные с именем). Вы можете больше узнать о функциях лямбда [здесь] (http://www.secnetix.de/olli/Python/lambda_functions.hawk). –

0

Ваш код имел один цикл для многих. Вот ваш код, сделанный немного более питоническим.

# define vowels as a single string, python allows char lookup in string 
vowels = 'aAeEiIoOuU' 

# do not expand vowels or spaces 
do_not_expand = vowels + ' '  

def translate(old_string): 
    # start with an empty string to build up 
    new_string = '' 

    # loop through each letter of the original string 
    for letter in old_string: 

     # check if the letter is in the 'do not expand' list 
     if letter in do_not_expand: 

      # add this letter to the new string 
      new_string += letter 

     else: 
      # translate this constant and add to the new string 
      new_string += letter + 'o' + letter 

    # return the newly constructed string 
    return new_string 

print translate("this is fun") 
Смежные вопросы