Skip to content

Latest commit

 

History

History
385 lines (301 loc) · 22.3 KB

python_guide_2.md

File metadata and controls

385 lines (301 loc) · 22.3 KB

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

Типы данных

Каждая переменная в Python — объект с определенным типом данных. Тип данных — это класс, а переменные являются экземплярами (объектами) этих классов.

Рассмотрим часто используемые типы данных

Название Описание Неизменяемый ?
none неопределенное значение переменной
bool логический (булев) тип Да
int целочисленное значение Да
float число с плавающей точкой Да
complex комплексное число Да
list список
tuple кортеж Да
range диапазон
str строки Да
dict словарь

Прежде чем рассмотреть данные типы данных введем некоторые понятия.

Все объекты в Python могут быть либо изменяемыми (mutable), либо неизменяемыми (immutable). Неизменяемые объекты обладают замечательным свойством: они не могут измениться в результате работы программы. Если некоторая переменная «смотрит» на неизменяемый объект, то можно быть уверенным, что её значение не поменяется, если только ей не присвоить ссылку на другой объект. Например:

my_yuple = (10, 20, 30)
print(my_yuple)
(10, 20, 30)
my_yuple = (10, 20, 30)
my_yuple[0] = 40
print(my_yuple)
(10, 20, 30)
TypeError: 'tuple' object does not support item assignment

Изменяемые объекты не обладают таким постоянством. Они скорее напоминают контейнер для хранения: контейнер остаётся на месте, а вот содержимое может сильно измениться. Пример:

my_list = [10, 20, 30]
print(my_list)
[10, 20, 30]
my_list = [10, 20, 30]
my_list[0] = 40
print(my_list)
[40, 20, 30]

Теперь рассмотрим типы, приведенные выше более подробно

bool

Тип данных bool может принимать значения True (истина) и False (ложь). Его возвращают логические операторы (например сравнение чисел или проверка присутствия элемента в списке), и именно этот тип обычно используется в if и while.

    >>>a=True
    >>if a:
    ...print(a)
    True

int

int - целочисленный знаковый тип данных

>>>a = 3
>>>b = -3

Существует так же встроенная функция int(), которая возвращает целое число (экземпляр класса int) в десятичной системе счисления.

>>> int('4')
4

Для типа данных int существует несколько методов класса, такие как:

  • int.bit_length() -возвращает количество битов, необходимых для представления целого числа в двоичном виде, исключая знак и начальные нули
  • int.bit_count() - возвращает количество единиц в двоичном представлении абсолютного значения целого числа
  • int.to_bytes() - возвращает массив байтов, представляющий целое число
  • int.as_integer_ratio() - возвращает пару целых чисел, отношение которых точно равно исходному целому числу и с положительным знаменателем

Более подробную информацию о этих методах и примеры их выполнения можно посмотреть по ссылке: https://docs.python.org/3/library/stdtypes.html#additional-methods-on-integer-types

float

float - число с плавающей точкой

>>>a=3.9
>>>b=-2.4

Существует так же встроенная функция float(), которая возвращает число с плавающей точкой в десятичной системе счисления.

>>> float(4)
4.0
>>>float('4.3')
4.3

Для типа данных float существует несколько методов класса, такие как:

  • float.as_integer_ratio() - возвращает пару целых чисел, отношение которых точно равно исходному вещественному числу с положительным знаменателем
  • float.is_integer() - возвращает True, если экземпляр с плавающей запятой конечен и в False в противном случае
  • float.hex() - возвращает представление числа с плавающей запятой в виде шестнадцатеричной строки
  • classmethod float.fromhex(s) - метод класса для возврата числа с плавающей запятой, представленного шестнадцатеричной строкой s

Более подробную информацию о этих методах и примеры их выполнения можно посмотреть по ссылке: https://docs.python.org/3/library/stdtypes.html#additional-methods-on-float

complex

complex - число в комплексной форме

>>> c = 1+2j
>>> c
(1+2j)

Существует так же встроенная функция complex(), которая возвращает число в комплексной форме

>>> complex(1.5)
1.5 + 0j

range, tuple, list

range

Тип range (диапазон) является встроенной разновидностью данных, которая предназначена для хранения информации об арифметической прогрессии целых чисел. Для ее генерации используется одноименная функция range с тремя различными параметрами.

Задается диапазон чисел от 1 до 5 с шагом 2, на консоли отобразятся значения 1,2,4

 >>>for it in range(1, 5, 2):
 >>>it
 1 2 4

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

tuple

Кортежи (tuple) – это те же списки за одним исключением. Кортежи неизменяемые структуры данных. Так же как списки они могут состоять из элементов разных типов, перечисленных через запятую. Кортежи заключаются в круглые, а не квадратные скобки

Задается кортеж из строки, каждая его буква будет являтся элементом кортежа

>>> a = tuple('hello, world!')
>>> a
('h', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!')

list

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

Задается список из элементов, которые могут быть разных типов и размеров

>>> l = ['s', 'p', ['isok'], 2]
>>> l
['s', 'p', ['isok'], 2]

Более подробно о методах списка, кортежа и диапазона можно посмотреть по ссылке https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range, так же данная тема будет затрагиваться в следующих туториалах.

str

Тип 'str' - текстовые строки представляют собой неизменяемые последовательности Юникода.

>>>a="abc"

Текстовые данные в Python обрабатываются с помощью встроенного класса str().

>>>str(4)
'4'

Для типа данных str существует множество методов класса, рассмотрим некоторые из них:

  • str.capitalize() - возвращает копию строки с первым символом, набранным заглавными буквами, и остальными строчными буквами
  • str.casefold() - возвращает свернутую копию строки. Строки с регистром могут использоваться для безрегистрового сопоставления
  • str.count(sub[, start[, end]]) - возвращает количество непересекающихся вхождений подстроки sub в диапазоне [ начало , конец ]
  • str.encode(encoding='utf-8', errors='strict') - возвращает закодированную версию строки в виде объекта bytes. Кодировка по умолчанию 'utf-8'.
  • str.find(sub[, start[, end]]) - возвращает наименьший индекс в строке, где подстрока найдена в срезе s[start:end].
  • str.format(*args, **kwargs) - строка, для которой вызывается этот метод, может содержать буквенный текст или поля замены, разделенные фигурными скобками {}. Каждое поле замены содержит либо числовой индекс позиционного аргумента, либо имя ключевого аргумента. Возвращает копию строки, в которой каждое поле замены заменяется строковым значением соответствующего аргумента.
  • str.islower() - возвращает True, если все символы в строке в нижнем регистре, False противном случае.
  • str.isupper() - возвращает True, если все символы в строке в верхнем регистре, False противном случае.
  • str.replace(old, new[, count]) - возвращает копию строки, в которой все вхождения подстроки old заменены на new
  • str.split(sep=None, maxsplit=- 1) - возвращает список слов в строке, используя sep в качестве строки-разделителя.

Более подробно о методах str можно посмотреть по ссылке https://docs.python.org/3/library/stdtypes.html#text-sequence-type-str

dict

Словари - неупорядоченные коллекции произвольных объектов с доступом по ключу. Их иногда ещё называют ассоциативными массивами или хеш-таблицами.

>>> d = dict(short='dict', long='dictionary')
>>> d
{'short': 'dict', 'long': 'dictionary'}

Для типа данных dict существует множество методов класса, рассмотрим некоторые из них:

  • dict.clear() - очищает словарь.
  • dict.copy() - возвращает копию словаря.
  • classmethod dict.fromkeys(seq[, value]) - создает словарь с ключами из seq и значением value (по умолчанию None).
  • dict.get(key[, default]) - возвращает значение ключа, но если его нет возвращает default
  • dict.items() - возвращает пары (ключ, значение).
  • dict.keys() - возвращает ключи в словаре.
  • dict.pop(key[, default]) - удаляет ключ и возвращает значение. Если ключа нет, возвращает default
  • dict.popitem() - удаляет и возвращает пару (ключ, значение). Если словарь пуст, бросает исключение KeyError
  • dict.setdefault(key[, default]) - возвращает значение ключа, но если его нет, не бросает исключение, а создает ключ со значением default
  • dict.update([other]) - обновляет словарь, добавляя пары (ключ, значение) из other. Существующие ключи перезаписываются
  • dict.values() - возвращает значения в словаре

Более подробно о методах dict можно посмотреть по ссылке https://docs.python.org/3/library/stdtypes.html#dictionary-view-objects

Операторы в Python

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

Арифметические операторы

Название Символ
Сложение +
Вычитание -
Умножение *
Деление /
Деление без остатка //
Возведение в степень **
Второй вариант возведения числа х в степень у pow(x,y)
Остаток от деления %
Абсолютное значение abs(x)

Примеры выполнения действий с операторами

>>> 3+4
7  
>>> 3-4
-1
>>> 3*4
12 
>>> 3/4
0.75 
>>> 4//3
1
>>> 3**4
81
>>> 3%4
3

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

Название Символ
Меньше <
Больше >
Меньше или равно <=
Больше или равно >=
Равно ==
Не равно !=
Присваивание =

Примеры выполнения действий с операторами

>>> 4<3
False
>>> 4>3
True
>>> 0>=0
True
>>> 7<=7
True
3==3.0
True
>>> 1!=1.0
False

Для оператора присваивания так же выполняются арифметические операторы

>>> a = 7
>>> a += 2
9 
>>> a -= 2
7
>>> a /= 7
1.0
>>> a *= 8
8.0
>>> a %= 3
2.0
>>> a **= 5
32.0
>>> a //= 3
10.0

Логические и бинарные операторы

Название Оператор
И and
Или or
Не not

Рассмотрим примеры логических операторов

>>> a = 7 > 7 and 2 > -1
False
>>> a = 7 > 7 or 2 > -1
True
>>> a = not(0)
True

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

Циклы

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

While

Один из самых универсальных циклов в Python и является довольно медленным. Выполняет тело цикла до тех пор, пока условие цикла истинно.

>>> i = 5
>>> while i < 15:
...     print(i)
...     i = i + 2
...
5
7
9
11
13

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

For

Цикл for уже чуточку сложнее, чуть менее универсальный, но выполняется гораздо быстрее цикла while. Этот цикл проходится по любому итерируемому объекту (например строке или списку), и во время каждого прохода выполняет тело цикла.

>>>
>>> for i in 'hello world':
...     print(i * 2, end='')
...
hheelllloo  wwoorrlldd

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

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

Условные операторы

If

if condition:
    <indented statement 1>
   <indented statement 2>

Первая строчка оператора, то есть if condition: — это условие if, а condition — это логическое выражение, которое возвращает True или False. В следующей строке блок инструкций. Блок представляет собой одну или больше инструкций.

Пример условного оператора if

>>>a = 3
>>>if a == 3:
>>>     print("hello 2")
hello 2

If-else

Оператор if-else исполняет инструкции, если условие истинно и другое — если нет. Таким образом этот оператор предлагает два направления действий. Синтаксис оператора if-else следующий:

if  condition:
    # блок if
   statement 1
   statement 2
else:
    # блок else
    statement 3
    statement 4

Рассматорим пример условного оператора if-else

>>>a = 3
>>>if a > 2:
...      print("H")
>>>else:
...      print("L")
H

If-elif-else

Оператор if-elif-else — это альтернативное представление оператора if-else, которое позволяет проверять несколько условий, вместо того чтобы писать вложенные if-else. Синтаксис этого оператора следующий:

if condition_1:
    # блок if
    statement
   statement
elif condition_2:
    # первый блок elif
    statement
    statement
elif condition_3:
    # второй блок elif
    statement
    statement
...
else
   statement
   statement

Рассмотрим пример условного оператора if-elif-else

>>>a = 3
>>>if a < 0:
...   print("Neg")
>>>elif a == 0:
...   print("Zero")
>>>else:
...   print("Pos")
Pos