Строительные блоки Python

Это вторая часть серии. Чтобы вернуться к части 1, нажмите здесь.

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

Откройте Repl.it и создайте Python IDE (это интегрированная среда разработки, продолжайте и впечатляйте своих друзей из CS).

Примечание. Я настоятельно прошу вас скопировать каждый фрагмент кода, который я пишу. Не копируйте и не вставляйте его - заведите привычку печатать. Не могу не подчеркнуть, насколько это важно.

Почему Python?

Почему не Кобра? А что насчет Вайпера? Почему змеи? Это потому, что создателю Python нравились наброски Монти Пайтона, и он читал о них при разработке языка. Не могу поверить, что вы подумали, что я объясню, почему мы используем Python, во второй части руководства по Python.

Как Python?

Python и большинство других языков программирования читаются сверху вниз; прямо как английский язык.

Вы заметите, что я сказал сценарий более 50 раз в Части 1. Что вообще такое сценарий Python? Скрипты Python - это файлы, оканчивающиеся на .py, обычно содержащие полный набор инструкций и запускаемые последовательно сверху вниз для выполнения задачи. Repl.it и другие IDE запускают эти сценарии Python и предоставляют результат.

Параллели

Большинство языков программирования похожи, но с некоторыми особенностями. Когда вы освоите Python, вы увидите, что переход на другой язык будет намного проще. Вы заметите, что синтаксис (набор правил, определяющих, считаются ли вводимые вами операторы правильными) - это единственное, что меняется от одного языка программирования к другому. Чтобы проиллюстрировать, в Python переменная (хранилище значений) будет определена как таковая:

a = 5

Здесь Python создает новую переменную с именем «a», а затем присваивает ей значение «5». В JavaScript та же операция будет выполняться следующим образом:

var a = 5;

В C такая же операция будет:

int a = 3;

Думаю, все мы понимаем, почему я предпочитаю Python 😅. Обратите внимание, что существуют определенные различия в том, как некоторые языки обрабатывают определенные вещи, например, Ассемблер сильно отличается от основных языков. Тем не менее концепции, изложенные в следующем разделе, применимы к большинству языков.

Строительные блоки

Основные концепции Python состоят из следующих 4 категорий, но не ограничиваются ими:

Ценные магазины

Для выполнения операций нам нужен способ хранения значений и выбора значений. Ценность может быть сохранена в Python разными способами.

Для хранения значений обычно используются переменные. В Repl.it введите следующее:

a = 5510
b = "tennis"

Это создает две переменные: a и b и присваивает значение 5510 a, а значение “tennis” b. Назначения выполняются с использованием символа = . Это выглядит немного странно, потому что нас обычно учат говорить, что это означает "равно" и как a может быть равно 5510?

Мы сообщаем Python, что отныне, если я упомяну a, он будет равен 5510 , а если я упомяну b, он будет равен “tennis”.

Давайте попросим Python показать нам значения a и b. Чтобы показать значения, мы используем оператор print. Обратите внимание, что этот оператор только выводит значение на терминал (именно здесь кодировщик видит вывод) и больше ничего не делает. Даже без оператора печати a и b будут содержать эти значения, и мы можем делать с ними все, что захотим.

a = 5510
b = "tennis"
print(a)
print(b)

Пустая строка не обязательна, поскольку Python избегает пустых строк, но делает наш код более чистым, так что вы можете вставить столько, сколько захотите. Если вы нажмете «Выполнить» в окне Repl.it, вы увидите, что он напечатает следующее:

Это странно. 5510 хорошо, но где цитаты вокруг tennis? В Python текст - это просто тип данных, известный как строка (str). Строки требуют, чтобы кавычки были действительными. Вы даже можете преобразовать числа в тип данных String, но они потеряют способность вести себя как числа. Это означает, что вы не можете их складывать, умножать и т. Д.

Для чисел у нас есть два полезных типа данных: int или Integer и float. Единственная разница в том, что целые числа являются целыми числами, а числа с плавающей запятой содержат десятичную точку, т.е. 5 - это целое число, а 5.9, 5.522 и 5.0 - все числа с плавающей запятой. Полный список типов данных по умолчанию приведен ниже, но обратите внимание, что некоторые из них предназначены для нишевого использования.

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

groceries = ["mangoes", "oranges", "milk", "eggs"]

Для составления списков мы:

  • Объявите имя для списка.
  • Используйте символ = для присвоения значения (как и раньше).
  • Добавьте [] , чтобы определить членов списка. Квадратные скобки необходимы.
  • Используйте , внутри[], чтобы разделить элементы списка.

Списки могут содержать любые комбинации типов данных: strs, int, float и даже другие списки. Мы также можем добавлять значения в списки после их создания, но оставим это на потом в руководстве.

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

groceries_essential =("eggs", "milk", "water 1 Litre")

Что, если мы хотим, чтобы в нашем списке покупок также была указана цена каждого товара? Словари называются так, потому что они позволяют нам составлять пары ключ: значение, аналогично тому, как словарь позволяет нам просматривать определения (значения) для слов (ключей). Давайте сделаем словарь с одним ценовым значением.

groceries_with_prices = {"eggs":0.5, "milk":0.75, "water":0.1}

Как тогда мы вообще смотрим на цены? Возможно, нам следует использовать оператор печати, как раньше.

groceries_with_prices = {"eggs":0.5, "milk":0.75, "water":0.1}
print(groceries_with_prices)

Вы заметите, что при выполнении этого словаря распечатывается просто весь словарь. Если бы вы печатали списки или кортежи, то случилось бы то же самое.

Чтобы получить доступ к кортежам или спискам, нам снова нужно использовать квадратные скобки.

groceries = ["mangoes", "oranges", "milk", "eggs"]
groceries_essential =("eggs", "milk" "water 1 litre")
print(groceries[0])
print(groceries_essential[0])

Это выводит mangoes и eggs, но почему? 0 в квадратных скобках ссылается на первый член списка или кортежа. Следовательно, 1 будет относиться ко второму члену и так далее. В Python индексы начинаются с 0.

Мы также можем делать срезы вместо одного значения. Следующий код выводит все, от индекса 0 до индекса 2 исключая. Таким образом, мы получаем только первый (индекс 0) и второй элементы (индекс 1). Результат должен быть [‘mangoes’, ‘oranges’].

groceries = ["mangoes", "oranges", "milk", "eggs"]
print(groceries[0:2])

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

groceries_with_prices = {"eggs":0.5, "milk":0.75, "water":0.1}
print(groceries_with_prices["eggs"])

Это похоже на предыдущий вариант, но на этот раз мы использовали “eggs” в качестве индексатора (здесь это ключ). Это потому, что мы специально установили "eggs", "milk" и "water" в качестве ключей. Ссылаясь на них, мы получаем их ценность.

Квадратные скобки использовались для обозначения списков (list_names = [“martha”, “batman”, “superman”]), так почему они также используются для удаления членов из списков и словарей?

Если квадратная скобка с числом или строкой внутри прикреплена к концу переменной, она выбирает значение с тем же индексом из этой переменной. Итак, если list = ["shuvo", "saha", "hi"], то list[1] будет "saha".

Последний тип данных, о котором я расскажу, - это логическое или логическое значение. Логические значения представляют одно из двух значений: True и False.

my_bool = True
my_other_bool = False

Это полезно для логических утверждений; сравнивать вещи и еще много чего. Мы углубимся в bools позже в этом руководстве.

Это было много слов. Пришло время мемов.

Операторы

Операторы выполняют операции с переменными и значениями. =, используемый для присвоения, является оператором. Некоторые полезные операторы включают арифметические операторы:

a = 5+2
b = 5-2
c = 5*5
d = 5/5
e = 5**2
print(a, b, c, d, e)

Выполнение этого должно прояснить, что звездочки используются для умножения, косые черты используются для деления, а двойные звездочки используются для экспонент. Вы также заметите, что я могу распечатать все сразу, используя запятую между переменными.

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

a = 5
b = 8
c = 9
print(b > 5)
print(a == 5)
print(b < 10)
print(b < 8)
print(b <= 8)
print((b+c) > 12)

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

Операторы довольно интуитивно понятны, за исключением == operator. Немного странно, что double equal to используется для сравнения двух значений, чтобы узнать, равны ли они. Помните, что = используется для присвоения значения переменной, а ==, следовательно, используется, чтобы спросить, равно ли значение слева значению справа. Я совершил так много ошибок в своей жизни из-за того, что упустил =.

Есть 3 логических оператора:

Попытайтесь выяснить, что будут выводить эти операторы, прежде чем запускать код:

a = 5
b = 8
print(a==5 and b==8)
print(a<8 or b>9)
print(a<3 or b>9)
print(a==5 and not b==8)
print((a==5 and not b==8) or a < 8)

Первый оператор проверяет, равно ли a 5 и, если b равно 8, а затем выводит True, если оба условия соблюдены.

Второй оператор напечатает True, если выполнено любое из условий. Поскольку a меньше 8, получаем True. Точно так же мы видим False в третьем утверждении.

Четвертый оператор похож на первый, но также имеет not. not изменит состояние всего, что находится рядом с ним. Поскольку b==8 outputs True, добавление not сделает его False. Другими словами, выражение теперь гласит: «a равно 5 и b не равно 8?» Поскольку b равно 8, мы получаем a False справа. Помните, что and вернет True, только если выполнены оба условия.

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

Python любит быть навороченным и имитирует английский с включением операторов is и in .

a = 5
print(a is 5)
print(a is not 5)
names = ["Martha", "Lewis", "Dave"]
print("Lewis" in names)
print("Derek" in names)

is operator похож на == , а in operator проверяет, находится ли переменная внутри последовательности, и возвращает True , если это так.

Условные

Теперь, когда мы поговорили об операторах, мы можем расширить их использование с помощью условных операторов.

Также известные как операторы if / else, они используются для выполнения кода, только если выполняется определенное условие (или не выполняется, или какая-то мешанина из нескольких комбинаций, например, в возрасте от 5 до 100 лет, но не в возрасте 6 лет).

Вы должны догадаться, что это делает:

a = 5
b = 6
if a > b:
    print("a is greater than b")
elif a == b:
    print("a is equal to b")
else:
    print("b is greater than a")

У оператора есть 3 уровня: первый проверяет, больше ли a, чем b, если это условие выполняется, мы получаем первый output “a is greater than b” , и дальше оператор не продолжается.

Если условие не выполняется, Python переходит на следующий уровень (elif обозначает else if) и проверяет, равно ли a b , и выводит “a is equal to b”, если это правда.

Если это условие также не выполняется, программа просто печатает “b is greater than a”. Обратите внимание, что мы можем добавить столько elif layers, сколько захотим, чтобы проверить столько операторов, сколько захотим. Python рассматривает все это как один большой блок кода и пропускает каждый последующий уровень при выполнении условия. Так что, если мы хотим проверить две вещи независимо?

a = 5
if a > 2:
    print("a is greater than 2")
if a < 10:
    print("a is less than 10")

Это проверит оба условия независимо и не остановится, даже если будет выполнено одно условие. if используется, чтобы сообщить Python, что мы запускаем блок проверки условий.

Обратите внимание, что else операторы ничего не проверяют и используются, когда не соблюдаются никакие другие условия. Также обратите внимание, что отступ (4 пробела или 1 табуляция после оператора if/elif/else) является обязательным в Python и автоматическим в любой среде IDE, если вы просто нажимаете Enter после двоеточия. Все, что расположено непосредственно под условным условием, считается находящимся внутри условного.

Петли

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

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

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

age_list = [15, 17, 17, 18, 12, 14, 13, 10, 15]
for age in age_list:
    print(2020 - age)

Это проще, чем кажется. age - это просто имя, которое мы даем элементам в списке. Вы можете использовать любое имя, какое захотите, и код будет работать. Затем мы получаем доступ к элементам в списке, используя то имя, которое мы использовали ранее (age).

age_list = [15, 17, 17, 18, 12, 14, 13, 10, 15]
for random_name in age_list:
    print(random_name)

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

Для циклов также можно использовать это:

for i in range(5):
    print("Hello")

range(n) создает эквивалент списка значений, начиная с 0 до n-1. for i in range(n) перебирает этот список и в итоге делает это n раз. Итак, здесь он выведет «привет» 5 раз. Помните, что вы можете назвать i как хотите и даже использовать его внутри оператора. Попробуйте печатать значение i в каждом цикле.

Циклы while будут продолжать что-то делать, пока выполняется определенное условие.

num = 0
while num < 5:
    print("i is less than 5")
    num = num+1

Здесь мы объявляем переменную num, присваиваем ей значение, а затем выводим предложение, если переменная истинна. Обратите внимание, что мы также увеличиваем значение num в каждом цикле, добавляя 1 к существующему значению. Схема ниже должна прояснить ситуацию.

Если вы сообразительны, то, возможно, догадались, что мы можем использовать это выражение while, чтобы делать то, что мы делали в нашем for i in range(5) примере, и наоборот.

Мы также можем использовать break, чтобы преждевременно остановить цикл, и continue, чтобы заставить его пропустить некоторый код и вернуться к началу цикла.

for i in range(5):
    print(i)
    if i == 2:
        break    
    print("Hello")

Вы заметите, что “hello” отображается только дважды, потому что цикл останавливается, когда значение i достигает 2. Я добавил первое print(i) утверждение, чтобы показать вам, что происходит внутри.

for i in range(5):
    print("Hello")
    if i != 4:
        continue
    print("Hi")

“Hi” выводится только один раз, потому что оператор continue заставляет Python пропускать код под ним до тех пор, пока i не получит значение 4.

Уфф, это было много всего. Обязательно просматривайте эту страницу несколько раз, пока все не окажется у вас в голове. Вы, наверное, не согласитесь, но я оптимистичный человек.

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