Python: базовые типы и конструкции управления потоком

Численные типы

    Целые числа (int)

num = 13
print(num)
13

num = 0
print(num)
0

num = -10
print(num)
-10
num = 100_000_000
print(num)
100000000

Встроенная функция type

num = 13
print(type(num))
<class 'int'>

    Вещественные числа (float)

num = 13.4
print(num)
13.4

num = 0.0
print(num)
0.0

num = -10.2
print(num)
-10.2
num = 100_000.000_001
print(num)
100000.000001
# 1.5 умножить на 10 в степени 2
num = 1.5e2
print(num)
150.0

Конвертация типов:

num = 150.2
print(type(num))
<class 'float'>
num = int(num)
print(num, type(num))
150 <class 'int'>

num = float(num)
print(num, type(num))
150.0 <class 'float'>

    Комплексные числа (complex)

num = 14 + 1j

print(type(num))
<class 'complex'>

print(num.real)
14.0

print(num.imag)
1.0

Модуль decimal для работы с вещественными числами с фиксированной точностью

Модуль fractions для работы с рациональными числами

    Основные операции с числами

Сложение:

1 + 1
2
1 + 2.0
3.0

Вычитание:

10 - 1
9
4.2 - 1
3.2

Деление:

10 / 2
5.0

Делить на 0 нельзя:

2 / 0
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-11-ae0c5d243292> in <module>()
----> 1 2 / 0

ZeroDivisionError: division by zero

Умножение:

4 * 5.25
21.0

Возведение числа в степень:

2 ** 4
16

Целочисленное деление:

10 // 3
3

Остаток от деления:

10 % 3
1

Порядок операций в выражениях с числами:

print(10 * 3 + 3)
33

print(10 * (3 + 3))
60
x = 4
y = 3

print("Побитовое или:", x | y)
Побитовое или: 7

print("Побитовое исключающее или:", x ^ y)
Побитовое исключающее или: 7

print("Побитовое и:", x & y)
Побитовое и: 0

print("Битовый сдвиг влево:", x << 3)
Битовый сдвиг влево: 32

print("Битовый сдвиг вправо:", x >> 1)
Битовый сдвиг вправо: 2

print("Инверсия битов:", ~x)
Инверсия битов: -5

Задача: найти расстояние между двумя точками в декартовых координатах.

Решение:

x1, y1 = 0, 0
x2 = 3
y2 = 4

distance = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5
print(distance)
5.0

Меняем местами значения 2-х переменных:

a = 100
b = 200
print(a, b)
100 200

a, b = b, a
print(a, b)
200 100

Вместо x, y = 0, 0

x = y = 0
x += 1

print(x)
1
print(y)
0

Но нужно помнить об отличии изменяемых (mutable) и неизменяемых (immutable) типов:

x = y = []
x.append(1)
x.append(2)

print(x)
[1, 2]
print(y)
[1, 2]

Логический тип (bool)

True
True

False
False

result = True
print(type(result))
<class 'bool'>

Оператор «равно»:

13 == 13
True

Оператор «не равно»:

1 != 2
True

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

print(3 > 4)
Fasle
print(3 <= 3)
True
print(6 >= 6)
True
print(6 < 5)
False
x = 2
print(1 < x < 3)
True

Конвертация типов:

bool(12)
True
bool(0)
False

    Логические выражения

Логическое «и»:

x, y = True, False
print(x and y)
Fasle

Логическое «или»:

x, y = True, False
print(x or y)
True

Логическое отрицание:

y = False
print(not y)
True

Составные логические выражения:

x, y, z = True, False, True
result = x and y or z
print(result)
True
x = 12
y = False

print(x or y)
12
x = 12
z = "boom"

print(x and z)
boom

Задача: определить високосный год или нет?

Год является високосным если он кратен 4, но при этом не кратен 100, либо кратен 400.

year = 2017
is_leap = year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
print(is_leap)
False
import calendar

print(calendar.isleap(1980))
True

Строки (str)

Строка – это неизменяемая последовательность юникодных символов

example_string = "Курс про Python"
print(example_string)
Курс про Python

print(type(example_string))
<class 'str'>

example_string = 'Курс про "Python"'
print(example_string)
Курс про "Python"

example_string = "Курс про \"Python\""
print(example_string)
Курс про "Python"

 

    «Cырые» (r-строки):

example_string = "Файл на диске c:\\\\"
print(example_string)
Файл на диске c:\\

example_string = r"Файл на диске c:\\"
print(example_string)
Файл на диске c:\\

Как разбить объявление длинной строки:

example_string = "Perl — это тот язык, который одинаково " \
"выглядит как до, так и после RSA шифрования." \
"(Keith Bostic)"
print(example_string)
Perl — это тот язык, который одинаково выглядит как до, так и после RSA шифрования.(Keith Bostic)

example_string = """
Есть всего два типа языков программирования: те, на которые
люди всё время ругаются, и те, которые никто не использует.

Bjarne Stroustrup
"""
print(example_string)
Есть всего два типа языков программирования:
те, на которые люди всё время ругаются, и те,
которые никто не использует.

Bjarne Stroustrup

 

Как объединить 2 строки в одну?

"Можно" + " просто " + "складывать" + " строки"
'Можно просто складывать строки'

"Даже умножать!" * 3
'Даже умножать!Даже умножать!Даже умножать!'

Строки неизменяемые!

example_string = "Привет"
print(id(example_string))
4379064296

example_string += ", Мир!"
print(id(example_string))
4379064192

    Срезы строк [start:stop:step]

example_string = "Курс про Python"
example_string[9:]
'Python'

example_string = "Курс про Python"
example_string[9:15]
'Python'

example_string = "Курс про Python"
example_string[-6:]
'Python'

Использование step:

example_string = "0123456789"
example_string[::2]
'02468'

example_string = "Москва"
example_string[::-1]
'авксоМ'

 

У строк есть методы:

quote = """Болтовня ничего не стоит. Покажите мне код.

Linus Torvalds
"""
quote.count("о")
6

"москва".capitalize()
'Москва'

"2017".isdigit()
True

Оператор in позволяет проверить наличие подстроки в строке:

"3.14" in "Число Пи = 3.1415926"
True

"Алексей" in "Александр Пушкин"
False

Выражение for .. in позволяет итерироваться по строке:

example_string = "Привет"
for letter in example_string:
    print("Буква", letter)

Буква П
Буква р
Буква и
Буква в
Буква е
Буква т

 

Конвертация типов:

num = 999.01
num_string = str(num)
print(type(num_string))
<class 'str'>
num_string
'999.01'

bool("Непустая строка")
True

bool("")
False

name = ""
if not name:
    print("Имя не заполнено!")

Имя не заполнено!

 

    Форматирование строк

1-ый способ форматирования:

template = "%s — главное достоинство программиста. (%s)"
template % ("Лень", "Larry Wall")
'Лень — главное достоинство программиста. (Larry Wall)'

https://docs.python.org/3/library/string.html#format-specification-mini-language

2-ой способ:

"{} не лгут, но {} пользуются формулами. ({})".format(
    "Цифры", "лжецы", "Robert A. Heinlein"
)
'Цифры не лгут, но лжецы пользуются формулами. (Robert A. Heinlein)'

Еще способ:

"{num} Кб должно хватить для любых задач. ({author})".format(
    num=640, author="Bill Gates"
)
'640 Кб должно хватить для любых задач. (Bill Gates)'

 

И еще f-строки, Python >= 3.6:

subject = "оптимизация"
author = "Donald Knuth"

f"Преждевременная {subject} — корень всех зол. ({author})"
'Преждевременная оптимизация — корень всех зол. (Donald Knuth)'

        Модификаторы форматирования:

num = 8
f"Binary: {num:#b}"
'Binary: 0b1000'

num = 2 / 3
print(num)
0.6666666666666666

print(f"{num:.3f}")
0.667

Больше описания и примеров в документации: https://docs.python.org/3/library/string.html

Встроенная функция input() позволяет получить ввод пользователя в виде строки

name = input("Введи свое имя: ")
f"Привет, {name}!"

Введи свое имя: Александр
'Привет, Александр!'

    Байтовые строки (bytes)

Байт — минимальная единица хранения и обработки цифровой информации. Последовательность байт представляет собой какую-либо информацию (текст, картинку, мелодию…)

Байтовая строка – это неизменяемая последовательность чисел от 0 до 255.

b-литерал для объявления байтовой строки:

example_bytes = b"hello"
print(type(example_bytes))
<class 'bytes'>

for element in example_bytes:
    print(element)

104
101
108
108
111

example_bytes = b"привет"

File "<ipython-input-48-f10cf569d599>", line 1
example_bytes = b"привет"
^
SyntaxError: bytes can only contain ASCII literal characters.

Bytes literals are always prefixed with 'b' or 'B'; they produce an instance of the bytes type instead of the str type. They may only contain ASCII characters; bytes with a numeric value of 128 or greater must be expressed with escapes.

example_string = "привет"
print(type(example_string))
<class 'str'>
print(example_string)
привет

encoded_string = example_string.encode(encoding="utf-8")
print(encoded_string)
b'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82'
print(type(encoded_string))
<class 'bytes'>

Декодируем байты обратно в строку:

decoded_string = encoded_string.decode()
print(decoded_string)
привет

Объект None

answer = None

По сути None это значение специального типа NoneType, используемое на практике для обозначения отсутствия значения. Если вы знаете C можете рассматривать его как нулевой указатель.

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

bool(None)
False

answer = None
if not answer:
    print("Ответ не получен")

Ответ не получен

income = 0
if not income:
    print("Ничего не заработали")

Ничего не заработали

income = None

if income is None:
    print("Еще не начинали продавать")
elif not income:
    print("Ничего не заработали")

Еще не начинали продавать

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

Конструкции управления потоком

    if — проверка условия

Оператор if используется для выполнения каких-либо действий при выполнении условия:

company = "my.com"

if "my" in company:
    print("Условие выполнено!")

Условие выполнено!

company = "example.net"

if "my" in company or company.endswith(".net"):
    print("Условие выполнено!")

Условие выполнено!

    if — else

Оператор else позволяет выполнить какой-либо код, если условие в блоке if не выполнилось:

company = "google.com"

if "my" in company:
    print("Условие выполнено!")
else:
    print("Условие не выполнено!")

Условие не выполнено!

 

    if — elif — else

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

company = "google.com"

if "my" in company:
    print("Подстрока my найдена")
elif "google" in company:
    print("Подстрока google найдена")
else:
    print("Подстрока не найдена")

Подстрока google найдена

 

    Аналог тернарного оператора

score_1 = 5
score_2 = 0
winner = "Argentina" if score_1 > score_2 else "Jamaica"

print(winner)
Argentina

 

    while

Оператор while позволяет выполнять блок кода до тех пор пока выполняется условие:

i = 0
while i < 100:
    i += 1

print(i)
100

 

    Цикл for, объект range

Выражение for .. in это еще один способ выполнить блок кода — но оно позволяет выполнить блок кода для каждого из элементов из последовательности:

name = "Alex"
for letter in name:
    print(letter)

A
l
e
x

Встроенный объект range позволяет итерироваться по целым числам:

for i in range(3):
    print(i)

0
1
2

result = 0
for i in range(101):
    result += i

print(result)

5050

for i in range(5, 8):
    print(i)

5
6
7

for i in range(1, 10, 2):
    print(i)

1
3
5
7
9

for i in range(10, 5, -1):
    print(i)

10
9
8
7
6

 

    pass

Определяет пустой блок, который ничего не делает

for i in range(100):
    pass

 

    break

Оператор break позволяет выйти из цикла досрочно:

result = 0
while True:
    result += 1
    if result >= 100:
        break

print(result)
100

for i in range(10):
    if i == 5:
        break
    print(i)

0
1
2
3
4

 

    continue

Оператор continue используется, когда в блоке цикла нужно перейти к следующей итерации цикла без выполнения оставшихся инструкций в блоке:

result = 0
for i in range(10):
    if i % 2 != 0:
        continue
    result += i

print(result)
20

 

    Пример управления потоком в python программе

import random

number = random.randint(0, 100)

while True:
    answer = input('Угадайте число: ')
    if answer == "" or answer == "exit":
        print("Выход из программы")
        break

    if not answer.isdigit():
        print("Введите правильное число")
        continue

    answer = int(answer)

    if answer == number:
        print('Совершенно верно!')
        break

    elif answer < number:
        print('Загаданное число больше')
    else:
        print('Загаданное число меньше')

 

 

 

Оставить ответ

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