Основы работы с файлами в python

Доступ к элементам

Мы можем получить доступ к элементам списка с помощью index. Значение индекса начинается с 0.

>>> vowels_list = 
>>> vowels_list
'a'
>>> vowels_list
'u'

Если индекс не входит в диапазон, возникает IndexError.

>>> vowels_list
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> 

Мы также можем передать отрицательное значение индекса. В этом случае элемент возвращается от конца к началу. Допустимый диапазон значений индекса — от -1 до — (длина).

Это полезно, когда нам нужен определенный элемент быстро, например, последний элемент, второй последний элемент и т. д.

>>> vowels_list = 
>>> vowels_list  # last element
'u'
>>> vowels_list  # second last element
'e'
>>> vowels_list
'a'

Как объявить переменную в Python?

Python — это язык с динамической типизацией. Нам не нужно указывать тип переменной при ее объявлении. Переменная определяется знаком равенства. Левая часть содержит имя переменной, а правая часть — значение.

Давайте посмотрим на несколько примеров объявления.

x = 1  # number
s = "Hello"  # string
t = (1, 2)  # tuple
l =   # list
d = {"1": "A", "2": "B"}  # dictionary

Python также поддерживает множественное назначение. Мы можем определить несколько переменных одновременно, используя множественное присваивание.

a = b = c = 100
print(a, b, c)  # 100 100 100

Мы также можем присвоить последовательность списку переменных. В этом случае количество элементов в последовательности должно быть равно количеству переменных.

a, b, c = 1, 2, "Hello"
print(a, b, c)  # 1 2 Hello

a, b, c = (1, 2, 3)
print(a, b, c)  # 1 2 3

a, b, c = 
print(a, b, c)  # 1 2 3

a, b, c = "098"
print(a, b, c)  # 0 9 8

Посмотрим, что произойдет, если количество переменных и количество элементов в последовательности не равны.

>>> a,b = (1,2,3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)
>>> 
>>> a,b,c,d = (1,2,3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: not enough values to unpack (expected 4, got 3)
>>> 

Python для систем счисления

  • bin(y) — целое число преобразовывается в двоичную строку.
  • hex(y) — целое число преобразовывается в шестнадцатеричную строку.
  • oct(y) — целое число преобразовывается в восьмеричную строку.

Рассмотрим примеры работы с системами счисления:

bin(17) # '0b10001'
oct(17) # '0o21'
hex(17) # '0x11'

Задание Python 1_2: Даны две переменные. Запросить их значение. Выполнить основные арифметические действия с переменными, целочисленное деление, возведение в квадрат. Осуществить перевод в системы счисления (в 8-ю и 16-ю). Вывести результат.

Задание Python 1_3: Найти длину окружности L и площадь круга S заданного радиуса R:

L=2*pi*R, S=pi*R2.

В качестве значения использовать 3.14.

* Из задачника М. Э. Абрамян

Задание Python 1_4: Даны три точки A, B, C на числовой оси. Найти длины отрезков AC и BC и их сумму.
* Из задачника М. Э. Абрамян

Пример: Дано двузначное число. Найти сумму и произведение его цифр.
* Из задачника М. Э. Абрамян

Решение:

import math
print('Введите двузначное число: ')
A = int(input())
Res = (A // 10) + math.fmod(A, 10)
print('Сумма его цифр равна: ', int(Res))
Res = (A // 10) * math.fmod(A, 10)
print('Произведение его цифр равно: ', int(Res))

Задание Python 1_5: Дано двухзначное целое число. Вывести сначала его правую цифру, а затем левую.

** Сделайте задание повышенной сложности: необходимо поменять местами цифры числа и вывести результирующее число (вывести не отдельные цифры, а именно число). Например, число , а результат — число .

* Из задачника М. Э. Абрамян

sys.stderr

Это похоже на потому что он также непосредственно выводит в консоль. Но разница в том, что он печатает только сообщения об исключениях и ошибках. (Вот почему он называется стандартной ошибкой).

Проиллюстрируем это на примере.

import sys

stdout_fileno = sys.stdout
stderr_fileno = sys.stderr

sample_input = 

for ip in sample_input:
    # Prints to stdout
    stdout_fileno.write(ip + '\n')
    # Tries to add an Integer with string. Raises an exception
    try:
        ip = ip + 100
    # Catch all exceptions
    except:
        stderr_fileno.write('Exception Occurred!\n')

Выход

Hi
Exception Occurred!
Hello from AskPython
Exception Occurred!
exit
Exception Occurred!

Как вы можете заметить, для всех входных строк мы пытаемся добавить к Integer, что вызовет исключение. Мы перехватываем все такие исключения и печатаем еще одно сообщение отладки с помощью .

Функция filter

Следующая
аналогичная функция – это filter. Само ее название говорит, что
она возвращает элементы, для которых, переданная ей функция возвращает True:

filter(func, *iterables)

Предположим, у
нас есть список

a=1,2,3,4,5,6,7,8,9,10

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

def odd(x):
    return x%2

И далее, вызов
функции filter:

b = filter(odd, a)
print(b)

На выходе
получаем итератор, который можно перебрать так:

print( next(b) )
print( next(b) )
print( next(b) )
print( next(b) )

Или, с помощью
цикла:

for x in b:
    print(x, end=" ")

Или же
преобразовать итератор в список:

b = list(filter(odd, a))
print(b)

Конечно, в
качестве функции здесь можно указывать лямбда-функцию и в нашем случае ее можно
записать так:

b = list(filter(lambda x: x%2, a))

И это бывает гораздо
удобнее, чем объявлять новую функцию.

Функцию filter можно применять
с любыми типами данных, например, строками. Пусть у нас имеется вот такой
кортеж:

lst = ("Москва", "Рязань1", "Смоленск", "Тверь2", "Томск")
b = filter(str.isalpha, lst)
 
for x in b:
    print(x, end=" ")

и мы вызываем
метод строк isalpha, который
возвращает True, если в строке
только буквенные символы. В результате в консоли увидим:

Москва Смоленск
Тверь Томск

Чтение из файла

При открытии файла в режимах, допускающих чтение, можно использовать несколько подходов.

Для начала можно прочитать файл целиком и все данные, находящиеся в нем, записать в одну строку.

Используя эту функцию с целочисленным аргументом, можно прочитать определенное количество символов.

При этом будут получены только первые 16 символов текста

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

Другой способ заключается в считывании файла построчно. Метод считывает строку и, также как и с методом , сдвигает курсор — только теперь уже на целую строку. Применение этого метода несколько раз будет приводить к считыванию нескольких строк. Схожий с этим способом, другой метод позволяет прочитать файл целиком, но по строкам, записав их в список. Этот список можно использовать, например, в качестве итерируемого объекта в цикле.

Однако и здесь существует более pythonic way. Он заключается в том, что сам объект имеет итератор, возвращающий строку за строкой. Благодаря этому нет необходимости считывать файл целиком, сохраняя его в список, а можно динамически по строкам считывать файл. И делать это лаконично.

Переменные, объекты и ссылки

Для понимания работы переменных, необходимо разобрать, что происходит, когда вы создаете новую переменную и присваиваете ей значение?

В данном примере происходит следующее:

  1. создается объект типа со значение ;
  2. создается переменная ;
  3. в переменной сохранится адрес (ссылка) на объект;

a = 100, создается новый объект, а переменная «a» получает его адрес.

Важно: переменная в Python не хранит значение напрямую – она хранит лишь ссылку на объект

Теперь посмотрим что произойдет, если одной переменой присвоить другую переменную:

В данном примере Python не создает новый объект – он просто создает переменную, которая ссылается на тот же объект, что и переменная .

b = a, переменная «b» ссылается на тот же объект, что и переменная «a».

Предположим, что в какой-то момент вы захотели поменять значение переменной

В данном примере Python создал новый объект типа int, и теперь переменная b ссылается на новый объект.

b = 500, переменная «b» ссылается на новый объект с другим адресом.

Рассмотрим еще один пример:

В этом примере создается новый объект типа , и переменная ссылается на новый объект.

b = «tree», переменная b теперь ссылается на новый объект строкового типа

На объект типа со значением больше никто не ссылается. Следовательно, он больше не доступен и будет удален сборщиком мусора (тем самым освободим немного памяти).

8 ответов

Лучший ответ

Нет, обычный способ —

В вашем случае вы можете использовать , если хотите, чтобы они были целыми числами, а не строками

Не используйте для этого. Посмотрим, что произойдет, если пользователь вводит

29

John La Rooy
19 Окт 2009 в 11:02

Вы можете использовать этот метод для ввода входных данных в одну строку

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

Чтобы воспринимать входные данные как строку, используйте str вместо int .

И взять список в качестве входных данных

Amber Bhanarkar
19 Янв 2020 в 13:38

Или ты можешь сделать это

Tunaki
27 Янв 2016 в 12:09

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

1

Bart Van Loon
19 Окт 2017 в 22:23

Вы можете прочитать 2 значения типа int, используя это в python 3.6.1

1

Sai Gopi Me
29 Авг 2017 в 01:43

Сначала прочитайте всю строку в строку вроде

Затем используйте цикл for, как это

Этот цикл принимает полную строку в качестве входных данных для строки и обрабатывает отдельные части в ней, а затем добавляет числа в список — после преобразования их в целые числа.

1

Pinkoo
28 Фев 2015 в 05:18

Я новичок в этом деле. Сделал небольшое исследование с сайта python.org и немного взломал, чтобы заставить это работать. Функция raw_input снова вернулась, вместо input . Вот что я придумал:

Конечно, код не такой элегантный, как однострочные, использующие scanf в C или cin в C ++. Код Python ближе к Java (который использует совершенно другой механизм, чем C, C ++ или Python), так что каждая переменная должна рассматриваться отдельно.

В Python функция raw_input получает символы с консоли и объединяет их в одну строку в качестве выходных данных. Когда в левой части оператора присваивания находится только одна переменная, функция split разбивает эту строку на список из String .

В нашем случае, когда мы ожидаем две переменные, мы можем получить значения в них, используя разделенный запятыми список их идентификаторов. Значения String затем присваиваются перечисленным переменным. Если мы хотим выполнить арифметику с этими значениями, нам нужно преобразовать их в числовой тип данных int (или float ), используя встроенный в Python int Функция strong> или float .

Я знаю, что эта публикация является ответом на очень старую публикацию, и, возможно, знания уже давно стали «общеизвестными». Тем не менее, я был бы признателен за публикацию, подобную этой, а не за то, что мне пришлось потратить несколько часов на поиск и взлом, пока я не придумал, как мне казалось, самое элегантное решение, которое можно представить в классе CS1.

5

Professor Richard
2 Янв 2015 в 21:58

Вы также можете прочитать из sys.stdin

10

MAK
19 Окт 2009 в 18:04

Ввод данных. Функция input()

За ввод в программу данных с клавиатуры в Python отвечает функция . Когда вызывается эта функция, программа останавливает свое выполнение и ждет, когда пользователь введет текст. После этого, когда он нажмет Enter, функция заберет введенный текст и передаст его программе, которая уже будет обрабатывать его согласно своим алгоритмам.

Если в интерактивном режиме ввести команду , то ничего интересного вы не увидите. Компьютер будет ждать, когда вы что-нибудь введете и нажмете Enter или просто нажмете Enter. Если вы что-то ввели, это сразу же отобразиться на экране:

>>> input()
Yes!
'Yes!'

Функция передает введенные данные в программу. Их можно присвоить переменной. В этом случае интерпретатор не выводит строку сразу же:

>>> answer = input()
No, it is not.

В данном случае строка сохраняется в переменной answer, и при желании мы можем вывести ее значение на экран:

>>> answer
'No, it is not.'

При использовании функции кавычки в выводе опускаются:

>>> print(answer)
No, it is not.

Куда интересней использовать функцию в скриптах – файлах с кодом. Рассмотрим такую программу:

При запуске программы, компьютер ждет, когда будет введена сначала одна строка, потом вторая. Они будут присвоены переменным nameUser и cityUser. После этого значения этих переменных выводятся на экран с помощью форматированного вывода.

Вышеприведенный скрипт далек от совершенства. Откуда пользователю знать, что хочет от него программа? Чтобы не вводить человека в замешательство, для функции предусмотрен специальный параметр-приглашение. Это приглашение выводится на экран при вызове . Усовершенствованная программа может выглядеть так:

Обратите внимание, что в программу поступает строка. Даже если ввести число, функция все равно вернет его строковое представление

Но что делать, если надо получить число? Ответ: использовать функции преобразования типов.

В данном случае с помощью функций и строковые значения переменных qtyOranges и priceOrange преобразуются соответственно в целое число и вещественное число. После этого новые численные значения присваиваются тем же переменным.

Программный код можно сократить, если преобразование типов выполнить в тех же строках кода, где вызывается функция :

qtyOranges = int(input("Сколько апельсинов? "))
priceOrange = float(input("Цена одного? "))
 
sumOranges = qtyOranges * priceOrange
 
print("Заплатите", sumOranges, "руб.")

Сначала выполняется функция . Она возвращает строку, которую функция или сразу преобразует в число. Только после этого происходит присваивание переменной, то есть она сразу получает численное значение.

Схема 16 цветов в Python

16-цветовая схема состоит из двух наборов по 8 цветов в каждом (8 фонов и 8 передних планов), и они могут быть отображены в терминале с помощью следующего синтаксиса:

Давайте проверим эту схему, напечатав цветной узор с красным жирным текстом и желтым фоном. Код стиля для представления полужирного текста равен 2. Цветовые коды для красного текста переднего плана-31 и 43 для желтого фона.

Итак, чтобы получить этот макет, пишем:

Выполните приведенную выше команду в вашем интерпретаторе Python (или в файле).

Вы увидите следующий вывод:

Как видно, наш текст перетекает на следующую строчку. Нам нужна точка сброса, чтобы остановить печать цветов.

Это можно сделать, добавив \033[0;0m к строке следующим образом:

Код \033[0;0m представляет собой шаблон сброса, который возвращает терминал обратно в исходную цветовую схему.

Это обеспечит следующий результат:

Согласитесь, выглядит намного лучше!

Вызов функции

Рассмотрим полную версию программы с функцией:

def countFood():
    a = int(input())
    b = int(input())
    print("Всего", a+b, "шт.")
 
print("Сколько бананов и ананасов для обезьян?")
countFood()
 
print("Сколько жуков и червей для ежей?")
countFood()
 
print("Сколько рыб и моллюсков для выдр?")
countFood()

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

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

В языке Python определение функции должно предшествовать ее вызовам. Это связано с тем, что интерпретатор читает код строка за строкой и о том, что находится ниже по течению, ему еще неизвестно. Поэтому если вызов функции предшествует ее определению, то возникает ошибка (выбрасывается исключение ):

print("Сколько бананов и ананасов для обезьян?")
countFood()
 
print("Сколько жуков и червей для ежей?")
countFood()
 
print("Сколько рыб и моллюсков для выдр?")
countFood()
 
def countFood():
    a = int(input())
    b = int(input())
    print("Всего", a+b, "шт.")

Результат:

Сколько бананов и ананасов для обезьян?
Traceback (most recent call last):
  File "test.py", line 2, in <module>
    countFood()
NameError: name 'countFood' is not defined

Для многих компилируемых языков это не обязательное условие. Там можно определять и вызывать функцию в произвольных местах программы. Однако для удобочитаемости кода программисты даже в этом случае предпочитают соблюдать определенные правила.

Функция zip

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

a = 1,2,3,4
b = 5,6,7,8

И вызывая для
них функцию zip:

it = zip(a, b)
print(it)

Получим
итератор, который возвращает следующую коллекцию:

print( list(it ) )

и мы увидим:

То есть, у нас
были объединены в кортеж соответствующие элементы этих двух списков.

Давайте теперь
добавим еще один итерируемый объект – строку:

c = "abracadabra"

И вызовем
функцию zip для всех этих
трех объектов:

it = zip(a, b, c)
print( list(it ) )

В результате
получим коллекцию:

Смотрите, мы
здесь имеем всего четыре кортежа, в каждом из которых по три элемента. То есть,
все оставшиеся символы строки «abracadabra» были
просто отброшены. Получается, что функция zip формирует
выходной список, длина которого равна длине наименьшей из указанных коллекций.
Если, например, мы уменьшим коллекцию a до двух
элементов:

a = 1,2

то на выходе также
получим список из двух элементов:

Вот в этом и
заключается удобство этой функции: она позволяет автоматически объединить
несколько списков в наборы кортежей из соответствующих значений.

Следующие
задания для самостоятельного решения не связаны с материалом этого урока, а
охватывают все предыдущие занятия. Попробуйте реализовать их на Python и проверить
свои знания.

Возвращает тип объекта и является собственным метаклассом языка Python.

Параметры:

  • — объект, тип которого определяется
  • — имя для создаваемого типа
  • — кортеж с родительскими классами
  • — словарь, будет являться пространством имён для тела класса

Возвращаемое значение:

  • тип объекта, при ,
  • объект нового типа при .

Вызов класса с одним аргументом:

Класс с одним аргументом возвращает тип объекта. Возвращаемое значение — это как правило, тот же объект, что и возвращаемый .

Рекомендуется для проверки типа объекта использовать встроенную функцию , так как она принимает во внимание подклассы

Примеры использования класса при вызове с одним аргументом.

>>> x = 1
>>> type(x)
# <class 'int'>

>>> x = 1, 2, 3
>>> type(x)
# <class 'list'>

# проверка типа объекта
>>> x = 1
>>> isinstance(x, int)
# True
>>> x = 1, 2, 3
>>> isinstance(x, list)
# True

Вызов класса с тремя аргументами:

Класс с тремя аргументами вернет объект нового типа. Это по сути динамическая форма инструкции , ее еще называют метакласс.

Другими словами класс , вызванный с тремя аргументами на самом деле является метаклассом! Класс это метакласс, который Python внутренне использует для создания всех классов.

Все, с чем имеем дело в Python, является объектом. Сюда входят функции и классы целые числа, строки и т.д. Все они объекты. И все они созданы из класса.

# type - это тип всех типов, для 
# которых не указан явно иной метакласс
>>> type(type)
# <class 'type'>
>>> type(object)
# <class 'type'>
>>> type(list)
# <class 'type'>
>>> type(int)
# <class 'type'>
>>> class Bar(object): pass
>>> type(Bar)
# <class 'type'>

В общем — это класс всех классов в языке Python и является собственным метаклассом. Класс нельзя воспроизвести на чистом Python.

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

Понятия класс и тип по сути являются синонимами. Пользовательские типы данных могут быть сконструированы налету, во время исполнения, при помощи вызова с тремя аргументами или определены в коде, например при помощи инструкции .

Важно понимать, что тип, как и другие сущности в Python, тоже является объектом. Изменено в Python 3.6: подклассы, которые не переопределяют, больше не могут использовать форму с одним аргументом для получения типа объекта

Изменено в Python 3.6: подклассы, которые не переопределяют, больше не могут использовать форму с одним аргументом для получения типа объекта.

Так же смотрите раздел «Определение метаклассов metaclass в Python».

Решение задач

1. Поэкспериментируйте с переводом в различные типы данных

2. Пользователь вводит свое имя и фамилию. Выведите:

Hello, имя фамилия
# На месте слов с % должны быть введенные данные

3. Посчитайте сумму трех введенных целых чисел

4. Посчитайте сумму трех введенных дробных чисел. Подумайте в какой тип данных нужно преобразовать значение, возвращенное функцией input

5. Дано число, выведите предыдущее и следущее за ним числа в таком формате:

# Число равно 10

Число предшествующее числу 10 равно 9

Число следующее за числом 10 равно 11

6. Вводятся имя и возраст. Выведите, где введенное имя = Максим, а возраст = 20

Привет, Максим! Ваш возраст равен 20!

Операторы присваивания Python

Оператор «=» присваивает значение, расположенное справа, переменной слева. Например, v = 23 присваивает значение числа 23 переменной v.

В программировании часто используют составные операторы присваивания. Они соединяют арифметический оператор с оператором «=». Поэтому для сложения мы используем оператор «+» с оператором «=», чтобы получить составной оператор «+=». Пример:

w = 5
w += 1
print(w)

Вывод

6

Сначала мы задаём переменной  значение . Затем используем составной оператор присваивания , чтобы прибавить число справа, к переменной, расположенной слева, и присвоить результат переменной .

Составные операторы присваивания часто используются в циклах for:

for x in range (0, 7):
    x *= 2
    print(x)

Вывод

0
2
4
6
8
10
12

При помощи for можно автоматизировать процесс использования оператора «. Он умножает переменную на число , а затем присваивает полученный результат переменной  для следующей итерации цикла.

В Python предусмотрен составной оператор присваивания для каждой арифметической операции:

y += 1          # добавить число и присвоить результат
y -= 1          # отнять число и присвоить результат
y *= 2          # умножить на число и присвоить результат
y /= 3          # разделить на число и присвоить результат
y // = 5        # разделить без остатка на число и присвоить результат
y **= 2         # возвести в степень и присвоить результат
y %= 3          # вернуть остаток от деления и присвоить результат

Составные операторы присваивания полезны в тех случаях, когда переменная должна увеличиваться или уменьшаться с помощью инкремента. А также когда необходимо автоматизировать некоторый процесс в создаваемой программе.

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

  • ;
  • ;
  • .

Общие примеры использования функции .

>>> 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.

$ python3 test.py
>>> a = 3
>>> b = '1'           
>>> a + b
Exception in user code:
------------------------------------------------------------
Traceback (most recent call last):
  File "tt.py", line 6, in run_user_code
    exec(source, envdir)
  File "<string>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
------------------------------------------------------------

Вывод данных. Функция print()

Что такое функция в программировании, узнаем позже. Пока будем считать, что – это такая команда языка Python, которая выводит то, что в ее скобках на экран.

>>> print(1032)
1032
>>> print(2.34)
2.34
>>> print("Hello")
Hello

В скобках могут быть любые типы данных. Кроме того, количество данных может быть различным:

>>> print("a:", 1)
a: 1
>>> one = 1
>>> two = 2
>>> three = 3
>>> print(one, two, three)
1 2 3

Можно передавать в функцию как непосредственно литералы (в данном случае «a:» и 1), так и переменные, вместо которых будут выведены их значения. Аргументы функции (то, что в скобках), разделяются между собой запятыми. В выводе вместо запятых значения разделены пробелом.

Если в скобках стоит выражение, то сначала оно выполняется, после чего уже выводит результат данного выражения:

>>> print("hello" + " " + "world")
hello world
>>> print(10 - 2.5/2)
8.75

В предусмотрены дополнительные параметры. Например, через параметр можно указать отличный от пробела разделитель строк:

>>> print("Mon", "Tue", "Wed", "Thu",
... "Fri", "Sat", "Sun", sep="-")
Mon-Tue-Wed-Thu-Fri-Sat-Sun
>>> print(1, 2, 3, sep="//")
1//2//3

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

>>> print(10, end="")
10>>>

Обычно используется не в интерактивном режиме, а в скриптах, когда несколько выводов подряд надо разделить не переходом на новую строку, а, скажем, запятыми. Сам переход на новую строку обозначается символом ‘\n’. Если присвоить это значение параметру , то никаких изменений в работе функции вы не увидите, так как это значение и так присвоено по-умолчанию:

>>> print(10, end='\n')
10
>>>

Однако, если надо отступить на одну дополнительную строку после вывода, то можно сделать так:

>>> print(10, end='\n\n')
10

>>>

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

Форматирование может выполняться в так называемом старом стиле или с помощью строкового метода . Старый стиль также называют Си-стилем, так как он схож с тем, как происходит вывод на экран в языке C. Рассмотрим пример:

>>> pupil = "Ben"
>>> old = 16
>>> grade = 9.2
>>> print("It's %s, %d. Level: %f" %
... (pupil, old, grade))
It's Ben, 16. Level: 9.200000

Здесь вместо трех комбинаций символов , , подставляются значения переменных pupil, old, grade. Буквы , , обозначают типы данных – строку, целое число, вещественное число. Если бы требовалось подставить три строки, то во всех случаях использовалось бы сочетание .

Хотя в качестве значения переменной grade было указано число 9.2, на экран оно вывелось с дополнительными нулями. Однако мы можем указать, сколько требуется знаков после запятой, записав перед буквой точку с желаемым числом знаков в дробной части:

>>> print("It's %s, %d. Level: %.1f"
...  % (pupil, old, grade))
It's Ben, 16. Level: 9.2

Теперь посмотрим на метод :

>>> print("This is a {0}. It's {1}."
... .format("ball", "red"))
This is a ball. It's red.
>>> print("This is a {0}. It's {1}."
... .format("cat", "white"))
This is a cat. It's white.
>>> print("This is a {0}. It's {1} {2}."
... .format(1, "a", "number"))
This is a 1. It's a number.

В строке в фигурных скобках указаны номера данных, которые будут сюда подставлены. Далее к строке применяется метод . В его скобках указываются сами данные (можно использовать переменные). На нулевое место подставится первый аргумент метода , на место с номером 1 – второй и т. д.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector