Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2023, 22:12   #1
YaLubluMamu
Пользователь
 
Регистрация: 22.10.2022
Сообщений: 37
По умолчанию Python работа со строками

Напишите скрипт, который позволяет ввести с клавиатуры текст предложения и сформировать новую строку на основе исходной, в которой все слова, начинающиеся с большой буквы, приведены к верхнему регистру. Слова могут разделяться запятыми или пробелами. Например, если пользователь введет строку «город Зальцбург, река Дунай», результирующая строка должна выглядеть так: «город
ЗАЛЬЦБУРГ, река ДУНАЙ».

Код:
text = str(input())
word = str(text.split("," ))
i = 0
for i in word:
    if i.istitle():
        print(word.upper())
    break
Как сделать разделение запятой и пробелом? И в цикле что-то напутано
YaLubluMamu вне форума Ответить с цитированием
Старый 15.02.2023, 01:06   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Если делить строку по нескольким разделителям, то надо использовать регулярное выражение:
Например:
Код:
import re
text = 'город Зальцбург, река Дунай'
s = re.split('\W+', text)
# Результат: ['город', 'Зальцбург', 'река', 'Дунай']
Разделители при этом удаляются. Вместе с тем, надо сохранить стиль предложения: пробелы и запятые.
Так подумал, что проще разделить только по пробелам, а затем собрать новое предложение, в котором добавляем пробел после слова.
Правда, в конце предложения тоже появится пробел, но его можно удалить.
Получилось так:
Код:
import re

text = 'город Зальцбург, река Дунай'
s = re.split(' ', text)  # расщепили по пробелу
sout = ''                # заготовка нового предложения
for i in s:              # для всех слов
    w = i + ' '          # добавляем пробел в конце слова
    if w[0].istitle():   # первый символ заглавный?
        w = w.upper()    # слово в верхний регистр
    sout += w            # собираем предложение
print(sout.strip(' '))   # удаляем пробелы
# Результат: город ЗАЛЬЦБУРГ, река ДУНАЙ
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 15.02.2023, 01:53   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,299
По умолчанию

ViktorR, еще можно оставить исходные разделители и собрать слова с ними:
Код:
import re

text = 'город  Зальцбург,  река  Дунай'
print(text)
print(''.join(i.upper() if i.isalpha() and i[0].isupper() else i for i in re.split('(\W+)', text)))
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 15.02.2023, 02:15   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

BDA, ещё и в нижний регистр надо переводить в случае если слово начинается с маленькой буквы
Код:
import re

text = 'гОрОД  ЗаЛЬцбУРГ,  рЕКа  ДуНай'
print(text)
print(''.join(i.upper() if i.isalpha() and i[0].isupper() else i.lower() if i.isalpha() and i[0].islower() else i for i in re.split('(\W+)', text)))
macomics вне форума Ответить с цитированием
Старый 17.02.2023, 10:32   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Спасибо за варианты.
У меня, по невыясненным причинам, вначале получалось:
Код:
s = re.split('\W+', text)
Цитата:
Результат: ['город', 'Зальцбург', 'река', 'Дунай'].
Разделители при этом удаляются.
Т.е., куда-то убрались разделители. Проверял в Jupyter notebook.

То ли от сбоев среды,
То ли от позднего времени,
"Мои мысли - мои скакуны" унесло в неизвестную даль ("на маленьком плоту, ..." )

Сейчас проверил, и всё нормально. Разделители остались как отдельные элементы:
Код:
s = re.split('(\W+)', text)
Результат: ['город', ' ', 'Зальцбург', ', ', 'река', ' ', 'Дунай']

PS:
Ну, да. Вот снова просмотрел, что у меня '\W+', а у вас '(\W+)'. Ох уж эти круглые скобки.
Как-то так, ...

Последний раз редактировалось ViktorR; 17.02.2023 в 10:42.
ViktorR вне форума Ответить с цитированием
Старый 18.02.2023, 02:11   #6
Пётр Седов
Форумчанин
 
Регистрация: 26.10.2022
Сообщений: 119
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
BDA, ещё и в нижний регистр надо переводить в случае если слово начинается с маленькой буквы
Зачем? Это в задании не требуется.
Пётр Седов вне форума Ответить с цитированием
Старый 18.02.2023, 06:16   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,299
По умолчанию

ViktorR, случайно в справке по re.split набрел на магию скобок. Сначала думал усложнять саму регулярку, а оказалось, что можно скобками выкрутиться.
macomics, соглашусь с Пётр Седов, что в задании этого нет.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со строками в Python fyz abkbvjyjdf Помощь студентам 1 19.12.2022 21:11
работа со строками. Лен4икс Помощь студентам 2 22.03.2013 21:59
Работа со строками nasti.ya Помощь студентам 1 30.11.2010 03:24
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
Работа со строками (С/С++) 4ery Помощь студентам 3 24.12.2008 22:54