Освой Python играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Python: Общие сведения

Часть примеров применялась для устройства M5Stack Fire, поэтому в коде встречаются специфичные для этого устройства классы. Вам нужно самостоятельно адаптировать примеры под голую плату ESP32 или под другие устройства, которые поддерживают MicroPython или для примеров на чистом Python.

Булевы значения True и False пишутся с большой буквы. Комментарии помечаются символом # вместо привычных //. Точки с запятой не ставятся.

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


x, y, z = "Кот", "Кошка", "Котёнок"
print(x)
print(y)
print(z)

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

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


Основная инструкция:
    Вложенный блок инструкций
	
if(5 > 0):
    print("Пять больше нуля")

Тело составной инструкции может располагаться в той же строке, что и тело основной, если тело составной инструкции не содержит составных инструкций. Поэтому допустимо переписать пример.


if(5 > 0):print("Пять больше нуля")

Иногда возможно записать несколько инструкций в одной строке, разделяя их точкой с запятой (не рекомендуется).


a = 1; b = 2; print(a, b)

Кроме умножения (*), есть оператор возведения в степень (**).


print(2 ** 3) # 8

Хотя есть и специальный класс math.


pow(2, 3)

// полный вариант
import math
math.pow(8, 2)

Также есть два вида деления. Обычное деление через / или целочисленное деление //. А ещё есть деление по модулю %.


print(5 / 3)  # 1.6666666666666667
print(5 // 3) # 1
print(5 % 3)  # 2

Ветвление if. Не забывайте про двоеточия и отступы. Части elif и else не являются обязательными.


x = 22
if(x > 30):
    print("x больше 0")
elif (x < 11):
    print("4 меньше 11")
else:
    print("Я кот!") 

Цикл for. Он немного отличается от стандартного синтаксиса в других языках (есть похожие аналоги в виде foreach или for (int i : IntArray)).


for i in range(5):
    lcd.print(i)
# 01234

Ещё пример.


for ch in 'hello kitty':
    print(ch * 2, sep='|', end = ' ') 
# hh ee ll ll oo    kk ii tt tt yy

Цикл while.


i = 5
while(i > 0):
  lcd.print(i)
  i -= 1
  
# 54321

Оператор continue начинает следующий проход цикла, минуя оставшееся тело цикла (for или while).


for ch in 'hello kitty':
    if ch == 'o':
        continue
    print(ch * 2, end = ' ') 
# hh ee ll ll    kk ii tt tt yy

Оператор break досрочно прерывает цикл.


for ch in 'hello kitty':
    if ch == 'k':
        break
    print(ch + '3', end = ' ')
# h3 e3 l3 l3 o3  3

В Python есть эквивалент тернарного оператора ?:.


[on_true] if [expression] else [on_false]
x, y = 50, 25
small = x if x < y else y

Типы данных

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

Встроенные типы: str, int, float, complex, list, tuple, range, dict, set, frozenset, bool, bytes, bytearray, memoryview.

Узнать тип данных можно через type().


x = 5
print(type(x))
cat = "Pussy"
print(type(cat))
isCat = True
print(type(isCat))

Тип bytearray - массив байт и в отличии от bytes является изменяемым.

Комплексные числа complex записываются с суффиксом j.


y = 5j

Конвертировать из одного типа в другой можно через соответствующие методы int(), float(), complex().


x = 1    # int
y = 2.8  # float
z = 1j   # complex

#convert from int to float:
a = float(x)

#convert from float to int:
b = int(y)

#convert from int to complex:
c = complex(x)

print(a)
print(b)
print(c)

print(type(a))
print(type(b))
print(type(c))

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

Случайное число (модуль random)

При помощи модуля randomвыводим на экран случайное число от 0 до 10, используя функцию random.randint() после нажатия кнопки B (для платы M5Stack).


# MicroPython
from m5stack import *
from m5ui import *
from uiflow import *
# import random  - на M5Stack работает без импорта

setScreenColor(0x222222)

label = M5TextBox(128, 95, "", lcd.FONT_DejaVu40,0xFFFFFF