Приоритеты операторов Python
Самые приоритетные операции вверху, снизу — с низким приоритетом. Вычисления выполняются слева направо, то есть, если в выражении встретятся операторы одинаковых приоритетов, первым будет выполнен тот, что слева.
Оператор возведения в степень исключение из этого правила. Из двух операторов ** сначала выполнится правый, а потом левый.
| Операторы | Описание |
|---|---|
| () | Скобки |
| ** | Возведение в степень |
| +x , -x , ~x | Унарные плюс, минус и битовое отрицание |
| * , / , // , % | Умножение, деление, целочисленное деление, остаток от деления |
| + , — | Сложение и вычитание |
| > | Битовые сдвиги |
| & | Битовое И |
| ^ | Битовое исключающее ИЛИ ( XOR ) |
| | | Битовое ИЛИ |
| == , != , > , >= , < , | Сравнение, проверка идентичности, проверка вхождения |
| not | Логическое НЕ |
| and | Логическое И |
| or | Логическое ИЛИ |
Хотите выучить 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
print ('Введите ваш пол,буква (м\ж): ') p = str(input()); if p == 'м' : print ('Здарова мужик') elif p == 'ж' : print ('Приветствую вас девушка') else: print ('Ты кто такой ***?') print ('Как дела то?) (норм,плохо,отлично,супер,свой вариант)') k = str(input()); if k == 'норм' : println ('Норм так норм,эт стандарт))') elif k == 'плохо': print ('*** ну ты это,не расстраивайся,все еще наладиться,выше нос)) ') elif k == 'отлично': print ('Так держать') elif k == 'супер': print ('Так держать') else: print('эхх,выпьем? =) ') import time time.sleep (5)
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Сделать выбор цвета в зависимости от ответа
Как сделать так, чтобы в коде после выбора правильного ответа цвет становился зелёным, а если ответ.
Запросить у пользователя ввести возраст и вывести сообщение в зависимости от ответа
Необходимо запросить у пользователя ввести возраст (метод prompt()). Вызывать функцию, которая.
Создать два варианта сценария для построения графика
Здравствуйте. Мне требуется построить два графика разными способами. На выходе они должны быть.
Создать два варианта сценария для построения, оформления и вывода графика
Здравствуйте, проблема с графиками: Создать два варианта сценария для построения, оформления и.
Создать два варианта сценария для построения, оформления и вывода графика
Здравствуйте! Посмотрел пример на форуме по созданию графика в матлабе! написал программу по.
Регистрация: 03.04.2015
Сообщений: 53
тему можно закрывать,разобрался.
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
print ('Введите ваш пол,буква (м\ж): ') p = str(input()); if p == 'м' : print ('Здарова мужик') print ('Как дела то?) (норм,плохо,отлично,супер,свой вариант)') k = str(input()); if k == 'норм' : println ('Норм так норм,эт стандарт))') elif k == 'плохо': print ('***,ну ты это,не расстраивайся,все еще наладится,выше нос)) ') elif k == 'отлично': print ('Так держать') elif k == 'супер': print ('Так держать') else: print('эхх,выпьем? =) ') elif p == 'ж' : print ('Приветствую вас девушка') print ('Как дела, сударыня?) (норм,плохо,отлично,супер,свой вариант)') k = str(input()); if k == 'норм' : print ('Норм так норм,эт стандарт для девушки))') elif k == 'плохо': print ('***,ну ты это,ъъъъъъ,не расстраивайся,все еще наладится,выше нос)) ') elif k == 'отлично': print ('Так держать, ъъъъъъ!') elif k == 'супер': print ('Так держать') else: print('эхх,выпьем? =) а потом ъъъъъъ ') else: print ('Ты кто такой ***, ******')
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
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
def dialog(answer, question): inp = input(question) try: print(answer[inp.lower()]) except KeyError: print(answer['other']) sex = input('Введите ваш пол (м/ж): ') if sex == 'м': answer = { 'норм': 'Норм так норм,эт стандарт))', 'плохо': 'ну ты это,не расстраивайся,все еще наладится,выше нос))', 'отлично': 'Так держать', 'супер': 'Так держать', 'other': 'эхх,выпьем? =) ' } question = 'Здарова мужик\nКак дела то?) (норм,плохо,отлично,супер,свой ' \ 'вариант)' dialog(answer, question) elif sex == 'ж': answer = { 'норм': 'Норм так норм,эт стандарт для девушки))', 'плохо': 'ну ты это, не расстраивайся,все еще наладится,выше нос))', 'отлично': 'Так держать!', 'супер': 'Так держать', 'other': 'эхх,выпьем? =) ' } question = 'Приветствую вас девушка\nКак дела, сударыня?) (норм,плохо,' \ 'отлично,супер,свой вариант)' dialog(answer, question) else: print('Ты кто такой ?)
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Создать два варианта сценария для построения, оформления и вывода графика
Создать два варианта сценария для построения, оформления и вывода графика: Один вариант должен.

Создать два варианта сценария для построения, оформления и вывода графика
1. Один вариант должен использовать стандартный для обычных языков программирования подход с.
Выбрать 2 правильных варианта ответа
Собственно,помогите выбрать 2 правильных варианта ответ Правила форума: 5.18. Запрещено.
Добавление варианта ответа в голосовании
Здравствуйте! Решил я недавно голосовалку написать на php с использованием mysql. Появилась.
Задания с выбором варианта ответа
Подскажите, как мне сделать так чтобы в тесте были задания только с выбором варианта ответа? path.
Помогите со сценарием проверки варианта ответа.
Решил создать игру. Простенькую, но игру. Но столкнулся с проблемой. При нажатии на кнопку "Ответ.
Статья Создание меню выбора клавишами в терминале с помощью Python
Когда мы пишем какое-то консольное приложение подразумевающее пользовательский выбор, хорошо было бы иметь такой инструмент, который бы создавал нужное нам меню и позволял перемещаться по нему с помощью стрелок на клавиатуре. Ведь это гораздо удобнее, чем просить пользователя ввести какую-либо цифру, соответствующую тому или иному пункту. И такой инструмент есть. Давайте посмотрим, как его реализовать в скрипте Python.
К сожалению, все, что будет описано далее не работает в ОС Windows. Поэтому, речи о кросплатформенности тут не идет. Однако, в Linux данный код работает прекрасно. Давайте создадим небольшой скрипт, который будет использовать меню для пользовательского выбора и запускать те или иные файлы или ссылки в консольном медиаплеере mpv.
Следует сразу же сказать, что данный код не будет работать в терминале IDE PyCharm. В VSCode не знаю, не проверял. В терминале все работает в лучшем виде.
Что потребуется?
Для начала, если вы хотите протестировать код в том виде, в котором он будет представлен в данной статье, нужно установить медиаплеер. В ОС Linux использующих кодовую базу Debian делается это командой:
sudo apt install mpv
Также нам потребуется библиотека, с помощью которой и будет создаваться меню. Установить ее можно набрав команду:
pip install simple-term-menu
Импорт модулей в скрипт
После того, как необходимые библиотеки будут установлены, импортируем нужные модули в скрипт.
import os import subprocess import sys import time from pathlib import Path from simple_term_menu import TerminalMenu
Создание списков и словарей нужных в работе
Следующим шагом, который будет необходим, создадим словарь и список. В словаре мы будем хранить, так как это оболочка над плеером, названия файлов или каналов, если это плейлист. И ссылки на эти файлы или каналы.
Также необходимо создать список, в котором будут храниться названия файлов или каналов в текстовом виде. Этот список будет необходим при создании меню. Добавляем необходимый код в скрипт.
media = dict() options = []
Определение функций оболочки
Теперь давайте определимся с тем, что будет уметь делать оболочка. Не особо много, но это и не главное. Ведь мы не создаем полноценный проигрыватель, а только лишь пишем скрипт для демонстрации возможности создания меню. Поэтому, оболочка будет уметь парсить плейлисты формата m3u, сканировать указанные директории на наличие в них медиафайлов. Ну и пожалуй — все.
Напишем функцию main, в которой будем осуществлять выбор пользователя для выполнения тех или иных действий. Заключим код в блок try — except, чтобы иметь возможность обрабатывать исключения. Выведем информацию для пользователя, что это Главное меню. Затем создадим список, в который запишем названия пунктов будущего меню. Как видите, их в списке три.
Инициализируем класс TerminalMenu в который передадим созданный список с пунктами меню, а также вызовем у данного класса метод show для его отображения. В ответ возвращается индекс пункта меню в используемом списке. Поэтому, если мы хотим обработать действие, нужно по данному индексу забрать из списка его значение. И далее, в зависимости от выбора пользователя запускаем парсинг плейлиста, сканирование директории или инициализируем исключение, с помощью которого будем выходить из функции.
В обработке исключений, которые могут возникнуть при работе с функцией с помощью subprocess запустим код очистки данных в терминале, выведем пользователю сообщение и завершим работу скрипта.
def main(): """ Главная функция. Выбор пользователя. Запуск сканирования директории или парсинга плейлиста. Запуск меню после сканирования. """ try: print(f"\nГлавное меню\n") opt = ["1. Ввести путь к плейлисту", "2. Открыть директорию", "3. Выход"] ch = TerminalMenu(opt).show() if opt[ch] == "1. Ввести путь к плейлисту": path = input("Путь к плейлисту >>> ") if not Path(path).exists() or not Path(path).is_file() or Path(path).suffix != ".m3u" or path == "": print("Неверная ссылка") main() open_playlist(path) menu_run() elif opt[ch] == "2. Открыть директорию": path = input("Путь к директории >>> ") if not Path(path).exists() or not Path(path).is_dir() or path == "": print("Неверная ссылка") main() dir_scan(path) menu_run() elif opt[ch] == "3. Выход": raise KeyboardInterrupt except (KeyboardInterrupt, TypeError): subprocess.call("clear", shell=True) print("\nGood By!\n") sys.exit(0)
Парсинг плейлиста
Как вы помните, первый пункт меню у нас ввод пути к плейлисту. Для того, чтобы передать данные в меню, его нужно для начала распарсить. А именно, получить названия каналов, а также получить ссылки на них. Тем более, что в плейлисте не обязательно могут быть ссылки на каналы в интернете, а вполне себе ссылки на локальные файлы. Плейлист состоит из трех основных частей. Первая часть, это заголовок плейлиста: #EXTM3U; вторая часть, расширенная информация о медиафайле: #EXTINF; ссылка на веб-ресурс или локальный файл.
В контексте нашего скрипта нам нужно только последние два параметра. Расширенная информация, из которой мы заберем название медиафайла для меню, и ссылка на медиафайл.
Создадим функцию open_playlist(path: str), которая принимает ссылку на файл. Определим переменные: key и num. В переменной key будет содержаться название канала или файла. В переменной num просто порядковый номер ресурса. Чтобы в меню содержались пронумерованные названия.
key = "" num = 0
Откроем плейлист на чтение. Так как это, по сути, обычный текстовый файл, то ничего особого придумывать не нужно. В цикле проитерируемся по строкам файла. Если строка начинается на #EXTINF, значит это описание медиафайла. Забираем из него название и присваиваем в переменную key. С помощью continue итерируемся дальше. Если строка начинается со ссылки, увеличиваем счетчик на 1, Добавляем номер к названию медиафайла, добавляем пару ключ значение (название, ссылка) в словарь. А также добавляем название файла в глобальный список options, в котором и хранятся элементы меню.
Заключим код в блок try — except, для того, чтобы обработать ошибку декодирования данных, так как плейлисты могут быть сохранены в кодировке, которая отличается от кодировки utf-8.
def open_playlist(path: str): """ Функция для парсинга плейлиста. :param path: Путь к плейлисту. """ key = "" num = 0 try: with open(path, 'r', encoding='utf-8') as file: for item in file.readlines(): if item.startswith("#EXTINF"): key = item.split(',')[-1].replace('#EXTGRP:', '').strip() continue elif item.startswith("http"): num += 1 key = f'. ' media.update() options.append(key) except UnicodeDecodeError: print("Не могу декодировать данные") sys.exit(0)
Функция чтения содержимого директории
Как вы помните, второй пункт в меню выбора, это открытие директории с медиафалами. Создадим функцию dir_scan(path: str), которая на вход принимает ссылку на директорию. Создадим список с расширениями медиафайлов. Я назвал его suf. Конечно же, это далеко не все форматы, которые поддерживает mpv. Поэтому, если вам нужны какие-то дополнительные форматы, можете добавить их самостоятельно. Подробнее о поддерживаемых форматах можно почитать в документации плеера:
Ссылка скрыта от гостей
. Для нашего скрипта добавленных форматов достаточно.
Создадим список файлов с нужными расширениями в директории с помощью os.listdir. И теперь проитерируемся в цикле по данному списку. Заберем названия файлов и добавим к ним порядковый номер. После этого, добавим пару ключ — значение в словарь. А также в глобальный список options добавим названия файлов для меню.
def dir_scan(path: str): """ Функция для сканирования файлов в директории. :param path: Путь к директории. """ # Добавьте нужные форматы. Подробнее о поддерживаемых mpv # форматах см. в документации: https://mpv.io/manual/master/ suf = [".mp3", ".wav", ".mp4", ".avi"] files = [x for x in os.listdir(path) if Path(x).suffix in suf] for num, file in enumerate(files): name = f'.' media.update() options.append(name)
Создание и отображение меню из медиафайлов
Теперь нам понадобиться небольшая функция, основной задачей которой будет создание меню из переданного в нее списка, а также его отображение в терминале. Данный код вам уже знаком по отображению меню пользовательского выбора. Создадим функцию menu. На вход она ничего не принимает, а возвращает индекс значения из списка, который соответствует пункту меню. Данная функция буквально в одну строку. Создаем экземпляр класса TerminalMenu, передаем в него составленный список с пунктами и отображаем с помощью метода show.
def menu(): """ Функция создания меню. :return: Возвращает индекс выбранного пункта меню в списке. """ return TerminalMenu(options).show()
Перемещение по меню, выбор пункта и передача для воспроизведения
Для воспроизведения медиафайла или ресурса по ссылке будет служить другая функция. В данной же функции мы будем получать пользовательский выбор, когда он нажмет клавишу Enter на нужном пункте, запускать воспроизведение и после его окончания снова отображать меню со списком файлов.
Создадим функцию menu_run(). На вход она ничего не принимает. Для начала очищаем терминал от постороннего текста с помощью системной команды clear. Выводим сообщение для пользователя о том, что он перед собой видит, а именно плейлист. Получаем при нажатии на пункт меню значение индекса из функции menu и передаем полученное значение в функцию play, которая и будет проигрывать файлы. Ну и после окончания проигрывания запускаем рекурсивно саму себя.
Также обработаем исключения. В частности, TypeError и KeyboardInterrupt. И та, и та ошибки возникают при прерывании функции с помощью комбинации клавиш «Ctrl+C». В обработке ошибок очистим терминал, очистим список и словарь, после чего вызовем функцию main для отображения Главного меню.
def menu_run(): """ Функция запуска проигрывания плейлиста. """ try: subprocess.call("clear", shell=True) print(f"ПЛЕЙЛИСТ:\n(для возврата в 'Главное меню' нажмите 'Ctrl+C')\n") m = menu() play(m) menu_run() except (KeyboardInterrupt, TypeError): subprocess.call("clear", shell=True) options.clear() media.clear() main()
Проигрывание композиций
В данном скрипте проигрывание композиций осуществляется с помощью медиаплеера mpv. Так как медиаплеер консольный, то при проигрывании, например аудио, управлять им можно только с помощью горячих клавиш. Подробнее о них можно почитать в документации плеера. Я опишу лишь некоторые. Клавиши стрелок. Вверх — вниз: перемотка композиции на минуту. Клавиши вперед — назад: перемотка на секунды. Клавиши 0 и 9, увеличение/уменьшение громкости. Клавиша q — выход из плеера.
Создадим функцию play(n: int). На вход она принимает индекс элемента списка меню, являющийся целым числом. В переменную m получаем из словаря путь к медиафайлу по ключу, который берется, в свою очередь, из списка по индексу. С помощью subprocess.check_call запускаем воспроизведение медиафайла. Здесь же устанавливаем процент громкости, который по умолчанию равен 100. subprocess.check_call здесь используется для того, чтобы по окончании композиции или после нажатия клавиши выхода q поймать возвращаемое значение, которое равно 0. Проверяем возвращаемое значение. Если оно равно 0, увеличиваем переданный в функцию индекс на единицу пишем сообщение в терминал для пользователя, если он желает выйти. Ждем две секунды и рекурсивно запускаем функцию с новым значением индекса, что будет означать проигрывание следующей композиции из списка.
Также необходимо обработать исключения, которые будут возникать при нажатии сочетания клавиш «Ctrl+C» или невозможности открыть медиаресурс. Если возникает IndexError, это означает, что достигнут конец плейлиста. Сюда можно добавить простое обнуление индекса и рекурсивный запуск функции по плейлисту с самого начала. Я же просто сообщаю об этом пользователю и возвращаюсь в меню со списком медиафайлов. Если произошло клавиатурное прерывание, просто возвращаемся в меню со списком. Если же возникла ошибка открытия медиаресурса, делаем то же самое, но с другим сообщением. По большому счету можно все эти исключение объединить в один блок Exception, выводить усредненное сообщение и просто выходить в меню со списком медиафайлов.
def play(n: int): """ Функция проигрывания плейлиста с указанной позиции. :param n: Индекс пункта меню в списке. """ try: m = media[options[n]] s = subprocess.check_call(f"mpv --volume=50 ''", shell=True) if s == 0: n += 1 print("\nДля выхода в плейлист нажмите 'Ctrl+C'\n") time.sleep(2) play(n) except subprocess.CalledProcessError: print("\nОШИБКА ОТКРЫТИЯ ССЫЛКИ\n") time.sleep(2) menu_run() except IndexError: print("Конец плейлиста") time.sleep(2) menu_run() except KeyboardInterrupt: menu_run()
Вот, собственно и все. Напомню, что данный код не будет работать в IDE PyCharm из за особенностей встроенного терминала. В VSCode не проверял. В терминале же все работает отлично.
Полный код скрипта создания меню и проигрывания медиафайлов
""" Данный код не является полноценным плеером, а служит лишь для иллюстрации возможности использования терминального меню. Для работы с меню необходимо установить пакет: simple-term-menu. Установка пакета: pip install simple-term-menu Для работы данного кода требуется установка медиа-плеера mpv. Установка в Linux Mint/Debian/Ubuntu: sudo apt install mpv В ОС Windows библиотека использующаяся в скрипте не работает. Меню не работает при запуске в IDE, по крайней мере в PyCharm. VSCode не тестировался. Для корректной работы код необходимо запускать в терминале. """ import os import subprocess import sys import time from pathlib import Path from simple_term_menu import TerminalMenu media = dict() options = [] def open_playlist(path: str): """ Функция для парсинга плейлиста. :param path: Путь к плейлисту. """ key = "" num = 0 try: with open(path, 'r', encoding='utf-8') as file: for item in file.readlines(): if item.startswith("#EXTINF"): key = item.split(',')[-1].replace('#EXTGRP:', '').strip() continue elif item.startswith("http"): num += 1 key = f'. ' media.update() options.append(key) except UnicodeDecodeError: print("Не могу декодировать данные") sys.exit(0) def dir_scan(path: str): """ Функция для сканирования файлов в директории. :param path: Путь к директории. """ # Добавьте нужные форматы. Подробнее о поддерживаемых mpv # форматах см. в документации: https://mpv.io/manual/master/ suf = [".mp3", ".wav", ".mp4", ".avi"] files = [x for x in os.listdir(path) if Path(x).suffix in suf] for num, file in enumerate(files): name = f'.' media.update() options.append(name) def menu(): """ Функция создания меню. :return: Возвращает индекс выбранного пункта меню в списке. """ return TerminalMenu(options).show() def play(n: int): """ Функция проигрывания плейлиста с указанной позиции. :param n: Индекс пункта меню в списке. """ try: m = media[options[n]] s = subprocess.check_call(f"mpv --volume=50 ''", shell=True) print(s) if s == 0: n += 1 print("\nДля выхода в плейлист нажмите 'Ctrl+C'\n") time.sleep(2) play(n) except subprocess.CalledProcessError: print("\nОШИБКА ОТКРЫТИЯ ССЫЛКИ\n") time.sleep(2) menu_run() except IndexError: print("Конец плейлиста") time.sleep(2) menu_run() except KeyboardInterrupt: menu_run() def menu_run(): """ Функция запуска проигрывания плейлиста. """ try: subprocess.call("clear", shell=True) print(f"ПЛЕЙЛИСТ:\n(для возврата в 'Главное меню' нажмите 'Ctrl+C')\n") m = menu() play(m) menu_run() except (KeyboardInterrupt, TypeError): subprocess.call("clear", shell=True) options.clear() media.clear() main() def main(): """ Главная функция. Выбор пользователя. Запуск сканирования директории или парсинга плейлиста. Запуск меню после сканирования. """ try: print(f"\nГлавное меню\n") opt = ["1. Ввести путь к плейлисту", "2. Открыть директорию", "3. Выход"] ch = TerminalMenu(opt).show() if opt[ch] == "1. Ввести путь к плейлисту": path = input("Путь к плейлисту >>> ") if not Path(path).exists() or not Path(path).is_file() or Path(path).suffix != ".m3u" or path == "": print("Неверная ссылка") main() open_playlist(path) menu_run() elif opt[ch] == "2. Открыть директорию": path = input("Путь к директории >>> ") if not Path(path).exists() or not Path(path).is_dir() or path == "": print("Неверная ссылка") main() dir_scan(path) menu_run() elif opt[ch] == "3. Выход": raise KeyboardInterrupt except (KeyboardInterrupt, TypeError): subprocess.call("clear", shell=True) print("\nGood By!\n") sys.exit(0) if __name__ == "__main__": main()
Вот собственно немного скриншотов:
Как создать меню с выбором функций на Python?
Мне нужно, чтобы после выбор каждой функции, у меня заново открывалось меню, и только при выборе нуля в меню, он выходил из неё. Пример:
print("1. выбор действия один") print("2. выбор действия два") print("3. выбор действия три") print("0. выйти из программы") default = input("Выберите пункт: ")
Отслеживать
задан 29 ноя 2020 в 18:39
1 1 1 серебряный знак 3 3 бронзовых знака
Ну, зациклите код из вопроса, а из input принимайте значение в переменную, в которой и проверяйте введенное значение
29 ноя 2020 в 18:43
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
while True: print("1. выбор действия один") print("2. выбор действия два") print("3. выбор действия три") print("0. выйти из программы") cmd = input("Выберите пункт: ") if cmd == "1": # действие 1 elif cmd == "2": # действие 2 elif cmd == "3": # действие 3 elif cmd == "0": break else: print("Вы ввели не правильное значение"
Отслеживать
ответ дан 29 ноя 2020 в 18:45
19.6k 6 6 золотых знаков 22 22 серебряных знака 56 56 бронзовых знаков
- python
- menu
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
