"""
    1. Вводится строка
    2. Программа считает количество слов в введенной строке и выводит на экран.
    2. Программа определяет самое длинное слово и его длину и выводит на экран.
    ___________________________________________________________________________

    Например:

    >>> Hello,world! I am learning python.

    Слов в введенной строке: 6
    Самое длинное слово: "learning" (8 символов)

"""

###############################################################################
# 1 вариант. Решение с применением split
import string

s = input("Ввeдитe строкy: ")
longest_word = ""

# заменяем в введенной строке все знаки пунктуации на пробелы
for char in string.punctuation:
    if char in s:
        s = s.replace(char, " ")

# разделяем строку по пробельному символу и получаем список слов
words = s.split()

# проходим по списку слов и находим самое длинное
for word in words:
    if len(word) > len(longest_word):
        longest_word = word

print(f"Слов в введенной строке: {len(words)}")
print(f'Самое длинное слово: "{longest_word}" ({len(longest_word)} символов)')
###############################################################################


###############################################################################
# 2 вариант. Решение без split и списков
string = input("Ввeдитe строкy: ")

counter = 0  # счетчик слов
word = ""  # переменная для текущего слова
longest_word = ""  # самое длинное слово

for char in string:
    if char.isalpha():
        # если встречается буква, добавляем ее к текущему слову
        word += char
    elif word:
        # если не буква и текущее слово не пустое
        counter += 1  # инкрементируем счетчик
        if len(word) > len(longest_word):
            # если длина текущего слова больше самого длинного - заменяем
            longest_word = word
        word = ""  # очищаем текущее слово
else:
    # этот блок выполнится после цикла. можем обработать последнее слово
    # чтоб избавиться от этого блока можно при вводе строки добавить ' '
    if word:
        counter += 1
        if len(word) > len(longest_word):
            longest_word = word

print(f"Слов в введенной строке: {counter}")
print(f'Самое длинное слово: "{longest_word}" ({len(longest_word)} символов)')
###############################################################################


###############################################################################
# 3 вариант (с регулярными выражениями)
import re

string = input("Ввeдитe строкy: ")

words = re.findall(r"\w+", string)  # получаем список слов

longest_word = ""
for word in words:
    if len(word) > len(longest_word):
        longest_word = word

print(f"Слов в введенной строке: {len(words)}")
print(f'Самое длинное слово: "{longest_word}" ({len(longest_word)} символов)')
###############################################################################


###############################################################################
# 4 вариант (темы следующих уроков)
string = input("Ввeдитe строкy: ")

words = re.findall(r"\w+", string)  # получаем список слов
longest_word = max(words, key=len)  # получаем самое длинное слово из списка

print(f"Слов в введенной строке: {len(words)}")
print(f'Самое длинное слово: "{longest_word}" ({len(longest_word)} символов)')
###############################################################################
