Получение пользовательского ввода в python с input()
Содержание:
- Примеры получения/ввода данных из консоли/клавиатуры.
- Вот и всё об этом
- Новый способ форматирования — метод format()
- Почему Вам нужно обратиться именно к нам?
- Определение функции. Оператор def
- Python SciPy
- Запись
- Known Issues
- Методы открытого файла.
- Краткая историческая справка
- Чтение, запись и обработка файлов в Python.
- Как писать программы на Python
- Практическая работа. Создание собственного модуля
- Старый способ — строковый оператор форматирования
- А как сделать резервное копирование всех моих настроек?
- Группирующие скобки (…) и match-объекты в питоне
- How to read and write in Python
- #3 Интерполяция строк / f-Строки (Python 3.6+)
- Практическая работа
- Условный оператор
- Категории партнерок
Примеры получения/ввода данных из консоли/клавиатуры.
- ;
- ;
- .
Общие примеры использования функции .
>>> x = input('Enter your name:') # Enter your name:Anton >>> print('Hello, ', x) # Hello, Anton # Можно и без строки подсказки >>> print('Введите число:') # Введите число: >>> x = input() # 10 # Не забываем что функция # возвращает строку >>> x # '10'
Проверка и преобразование типов при вводе данных с клавиатура.
Пример представляет собой программу подсчета суммы или произведения введенных в консоль чисел. В примере будем распознавать числовые типы на примере типов и , читаемые функцией из консоли интерпретатора Python.
# test.py def str_to_num(line): """функция конвертирует строку в число""" line = line.strip() # если в строке только цифры if line.isdigit(): return int(line) # если строка содержит точку или запятую elif '.' in line or ',' in line # если из строки убрать точку или запятую # и при этом в строке останутся только цифры if any(line.replace(x, '').isdigit() for x in '.', ',']): return float(line.replace(',', '.')) else # ошибка print('Это не число!\n') return None print('\nДля выхода из программы введите Ctrl+C') print('Для окончания ввода цифр нажмите Enter\n') nums = [] while True inpt = input('Ожидается ввод числа или Enter:') if inpt == '' # Закончить ввод чисел break n = str_to_num(inpt) if n is not None nums.append(n) if nums if len(nums) == 1 print('Вы ввели одну цифру: ', nums]) else print('\nВыберите действие:') print(' сложить цифры введите 1;') print(' умножить цифры введите 2.\n') rez = None while True inpt = input('Введите 1 или 2:') inpt = inpt.strip() if inpt == '1' rez = sum(nums) print('Сумма введенных чисел:', rez) elif inpt == '2' rez = 1 for i in nums rez *= i print('Произведение введенных чисел:', rez) else print('Неправильное действие.\n') if rez is not None break else print('Вы ничего не ввели.')
Вывод программы:
$ python3 test.py Для выхода из программы введите Ctrl+C Для окончания ввода цифр нажмите Enter Ожидается ввод числа или Enter:10 Ожидается ввод числа или Enter:13.9 Ожидается ввод числа или Enter:9,9 Ожидается ввод числа или Enter: Выберите действие: сложить цифры введите 1; умножить цифры введите 2. Введите 1 или 2:2 Произведение введенных чисел: 1376.1000000000001
Эмуляция терминала с использованием функцией .
Для воспроизведения вывода ошибок при выполнении команд в воображаемой «консоли» воспользуемся модулем . Выполнять введенный код будем при помощи встроенной функции .
# test.py import sys, traceback def run_user_code(envdir): source = input(">>> ") try # Выполнение введенного кода с клавиатуры exec(source, envdir) except Exception print("Exception in user code:") print("-"*60) traceback.print_exc(file=sys.stdout) print("-"*60) # словарь для хранения введенных переменных envdir = {} while True run_user_code(envdir)
Запускаем эмуляцию интерпретатора Python.
Вот и всё об этом
Новый способ форматирования — метод format()
Строковый метод format() возвращает отформатированную версию строки, заменяя идентификаторы в фигурных скобках. Идентификаторы могут быть позиционными, числовыми индексами, ключами словарей, именами переменных.
Аргументов в format() может быть больше, чем идентификаторов в строке. В таком случае оставшиеся игнорируются.
Идентификаторы могут быть либо индексами аргументов, либо ключами:
>>> "{}, {} and {}".format('one', 1, 'I') 'one, 1 and I' >>> "{1}, {2} and {0}".format('one', 1, 'I') '1, I and one'
>>> nums = 3, 4, 5, 6, 2, >>> "{}{}{}".format(*nums) '345' >>> "{0}{2}{4}".format(*nums) '352'
>>> u = {'name':'bob','age':35} >>> '{name}-{age}'.format(**u) 'bob-35' >>> '{name}'.format(**u) 'bob' >>> '{name}-{age}'.format(name="pi",age=3.14) 'pi-3.14' >>> '{0}-{age}'.format("sin",**u) 'sin-35'
Вывод атрибутов объекта:
>>> class house: size = "big" street = "main" >>> h = house() >>> '{0.size}, {0.street}'.format(h) 'big, main'
Можно задавать ширину поля и выравнивание:
>>> '{name:10}-{age:3}'.format(**u) 'bob - 35' >>> '{name:>10}-{age:>3}'.format(**u) ' bob- 35' >>> '{name:^10}-{age:^3}'.format(**u) ' bob -35 '
Вывод вещественных чисел:
>>> '{0}'.format(4/3) '1.3333333333333333' >>> '{0:f}'.format(4/3) '1.333333' >>> '{0:.2f}'.format(4/3) '1.33' >>> '{0:10.2f}'.format(4/3) ' 1.33' >>> '{0:10e}'.format(4/3) '1.333333e+00'
Почему Вам нужно обратиться именно к нам?
Определение функции. Оператор def
В языке программирования Python функции определяются с помощью оператора def. Рассмотрим код:
def countFood(): a = int(input()) b = int(input()) print("Всего", a+b, "шт.")
Это пример определения функции. Как и другие сложные инструкции вроде условного оператора и циклов функция состоит из заголовка и тела. Заголовок оканчивается двоеточием и переходом на новую строку. Тело имеет отступ.
Ключевое слово def сообщает интерпретатору, что перед ним определение функции. За def следует имя функции. Оно может быть любым, также как и всякий идентификатор, например, переменная. В программировании весьма желательно давать всему осмысленные имена. Так в данном случае функция названа «посчитатьЕду» в переводе на русский.
После имени функции ставятся скобки. В приведенном примере они пустые. Это значит, что функция не принимает никакие данные из вызывающей ее программы. Однако она могла бы их принимать, и тогда в скобках были бы указаны так называемые параметры.
После двоеточия следует тело, содержащее инструкции, которые выполняются при вызове функции. Следует различать определение функции и ее вызов. В программном коде они не рядом и не вместе. Можно определить функцию, но ни разу ее не вызвать. Нельзя вызвать функцию, которая не была определена. Определив функцию, но ни разу не вызвав ее, вы никогда не выполните ее тела.
Python SciPy
Запись
В Python 3 запись в файл осуществляется с помощью метода write. Метод вызываем у объекта, который ссылается на существующий файл
Важно помнить, что для этого следует предварительно открыть документ с помощью функции open и указать режим записи символом “w”. Метод write принимает в качестве аргумента данные, которые нужно поместить в текстовый файл
Следующий пример кода показывает запись строки “hello”.
file = open("test.txt", "w") file.write("hello") file.close()
Если необходимо добавить новую информацию к записанным ранее данным, следует заново вызвать функцию open, указав ей в качестве режима работы символ “a”. В противном случае все сведения из файла test.txt будут полностью удалены. В приведенном ниже примере кода текстовый документ открывается для дополнительной записи, после чего в него помещается строковый литерал “ world” с пробелом вначале. Таким образом в test.txt будет располагаться “hello world”. После всего этого не нужно забывать об обязательном закрытии файла.
file = open("test.txt", "a") file.write(" world") file.close()
Именно так осуществляется самая простая процедура записи данных в текстовый файл. Стоит заметить, что язык программирования Python содержит массу дополнительных средств для более продвинутой работы с документами, которые также включают и улучшенную запись.
Запись бинарных данных
При записи бинарных данных, следует использовать режим “wb”. Вот пример записи строки в кодировке utf8:
f = open('test.dat', 'wb') f.write(bytes('строка', 'utf8')) f.close()
Known Issues
Методы открытого файла.
Python предоставляет основные методы, необходимые для работы с файлами по умолчанию. Вы можете сделать большую часть манипуляций с файлом, используя объект файла .
Прежде чем вы сможете прочитать или записать в файл, вы должны открыть его с помощью встроенной функции . Эта функция создает , который будет использоваться для вызова методов, которые представлены ниже:
Метод file.close() в Python, закрывает файл.
Метод file.close() закрывает открытый файл. Закрытый файл больше не может быть прочитан или записан. Любая операция, которая требует, чтобы файл был открыт, вызовет исключение ValueError после того, как файл был закрыт.
Метод file.flush() в Python, очищает буфер чтения.
Метод file.flush() очищает внутренний буфер. Обычно используется только для выходного потока. Его цель — очистить выходной буфер и переместить буферизованные данные на диск.
Метод file.fileno() в Python, получает файловый дескриптор.
Метод файла file.fileno() возвращает целочисленный файловый дескриптор, который используется базовой реализацией для запроса операций ввода-вывода из операционной системы.
Метод file.isatty() в Python, проверяет связь с терминалом.
Метод файла file.isatty() возвращает True, если файл подключен/связан с терминальным устройством tty или с tty-подобным устройством, иначе возвратит False.
Метод file.read() в Python, читает весь файл или кусками.
Метод файла file.read() считывает из файла не более size байтов. Если достигается конец файла EOF до получения указанного размера size байтов, тогда метод считает только доступные байты.
Метод file.readline() в Python, читает файл построчно.
Метод файла file.readline() читает одну целую строку из файла. Конечный символ новой строки \n сохраняется в строке.
Метод file.readlines() в Python, получает список строк файла.
Метод файла file.readlines() читает файловый объект построчно, пока не достигнет конца файла EOF, и возвращает список, содержащий строки файла.
Метод file.seek() в Python, перемещает указатель в файле.
Метод файла file.seek() устанавливает текущую позицию offset указателя для чтения/записи в файле file.
Метод file.tell() в Python, позиция указателя в файле.
Метод файла file.tell() возвращает текущую позицию указателя чтения/записи в файле в байтах.
Метод file.truncate() в Python, усекает размер файла.
Метод файла file.truncate() усекает размер файла. Если указан необязательный аргумент size, файл усекается до этого (максимально) размера.
Метод file.write() в Python, пишет данные в файл.
Метод файла file.write() записывает строку str в файл file. Метод возвращает целое число — количество записанных байт.
Метод file.writelines() в Python, пишет список строк в файл.
Метод файла file.writelines() записывает последовательность строк в файл file.
Краткая историческая справка
Язык программирования Python был создан к 1991 году голландцем Гвидо ван Россумом.
Свое имя – Пайтон (или Питон) – получил от названия телесериала, а не пресмыкающегося.
После того, как Россум разработал язык, он выложил его в Интернет, где сообщество программистов присоединилось к его улучшению.
Python активно развивается в настоящее время. Часто выходят новые версии. Существуют две поддерживаемые ветки: Python 2.x и Python 3.x. Здесь английской буквой «x» обозначается конкретный релиз. Между вторым и третьим Питоном есть небольшая разница. В данном курсе за основу берется Python 3.x.
Чтение, запись и обработка файлов в Python.
При доступе к файлу в операционной системе требуется правильно указать путь к файлу. Путь к файлу — это строка, которая представляет местоположение файла.
# Unix /path/to/file/text.txt # Windows c:\path\to\file\text.txt
Он разбит на три основные части:
- Путь к файлу : расположение директории в файловой системе, где папки разделены прямой косой чертой в Unix подобных системах или обратной косой чертой в Windows.
- Имя файла : фактическое имя файла.
- Расширение : используется для указания типа файла.
Для чтения или записи в файл нам необходимо его открыть, а для этого нужно передать путь к нужному файлу в качестве строки функции . Для Unix подобных систем это делается просто:
>>> full_path = '/path/to/file/text.txt' >>> print(full_path) # /path/to/file/text.txt
В системе Windows путь включает в себя обратную косую черту . Этот символ в строках на Python используется для экранирования escape-последовательностей, таких как новая строка .
>>> full_path = 'c:\path\to\file\text.txt' >>> print(full_path) # c:\path o # ile ext.txt
Что бы избежать Windows системах такого безобразия, нам нужно вручную экранировать обратную косую черту или передавать в функции сырую (необработанную) строку, указав перед первой кавычкой строковой литерал :
# экранируем обратную косую черту >>> full_path = 'c:\\path\\to\\file\\text.txt' >>> print(full_path) # c:\path\to\file\text.txt # строковой литерал raw строки >>> full_path = r'c:\path\to\file\text.txt' >>> print(full_path) # c:\path\to\file\text.txt
Открытие/закрытие файла для чтения/записи в Python.
Прежде чем начать работать с файлом, первое, что нужно сделать, это открыть его. Это делается путем вызова встроенной функции open(). Она имеет единственный обязательный аргумент, который представляет путь к файлу filename
Типы обрабатываемых данных и файлов в Python.
Существуют три типа файлов которые чаще всего обрабатываются на практике. Текстовые файлы. Буферизованные двоичные типы файлов. Необработанный тип файлов Raw.
Способы чтения открытого файла в Python.
Существует несколько методов, которые могут быть вызваны для чтения открытого файла. read(size=-1), readline(size=-1), readlines()
Способы записи в открытый файл в Python.
Как и при чтении файлов, файловые объекты имеют несколько методов, которые полезны для записи в файл. fp.write(string), fp.writelines(sequence)
Одновременное чтение и запись в разные файлы в Python.
Есть моменты, когда вы можете захотеть прочитать файл и записать в другой файл одновременно.
Добавление данных в открытый файл в Python..
Иногда может понадобиться добавить данные в файл или начать запись в конце уже заполненного файла. Это легко сделать, используя символ ‘a’ для аргумента mode функции open():
Управление указателем чтения/записи в файле в Python.
Краткий обзор методов управления указателем чтения/записи в файле.
Создание менеджера для обработки файла в Python.
У менеджера контекста есть два «магических метода». __enter__() — вызывается при вызове оператора with. __exit__() вызывается при выходе из блока оператора with.
Сохранение словарей в формат JSON в Python.
Для сохранения сложных типов данных в файлы, Python позволяет использовать популярный формат обмена данными, называемый JSON. pickle — это протокол, который позволяет сериализовать произвольно сложные объекты Python.
Встроенные модули для работы с разными форматами в Python.
Есть общие ситуации, с которыми вы можете столкнуться при работе с файлами. Большинство из этих случаев могут быть обработаны с помощью других модулей и библиотек.
Как писать программы на Python
Интерактивный режим
Грубо говоря, интерпретатор выполняет команды построчно. Пишешь строку, нажимаешь Enter, интерпретатор выполняет ее, наблюдаешь результат.
Это удобно, когда изучаешь особенности языка или тестирует какую-нибудь небольшую часть кода. Ведь если работать на компилируемом языке, то пришлось бы сначала создать файл с кодом на исходном языке программирования, затем передать его компилятору, получить от него исполняемый файл и только потом выполнить программу и оценить результат. К счастью, даже в случае с компилируемыми языками все эти действия выполняет среда разработки, что упрощает жизнь программиста.
В операционных системах на базе ядра Linux можно программировать на Python в интерактивном режиме с помощью приложения «Терминал», в котором работает командная оболочка Bash. Здесь, чтобы запустить интерпретатор, надо выполнить команду .
Скорее всего запустится интерпретатор второй ветки Питона, что можно увидеть в первой информационной строке. В данном случае запустилась версия 2.7.12. Первое число «2» указывает на то, что это интерпретатор для языка программирования Python 2. Последняя строка с тремя угловыми скобками () – это приглашение для ввода команд. Поскольку в данном курсе будет использоваться язык Python 3, выйдем из интерпретатора с помощью команды (exit – выход). После чего выполним в терминале команду .
Есть вероятность, что пакет python3 может быть не установлен. Вам придется самостоятельно установить его.
Для операционных систем семейства Windows надо скачать интерпретатор с официального сайта языка (https://www.python.org/downloads/windows/). После установки он будет запускаться по ярлыку. Использовать командную оболочку здесь не требуется.
Возможности Python позволяют использовать его как калькулятор. Поскольку команды языка мы не изучали, это хороший способ протестировать интерактивный ввод команд.
Бывает, что в процессе ввода была допущена ошибка или требуется повторить ранее используемую команду. Чтобы заново не вводить строку, в консоли можно прокручивать историю команд, используя для этого стрелки вверх и вниз на клавиатуре. В среде IDLE (в Windows) для этого используются сочетания клавиш (скорее всего Alt+N и Alt+P).
Создание скриптов
Несмотря на удобства интерактивного режима, чаще всего необходимо сохранить исходный программный код для последующего выполнения и использования. В таком случае подготавливаются файлы, которые передаются затем интерпретатору на исполнение. Файлы с кодом на Python обычно имеют расширение .py.
Существует целый ряд сред разработки для Python, например, PyCharm. Однако на первое время подойдет текстовый редактор с подсветкой синтаксиса, например, Geany.
Здесь создается и сохраняется файл с кодом. Далее его можно запустить на выполнение через терминал. При этом сначала указывается интерпретатор (в данном случае ), потом имя файла (если файл находится в другом каталоге, то указывается с адресом, или надо перейти в этот каталог с помощью команды оболочки Bash).
Однако в Geany можно дополнительно установить встроенный терминал (), что упростит работу.
Наконец, в редакторе можно просто нажать F5, что отправит файл на исполнение (терминал откроется сам, после выполнения программы и нажатия Enter закроется).
В Windows подготовить файлы можно в той же среде IDLE. Для этого в меню следует выбрать команду File → New Window (Crtl + N), откроется чистое (без приглашения ) новое окно. Желательно сразу сохранить файл с расширением .py, чтобы появилась подсветка синтаксиса. После того как код будет подготовлен, снова сохраните файл. Запуск скрипта выполняется командой Run → Run Module (F5). После этого в окне интерактивного режима появится результат выполнения кода.
Практическая работа. Создание собственного модуля
Программист на Python всегда может создать собственный модуль, чтобы использовать его в нескольких своих программах или даже предоставить в пользование всему миру. В качестве тренировки создадим модуль с функциями для вычисления площадей прямоугольника, треугольника и круга:
from math import pi, pow def rectangle(a, b): return round(a * b, 2) def triangle(a, h): return round(0.5 * a * h, 2) def circle(r): return round(pi * pow(r, 2), 2)
Здесь также иллюстрируется принцип, что один модуль может импортировать другие. В данном случае импортируются функции из модуля math.
Поместите данный код в отдельный файл square.py. Однако куда поместить сам файл?
Когда интерпретатор Питона встречает команду импорта, то просматривает на наличие файла-модуля определенные каталоги. Их перечень можно увидеть по содержимому sys.path:
>>> import sys >>> sys.path ['', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/home/pl/.local/lib/python3.5/site-packages', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages']
Это список адресов в Linux. В Windows он будет несколько другим. Первый элемент – пустая строка, что обозначает текущий каталог, то есть то место, где сохранена сама программа, импортирующая модуль. Если вы сохраните файл-модуль и файл-программу в одном каталоге, то интерпретатор без труда найдет модуль.
Также модуль можно положить в любой другой из указанных в списке каталогов. Тогда он будет доступен для всех программ на Python, а также его можно будет импортировать в интерактивном режиме.
Можно добавить в sys.path свой каталог. Однако в этом случае либо код программы должен содержать команды изменения значения sys.path, либо надо править конфигурационный файл операционной системы. В большинстве случаев лучше так не делать.
Поместите файл square.py в тот же каталог, где будет исполняемая программа. Ее код должен включать инструкцию импорта модуля square (при импорте расширение файла не указывается) и вызов той функции и с теми параметрами, которые ввел пользователь. Т. е. у пользователя надо спросить, площадь какой фигуры он хочет вычислить. Далее запросить у него аргументы для соответствующей функции. Передать их в функцию из модуля square, а полученный оттуда результат вывести на экран.
Примечание. Исполнение модуля как самостоятельного скрипта, а также создание строк документации, которые отображает встроенная в Python функция help(), будут рассмотрены в курсе объектно-ориентированного программирования.
Старый способ — строковый оператор форматирования
Оператор % по отношению к строкам выполняет операцию форматирования и вставки таким образом, что объект, стоящий справа от него, встраивается согласно определенным правилам в строку слева от него:
Такой способ форматирования считается старым видимо потому, что заимствован из функции printf() языка C, а в Python кроме него появились более продвинутые средства форматирования вывода. Однако в ряде случаев использование оператора % бывает удобнее, чем использование строкового метода format().
Следует отметить, что форматируются строки, а не вывод. На вывод передается уже сформированная строка.
Как вывести вещественное число с необходимой точностью
Оператор деления возвращает вещественное число. Если количество знаков бесконечно, то Python выведет его в таком виде:
>>> 4 / 3 1.3333333333333333
Обычно требуется лишь определенное количество знаков. Для этого в строку записывают комбинацию символов, начинающуюся с %. Число после точки обозначает количество знаков после запятой. Символ f обозначает вещественный тип данных float.
>>> "%.4f" % (4/3) '1.3333'
Ставить скобки обязательно, иначе операция % выполняется раньше /:
>>> "%.4f" % 4/3 Traceback (most recent call last): File "<pyshell#1>", line 1, in <module> "%.4f" % 4/3 TypeError: unsupported operand type(s) for /: 'str' and 'int'
Оператор форматирования строк выполняет округление, а не урезание:
>>> "%.4f" % (1.33335) '1.3334' >>> "%.4f" % (1.33334) '1.3333'
С функцией print():
>>> print("Number %.4f" % (1.33334)) Number 1.3333 >>> print("%.4f, %.2f" % (1.33334, 153*0.43)) 1.3333, 65.79 >>> print("%f, %f" % (1.33334, 153*0.43)) 1.333340, 65.790000 >>> 153*0.43 65.78999999999999
Вывод символа по номеру
>>> "%c" % 121 'y' >>> "%c" % 189 '½' >>> "%c" % 255 'ÿ' >>> "%c" % 999 'ϧ' >>> "%c" % 32400 '纐'
Если вместо символа ‘c’ использовать ‘d’, будет вставлено само целое число.
Вывод данных в поля заданной ширины
Бывает данные на экран надо вывести не через один пробел, а в виде таблицы. Другими словами, в полях определенной ширина, где ширина измеряется в знакоместах.
Рассмотрим пример. Допустим надо вывести числа второй строки под числами первой. Если выполнить функцию print() так:
print(10, 235) print(1000, 50)
результат будет таким:
10 235 1000 50
Чтобы привести вывод к табличному виду, необходимо задать ширину поля:
print("%5d%7d" % (10, 235)) print("%5d%7d" % (1000, 50))
Результат:
10 235 1000 50
Здесь в кавычках указаны форматы данных и ширина полей. После знака % за кавычками указаны данные, которые будут подставлены вместо каждого указанного формата. Если количество форматов не совпадает с количеством данных, возникнет ошибка.
Форматы данных могут быть: d — целое число, s — строка, f — вещественное число, c — символ.
По умолчанию данные выравниваются по правому краю поля. Чтобы выровнять их по левому, достаточно поставить знак минус перед числом, обозначающим ширину поля. Пример:
print("%-5d%7d" % (10, 235)) print("%-5d%7d" % (1000, 50))
Вывод:
10 235 1000 50
А как сделать резервное копирование всех моих настроек?
Группирующие скобки (…) и match-объекты в питоне
Match-объекты
Метод | Описание | Пример |
---|---|---|
, | Подстрока, соответствующая шаблону | |
Индекс в исходной строке, начиная с которого идёт найденная подстрока | ||
Индекс в исходной строке, который следует сразу за найденной подстрока |
Группирующие скобки
Если в шаблоне регулярного выражения встречаются скобки без , то они становятся группирующими. В match-объекте, который возвращают , и , по каждой такой группе можно получить ту же информацию, что и по всему шаблону. А именно часть подстроки, которая соответствует , а также индексы начала и окончания в исходной строке. Достаточно часто это бывает полезно.
Тонкости со скобками и нумерацией групп.
Если к группирующим скобкам применён квантификатор (то есть указано число повторений), то подгруппа в match-объекте будет создана только для последнего соответствия. Например, если бы в примере выше квантификаторы были снаружи от скобок , то вывод был бы таким:
Внутри группирующих скобок могут быть и другие группирующие скобки. В этом случае их нумерация производится в соответствии с номером появления открывающей скобки с шаблоне.
Группы и
Если в шаблоне есть группирующие скобки, то вместо списка найденных подстрок будет возвращён список кортежей, в каждом из которых только соответствие каждой группе. Это не всегда происходит по плану, поэтому обычно нужно использовать негруппирующие скобки .
Группы и
Если в шаблоне нет группирующих скобок, то работает очень похожим образом на . А вот если группирующие скобки в шаблоне есть, то между каждыми разрезанными строками будут все соответствия каждой из подгрупп.
How to read and write in Python
Every program is eventually a data processor, so we should know how to input and output data within it. There exists a function, , to output data from any Python program.
To use it, pass a comma separated list of arguments
that you want to print to the function.
Let’s see an example. Press «run» and then «next» to see how the program
is being executed line by line:
None
print(5 + 10) print(3 * 7, (17 - 2) * 8) print(2 ** 16) # two stars are used for exponentiation (2 to the power of 16) print(37 / 3) # single forward slash is a division print(37 // 3) # double forward slash is an integer division # it returns only the quotient of the division (i.e. no remainder) print(37 % 3) # percent sign is a modulus operator # it gives the remainder of the left value divided by the right value
To input data into a program, we use . This function reads a single line of text, as a String.
Here’s a program that reads the user’s name and greets them:
John
print('What is your name?') name = input() # read a single line and store it in the variable "name" print('Hi ' + name + '!')
#3 Интерполяция строк / f-Строки (Python 3.6+)
Python 3.6 Добавил новый подход форматирования строк под названием форматированные строчные литералы, или “f-строки”. Этот новый способ форматирования строк позволяет вам использовать встроенные выражения Python внутрь строковых констант. Вот простой, наглядный пример:
Python
name = ‘Bob’
print(f’Hello, {name}!’)
# Вывод: ‘Hello, Bob!’
1 |
name=’Bob’ print(f’Hello, {name}!’) |
Как вы видите, это добавляет префикс к константе строки с буквой “f” — следовательно, названием становится “f-strings”. Этот новый синтаксис форматирования — очень мощный. Так как вы можете вставлять произвольные выражения Python, вы можете даже проводить встроенную арифметику. Посмотрим на пример:
Python
a = 5
b = 10
print(f’Five plus ten is {a + b} and not {2 * (a + b)}.’)
# Вывод: ‘Five plus ten is 15 and not 30.’
1 |
a=5 b=10 print(f’Five plus ten is {a + b} and not {2 * (a + b)}.’) |
Форматированные строчные литералы — это особенность парсера Python, которая конвертирует в серию строчных констант и выражений. Затем, они соединяются и составляют итоговую строку.
Представьте, что у вас есть следующая функция greet(), которая содержит :
Python
def greet(name, question):
return f»Hello, {name}! How’s it {question}?»
print(greet(‘Bob’, ‘going’))
# Вывод: «Hello, Bob! How’s it going?»
1 |
defgreet(name,question) returnf»Hello, {name}! How’s it {question}?» print(greet(‘Bob’,’going’)) |
Когда вы разбираете функцию, и смотрите, что происходит за кулисами, вы увидите, что f-строка в функции трансформируется в нечто, похожее на следующее:
Python
def greet(name, question):
return «Hello, » + name + «! How’s it » + question + «?»
1 |
defgreet(name,question) return»Hello, «+name+»! How’s it «+question+»?» |
Python
>>> import dis
>>> dis.dis(greet)
2 0 LOAD_CONST 1 (‘Hello, ‘)
2 LOAD_FAST 0 (name)
4 FORMAT_VALUE 0
6 LOAD_CONST 2 («! How’s it «)
8 LOAD_FAST 1 (question)
10 FORMAT_VALUE 0
12 LOAD_CONST 3 (‘?’)
14 BUILD_STRING 5
16 RETURN_VALUE
1 |
>>>importdis >>>dis.dis(greet) 2LOAD_CONST1(‘Hello, ‘) 2LOAD_FAST(name) 4FORMAT_VALUE 6LOAD_CONST2(«! How’s it «) 8LOAD_FAST1(question) 10FORMAT_VALUE 12LOAD_CONST3(‘?’) 14BUILD_STRING5 16RETURN_VALUE |
Строчные литералы также поддерживают существующий синтаксис формата строк метода str.format(). Это позволяет вам решать те же проблемы с форматированием, которые мы рассматривали в двух предыдущих разделах:
Python
print(f»Hey {name}, there’s a {errno:#x} error!»)
# Вывод: «Hey Bob, there’s a 0xbadc0ffee error!»
1 |
print(f»Hey {name}, there’s a {errno:#x} error!») |
Новые форматированные строчные литералы аналогичны шаблонным литералам (Template Literals) в JavaScript, которые были добавлены в ES2015. Я думаю это достаточно хорошее нововведение в Python, и я бы с радостью пользовался ими на каждодневной основе (в Python 3). Вы можете узнать больше о форматированных строчных литералах в интернете.
Практическая работа
В программировании можно из одной функции вызывать другую. Для иллюстрации этой возможности напишите программу по следующему описанию.
Основная ветка программы, не считая заголовков функций, состоит из одной строки кода. Это вызов функции test(). В ней запрашивается на ввод целое число. Если оно положительное, то вызывается функция positive(), тело которой содержит команду вывода на экран слова «Положительное». Если число отрицательное, то вызывается функция negative(), ее тело содержит выражение вывода на экран слова «Отрицательное».
Понятно, что вызов test() должен следовать после определения функций. Однако имеет ли значение порядок определения самих функций? То есть должны ли определения positive() и negative() предшествовать test() или могут следовать после него? Проверьте вашу гипотезу, поменяв объявления функций местами. Попробуйте объяснить результат.
Условный оператор
В языке python синтаксис обладает интересной особенностью: дело в том, что в коде нет операторных скобок ( или ); вместо них отступы указывают, какие операторы выполнять внутри той или иной конструкции.
Зачем отступы и где их ставить?
1 2 3 4 |
if x > : if x < 2: else: оператор |
Следует обратить внимания, что знак сравнения в Питоне записывается, как два знака :
1 2 3 4 5 6 |
if x < : блок1 elif x == : # сравнение! блок2 else: блок3 |
Другой пример использования условия:
1 2 3 4 5 6 |
if x < : print('мало') elif x == : print('средне') else: print('много') |
Сложные условия
- Использование двойных неравенств разрешено:
1 2 3 4 |
if < x < 2: if < y < 2: else: оператор |
Пример использования условия c :
1 2 3 4 5 6 |
if x < : print('мало') elif - <= x <= : print('средне') else: print('много') |
Кроме того, можно применять логический оператор (И):
if x >= 30 and x <= 40: ... |
Использование с оператором :
site = "my.ru" if "ru" in site: print("Условие выполнено!") # Условие выполнено! |
Кроме того, можно применять логический оператор (ИЛИ):
site = "my.ru" if "my" in site or site.endswith(".ru"): # заканчивается на ... print("Условие выполнено!") |
Аналог тернарного оператора:
uchenik_1 = 5 uchenik_2 = 2 otlichnik = "первый ученик" if uchenik_1 > uchenik_1 else "второй ученик" print(otlichnik) # первый ученик |
Задание Python 1_6: Запрашивается количество часов и заработок в час. Рассчитать зарплату. Если работник работал более 40 часов, — то зарплата умножается на коэффициент 1,5. Оформить в формате дружелюбного интерфейса.
Пример: Дан год. Определить високосный ли год или нет? Вывести или (логическое значение).Указания: Год является високосным если он кратен 4, но при этом не кратен 100, либо кратен 400.
Решение:
year = 2017 is_true = year % 4 == and (year % 100 != or year % 400 == ) print(is_true) |
Задание Python 1_7: Напишите программу, которая определяет, верно ли, что введённое число – четырёхзначное. Вывести или (логическое значение).
Задание Python 1_8: Напишите программу, которая вводит с клавиатуры номер месяца и определяет, сколько дней в этом месяце. Предусмотреть сообщение об ошибке в случае ввода неверного числа.
! Решения заданий можно попросить у администратора, выслав письмо с запросом на электронный адрес (внизу веб-страницы). В письме укажите Ваши ФИО, город, должность (учитель/ученик/студент). Укажите, занимаетесь ли самостоятельно и номер урока, решения которого необходимо выслать.