Первый урок кодирования, если вы совсем ничего не знаете

Данные, инструкции и логика

В этой статье мы рассмотрим три основных элемента кодирования: хранение данных, отправку инструкций на компьютер и вставку некоторой логики в ваши сценарии.

Мы дадим вам несколько основных примеров кода, чтобы продемонстрировать, как на самом деле реализуются концепции, о которых мы говорим. Крайне важно, чтобы вы напечатали эти примеры на своем компьютере и запустили их. Используйте интерактивную оболочку Python или создайте файл test.py и запустите его, введя следующую команду из командной строки, как описано в предыдущем посте.

$ python test.py

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

Хранение данных

Атомные данные

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

i = 0
pi = 3.1415926
str1 = 'Hello'
str2 = "World"
conditional = True

Имена переменных могут состоять из любой комбинации букв, цифр и знаков подчеркивания (_). Единственное ограничение состоит в том, что первым символом имени переменной не может быть число. Будьте осторожны, имена переменных чувствительны к регистру, поэтому str не совпадает с STR или Str.

Переменные также имеют тип. В python типы — это целые числа, числа с плавающей запятой, строка (символ — строка единичной длины) или логическое значение (True или False). Мы определяем строки, используя как одинарные, так и двойные кавычки безразлично.

Подробнее о переменных и типах читайте непосредственно в официальной документации по Python.

Простые структуры данных

Хранение данных в переменных является сутью обработки данных, но скоро будет слишком ограничено. Чтобы хранить некоторые более сложные данные, нам нужны более продвинутые держатели данных. В питоне два основных — это списки и словари.

Списки

Списки — это наборы переменных. Они представлены с помощью квадратных скобок с элементами, разделенными запятыми.

weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
primes = [1, 2, 3, 5, 7, 11, 13, 17, 19]

Мы обращаемся к элементам в списке, используя их положение в списке, называемое их индексом. Индекс начинается с 0. Итак, если мой список называется L, чтобы получить первый элемент L, я пишу L[0] для получения первого элемента списка, L[1] для второго элемента и так далее.

>>> weekdays[0]
'Sunday'
>>> primes[4]
7

Мы можем получить доступ к количеству элементов в списке, его длине, используя функцию len(). И мы получаем подмножество списка, называем его срезом, используя синтаксис [начало:конец]. Обратите внимание, что конец не включен и что вы можете опустить начало, и тогда оно будет неявно началом списка. Или опустите конец, и тогда это неявно конец списка

>>> len(weekdays)
7
>>> weekdays[2,4]
['Tuesday', 'Wednesday']
>>> primes[:2]
[1, 2]
>>> primes[5:]
[11, 13, 17, 19]

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

Словари

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

Person1 = {'last_name': 'Doe', 'first_name': 'John', 'age': 42}
Person2 = {'first_name': 'Jane', 'age': 29}

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

>>>Person1['last_name']
'Doe'
>>>Person2['age']
29

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

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

Для получения дополнительной информации о структурах данных, пожалуйста, прочитайте официальную документацию по Python.

инструкции

Их ох как много! Мы просто быстро представим наиболее распространенные, а некоторые узнаем по мере появления новых статей.

Показать что-нибудь

Как и в предыдущей статье, самое основное, что мы можем сделать, это отобразить значение или содержимое переменной. Эта волшебная инструкция в питоне называется print, а то, что вы хотите напечатать, заключено в круглые скобки. Будьте осторожны, содержимое должно быть строкового типа, иначе вы можете получить сообщение об ошибке в старых версиях Python.

>>> print('Hello world')
'Hello world'
>>> s1 = 'Hello'
>>> s2 = 'World'
>>> print(s1 + ' ' + s2)
'Hello World'
>>> pi = 3.1416
>>> print("pi is equal to " + str(pi))
'pi is equal to 3.1416'

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

А во втором примере мы объединяем (в CS мы говорим «конкатенация») две строковые переменные с постоянным пробелом посередине с помощью оператора «+».

Наконец, в третьем примере мы хотим отобразить конкатенацию постоянной строки и числа с плавающей запятой. Таким образом, мы должны использовать функцию str(), которая изменит любой числовой тип на его строковый формат. Если мы забудем использовать str(), мы получим сообщение об ошибке, в котором говорится, что python не может конкатенировать строки и числа с плавающей запятой.

Расчет

Конечно, все четыре обычных математических оператора доступны.

>>> i = 1
>>> print(i + 1)
2
>>> print(2 * i - 4)
-2
>>> print(12 / 2)
6

Будьте осторожны с делением целых чисел. В более старых версиях Python 5/2 было 2. Теперь 5/2 равно 2,5, и они добавили оператор «//» для целочисленного деления. Остаток от целочисленного деления по модулю получается с помощью оператора «%».

>>> 5 / 2
2.5
>>> 5 // 2
2
>>> 5 % 2
1

Компьютеры могут делать миллионы вещей! Мы не будем сейчас описывать их все. Просто помните, что программирование — это, по сути, написание сценариев, которые компьютеры могут воспроизводить и ДЕЛАТЬ.

Логика

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

Условия

Если ваш сценарий не очень прост и не является чисто последовательным, весьма вероятно, что вам потребуется оценивать условия и что-то делать, если условие истинно, или что-то еще, если условие ложно. Представьте себе следующую простую игру-викторину: попросите пользователя ввести число от 0 до 10, если ответ — это число, которое вы выбрали, скажем, 7, затем отобразите «Вы выиграли», иначе «Не повезло. Правильный ответ: 7». В питоне это будет:

answer = raw_input()
if int(answer) == 7:
    print("You win")
else:
    print('Bad luck. Correct answer was 7')

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

В строке 2 мы преобразуем строку «ответ» в целое число с помощью функции int() (функции мы увидим в следующем разделе), затем сравниваем ее (обратите внимание на два знака «=») с 7 и решаем, что напечатать. . Строка 2 может быть прочитана как «если ответ равен 7, то сделайте что-нибудь» — в этом случае напечатайте («Вы выиграли») — или сразу перейдите к строке 4, не выполняя строку 3, если условие не выполнено.

Общая форма для условий тогда

if conditional_expression:
    do_something
else:
    do_something_else

Обратите внимание, что обязательными являются только первые две строки. Использование инструкции else: не обязательно. Будьте очень осторожны с двоеточием в конце строки if ‹condition›:. Иногда вы будете забывать об этом, и это приведет к ошибке при попытке выполнить ваш код.

Также обратите внимание, и это обычно pythonic, смещение в 4 пробела перед do_something или do_something_else. Это смещение называется отступом и абсолютно необходимо в Python. Все, что выровнено, находится на одном уровне и будет выполняться последовательно. Вот как мы определяем «блоки кода» в Python. В других языках мы используем открывающие и закрывающие символы для маркировки блоков (в большинстве случаев это фигурные скобки), но в python для маркировки блоков кода требуется только один отступ.

Давайте просто проверим эти два примера и посмотрим, чем они отличаются.

name = raw_input()
if 'o' in name:
    print('there is an o')
    print('You win')

or

name = raw_input()
if 'o' in name:
    print('there is an o')
print('You win')

Как вы думаете, они одинаковы и закончатся одним и тем же результатом? Единственным отличием является отступ последней строки. Если вы попробуете их, вы увидите, что есть разница. В первом сценарии вы получаете сообщение «Вы выиграли», только если вы ввели строку, которая на самом деле содержит o. Во втором скрипте вы получаете сообщение «вы выиграли» независимо от того, вводите ли вы строку с буквой «о» или нет.

Почему это? В первом сценарии последние две строки имеют отступ на одном уровне, а затем они выполняются только в том случае, если условие истинно (имя строки содержит о). Если в строке нет o, скрипт переходит в конец блока, в нашем случае конец скрипта, а затем завершается. Во втором скрипте условие оценивается в строке 2, если оно истинно, выполняется строка 3, а затем сценарий продолжается на следующей строке, в данном случае на строке 4.

Но если условие ложно, сценарий избегает блока и продолжает работу на том же уровне, что и строка 2, а затем продолжается на строке 4. Таким образом, строка 4 выполняется всегда, каким бы ни было условие. В таких тривиальных скриптах, как этот, вы легко отладите его, если получите неожиданный результат. Но в больших программах ошибки отступов являются очень частым источником ошибок. Просто будь осторожен!

Петли

Компьютеры очень хорошо справляются с повторяющимися задачами, не чувствуя при этом скуки. Ну, для этого они и созданы. Они автоматы!

Цикл for

В информатике есть два вида циклов. В первом случае вы знаете, сколько раз вы хотите что-то повторить. Например, для каждого элемента в списке do... Для всех чисел от 0 до 10 do... Синтаксис этих циклов следующий:

days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
for day in days:
     print(day)

Этот крошечный скрипт приведет к печати всех элементов списка дней.

Как это работает?

В строке 1 мы просто устанавливаем переменную days в список строк. Затем в строке 2 мы проходим по списку. В первый раз, когда мы выполняем строку 2, переменная day равна «Mon», мы переходим к строке 3 и печатаем ее. Затем, поскольку мы находимся в блоке цикла, программа возвращается к строке 2, и переменная «день» теперь равна «вт». А затем программа печатает его и, поскольку в списке еще есть элементы, мы возвращаемся к строке 2. И так далее и тому подобное, пока не будут использованы все элементы списка. Поскольку дни содержат 7 элементов, мы заранее знаем, что цикл будет выполняться семь раз.

Цикл while

Во втором типе цикла вы не знаете, сколько раз вы собираетесь зацикливаться, но знаете, что хотите зацикливаться столько раз, сколько выполняется условие. Вот пример:

i = 0
while i < 10:
    print(str(i))
    i = i + 1

Вы пробовали это на своем компьютере? Вы понимаете, что это делает? Если вы думаете, что он печатает числа от 0 до 9, вы правы!

Как это работает?

В первой строке мы просто устанавливаем значение целочисленной переменной i равным 0. Теперь это легко для вас! Строка 2 — это новый вид циклов, зарезервированное слово «пока». Он гласит: «Хотя i строго меньше 10, мы выполняем блок с отступом чуть ниже».

Итак, когда мы запускаем скрипт, так как i равно 0, программа выполняет приведенный ниже код. Таким образом, мы печатаем значение переменной i, здесь 0, и переходим ко второй строке внутреннего блока. Это странно, если у вас есть математическое образование!

я = я + 1. Правда? Вот как мы увеличиваем значение переменной. Интерпретатор Python сначала оценивает правую часть выражения и присваивает ее левой части. Тогда теперь i равно 1.

И поток возвращается к строке 2 и переоценивает условие. И это все еще верно, поэтому мы снова попадаем во внутренний блок, печатаем значение переменной и снова увеличиваем его. Теперь оно равно 2. Возвращаемся к строке 2 и так далее и тому подобное! Когда i равно 9 и мы попадаем в блок, выведите «9» и увеличьте i до 10, вернитесь к строке 2 и переоцените условие, которое теперь ложно. Затем мы выходим из цикла и переходим к концу скрипта.

Бесконечные петли

С циклами for мы знаем, сколько раз мы будем выполнять цикл. Но что произойдет с циклом while, если условие никогда не станет ложным? Мы входим в бесконечный цикл, и программа зависнет навсегда, и вам придется ее убить! Нажатие Ctrl+C в большинстве случаев является простым решением. Представьте, что вы забыли последнюю строку в последнем скрипте и просто набираете это:

i = 0
while i < 10:
    print(str(i))

Вы просто увидите тысячи 0 на своем экране и никогда не выйдете из цикла, потому что значение i всегда будет 0. Вы думаете, что это пустышка? Я программирую уже более 35 лет и до сих пор иногда делаю это. В большинстве случаев бесконечные циклы легко отлаживать.

Подробнее о логике из официальной документации по python.

Прежде чем мы уйдем

Это была длинная статья, и она содержит абсолютные основы кодирования на python. Я надеюсь, что вы соблюдали инструкции и действительно напечатали примеры, которые мы дали. Надеюсь, вы допустили какие-то ошибки, вам потом пришлось разбираться, сравнивать с примерами, видеть пропущенный пробел, или забытое двоеточие, или знак двойного равенства. Делать — это единственный способ научиться. Вы должны пробовать новые вещи, печатать то, что приходит вам на ум, изменять это и смотреть, как это повлияет на вашу программу! Так вы добьетесь огромного прогресса.