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

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

Что такое знак парковки

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



Верхний блок - максимальное время парковки

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

Средний блок - График парковки

Средний блок - это наше расписание. Вы можете припарковаться здесь только с понедельника по субботу с 8:00 до 21:00.

Нижний блок - исключения

Это исключение говорит вам, что если у вас есть разрешение «C», вы всегда можете здесь припарковаться.

Ожидаемый результат

Когда мы читаем знак парковки, мы на самом деле пытаемся ответить на очень простой вопрос: «Могу я здесь припарковаться?». Ответ либо да, либо нет. Конечно, есть ограничения по времени и другие ограничения, о которых следует помнить, но конечная цель - узнать, можете ли вы припарковаться. Это отличная новость, потому что компьютеры действительно хорошо реагируют на запросы да или нет.

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

  1. Могу ли я припарковаться здесь менее чем на 2 часа?

2а. Мы с понедельника по субботу?

2b. Мы с 8 утра до 9 вечера?

3. Есть ли у меня разрешение C?

Обозначение проблемы

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

Какая блок-схема?

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

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

Чтобы прочитать это, сначала ответьте на вопрос «У вас есть разрешение C?»

Если ответ - да, вы следуете за стрелкой да, в противном случае вы следуете за потоком нет.

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

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

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

Почему вопросы не в одном порядке?

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

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

Я также перенес 2-часовой лимит на конец. Если вы не можете здесь припарковаться, не нужно знать временные рамки.

Основы кодирования

Теперь, когда у нас есть блок-схема, осталась единственная проблема: мы на самом деле не знаем, как программировать. Ничего страшного, это всего лишь маленькая деталь.

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

Булевы

С точки зрения непрофессионала, логическое значение - это компьютерное представление да или нет. В частности, компьютер сообщает вам, является ли что-то истинным (да) или ложным (нет).

I can park here = true
I can park here = false

Давайте еще раз посмотрим на нашу исходную блок-схему.

На английском это можно прочитать так:

If I have a C permit, then I can park here, otherwise, I can’t.

Как мы представим это в коде? Удивительно, но почти так же, как я написал это с помощью оператора if.

Заявление If

Оператор if - это наиболее распространенный способ проверки того, является ли утверждение истинным или ложным. Синтаксис разных языков разный, но идея всегда одна и та же. Вы проверяете, является ли утверждение истинным, а затем следуете истинному пути, в противном случае утверждение должно быть ложным, и вы следуете ложному пути. На жаргоне кодирования путь иначе почти всегда обозначается как else.

if, else и затем известны как ключевые слова. Это зарезервированные слова, которые имеют особое значение. Большинство языков программирования, особенно те, которые основаны на языке программирования «C» (латиница программирования), используют одни и те же (или очень похожие) ключевые слова.

Мы постоянно используем операторы if в повседневной жизни.

If it’s raining, take your umbrella ☂️ else wear your sunglasses 😎
If you have C permit, park here, else don’t park here

О форматировании

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

if you have a c permit,
  park here.
else,
  don't park here.

Ранее мы узнали, что i f и else являются ключевыми словами, но это также английские слова, они также могут появляться в операторе if if я сказал использованное слово если .. «). Подобно пунктуации в языках, в языках программирования также есть собственный способ облегчить чтение, понимание и предотвратить неправильное толкование. Обычная практика заключается в том, чтобы заключить тестируемое условие в круглые скобки следующим образом:

if (person has c permit)
  person can park
else
  person cannot park

Идеально! Мы псевдокодировали нашу первую инструкцию if / else.

О псевдокоде

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

Переменные

В кодировании переменная - это то, что может содержать небольшой фрагмент информации, такой как число, буква, логическое значение и т. Д. Думайте об этом как о кармане. Информация, хранящаяся в переменной, называется значением (ручка, телефон, кошелек). Переменная должна иметь имя, чтобы вы могли идентифицировать ее и ссылаться на нее (правый карман куртки). Переменная может содержать только одно значение за раз. Вы добавляете значение переменной, присваивая его с помощью знака равенства (=)

вот несколько примеров

a = 4
right jacket pocket = phone
person has c permit = true

Подобно нашему оператору if выше, переменные также имеют свои собственные правила. Как правило, при именовании переменной они должны быть буквенно-цифровыми (содержать только реальные буквы и цифры), не содержать пробелов или специальных символов (без эмодзи, извините), являются понятными и должны содержать буквы. Некоторые языки допускают подчеркивание (_) при именовании переменных для обозначения пробела. Переменная не может иметь то же имя, что и ключевое слово (поэтому переменные с именем «if»)

person has c permit = true
becomes
person_has_c_permit = true

Если мы применим это соглашение об именах к нашему оператору if, то теперь у нас будет

if (person_has_c_permit)
  person_can_park = true
else
  person_can_park = false

Вышеупомянутый действительный javascript (один из наиболее часто используемых языков программирования), поздравляю!

Это замечательно, но здесь мы рассматриваем только одно выражение if. Давайте расширим его до всех 4 и посмотрим, работает ли это.

if (person_has_c_permit)
  person_can_park = true
else
  person_can_park = false
if (are_we_monday_thru_saturday)
  person_can_park = true
else
  person_can_park = false
if (time_is_between_8am_and_9pm)
  person_can_park = true
else
  person_can_park = false
if (has_it_been_less_than_2_hours)
  person_can_park = true
else
  person_can_park = false

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

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

if (person_has_c_permit)
  person_can_park = true
  stop
if (are_we_monday_thru_saturday)
  ??
else
  person_can_park = false
  stop

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

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

if (are_we_monday_thru_saturday)
  if (time_is_between_8am_and_9pm)
    etc etc etc
else
  person_can_park = false
  stop

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

if (are_we_monday_thru_saturday is false )
  person_can_park = false
  stop

Или еще лучше, поскольку парковаться нельзя только по воскресеньям, мы можем сделать следующее:

if (are_we_sunday)
  person_can_park = false
  stop

Условные операторы

Условный оператор - это способ сравнения двух значений. Пока что мы делаем это:

if (person_has_c_permit)

что на самом деле является сокращением этого

if (person_has_c_permit is true)

Но что, если бы мы хотели проверить, ложно ли оно, а не истинно? Или что, если вы хотите проверить, что мы сейчас после 8 утра?

Здесь пригодятся условные операторы. Результатом условного оператора всегда является логическое значение истина или ложь.

Вот самые распространенные из них:

Equals ==
if (3 == 2)
Answer: Is 3 the same as 2? The result is false
Not Equal to !=
if (3 != 2)
Answer: Is 3 not the same as 2? The result is true
Greater than
if (3 > 2)
Answer: Is 3 greater than 2, The result is true
Less than
if (3 < 2)
Answer: Is 3 less than 2, The result is false
Greater than or equal to
if (3 >= 2)
Answer: Is 3 greater than or equal to 2, The result is false
Less than or equal to
if (3 <= 3)
Answer: Is 3 less than or equal to 3, The result is true

Как видите, все довольно просто. Следует быть осторожным, чтобы равенство записывалось как ==, а не просто =. Причина в том, что для присвоения значения переменной используется единственное равенство (=). Должен быть способ различать присвоение переменной и проверку того, совпадают ли два значения, отсюда и двойной знак равенства.

This will assign the value 1 to the variable amount
amount = 1
This will check to see if the value of amount is 1
amount == 1

Изменение значений в переменных

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

amount = 1
amount = 2
if (amount == 2)
  dothis
else 
  dothat

В приведенном выше примере значение 1 присвоено сумме. Затем значение 2 добавляется к сумме, что означает, что теперь эта сумма равна 2. Оператор if запускает блок dothis.

Математика

Вы даже можете заниматься математикой с переменными

amount = 1
amount = amount + 1

сумма теперь равна 2

Общие математические операторы:

+ (addition)
- (subtraction)
/ (division)
* (multiplication)

Краткое резюме

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

Переменная - это способ хранения небольших фрагментов информации.

amount = 6

Вы также можете выполнять математику с переменными

a = 4 - 2 (the value of a is now 2)
b = 4 - a (the value of b is 4 - a, so 4 - 2. b is now 2)

Оператор if проверяет, является ли что-то истинным или ложным, иначе это называется логической проверкой.

Значение, которое вы проверяете в инструкции if, заключено в круглые скобки.

if (canIPark)

else - это путь, по которому ваш код пойдет, если оператор if окажется ложным.

if (can_i_park)
  park
else 
  don't park

Вы используете условные операторы для проверки различных условий

if (can_i_park == true)
if (amount > 4)

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

if (can_i_park)
if (can_i_park == true)
if (can_i_park != false)

Решаем наш знак парковки

Теперь у нас достаточно информации, чтобы раз и навсегда решить проблему знака парковки.

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

can_i_park
has_c_permit
current_day
current_time
parking_duration

Давайте создадим сценарий, в котором 14:00 понедельника и мы хотим припарковаться на 20 минут. У нас нет разрешения C.

can_i_park = true (we're assuming that you can park by default)
has_c_permit = false
current_day = "monday"
current_time = 14
parking_duration = 20

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

current_day = "monday"

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

current_time = 14

Вам не нужны кавычки для чисел, так как переменная должна содержать букву в своем имени (это соглашение об именах для большинства языков, многие из них требуют, чтобы первый символ в имени переменной был буквой). Мы используем 24-часовую нотацию, чтобы упростить задачу и не иметь дело со сценариями до и после полудня. Итак, 14 = 14 часов или 14:00.

parking_duration = 20

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

Завершаем наши операторы if

Пришло время написать все наши операторы if.

if (has_c_permit) 
  can_i_park = true
  stop

Затем мы проверим, будем ли мы с понедельника по субботу. Или еще лучше, давайте проверим, воскресенье ли сейчас, и тогда мы поймем, что не можем припарковаться. В кодировании все чувствительно к регистру, поэтому, если вы присвоили переменной «воскресенье», вам нужно будет сравнивать «воскресенье», а не «воскресенье». Также напоминаем, что двойные кавычки означают, что мы ищем слово воскресенье, а не переменную с именем воскресенье.

if (current_day == "sunday")
  can_i_park = false
  stop

Мы не можем здесь припарковаться, если текущее время меньше 8 (8 утра).

if (current_time < 8)  
  can_i_park = false
  stop

Мы также не можем припарковаться после 21 (21:00).

if (current_time > 21)
  can_i_park = false
  stop

И / ИЛИ

В приведенных выше примерах, если время меньше 8 или больше 21, мы делаем то же самое. Поскольку результат всегда один и тот же и мы не любим повторяться, мы объединяем операторы if, используя «или», которое обозначается символом ||.

if (current_time < 8 || current_time > 21)

Это читается как «если текущее время меньше 8 ИЛИ текущее время больше 21».

В качестве альтернативы мы также можем использовать «и» (обозначается &&) для объединения двух операторов if.

if (a == b && b == 2)

Это читается как «, если a равно b, а b равно 2».

Теперь нам нужно увидеть, припарковался ли человек дольше 20 минут. Поскольку мы работаем с минутами, нам нужно преобразовать 2 часа в минуты.

if (parking_duration > 60 * 2)
  can_i_park = false
  stop

Вот окончательный результат все вместе

can_i_park = true
has_c_permit = false
current_day = "monday"
current_time = 14
parking_duration = 20
if (has_c_permit) 
  can_i_park = true
  stop
if (current_day == "sunday")
  can_i_park = false
  stop
if (current_time < 9 || current_time > 21)  
  can_i_park = false
  stop
if (parking_duration > 60 * 2)
  can_i_park = false
  stop

Вот и все! Вот как вы кодируете знак парковки.

Заключительное прохождение

В нашем первоначальном сценарии мы сказали:

Давайте создадим сценарий, в котором 14:00 понедельника и мы хотим припарковаться на 20 минут. У нас нет разрешения C.

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

В первом операторе if у нас нет разрешения c, поэтому мы никогда не входим в этот поток.

Кроме того, сегодня не воскресенье, поэтому мы не будем вдаваться в это второе выражение if.

Текущее время - 14 (14 часов), что не меньше 9 и не больше 21, поэтому мы не будем вдаваться в подробности этого оператора if.

Мы парковаемся всего на 20 минут, поэтому продолжительность парковки не превышает 120 (60 * 2).

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

Попробуйте это с несколькими разными сценариями и посмотрите, сработает ли это. Что, если сейчас воскресенье? Что делать, если у меня есть разрешение C? Что делать, если я задержусь на парковке? Вы заметите, что каждый сценарий даст вам одинаковый ожидаемый результат.

Заключение

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

Может показаться, что вы знаете только, как решить эту проблему, но на самом деле кодирование сводится к нескольким простым принципам, которые я рассмотрел в этой статье. Есть еще несколько вещей, которые вам нужно будет изучить, например, циклы, функции, объекты и чтение ввода. Я расскажу об этом в следующих статьях, поэтому, если вы хотите узнать больше, подписывайтесь на меня на Medium.

Последняя вещь

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

var can_i_park = true;
var has_c_permit = false;
var current_day = "monday";
var current_time = 14;
var parking_duration = 20;
function parkingTest() {
if (has_c_permit) {
        can_i_park = true;
        alert(can_i_park);
        return;
    }
if (current_day == "sunday") {
        can_i_park = false;        
        alert(can_i_park);
        return;
    }
if (current_time < 9 || current_time > 21) {
        can_i_park = false;
        alert(can_i_park);
        return;
    }
if (parking_duration > 60 * 2) {
        can_i_park = false;
        alert(can_i_park);
        return;
    }
    return alert(can_i_park);
}
parkingTest();

Это не лучшее решение, но оно работает. Вы можете увидеть это в действии здесь. Вы получите уведомление "верно". Измените значения переменных и нажмите Выполнить, чтобы проверить все различные ситуации.

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

Спасибо за прочтение!