Найти в Дзене

Конструкция цикла. Часть 8

Оглавление
Не линейные конструкции
Не линейные конструкции

В прошлой публикации я написал умение Розалии включать музыку. Правда, такая реализация в большей степени бесполезна. Открыть папку и запустить файл музыки я и сам могу, зачем для этого писать программу воспроизведения только одного музыкального файла?

Но если я кое-что подправлю в программе, то могу сделать программу более пригодной для жизни.

  1. Оформлю программу в виде функции
  2. Аргументом функции задам файл, который хочу воспроизвести
  3. Отсортирую список файлов так, чтобы убрать лишние файлы. Я же хочу запустить музыку, зачем мне тогда в списке файлы фотографий?

Чтобы оформить программу в виде функции подправлю одну строчку и весь код помещу в функцию, которую назову play_music::

И снова функции

Словом def я говорю Python, что хочу описать функцию с именем play_music и аргументом функции nomer_file. После знака двоеточия Python понимает, что я начну описывать действия, которые будет выполнять функция play_music. Действия, принадлежащие функции, от основной программы отделены знаком табуляции - так Python понимает, что

  • 1 - musik_PLAY_dir = "d:/12"
  • 2 - LIST_FILE = os.listdir(musik_PLAY_dir)
  • 3 - PLAY=os.path.join(musik_PLAY_dir,LIST_FILE[nomer_file])
  • 4- os.startfile(PLAY)
эти четыре действия находятся внутри функции play_music и запустятся, только если я её вызову. А вызову я ее в конце программы с аргументом «0».
Изменение в коде программы
Изменение в коде программы

Переменная nomer_file задает индекс элемента списка файлов из директории с музыкой. Нулевой элемент моего списка с файлами – 1.mp3.

Теперь запросы растут и мне нужно, чтобы я сам выбрал песню из списка, которую хочу включить. Запросов все больше, а где же золотая рыбка? Зачем она? Ваш интеллект и есть та рыбка, исполняющая желания. Реализую вот что:

Изменю немного код;

file_musik=input("Какую песню включить ")

а затем вынесу эти строки

LIST_FILE = os.listdir(musik_PLAY_dir)
musik_PLAY_dir = "d:/12"

из функции play_music в основную программу.

Такие манипуляции приводят к двум изменениям:

  1. Переменные LIST_FILE и musik_PLAY становятся глобальными. Т.е. я могу их использовать во всей программе, а не только внутри функции.
  2. file_musik будет содержать значение, которое я введу с клавиатуры.

Но перед тем, как с клавиатуры вводить значение, нужно вывести список файлов на экран, чтобы я видел из чего выбирать и какую песню включить. Т.е. я должен записать:

print ("1 -"+LIST_FILE[0])
print ("2 -"+LIST_FILE[1])
print ("3 -"+LIST_FILE[2])
print ("4 -"+LIST_FILE[3])

Далее я ввожу номер, и запускается файл. Напомню, что переменная LIST_FILE содержит список файлов из директории d:/12. К каждому элементу списка можно обратиться по его индексу - LIST_FILE[0].

Но если файлов внутри директории 100 или 1000, то 1000 раз писать команду print «не прикольно» . К тому же, если я не знаю количество файлов в директории, то это "в двойне не прикольно". Лучше запишу красивую конструкцию языка Python, которая позволяет неоднократно выполнять одни и те же действия - цикл.

Что такое цикл?

Итак, мне нужно вывести список файлов на экран. Для этого я пишу функцию print_file:

-3

В качестве аргумента функции я буду указывать список LIST_FILE.

print_file(LIST_FILE)

Цикл начинает со слова for, а описание действий, которые хочу повторять - после двоеточия. Вот в этой строке for file_ in list_file: зашифровано количество повторения двух действий:

  • print (str(count)+" - "+file_)
  • count=count+1

for указывает переменной file_ последовательно принимать все значения из списка list_file и при каждом новом значении выполнять действия

  1. выводить это значение на экран - print (str(count)+" - "+file_)
  2. к переменной count прибавлять единицу. Цикл закончится тогда, когда file_ примет последние значение списка.
Описание цикла
Описание цикла

А вот так, Розалия покажи, как работает цикл:

Работа цикла
Работа цикла

Из скрина выше видно, что переменная file_ последовательно принимает четыре значения, переменная count увеличивается на единицу. Таким образом, цикл срабатывает четыре раза. Также print (str(count)+" - "+file_) выводит не только файлы с расширением mp3, еще проскальзывают файлы фотографий. А мне нужна только музыка! Исправлю это функцией endswith. Эта функция применяется к строке и сообщает заканчивается ли строка определенным набором символов. К примеру, могу записать так:

file_.endswith(".mp3"). Если строка file_заканчивается ".mp3", endswith() вернет значение "Истина", а если не заканчивается - "Ложь"

Таким образом задача сводится к применению функции endswith(".mp3") и проверки условия:

если endswith(".mp3") в качестве значения вернет Истина", то вывести этот элемент списка, а если Ложь" удалить элемент из списка.

Конструкция условия

Конструкция условия в Python позволяет изменить ход выполнения программы. Условную конструкцию я могу записать так:

Конструкция выбора
Конструкция выбора

Тут комментарии излишние:

Конструкция выбора
Конструкция выбора

А вот полный текст программы:

Полный текст программы
Полный текст программы

На этом я прощаюсь, что не понятно расскажу в следующий раз и за одно "волью" это умение "воспроизводить музыку" в сущность Розалии. До встречи на канале.