Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/56: Рейтинг темы: голосов - 56, средняя оценка - 4.61
 Аватар для AlexxxRush
0 / 0 / 0
Регистрация: 12.08.2020
Сообщений: 12

Строка: По заданному слову s определите, удалось ли Васе поздороваться

12.08.2020, 18:42. Показов 11618. Ответов 19

Студворк — интернет-сервис помощи студентам
Попалась вот такая задачка:
Совсем недавно Вася научился печатать на клавиатуре и выходить в интернет. Он сразу же зашел в чат и решил поздороваться со всеми. Вася напечатал слово s. Считается, что у Васи получилось поздороваться, если из напечатанного слова можно удалить некоторые буквы так, чтобы получилось слово "hello". Например, если Вася напечатал слово "ahhellllloou", считается, что он поздоровался, а если он напечатал "hlelo", считается, что Васю не поняли, и ему не удалось поздороваться. По заданному слову s определите, удалось ли Васе поздороваться.

Входные данные
В первой и единственной строке записано слово s, которое напечатал Вася. Это слово состоит из маленьких букв латинского алфавита, его длина не меньше 1 и не больше 100 букв.

Выходные данные
Если Васе удалось поздороваться, выведите "YES", иначе выведите "NO".

входные данные
ahhellllloou
выходные данные
YES
входные данные
hlelo
выходные данные
NO

Python
1
2
3
4
5
6
a = input()
if a.count('h') != 0 and a.count('e') != 0 and a.count('l') != 0 and a.count('o') != 0 and a.find('h') < a.find(
        'e') < a.find('l') < a.find('o'):
    print('YES')
else:
    print('NO')
Задачу решил, и программа вполне работает, но можно ли решить ее куда более коротким путём, а не таким большим потоком слова "and"?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.08.2020, 18:42
Ответы с готовыми решениями:

Определить, удалось ли поздороваться
Как-то Вася решил, что будет печатать с закрытыми глазами. Он зашёл на сайт и решил поздороваться со всеми. Вася написал слово x....

Выбрать из массива по заданному слову
1. массив в нем в каждой ячейке одно или несколько предложений 2. массив в нем по одному слову в ячейке необходимо из массива1...

вывод строки по заданному слову
Доброго всем времени суток! Я только начинаю изучать с++ и мне очень нужна помощь.. кому не сложно помогите пожалуйста... Собственно суть...

19
Эксперт Python
8850 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
12.08.2020, 18:55
Попробуй :
hoello
0
 Аватар для AlexxxRush
0 / 0 / 0
Регистрация: 12.08.2020
Сообщений: 12
12.08.2020, 18:59  [ТС]
ооопааа, а это косяк, а как тогда? )
0
Эксперт Python
8850 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
12.08.2020, 19:28
Python
1
2
3
4
5
6
7
8
9
10
a = list(input())
x =  ['h','e','l','l','o']
k = 0
for j in a :
    if str(j) == x[k] and k != 4 :
        k += 1
if k < 4 :
    print('NO')
else :
    print('YES')
0
 Аватар для AlexxxRush
0 / 0 / 0
Регистрация: 12.08.2020
Сообщений: 12
12.08.2020, 19:36  [ТС]
оки доки, спасибо, а если попробовать без циклов вовсе? и, если возможно, то и без списка?
0
Эксперт Python
8850 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
12.08.2020, 20:59
Без списков :
Python
1
2
3
4
5
6
7
8
9
10
11
12
x = 'hello'
a = ''.join(str(i) for i in input() if i in x)
k = 0
for j in a :
    if j == x[k] and k != 4 :
        k += 1
        if k == 4 :
            break
if k < 4 :
    print('NO')
else :
    print('YES')
Без цикла - не знаю пока)

Добавлено через 2 минуты
Без циклов - условие задачи?

Добавлено через 56 минут
AlexxxRush,
Python
1
2
3
4
5
6
7
8
9
a = input()
x =  'hello'
i5 = a.rfind('o') + 1
i4 = a.rfind('l',0,i5-1) + 1
i3 = a.rfind('l',0,i4-1) + 1
i2 = a.rfind('e',0,i3-1) + 1
i1 = a.rfind('h',0,i2-1) + 1
i = i1*i2*i3*i4*i5
print('NO' if i == 0 else 'YES')
Добавлено через 6 минут
Или так, короче):
Python
1
2
3
4
5
6
7
8
9
a = input()
x =  'hello'
i1 = a.find('h') + 1
i2 = a.find('e',i1-1) + 1
i3 = a.find('l',i2-1) + 1
i4 = a.find('l',i3-1) + 1
i5 = a.find('o',i4-1) + 1
i = i1*i2*i3*i4*i5
print('NO' if i == 0 else 'YES')
0
260 / 165 / 54
Регистрация: 03.05.2019
Сообщений: 339
12.08.2020, 21:10
Есть ещё решение аналогичное Gdez только при помощи итератора:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def hello_check(word):
    def hello_iter(data = 'hello'):
        '''Итератор по последовательности data'''
        for item in data:
            yield item # возвращает саму последовательность и текущий елемент
 
    hello = {'h', 'e', 'l', 'o'} # можно заменить на строку, но set быстрее
    gen = hello_iter()
    try:
        s = next(gen)
        for char in word:
            if char == s:
                s = next(gen)
    except StopIteration: # итератор исчерпал себя
        return True # все буквы найдены в правильной последовательности
    return False # итератор не пустой
Если без циклов:
Python
1
2
3
4
word = input('>')
if (h := word.find('h')) < (e := word.find('e', h)) < (l := word.find('l', e))\
    and l < (l2 := word.find('l', l + 1)) < word.find('o', l2):
    print(True)
Запись индексов в процесе нужна, чтобы исключить проблемы с повторными буквами

Добавлено через 1 минуту
пока я писал, Gdez тоже додумался до этого.
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
13.08.2020, 09:00
Python
1
2
3
import re
 
print("YES" if re.search(r".*".join("hello"), input()) else "NO")
3
 Аватар для AlexxxRush
0 / 0 / 0
Регистрация: 12.08.2020
Сообщений: 12
22.08.2020, 13:18  [ТС]
Ребят, спасибо!
по вашим решениям "додумал" свое:
Python
1
2
3
4
5
6
7
8
9
10
a = input()
i1 = a.find('h')
i2 = a.find('e', i1+1)
i3 = a.find('l', i2+1)
i4 = a.find('l', i3+1)
i5 = a.find('o', i4+1)
if a.count('h') != 0 and a.count('e') != 0 and a.count('l') != 0 and a.count('o') != 0 and i1<i2<i3<i4<i5:
    print('YES')
else:
    print('NO')
0
 Аватар для Senoki
6 / 6 / 0
Регистрация: 24.09.2021
Сообщений: 125
20.11.2021, 13:16
Gdez,
Цитата Сообщение от Gdez Посмотреть сообщение
a = list(input())
x =  ['h','e','l','l','o']
k = 0
for j in a :
    if str(j) == x[k] and k != 4 :
        k += 1
if k < 4 :
    print('NO')
else :
    print('YES')
а почему вы сравниваете k с 4?
0
Эксперт Python
8850 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
20.11.2021, 13:21
Senoki, x - список из пяти букв, последняя с индексом 4
k - индекс списка
0
 Аватар для Senoki
6 / 6 / 0
Регистрация: 24.09.2021
Сообщений: 125
20.11.2021, 13:51
Gdez, тогда в вашем решении косяк, при вводе "hell", программа выдает YES, а правильно NO
1
Эксперт Python
8850 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
20.11.2021, 14:33
Senoki, согласен
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
a = list(input())
x =  ['h','e','l','l','o']
n = len(x)
k = 0
for j in a :
    if k != n and str(j) == x[k]:
        k += 1
        if k == n:
            break
if k < n:
    print('NO')
else :
    print('YES')
0
 Аватар для Senoki
6 / 6 / 0
Регистрация: 24.09.2021
Сообщений: 125
20.11.2021, 16:40
Gdez, а вы можете объяснить почему так:
Python
1
2
3
4
5
6
7
8
9
10
a = list(input())
x =  ['h','e','l','l','o']
k = 0
for j in a :
    if str(j) == x[k] and k != 5 :
        k += 1
if k < 5 :
    print('NO')
else :
    print('YES')
при a = ahhellllloou, программа выдает ошибку?
0
Эксперт Python
8850 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
20.11.2021, 17:46
Senoki, какую? У меня выдает "YES"
0
 Аватар для Senoki
6 / 6 / 0
Регистрация: 24.09.2021
Сообщений: 125
20.11.2021, 18:28
Gdez, if str(j) == x[k] and k != 5 :
builtins.IndexError: list index out of range
0
Эксперт Python
8850 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
20.11.2021, 19:47
Senoki, странно:
https://ideone.com/Z5xWyk

Добавлено через 3 минуты
И код другой - исправил в 13 комментарии

Добавлено через 46 минут
Senoki, можно так
Python
1
2
3
4
5
6
7
8
9
a = input()
x =  'hello'
n = len(x)
tmp = i = 0
ind = -1
while i != n and tmp != -1:
    tmp = ind = a.find(x[i], ind+1)
    i += (ind != -1)
print('NO' if i != n else 'YES')
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
21.11.2021, 06:59
Senoki, смотрю у тебя есть интерес научится правильно решать задачу.
Прочитай лучше тему "два указателя", а не разбирай этот гов**код
1
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
21.11.2021, 10:57

Не по теме:

eaa, тот случай, когда регулярки безусловно рулят!


1
0 / 0 / 0
Регистрация: 23.06.2019
Сообщений: 2
30.09.2022, 23:29
поздноватый ответ, очевидно, но может в будущем кому-то помочь в решении задачи без циклов и прочего; просто диапазоны и методы:

Python
1
2
3
4
5
6
7
s = input()
s = s[(s.find('h')):(s.rfind('o')+1)]
s = s[(s.find('e')):(s.rfind('l')+1)]
if s.count('l') > 1:
    print('YES')
else:
    print('NO')
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.09.2022, 23:29
Помогаю со студенческими работами здесь

Поиск в файле по заданному слову
Помогите сделать поиск по заданному слову в файле и посчитать их количество. Вывод текста на экран сделала, чтоб видеть какие слова можно...

Выход из консоли по заданному слову
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { ...

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

Поиск строки в файле по заданному слову
Здравствуйте. Пытаюсь реализовать телефонную книгу с возможностью поиска и редактирования уже записанных данных. Очень нужен собственно...

Образуйте по заданному слову слово-перевёртыш
Образовать по заданному слову слово перевёртыш, в котором все буквы идут в обратном порядке.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru