HEAD ======= >>>>>>> 0d2a519f0dd42f255611f2ea985fcc1a9e38f6b2
<<<<<<< HEAD ======= >>>>>>> 0d2a519f0dd42f255611f2ea985fcc1a9e38f6b2Теперь приступим к более сложным вещам. Мы рассмотрим 3 наиболее часто употребляемых управляющих конструкций. Этот материал считается очень важным для понимания программирования в целом и его ни в коем случае нельзя разбирать поверхностно. Можно сказать, что он является фундаментом для всех алгоритмов, задач и функций, поэтому просьба быть чуточку внимательнее.
Основными конструкциями являются:
if
for
while
Перед тем, как приступать к самому оператору if
, сделаем небольшое лирическое отступление и изучим логические операторы и операторы сравнения.
Перед тем, как приступать к самому оператору if
, сделаем небольшое лирическое отступление и изучим логические операторы и операторы сравнения.
С помощью операторов сравнения мы можем сравнивать объекты (числа/строки) друг с другом. Результатом операции сравнения является TRUE
/FALSE
, то есть логический тип.
Стандартные операторы сравнения:
a == b
- равен ли объект a объекту b?a != b
- не равен ли объект a объекту b?a > b
- больше ли объект a чем объект b?a < b
- меньше ли объект a чем объект b?a >= b
- больше или равен объект a чем объект b?a <= b
- меньше или равен объект a чем объект b?Зачастую объекты это числа.
<<<<<<< HEAD5 == 5
## [1] TRUE
5 != 5
## [1] FALSE
5 > 5
## [1] FALSE
5 < 5
## [1] FALSE
5 >= 5
## [1] TRUE
5 <= 5
## [1] TRUE
Есть некоторый нюанс. Иногда происходит следующее.
Так происходит потому, что в R есть точность до определенного знака. Чтобы избежать этого можно использовать функцию all.equal
.
Несколько логических выражений можно объединять. Рассмотрим простой пример. Когда вы заходите в VK, вам нужно ввести логин и пароль. Чтобы авторизоваться вам нужно ввести правильно и логин, и пароль. Если же вы ввели что-то неправильно, то вы не войдете в систему. В данном примере мы использовали логический оператор И, который обозначается как &&
.
Давайте попробуем соединить операторы сравнения вместе с логическими операторами. Пусть у нас есть число x
, и нам нужно определить, находится ли оно в диапозоне от 0 до 100.
В данном случае должны выполняться два условия: число должно быть больше 0 И (т.е. одновременно) меньше 100.
Сначала выполняются операторы сравнения, после чего выражение упрощается до вида TRUE && FALSE
. После чего выполняется логический оператор И.
Рассмотрим теперь логический оператор ИЛИ, который обозначается как ||
. Для него важно выполнение хотя бы одного условия. Например, вам нужно оплатить покупку в 400 рублей. Нужно чтобы у вас были деньги на карте или были наличные.
5 == 5
## [1] TRUE
5 != 5
## [1] FALSE
5 > 5
## [1] FALSE
5 < 5
## [1] FALSE
5 >= 5
## [1] TRUE
5 <= 5
## [1] TRUE
Есть некоторый нюанс. Иногда происходит следующее.
Так происходит потому, что в R есть точность до определенного знака. Чтобы избежать этого можно использовать функцию all.equal
.
Несколько логических выражений можно объединять. Рассмотрим простой пример. Когда вы заходите в VK, вам нужно ввести логин и пароль. Чтобы авторизоваться вам нужно ввести правильно и логин, и пароль. Если же вы ввели что-то неправильно, то вы не войдете в систему. В данном примере мы использовали логический оператор И, который обозначается как &&
.
Давайте попробуем соединить операторы сравнения вместе с логическими операторами. Пусть у нас есть число x
, и нам нужно определить, находится ли оно в диапозоне от 0 до 100.
В данном случае должны выполняться два условия: число должно быть больше 0 И (т.е. одновременно) меньше 100.
Сначала выполняются операторы сравнения, после чего выражение упрощается до вида TRUE && FALSE
. После чего выполняется логический оператор И.
Рассмотрим теперь логический оператор ИЛИ, который обозначается как ||
. Для него важно выполнение хотя бы одного условия. Например, вам нужно оплатить покупку в 400 рублей. Нужно чтобы у вас были деньги на карте или были наличные.
Ниже представлена таблица истинности для этих двух операторов.
a | b | a and b (a &&b) | a or b (a || b) | |
---|---|---|---|---|
TRUE | TRUE | TRUE | TRUE | |
TRUE | FALSE | FALSE | TRUE | |
FALSE | TRUE | FALSE | TRUE | |
FALSE | FALSE | FALSE | FALSE |
Еще одним логическим оператором является НЕ, которое обозначается как !
. Это отрицание в явном виде.
if
А теперь можно разобрать условный оператор if
. Зачастую действие алгоритма или какого-то кода может зависеть от условия. Например, у вас есть бот, который покупает акции. Когда цена акции меньше 100 он их покупает, а когда больше, продает.
Для такого типа задач и нужен условный оператор if
. Он выглядит следующим образом.
Условие (condition) должно принимать значения либо TRUE
, либо FALSE.
То есть иметь логический тип.
В нашей задаче с ботом условие (condition) это price > 100
.
Попробуем написать реальный код.
Пример №1 Представим, что есть некоторый прибор, который измеряет температуру какого-то устройства. Если она больше 80, то нужно написать, что температура очень высокая и это опасно. В обратном случае пишем, что все хорошо.
temp <- 100
if (temp > 80) {
print("Температура превысила порог в 80 градусов!")
}else{
print("Температура в норме.")
}
## [1] "Температура превысила порог в 80 градусов!"
temp <- 50
if (temp > 80) {
print("Температура превысила порог в 80 градусов!")
}else{
print("Температура в норме.")
}
## [1] "Температура в норме."
Если нам не очень важно сообщения о том, что все в норме, а нужно знать, только когда наступают проблемы, то можно обойтись и без else
:
Пример №2 Представим, что у нас есть потенциальных не 2, а 3 исхода. Например, нам нужно знать, что температура прибора в норме, что она близится к пороговым 80 градусам и что она достигла нашего максимального порога температуры. Тогда это можно сделать с помощью else if
или if внутри if
.
temp <- 70
if (temp >= 70 && temp < 80) {
print("Температура близится к 80 градусам!")
}else if (temp >= 80) {
print("Температура достигла максимального значения!")
} else {
print("Температура в норме")
}
## [1] "Температура близится к 80 градусам!"
temp <- 90
if (temp >= 70 && temp < 80) {
print("Температура близится к 80 градусам!")
}else if (temp >= 80) {
print("Температура достигла максимального значения!")
} else {
print("Температура в норме")
}
## [1] "Температура достигла максимального значения!"
=======
if
А теперь можно разобрать условный оператор if
. Зачастую действие алгоритма или какого-то кода может зависеть от условия. Например, у вас есть бот, который покупает акции. Когда цена акции меньше 100 он их покупает, а когда больше, продает.
Для такого типа задач и нужен условный оператор if
. Он выглядит следующим образом.
Условие (condition) должно принимать значения либо TRUE
, либо FALSE.
То есть иметь логический тип.
В нашей задаче с ботом условие (condition) это price > 100
.
Попробуем написать реальный код.
Пример №1 Представим, что есть некоторый прибор, который измеряет температуру какого-то устройства. Если она больше 80, то нужно написать, что температура очень высокая и это опасно. В обратном случае пишем, что все хорошо.
temp <- 100
if (temp > 80) {
print("Температура превысила порог в 80 градусов!")
}else{
print("Температура в норме.")
}
## [1] "Температура превысила порог в 80 градусов!"
temp <- 50
if (temp > 80) {
print("Температура превысила порог в 80 градусов!")
}else{
print("Температура в норме.")
}
## [1] "Температура в норме."
Если нам не очень важно сообщения о том, что все в норме, а нужно знать, только когда наступают проблемы, то можно обойтись и без else
:
Пример №2 Представим, что у нас есть потенциальных не 2, а 3 исхода. Например, нам нужно знать, что температура прибора в норме, что она близится к пороговым 80 градусам и что она достигла нашего максимального порога температуры. Тогда это можно сделать с помощью else if
или if внутри if
.
temp <- 70
if (temp >= 70 && temp < 80) {
print("Температура близится к 80 градусам!")
}else if (temp >= 80) {
print("Температура достигла максимального значения!")
} else {
print("Температура в норме")
}
## [1] "Температура близится к 80 градусам!"
temp <- 90
if (temp >= 70 && temp < 80) {
print("Температура близится к 80 градусам!")
}else if (temp >= 80) {
print("Температура достигла максимального значения!")
} else {
print("Температура в норме")
}
## [1] "Температура достигла максимального значения!"
temp <- 30
if (temp >= 70 && temp < 80) {
print("Температура близится к 80 градусам!")
}else if (temp >= 80) {
print("Температура достигла максимального значения!")
} else {
print("Температура в норме")
}
## [1] "Температура в норме"