Как сделать так, чтобы слова определенной длины переворачивались? - PullRequest
3 голосов
/ 14 февраля 2020

Итак, я пытаюсь создать программу, которая принимает предложения и переводит слова длиной 5 или более. На данный момент это только отражение последнего слова, которое соответствует условию, и я не знаю, почему.

userInput = "Hello this is a test sentence"
wordList = userInput.split()

for i in wordList:
    if len(i) >= 5:
        reversedWord = i[::-1]
        print(reversedWord)
        reversedSentence = userInput.replace(i, reversedWord)

print(reversedSentence)

Вместо вывода «olleH, это тест ecnetnes», которое выдает «Здравствуйте, это тест ecnetnes "

Ответы [ 2 ]

2 голосов
/ 14 февраля 2020

Вы продолжаете заменять исходный userInput

reversedSentence = userInput
for i in wordList:
    if len(i) >= 5:
        reversedWord = i[::-1]
        print(reversedWord)
        reversedSentence = reversedSentence.replace(i, reversedWord)

Вам необходимо постоянно обновлять переменную reversedSentence.

0 голосов
/ 14 февраля 2020

Фактическая ошибка в вашем коде уже была заявлена, я просто хочу добавить отзыв о стиле:

Вы выполняете следующие шаги:

  • разделите ввод в слова
  • найти слова, которые соответствуют вашему требованию (len(word) > 5)
  • изменить исходную строку для каждого из них

Это довольно нетрадиционно и немного не интуитивно (он также имеет плохую производительность, так как несколько раз манипулирует вашей исходной строкой). Вместо этого я рекомендую следующий алгоритм:

  • разбить ввод на слова
  • перевернуть слова, соответствующие вашему требованию внутри этого списка
  • присоединиться к Перечислите в предложении снова, чтобы получить вашу строку

Пример реализации:

user_input = "Hello this is a test sentence"
processed_words = []

for word in user_input.split():
    if len(word) >= 5:
        word = word[::-1]
    processed_words.append(word)

reversed_sentence = ' '.join(processed_words)
print(reversed_sentence)

Если принять эту идею немного дальше, используя выражение генератора , это может выглядеть так:

user_input = "Hello this is a test sentence"

reversed_sentence = ' '.join(
    word[::-1] if len(word) >= 5 else word
    for word in user_input.split())

print(reversed_sentence)
...