Прописать слово на основе соответствующего слова в списке - PullRequest
0 голосов
/ 23 января 2020

Проходя курс "Coursera Python", и у меня много проблем.

Функция highlight_word изменяет данное слово в предложении на его заглавную версию. Например, highlight_word("Have a nice day", "nice") возвращает "Have a NICE day". Я хочу помочь переписать эту функцию в одну строку?

def highlight_word(sentence, word):
    return(___)

print(highlight_word("Have a nice day", "nice"))
print(highlight_word("Shhh, don't be so loud!", "loud"))
print(highlight_word("Automating with Python is fun", "fun"))

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

Ответы [ 4 ]

3 голосов
/ 24 января 2020

re.sub работает, но он все еще был неправильным и слишком сложным - @ C. Леконт был прав, если использовал простую замену.

def highlight_word(sentence, word):
    return(sentence.replace(word,word.upper()))

print(highlight_word("Have a nice day", "nice"))
print(highlight_word("Shhh, don't be so loud!", "loud"))
print(highlight_word("Automating with Python is fun", "fun"))

Спасибо

1 голос
/ 23 января 2020

Может быть сделано с регулярным выражением , используя re.sub

def highlight_word(sentence, word):
  return re.sub(r'\b' + word + r'\b', word.upper(), sentence)
1 голос
/ 23 января 2020

Частичный ответ в одной строке, как @Barmar намекнул на:

def highlight_word(sentence, word): return " ".join([x.upper() if x.lower() == word.lower() else x for x in sentence.split()])

В основном - разделите предложение на слова и используйте понимание списка для того, чтобы верхний () соответствовал слову. Затем используйте join (), чтобы объединить предложение.

Редактировать: суждение.split () будет разбиваться только на пробел, поэтому второй пример не будет написан заглавными буквами как «громко!» ! = "громко". В этом случае вы можете использовать библиотеку регулярных выражений для подстановки.

Да, это работает: enter image description here

0 голосов
/ 23 января 2020

Вы можете сделать это с re.sub() функциями

import re

def highlight_word(sentence, word):
     return [(re.sub(y, y.upper(), x)) for x in sentence for y in word if y in x]


words = ["have a nice day", "Shhh, don't be so loud!","Automating with Python is fun"]
lowers = ['nice','loud','fun']

print(highlight_word(words,lowers))

ВЫХОД:

['have a NICE day', "Shhh, don't be so LOUD!", 'Automating with Python is FUN']
...