Составить программу, которая запрашивает предложение и два слова, а затем заменяет первое слово на второе.
Как я поняла дано предложение, и если первое слово(которое мы ввели) есть в этом предложении, мы должны заменить его вторым введенным словом.
Пример:
Ввод:
На улице идёт снег
снег
дождь
Выход:
На улице идёт дождь
Я через isalpha нашла слова w=s[i:j], но не знаю как заменить слово на другое слово. Если это был бы список, то я имею представление, а так нет. Помогите пожалуйста.
Python
Программа в python
Задачка-то малость посложнее, чем кажется на первый взгляд. Вряд ли тут возможно привести полноценную лингвистику с окончаниями, морфологией, славянизмами и выпадающими гласными ("день" - "дня", "дни", "дней"...). Но кое-какие простые случаи в программе предусмотреть всё-таки можно.
Пример. Входные данные:
Видим, что слова корректно выделены, когда разделителями являются пробел, запятая, восклицательный знак. Слово "снеговик" не превратилось в "дождьовик", так как считается независимым словом (т.е. "энциклонги" нам не грозят). Регистр перенесён для слов с заглавной буквы, полностью в нижнем регистре и в смешанном регистре (если в заменяющем слове букв больше, чем в исходном то остаток ставится в регистр последней буквы исходного). Слово с цифрой и все разделители скопировались корректно (например, 3 пробела перед "Это" остались тремя пробелами, а не слились в один).
Разумеется, словоформы этот простенький код не разбирает, считая их независимыми словами. Для них нужно полноценное лингвистическое решение со словарём.
import re
s, f, r = (input() for _ in range(3))
ws = re.split('(\W+)', s)
def copyMonoCase(s, t):
return t.upper() if s.isupper() else t.title() if s.istitle() else t.lower()
def copyMixedCase(s, t):
m = min(len(s), len(t))
return ''.join(copyMonoCase(s[min(i, m - 1)], t[i]) for i in range(len(t)))
print(''.join((copyMixedCase(w, r)) if i % 2 == 0 and w.lower() == f.lower() else w
for i, w in enumerate(ws)))
Чтобы не изобретать велосипед при разбиении фразы на слова, строим простенький лексический сканнер на регулярных выражениях. \W+ будет выделять нам слова по любым границам;
(\W+) будет выделять также и разделители, так что чётными элементами списка
станут слова, а нечётными - последовательности разделителей.
Дальше при пробеге по списку заменяем соответствующую поисковой строку на строку замены с копированием регистра исходной строки (см. пример). Разделители и строки, не совпадающие с поисковой, копируем, как есть. Потом результат склеиваем в одну строку.Пример. Входные данные:
На улице идёт снег! Снег, Карл! Срочно лепи снеговика, пока снег не закончился! Это -- 0чень важно, СНеГ же.
снег
дождь
Вывод: На улице идёт дождь! Дождь, Карл! Срочно лепи снеговика, пока дождь не закончился! Это -- 0чень важно, ДОжДЬ же.
Видим, что слова корректно выделены, когда разделителями являются пробел, запятая, восклицательный знак. Слово "снеговик" не превратилось в "дождьовик", так как считается независимым словом (т.е. "энциклонги" нам не грозят). Регистр перенесён для слов с заглавной буквы, полностью в нижнем регистре и в смешанном регистре (если в заменяющем слове букв больше, чем в исходном то остаток ставится в регистр последней буквы исходного). Слово с цифрой и все разделители скопировались корректно (например, 3 пробела перед "Это" остались тремя пробелами, а не слились в один).
Разумеется, словоформы этот простенький код не разбирает, считая их независимыми словами. Для них нужно полноценное лингвистическое решение со словарём.
Разделить строку на список по ключу " ", найти индекс запрашиваемого элемента и заменить его на необходимый
x = input().split(" ")
one = input()
two = input()
index = 0
for y in x:
if(y == one):
x[index] = two
index+=1
print(*x)
***** ******
Соломончик Красивый
Спасибо! Я думала насчёт replace, но видимо не правильно ввела. Сейчас все работает
Соломончик Красивый
Но если слово в предложении будет появляться в разных регистрах (с маленькой и с заглавной буквы), то как? replace уже не сработает. И да если это слово есть в составе другого, то оно заменится, как написано в комментарии выше
sentence = input("Введите предложение: ")
old_word = input("Введите слово, которое нужно заменить: ")
new_word = input("Введите слово, на которое нужно заменить: ")
# разбиваем предложение на слова
words = sentence.split()
# проходим по всем словам
for i in range(len(words)):
# если текущее слово соответствует old_word
if words[i].isalpha() and words[i].lower() == old_word.lower():
# заменяем его на new_word
words[i] = new_word
# склеиваем слова в предложение
new_sentence = ' '.join(words)
print("Новое предложение:", new_sentence)
Соломончик Красивый
Программа работает, но регистр теряется при выводе
Соломончик Красивый
Я тут ещё подумала, а если слово полностью будет капсом или большая маленькая буква по очереди. Тогда уже программа не будет сохранять регистр. Я понимаю, что это очень странные условия, но никто не отрицает, что предложение так могут ввести
Похожие вопросы
- Помогите, как сделать авторизацию в программе на python?
- Оцените первую программу на Python, если не трудно :)
- Оцените программу на Python
- Помогите написать программу на Python, моя версия кода на скрине, вроде всё работает, но автопроверка не проходит.
- Напишите программу на Python
- Выразите число в виде суммы четырех квадратов Нужно написать программу на python
- Очень надо написать программу на Python!!!
- Программа на Python
- Помогите пожалуйста написать 2 программы на Python
- Помогите с программой на python библиотека tkinter