@atsin4469

Функция, которая находит самое короткое слово в тексте. Как исправить, чтобы заработала?

Задача
Написать функцию, которая находит самое короткое слово в тексте

Мое решение
text = 'bitcoin take over the world maybe who knows'

def find_short(text):
    text_copy = text
    numbers = []
    for index, elem in enumerate(text_copy):
        if elem != ' ':
            continue
        numbers += [index + 1]
        text_copy = text_copy[index + 1:]
    numbers += [len(text_copy)]
    numbers.sort()
    return numbers[0]


Проблема
Я задумывал функцию так, чтобы с каждой новой итерацией позиция пробела искалась в новом тексте, который получается путем среза: так я получу длины всех слов. Вместо этого позиция находится в исходном тексте (из переменной text_copy).

Как сделать, чтобы на каждой новой итерации обрабатывался новый фрагмент текста?
  • Вопрос задан
  • 477 просмотров
Решения вопроса 2
@dmshar
Если, как выяснилось из коментариев "нужно, чтобы возвращалось не само слово, а его длина", и "Как можно сделать это все без сплита и min?"
то тогда вот так:
def find_short(text):
    num_of_let=0
    min_numb = len(text)
    for elem in text:
        if elem == ' ':
            if num_of_let <  min_numb:
                min_numb=num_of_let
            num_of_let=0
        else:
            num_of_let+=1
    return min_numb

text = 'bitcoin take over the world maybe who knows'
find_short(text)


Результат:
Out[20]: 3

Как просили - не само слово, а его длина.
Если вы все таки передумаете и захотите иметь и самое короткое слово и его длину, но без функций, то сделать это можно вот так:

def find_short(text):
    num_of_let=0
    word=[]
    min_numb = len(text)
    for elem in text:
        if elem == ' ':            
            if num_of_let <  min_numb:
                min_numb=num_of_let
                min_word=''.join(word)
            num_of_let=0
            word=[]
        else:
            word=word+list(elem)
            num_of_let+=1
    return min_numb,min_word


Только извращение все это. Нет, в целях "познания мира" конечно можно и потренироваться, для развития алгоритмического мышления например.
Но на то и придуманы функции, что-бы учиться их использовать там, где это целесообразно.
Ответ написан
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
Задача
Написать функцию, которая находит самое короткое слово в тексте

Решение:
text = 'bitcoin take over the world maybe who knows'

print(min(text.split(), key=len))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы