1

Тема: обробка рядків

Задано речення. Скласти програму, яка визначає і виводить
на екран: слова а) які розпочинаються і закінчуються на одну і ту ж літеру; б)
які містять три літери «е»; в) які містять хоча б одну літеру «о».

s = input()
l = []
l_2 = []
l_3 = []
h = 0
s = s.split()
for i in s:
     if i[0] == i[-1]:
         l.append(i) 
for y in s:
     if (s.count('о')) == 1:
         l_3.append(y)   
print(' '.join(map(str, l))) 
print(' '.join(map(str, l_3)))

він недописаний, але мав би працювати хоч частково, але чомусь на другому фор він не бачить тих слів які підходять до умови в першому, була б вдячна за допомогу вирішення цієї проблеми

2 Востаннє редагувалося koala (10.11.2022 18:51:15)

Re: обробка рядків

Якось назви змінним давайте, щоб їх читати можна було. От скільки часу ви втратите, якщо замість l_3 писатимете щось на кшталт words_with_o, word замість i і words замість s?

kurkuma написав:

не бачить тих слів які підходять до умови в першому

Тобто ті слова, які не підходять в першому циклі, програма бачить? Чи взагалі нічого не бачить? Якщо не виходить розібратися, що саме не показується - наводьте приклад.

По вашому питанню. Умова:

kurkuma написав:

слова... які містять хоча б одну літеру «о».

for y in s:                   # для всіх y зі списку s
    if (s.count('о')) == 1:   # якщо кількість 'o' в списку s дорівнює 1
        l_3.append(y)          # то додати y до l_3

А тепер порівняйте умову із тим, що ви написали. Тепер зможете виправити?

Просто для ілюстрації - якби змінні мали нормальні назви:

for word in sentence:              # для всіх слів зі списку
    if sentence.count('о') == 1:   # якщо кількість 'o' в списку дорівнює 1
        words_with_o.append(word)  # то додати слово до words_with_o

Правда, тепер очевидніше, де помилка?

Подякували: kurkuma1

3

Re: обробка рядків

дуже дякую за пораду з нормальними назвами змінним, так дійсно видніше де помилки, і з тим каунт вже дійшло, але воно досі не докінця працює????

sentence = input()
words = []
words_with_3e = []
words_with_o = []
sentence = sentence.split()
for word in sentence:
    if word[0] == word[-1]:
        words.append(word)
for word in sentence:    
    if (word.count('o')) == True:
        words_with_o.append(word)
for word in sentence:
    if (word.count('e')) == 3:
        words_with_3e.append(word)
print(' '.join(map(str, words))) 
print(' '.join(map(str, words_with_o)))
print(' '.join(map(str, words_with_3e)))

дописала ще частину до 3 е, але вот що воно видає:
[img]Screenshot_2022-11-10-19-56-52-59_c759c 44d10a956b96f85cc66750ff86e[/img]
вот що мала на увазі про не бачить слова, можливо я просто десь натупила, але не знаю????????????

4 Востаннє редагувалося koala (10.11.2022 21:44:26)

Re: обробка рядків

Тут маленька неочікувана деталь Python: True має значення 1, тільки не зізнається :) (а False, відповідно, 0). Тобто ваша умова працює так само, як і раніше. А вам же треба не рівно 1 'o' шукати, а хоча б 1. Тобто - на перший погляд - має бути >=. Але насправді все ще легше, наявність підстрічки у стрічці - це оператор in:

if 'o' in word:
    ...

Потім, у вас у всіх масивах лише стрічки. Їх не треба ще раз на стрічки переробляти, тобто map теж не потрібен.

print(' '.join(words))
...

Усі цикли можна об'єднати і за один прохід збирати всі масиви.

for ....:
    if ...:
         щось_там.append(...)
    if ...:
         щось_інше.append(...)
А можна взагалі зробити
sentence = input().split()
print(' '.join(word for word in sentence if word[0]==word[-1]))
print(' '.join(word for word in sentence if 'o' in word))
print(' '.join(word for word in sentence if word.count('e')==3))

чи для любителів функціонального програмування

print(' '.join(filter(lambda w:w[0]==w[-1], sentence)))
print(' '.join(filter(lambda w:'o' in w, sentence)))
print(' '.join(filter(lambda w:w.count('e')==3, sentence)))
Подякували: kurkuma1