Добавить в корзинуПозвонить
Найти в Дзене
Практика Python

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

Условие : "Пользователь вводит некоторую строку на английском языке. Посчитать сколько гласных букв содержится в этой строке, и вывести результат на экран. " Итак: Гласными считаем “a”,”e”,”y”,”u”,”i”,”o”. " Решение № 1. Первый способ – «топорный», в нем мы запросим строку у пользователя, зададим счетчик гласных букв равным нулю и в цикле будем перебирать каждый символ, сравнивая его с нужным нам. При нахождении соответствия – увеличим счетчик на единицу. После перебора всей строки выведем на экран значение счетчика. Как видим, все работает, но код получился неоправданно большим для такой простой задачи. Скорее это пример того, как не нужно кодить… Здесь мы использовали: - функцию range (start, finish,step) –которая генерирует диапазон чисел от start, до finish – 1 c шагом step (step – необязательное значение, по умолчанию равное 1). Так: range (1,11) – сгенерирует диапазон от 1 до 10! -функцию len (str) – которая возвращает длину строки. Причем обратите внимание! Нумерация симво

Условие : "Пользователь вводит некоторую строку на английском языке. Посчитать сколько гласных букв содержится в этой строке, и вывести результат на экран. "

Итак: Гласными считаем “a”,”e”,”y”,”u”,”i”,”o”. "

Решение № 1.

Первый способ – «топорный», в нем мы запросим строку у пользователя, зададим счетчик гласных букв равным нулю и в цикле будем перебирать каждый символ, сравнивая его с нужным нам. При нахождении соответствия – увеличим счетчик на единицу. После перебора всей строки выведем на экран значение счетчика.

решение задачи "топором"
решение задачи "топором"

Как видим, все работает, но код получился неоправданно большим для такой простой задачи. Скорее это пример того, как не нужно кодить…

Здесь мы использовали:

- функцию range (start, finish,step) –которая генерирует диапазон чисел от start, до finish – 1 c шагом step (step – необязательное значение, по умолчанию равное 1). Так:

range (1,11) – сгенерирует диапазон от 1 до 10!

-функцию len (str) – которая возвращает длину строки. Причем обратите внимание! Нумерация символов в строке начинается с 0. Так:

user_str[0]=’L’, а user_str[1]=’o’ в нашем примере

-функция print() – выводит на экран заданные объекты

-функция input() – ввод строки данных с клавиатуры

Решение № 2

Используем функцию sum(), подставив ей в качестве аргумента «синтаксический сахар»

Решение задачи с помощью функции sum()
Решение задачи с помощью функции sum()

Здесь задача решена значительно быстрее.

Функция sum() – суммирует элементы указанного объекта и возвращает результат. Например, sum ([5,6]) – вернет 11, а sum (range(10,100)) – сумму всех двузначных чисел

Решение № 3.

С помощью регулярных выражений. Импортируем модуль re.С помощью метода re.findall() находим все нужные нам буквы и помещаем их в список. А затем возвращаем длину списка функцией len().

решение задачи с помощью регулярных выражений. Импортируем модуль re.
решение задачи с помощью регулярных выражений. Импортируем модуль re.

Заметьте, что методу .findall мы можем подставить еще один метод из модуля re. Это re.IGNORECASE – он позволяет игнорировать прописные и строчные буквы. В этом случае строка 6 выглядела бы так:

return len (re.findall('[aoiuye]',user_str,re.IGNORECASE))

и в бОльшей выборке его применение было бы удобней (например, если бы мы искали согласные буквы)

Решение № 4.

С помощью «анонимной» функции lambda и метода работы со строками srt.count(). Не самый элегантный способ – зато в одну строчку.

решение задачи в одну строку. Используем lambda и count()
решение задачи в одну строку. Используем lambda и count()

В этом способе решения мы использовали функцию lambda. Она используется тогда, когда нужно в одной строке задать функцию и в этой же строке выполнить действия, которые она должна сделать. x = lambda a,b: a+b; x(7,8) – положит в переменную х число 15.

str.count(str2,start,finish) - возвращает количество вхождений подстроки str2 в строке str. start,finish – необязательные параметры. Они используются если нужно выбирать не по всей строке, а только на каком-то её участке. Например str.count (str2, 5,91) – будет искать вхождения подстроки str2, начиная с 6-го символа и заканчивая 92-м.

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

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

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

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

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

Задача для закрепления: «Дан список оценок 17 студентов по контрольной работе в виде list [‘5’, ‘4’,’ 5’, ‘3’ ….]. Написать функцию, возвращающую количество полученных 4.»

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

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

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

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

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

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

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

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

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

База знаний:

Функции: range(), print(), input(), sum(),lambda

Методы: str.count()

Конструкции: if elif else

Циклы: for

Типы данных: str (строки)

Понятия: Регулярные выражения

Модули: re (re.findall(), re.IGNORECASE)