1 of 35

Модель данных Python

синтаксис, операторы и др.

2 of 35

Сегодня поговорим об этом:

  • Самые основы Python:
  • Синтаксис, операторы,
  • “Переменные”, типы,
  • Циклы, ветвления,
  • Вывод, ввод
  • Рассмотрим различия Python и других языков.

3 of 35

Что такое тип данных?

  • python имеет динамическую типизацию;
  • проверить тип можно функцией type(x);
  • привести один тип к другому можно с помощью специальных функций.

4 of 35

“Переменная” в Python

Тип переменной определяется её текущим значением во время присваивания.

Типы, тоже являются объектами, тип которых - просто "тип".

5 of 35

Типы и утиная типизация

x = 1 # создается объект типа int со значением 1.

# объекту присваивается id. Переменная x ссылается на этот объект

# если объект по данному id изменит значение, то значение изменит и x, который ссылается на значение

print(x, type(x)) # 1 <class 'int'>

x = x * 1.5

print(x, type(x)) # 1.5 <class 'float'>

x = str(x)

print(x, type(x)) # 1.5 <class 'str'>

print(type(type(x))) # <class 'type'>

6 of 35

Присваивание

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

label = object

где:

  • object– значение, присваиваемое имени label, которое может быть выражением или одиночным значением
  • label – имя, этикетка (переменная), которое будет ссылаться на object

7 of 35

Типы делятся на изменяемые и неизменяемые

  • Immutable
    • str
    • int, float, complex
    • bool
    • tuple
  • Mutable
    • list
    • dict
    • set

8 of 35

Целые - <class 'int'>

В Python 3 тип int неограниченной разрядности, а внутреннее представление зависит от величины числа.

x = 10**50

print(x, type(x))

print(x+1) # вычисления происходят без потери точности

print(5+3, 5*3, 5**3, 5-3, 3-5, 3**5) # обычная арифметика

print(5&3, 5|3, 5^3, ~5, 5<<3, 5>>3) # битовые операции

print(5//3, 5%3) # целочисленное деление, остаток от деления

print(5/3) # деление без остатка: если результат дробный, получаем вещественное число при выполнении этой операции

9 of 35

Целочисленные литералы

# Системы счисления

# 2-, 8-, 10- и 16-ричные литералы

print(0b11001100, 0o314, 204, 0xCC) # 204 204 204 204

# строковые представления

print(bin(204), oct(204), str(204), hex(204))# 0b11001100 0o314 204 0xcc

10 of 35

Вещественные - <class 'float'>

64-разрядные вещественные числа "двойной точности" (они же - double в языках семейства Си)

# фиксированная точка (внутреннее представление всё равно плавающее)

print(1., .1, 1.1) # 1.0 0.1 1.1

# экспоненциальная запись

print(.1e1, 1e-1, 1.1e0) # 1.0 0.1 1.1

# числа можно возводить в дробную степень

print(5.+.3, 5.-.3, 5.*.3, 5.**.3) # 5.3 4.7 1.5 1.6206565966927624

# деление без остатка, деление нацело и остаток от деления!

print(5./.3, 5.//.3, 5.%.3) # 16.666666666666668 16.0 0.20000000000000018

# как получить целую и дробную части числа?

print(123.45//1, 123.45%1) # 123.0 0.45000000000000284

11 of 35

Про точность

import sys

print(sys.float_info)

print(sys.float_info.max_10_exp)

print(sys.float_info.epsilon)

sys.float_info(

max=1.7976931348623157e+308,

max_10_exp=308,

min=2.2250738585072014e-308,

min_10_exp=-307,

epsilon=2.220446049250313e-16

)

12 of 35

Шпаргалка по операциям

13 of 35

Логический тип данных - <class 'bool'>

Bool содержит только два значения - True и False.

Операции and, or, not - ленивые.

print(True and False, True or False, not True) # False True False

print(True ^ False, True != False, True == False) # исключающее или, не равно, равно

print(True & False, True | False) # и, или

14 of 35

Сравнения

print(7 > 6) #строго больше

print(7 < 6)

print(7 < 7)

print(7 <= 7) #меньше или равно

print(6 >= 7)

print(6 != 7)

print(6 == 7)

a = 6

b = 9

print('max:', a if a > b else b) # Тернарный оператор

print (6 is a)

print (7 is not a)

15 of 35

Равенство и идентичность

Для проверки двух объектов в Python на “одинаковость” есть 2 метода:

  1. Проверка на эквивалентность is
  2. И стандартные !=, ==

В чем разница?

i, j = 100, 100 # маленькие числа

print('ints:', i == j, i is j, id(i), id(j)) # и равны, и идентичны (is сравнивает идентификаторы)

# >>> ints: True True 4531811472 4531811472

x, y = 10**100, 10**100 # большие числа

print('big ints:', x == y, x is y, id(x), id(y)) # равны, но не идентичны

# big ints: True False 4576818352 4576818496

16 of 35

Пустой тип - <class 'NoneType'>

Тип с названием NoneType и единственным значением None. Предназначен для указания отсутствия значений. Это аналог сишного типа void, но более полезный.

print(None) # None

print(type(None)) # <class 'NoneType'>

x = None

y = 123

print(x == None, x is None, x is not None) # True True False

print(y == None, y is None, y is not None) # False False True

17 of 35

Еще про bool

print('bool from pos int is ', bool(5)) # True

print('bool from zero is ', bool(0)) # False

print('bool from empty str is ', bool('')) # False

print('bool from empty list is ', bool([])) # False

print(True is 1) # False

print(True == 1) # True

print(True + False) # 1

print(True / False) # ZeroDivisionError: division by zero

18 of 35

19 of 35

Строки - <class 'str'>

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

В Python 3 два типа:

  • str - юникодные символы
  • bytes - байтовые строки

print(type('hello'), type(b'hello')) # префикс b - "байтовая строка"

print("hello 'stroke' inside") # одинарные и двойные кавычки идентичны, они позволяют не делать лишних экранирований

print('hello "quotes" inside')

print('hello \'stroke\' and "quotes" together, unicode char \u1234 or ascii char \x7E') # если сильно хочется экранирований…

# hello 'stroke' and "quotes" together, unicode char ሴ or ascii char ~

20 of 35

Многострочные тексты приведение к str

print('''First line

second line

third line

''')

print("""Первая строка

вторая строка

третья строка

""")

print(str(1 + 2j))

print(str(0x1234)) # число было записано в 16-ричном виде, но будет выведено в десятичном

21 of 35

Базовые операции со строками

s1 = 'I '

s2 = 'Love '

s3 = 'Python'

s4 = '\n'

some_str = s1 + s2 + s3 + s4

print(some_str * 5)

"""I Love Python

I Love Python

I Love Python

I Love Python

I Love Python"""

22 of 35

Перерыв

23 of 35

Ветвления

x = 0

print(x or 'default') # default

print(x and 'finally') # 0

print('one' if x == 1 else 'two' if x == 2 else 'otherwise') # otherwise

24 of 35

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

x = 10

if x < 0:

print('negative')

else:

if x > 100:

print('out of range')

else:

if x < 50:

print('small')

else:

print('large')

25 of 35

Сократим PEP8

x = 10

if x < 0:

print('negative')

elif x > 100:

print('out of range')

elif x < 50:

print('small')

else:

print('large')

26 of 35

Про обязательность часть

x = 0

# ветка else необязательна

if x > 0:

print('then')

print('going on')

# ветка then - обязательна. Если там ничего нет, используем пустой стейтмент

if x < 0:

pass

else:

print('else')

print('going on')

27 of 35

Почему нет switch-case

x = 2*2-1 # запомним результат вычислений в переменную

# и далее - лесенка сравнений

if x==1:

print('one')

elif x==2:

print('two')

elif x==3:

print('three')

else:

print('unexpected')

Еще один вариант замены будет позже

28 of 35

Цикл с проверкой условия while

x = 100500

sum_of_digits = 0

while x != 0:

sum_of_digits += x % 10

x //= 10

print("сумма цифр равна", sum_of_digits)

# сумма цифр равна 6

29 of 35

Цикл с перебором значений for

for i in range(5): # в диапазоне [0,5)

print(i)

for c in 'abcde': #проходим по итерируемому объекту

print(c)

# Если нужен цикл, в котором есть индексы, - используется коллекция enumerate

for i, c in enumerate('abcde'):

print(i, c)

30 of 35

Ветка else

while CONDITION:

BODY

else: # если вышли по условию (а не по break)

FINISH

for VAR in DATASET:

BODY

else: # если исчерпали данные

FINISH

31 of 35

Ввод данных input()

Читаем строку из стандартного потока ввода (stdin) - т.е. из консоли.

line = input('введите любое число: ')

print(type(line)) # str - да, там строка

n = int(line) # понадеемся, что эту строку можно превратить в целое число

print('следующее число', n+1)

32 of 35

Решим задачку

Входные данные

На ввод подается 2 координаты точки на плоскости (каждая с новой строки) (сначала x - координата, затем – y -координата).

Выходные данные

Программа должна вывести слово 'YES', если точка попала в заштрихованную область, и слово 'NO', если не попала.

33 of 35

Решение

x = float(input())

y = float(input())

if x < 1 and y > 1-x and (y > 2 * x**2 or x > 0):

print("YES")

else:

print("NO")

34 of 35

Домашнее задание

  • Решить по ссылке 1, 3, 4 квизы (Beginner I)
  • Если хотите попрактиковаться тут
  • Листать презентации

35 of 35

Полезные ссылки