Освой Python играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Булевы значения 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выводим на экран случайное число от 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, rotate=0)
def buttonB_wasPressed():
label.setText( str(random.randint(0, 10)))
pass
btnB.wasPressed(buttonB_wasPressed)
# Python
import random
print(random.randint(0, 10))
Другой вариант.
import random
print(random.randrange(1, 10))
Модуль time содержит функцию sleep(), которая приостанавливает выполнение программы.
time.sleep(2) # пауза на две секунды
Существуют готовые системные исключения, а также можно создавать свои собственные.
try:
k = 1 / 0
except ZeroDivisionError:
k = 0
print(k)
# 0
В блоке try мы выполняем инструкцию, которая может породить исключение, а в блоке except перехватываем их. При этом перехватываются как само исключение, так и его потомки. Например, перехватывая ArithmeticError, мы также перехватываем FloatingPointError, OverflowError и ZeroDivisionError.
Также есть варианты с несколькими исключениями через else и finally.
Python имеет интересную особенность, называемую строками документации (docstrings). Данный инструмент помогает лучше документировать программу и облегчает её понимание. Обратите внимание, что строку документации можно получить, например, из функции, даже во время выполнения программы.
def printMax(x, y):
'''Выводит максимальное из двух чисел.
Оба значения должны быть целыми числами.'''
x = int(x) # конвертируем в целые, если возможно
y = int(y)
if x > y:
print(x, 'наибольшее число')
else:
print(y, 'наибольшее число')
printMax(3, 9)
print(printMax.__doc__)
9 наибольшее число
Выводит максимальное из двух чисел.
Оба значения должны быть целыми числами.
Строка в первой логической строке функции является строкой документации для этой функции. Строки документации принято записывать в форме многострочной строки, где первая строка начинается с заглавной буквы и заканчивается точкой. Вторая строка оставляется пустой, а подробное описание начинается с третьей. Доступ к строке документации функции можно получить с помощью имени этой функции и __doc__(обратите внимание на двойное подчёркивание с двух сторон).
Если вы пользовались функцией help() в Python, значит вы уже видели строки документации. Эта функция просто-напросто считывает __doc__ соответствующей функции и выводит его на экран. Вы можете проверить её на рассмотренной выше функции: просто включите help(printMax) в текст программы.
help(printMax)
Help on function printMax in module __main__:
printMax(x, y)
Выводит максимальное из двух чисел.
Оба значения должны быть целыми числами.
Строки документации применимы также к модулям и классам.
Узнать версию Python можно через version_info. В обычном виде возвращает кортеж. Первый элемент кортежа содержит старшую версию системы.
import sys
print(sys.version_info)
# sys.version_info(major=3, minor=6, micro=3, releaselevel='final', serial=0)
Если нужно обработать ситуации с неподдерживаемой версией, то пишем условие.
import sys, warnings
if sys.version_info[0] < 3:
warnings.warn("Требуется версия Python 3.0+", RuntimeWarning)
else:
print("Можем работать с этой версией")
Можно создать отдельный модуль (часто называемый config или cfg). Затем добавьте import config в каждый модуль приложения. При этом модуль становится доступен через глобальное имя. Поскольку существует только один экземпляр модуля, любые изменения, произведённые в модуле отражаются везде. Например:
# файл config.py:
x = 0
# файл mod.py:
import config
config.x = 1
# файл main.py:
import config
import mod
print(config.x)
По тем же соображениям, модули можно использовать как основу для имплементации синглтона.