Я не понимаю, почему мой скрипт не выполняет итерацию по всем элементам string.split? - PullRequest
0 голосов
/ 03 апреля 2020

Цель этого упражнения python состоит в том, чтобы создать функцию, которая превращает текст в латиницу, простое преобразование текста, которое модифицирует каждое слово, перемещая первый символ в конец и добавляя «ay» в конец.

Например, python заканчивается как ythonpay.

Я на самом деле создал этот скрипт, но я не понимаю, почему он не повторяется по всем text.split элементам? И почему это только изменение последнего элемента?

def pig_latin(text):
      say = ""

    # Separate the text into words
      words = text.split()

      for word in words:
    # Create the pig latin word and add it to the list

        new_word = word[1:] + word[0] + "ay"
        say =  "".join(new_word)

    # Turn the list back into a phrase
       return say

    print(pig_latin("hello how are you")) 
    # Should be "ellohay owhay reaay ouyay"

    print(pig_latin("programming in python is fun")) 
    # Should be "rogrammingpay niay ythonpay siay unfay"

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Этот раздел вот почему. У вас есть только одна переменная new_word, поэтому каждый раз, когда запускается l oop, она перезаписывает предыдущее значение. Единственное значение, которое не перезаписывается, является последним, и в итоге вы получаете одну строку.

for word in words:
    new_word = word[1:] + word[0] + "ay"
    say =  "".join(new_word)

Вместо этого убедитесь, что каждое новое слово заканчивается в списке. ИМО, самый интуитивный способ сделать это - через понимание списка. Ниже вы можете отформатировать его для этого, но посмотрите, как это сделать. Серьезно, это пара минут вашего времени, и они станут одними из ваших лучших друзей, когда вы продолжите учиться. Вы также можете сделать то же самое со словарями.

pig_latin_text = [word[1:] + word[0] + "ay" for word in words]
say =  " ".join(pig_latin)
0 голосов
/ 03 апреля 2020

Вы перебираете все слова, но вы переопределяете значение в say на каждой итерации. Выполнение say = "".join(new_word) не объединит новое слово с существующим значением say, но переопределит его - функция join объединит полученные аргументы, и в этом случае она только получила new_word.

Чтобы исправить это, вы должны заменить эту строку на:

say += " " + new_word
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...