Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/40: Рейтинг темы: голосов - 40, средняя оценка - 4.93
 Аватар для Ivan _pupkin
3 / 3 / 1
Регистрация: 17.12.2018
Сообщений: 257

В строке поменять местами наибольшее по длине слово и наименьшее

30.01.2019, 19:35. Показов 8095. Ответов 12

Студворк — интернет-сервис помощи студентам
Условие задачи: Строка состоит из слов, разделенных одним или несколькими пробелами. Поменяйте местами наибольшее по длине слово и наименьшее.

Я знаю как найти самое длинное слово, но не понимаю как найти самое короткое.
Мой ужасный код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
def swap_words(s):
    length = len(s)
    counter_min_word = counter_min = o = con = 0
    index_start_min = index_finish_min = 0
    for i in range(length):
        if s[i].isalnum():
            counter_min_word += 1
            if counter_min_word == 1:
                o = i
                lol = 1
 
        else:
            con += 1
            if con == 1:
                counter_min = counter_min_word
                if lol == 1:
                    index_start_min = o
                    index_finish_min = i
                    lol = 0
            if counter_min_word > 0:
                if counter_min > counter_min_word:
                    counter_min = counter_min_word
                    index_finish_min = i
                    if lol == 1:
                        index_start_min = o
                        lol = 0
 
            counter_min_word = 0
 
    s_min_word = ""
    for i in range(index_start_min, index_finish_min):
        s_min_word += s[i]
 
    print("Наименьшее слово в строке:", s_min_word)
 
 
 
stroka = input("Введите строку: ")
stroka = swap_words(stroka)
Я его не стал заканчивать, ибо понял что не смогу.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.01.2019, 19:35
Ответы с готовыми решениями:

Поменять местами наибольшее и наименьшее слово
Вводим с клавиатуры строку слов, поменять местами наибольшее и наименьшее слово.

В каждой строке найти наибольшее и наименьшее из значений, поменять их местами
А) Задать случайно значения элементов квадратной матрицы вещественных чисел mas с диапозоном значений от -100 до 100. Вывести матрицу на...

Найти последнее наибольшее по длине слово в строке
Помогите пожалуйста написать программу. Задана символьная строка, написать программу, которая находит последнее наибольшее по длине...

12
20 / 15 / 5
Регистрация: 28.08.2018
Сообщений: 18
30.01.2019, 19:47
Python
1
2
3
4
5
s = input().split()
i = s.index(min(s, key=len))
j = s.index(max(s, key=len))
s[i], s[j] = s[j], s[i]
print(' '.join(s))
1
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
30.01.2019, 19:58
Вы ошиблись, Ваша программа наоборот, находит самое короткое слово.
Будем смотреть дальше.

Добавлено через 5 минут
Причем правильно выдает короткое слово только в латинской кодировке, в русской ошибается.

Добавлено через 2 минуты
Вот Вам дали правильное решение, причем в отличие от Вашего, компактное.
0
 Аватар для svtslv
308 / 160 / 66
Регистрация: 18.01.2019
Сообщений: 449
30.01.2019, 20:07
Читерское решение)
Python
1
2
3
4
5
6
7
8
9
str = 'my long string'
arr = str.split()
s = sorted(arr, key=len)[0]
l = sorted(arr, key=len)[-1]
l2 = l+'1'
str = str.replace(l, l2)
str = str.replace(s, l)
str = str.replace(l2, s)
print(str)
1
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
30.01.2019, 20:34
z1ne2wo,
Не увидел вашего решения.


Кликните здесь для просмотра всего текста
Цитата Сообщение от Ivan _pupkin Посмотреть сообщение
Я знаю как найти самое длинное слово
Точно также как и самое короткое.
Python
1
2
3
4
5
6
>>> sent = 'Условие задачи Строка состоит из слов разделенных одним или несколькими пробелами Поменяйте местами наибольшее по длине слово и наименьшее'
>>> tokens = sent.split()
>>> max(tokens,key=len)
'разделенных'
>>> min(tokens,key=len)
'

В итоге вся задача решается так:
Python
1
2
3
4
5
6
7
8
>>> sent = 'Условие задачи Строка состоит из слов разделенных одним или несколькими пробелами Поменяйте местами наибольшее по длине слово и наименьшее'
>>> tokens = sent.split()
>>> min_idx = tokens.index(min(tokens,key=len))
>>> max_idx = tokens.index(max(tokens,key=len))
>>> tokens[min_idx],tokens[max_idx] = tokens[max_idx],tokens[min_idx]
>>> " ".join(tokens)  # соединяем в одну строку
'Условие задачи Строка состоит из слов и одним или несколькими пробелами Поменяйте местами наибольшее по длине слово разделенных наименьшее'
>>>
0
 Аватар для Ivan _pupkin
3 / 3 / 1
Регистрация: 17.12.2018
Сообщений: 257
30.01.2019, 22:37  [ТС]
Что делает эта строка?
Цитата Сообщение от z1ne2wo Посмотреть сообщение
key=len
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
31.01.2019, 01:25
Цитата Сообщение от Ivan _pupkin Посмотреть сообщение
Что делает эта строка?
key это аргумент у функций max() и min() который показывает какая функция используется, что бы сравнивать элементы списка.

key = len показывает, что в списке слова нужно сравнивать используя функцию len вычисляющую длину слов.

Добавлено через 9 минут
max(iterable, *[, key, default])

iterable : Если указан один позиционный аргумент, то ожидается, что он является итерируемым объектом. Возвращается элемент с максимальным значением, найденный среди элементов этого объекта.

key : Функция используемая для упорядочивания

default : Этим аргументом можно указать значение, которое следует вернуть, если итерируемый объект окажется пустым.
1
 Аватар для Ivan _pupkin
3 / 3 / 1
Регистрация: 17.12.2018
Сообщений: 257
31.01.2019, 03:14  [ТС]
Спасибо большое вам ребята. Я конечно не многое понял, что вы написали, но благодаря вам я догадался как решить эту задачу.
Вот мой код на этот раз:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def swap_words(s):
    s2 = s.split()
    length = len(s2)
    array_size_words = [random.randint(0, 0) for _ in range(length)]
    length_words = 0
    for i in range(length):
        length_words = len(s2[i])
        array_size_words[i] = length_words
 
    mini = maxy = array_size_words[0]
    index_min = index_max = 0
    for i in range(1, length):
        if mini > array_size_words[i]:
            mini = array_size_words[i]
            index_min = i
        if maxy < array_size_words[i]:
            maxy = array_size_words[i]
            index_max = i
 
    s2[index_min], s2[index_max] = s2[index_max], s2[index_min]
    s3 = ""
    for i in range(length):
        length_words = len(s2[i])
        for j in range(length_words):
            s3 += s2[i][j]
        s3 += " "
 
    return s3
 
 
stroka = input("Введите строку: ")
stroka = swap_words(stroka)
print("Изменённая строка:", stroka)
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
31.01.2019, 07:25
Лучший ответ Сообщение было отмечено Ivan _pupkin как решение

Решение

Даю разяснение кода, который дал z1ne2wo,

Python
1
2
3
4
5
6
7
8
9
10
11
12
s = input().split()           # метод split() разбивает веденную строку на слова и возвращает список слов
i = s.index(min(s, key=len))  # функцию min() я уже объяснил. Метод index возвращает позицию элемента, 
                              # в данном случае минимального слова, в списке s, i номер этого смещения
j = s.index(max(s, key=len))  # с max() аналогично, j смещение максимального слова в списке
s[i], s[j] = s[j], s[i]       # здесь минимальное и максимальное слова меняются местами. Питон работает так, 
                              # сначала в правой части читает слова в соответствии с их позицией , получая пару,
                              #  и затем вставляет каждое слово взятое справо в позицию указанную слева. 
                              #  В результате слова меняются местами.
print(' '.join(s))            # метод join() объединяет элементы полученного списка в строку. 
                              # так как это метод строк, то спереди ставим строку с пробелом, 
                              # этот пробел будет разделять слова при сборке. Если поставить пустую строку 
                              # то слова сольются в одно длинное слово.
Добавлено через 6 минут
Ivan _pupkin, У Вас это фрагмент кода? Потому что не хватает строки
import random

В остальном Ваш код работает, но уж больно он громоздкий.
1
 Аватар для Ivan _pupkin
3 / 3 / 1
Регистрация: 17.12.2018
Сообщений: 257
31.01.2019, 12:34  [ТС]
Цитата Сообщение от Viktorrus Посмотреть сообщение
Ivan _pupkin, У Вас это фрагмент кода? Потому что не хватает строки
import random
Забыл вставить
0
 Аватар для svtslv
308 / 160 / 66
Регистрация: 18.01.2019
Сообщений: 449
31.01.2019, 12:46
Цитата Сообщение от Ivan _pupkin Посмотреть сообщение
Что делает эта строка?
Можно еще так написать что бы было понятнее
Python
1
i = s.index(min(s, key=lambda x: len(x)))
Ну или так
Python
1
2
3
def func(x):
   return len(x)
j = s.index(max(s, key=func))
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
31.01.2019, 13:11
svtslv, Вы что, серьезно считаете, что lambda функция для новичка понятнее, чем простейшая базовая функция len ? Это все равно, что объяснять ученику младших классов операцию сложения используя для суммирования интеграл.
Но в чем мое упущение, это то, что я не пояснил, что в данном месте функция len(), как и другие функции в этом случае, пишется без круглых скобок.
0
 Аватар для svtslv
308 / 160 / 66
Регистрация: 18.01.2019
Сообщений: 449
31.01.2019, 13:24
Viktorrus, Ну учитывая код ТС с функциями они уже знакомы. Просто хотел показать что это обычная функция которая на вход получает элемент списка. Можно свою сортировку написать. Например если внутри списка ученики у которых есть свойство age (возраст)
Python
1
2
3
def func(x):
   return x.age
j = s.index(max(s, key=func))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.01.2019, 13:24
Помогаю со студенческими работами здесь

Поменять местами большее по длине слово с меньшим
Строка состоит из слов, разделенных одним или несколькими пробелами. Поменяйте местами больше по длине слово и меньше

Поменять наименьшее и наибольшее числа местами
Вот есть программа которая меняет наименьшее и наибольшее числа местами, но программа работает, но не выдаёт массив обратно в документ,...

Найти наибольшее наименьшее значение массива, поменять их местами
найти наибольшее и наименьшее значение массива, поменять их местами. наибольшее и наименьшее нашел, не могу поменять их местами ...

Надо поменять местами наибольшее и наименьшее цифру кратно 3
Дано натуральное число N (N&lt;10000). Поменять местами максимальную и минимальную цифры, кратные трем, если таковые имеются в записи...

Как поменять местами наименьшее и наибольшее значение в массиве?
как поменять местами наименьшее и наибольшее значение в массиве.? Добавлено через 19 секунд #include &lt;stdio.h&gt; #define N...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru