Найти в Дзене
Практика Python

Решение практической задачи № 2 на Python

Условие: "Получить от пользователя десять целых чисел. Написать функцию, которая возвращает сумму двух наименьших чисел из них."

Разделим нашу задачу на две подзадачи.

1. Получение от пользователя целых чисел

2. Вычисление суммы двух наименьших чисел

Получение от пользователя чисел

Напишем функцию, которая запрашивает у пользователя числа, до тех пор, пока их количество не станет равно 10. Если пользователь ввел не целое число – сообщим ему об этом. Введенные числа будем помещать в список. В итоге наша функция будет возвращать список чисел.

Получение целых чисел и внесение их в список
Получение целых чисел и внесение их в список

Здесь мы в цикле while запрашиваем у пользователя целые числа. Используем конструкцию try except else. В блоке try пытаемся привести символы введенные пользователем к целому числу. Если получаем ошибку – исполнится блок except, если же приведение прошло успешно – будет исполняться блок else.

У этой конструкции есть еще один блок finally - он будет исполняться в любом случае. Это может быть полезно, например, если в try Вы открываете файл и что-то пытаетесь с ним делать. Далее в не зависимости от того как шел процесс – файл нужно закрыть.

Кроме того except – гибкая структура. В данном конкретном случае мы отлавливали какую-нибудь ошибку, а вообще можно отлавливать конкретные ошибки и в зависимости от того какая именно ошибка – выполнять разные действия.

Также мы использовали метод .append(). Он предназначен для того, чтобы добавить элемент в конец списка. Добавить элемент в конец списка можно и так:

user_list[len(user_list):] = [user_number]

Методу .append() есть противоположный метод - метод .pop(). Если аргумент не задан – он удаляет последний элемент списка. Если задан, то удаляет элемент по номеру:

list. pop(3) – удалит 4-й элемент списка.

Не забываем, что в списках, как и в строках нумерация начинается с 0!

Теперь возьмемся за решение задачи по нахождению двух минимальных значений списка и вычислению их суммы:

Решение № 1.

Используем функцию sorted()

Находим сумму двух наименьших элементов с помощью функции sorted()
Находим сумму двух наименьших элементов с помощью функции sorted()

По умолчанию new_list = sorted (old_list), функция sorted() в данном примере создает отсортированную по убыванию копию списка old_list. Она может так же использовать необязательный ключ reverse, который принимая значение True, позволит сортировать по убыванию:

new_list = sorted (old_list, reverse=True)

Заметим, что далее мы работаем с копией исходного списка. Сам исходный список остается неизменным.

Решение № 2.

Если же нам исходный список не нужен, мы можем использовать метод .sort()

Находим сумму двух наименьших элементов с помощью метода .sort()
Находим сумму двух наименьших элементов с помощью метода .sort()

Различия между .sort() и sorted() :

- .sort() применяется только к спискам, а sorted() к любому итерируемому объекту

- при использовании .sort() первоначальный список безвозвратно теряется

Метод .sort() также имеет необязательный параметр reverse

Решение № 3.

Ну как нам не обойтись без топорных решений? В этой задаче мы выберем самое топорное из всех. В цикле перебираем все элементы и сравнивая с текущим минимальным значением, находим наименьшее. Во внешних переменных сохраняем его и его индекс. Затем по индексу удаляем его из списка.

Повторяем проделанное еще раз, суммируем полученные два числа и возвращаем их.

"Топорный" метод нахождения суммы двух наименьших элементов списка
"Топорный" метод нахождения суммы двух наименьших элементов списка

Итак, у нас сейчас две функции и общее решение может быть таким:

Итог работы 2-х наших функций
Итог работы 2-х наших функций

Однако, когда Вы периодически что-то пишете, то Вам лучше сделать отдельный модуль , куда Вы будете помещать свои функции. Наша задача, конечно, не тот случай, но все же.

Итак создаем файл myfunc.py и переносим туда две наших функции get_list_number() и get_summ_elements(). Затем в новом файле импортируем модуль myfunc и получается:

Импорт модуля myfunc
Импорт модуля myfunc

Причем импортировать мы можем не только весь модуль, но и его отдельные элементы с помощью:

from модуль import функция

При этом, при вызове функции указывать её модуль уже не нужно:

Импорт нужных функций из модуля myfunc
Импорт нужных функций из модуля myfunc

Если у Вас, уважаемый читатель, есть более элегантные способы решения этой задачи – прошу поделиться ими !

Конструктивная критика приветствуется.

Эта статья была полезной? Поставьте лайк и поделитесь с друзьями в социальных сетях!

Оставьте отзывы и замечания!

Предыдущая задача:

Решение практической задачи № 1

Следующая задача:

Решение практической задачи № 3

Более полное описание подходов, методов и функций, применяемых в этом решении:

Основы работы со строками

Методы строк. Часть 1

Основы работы со списками

Методы списков. Часть 1

Основы работы с числами

Числовые функции.Часть 1

База знаний

Функции: sorted()

Методы: .append(),.pop(),.sort()

Циклы: while

Конструкции: try except else finally

Типы данных: int (целые числа), list (списки)

Задача для закрепления: «Получить от пользователя десять целых чисел. Написать функцию, которая возвращает среднее арифметическое значение всех чисел»

Рекомендуем почитать