Php занятие 3. условные операторы

Логические операторы

В JavaScript различают следующие логические операторы:

  • — логическое «И»;
  • — логическое «ИЛИ»;
  • -логическое «НЕ».

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

false && false // false
true && false // false
false && true // false
true && true // true

Если в логическом выражении используются не булевы значения, то результатом этого выражения будет operand1, если его можно привести к false; иначе результатом этого выражения будет operand2.

5 && 0 // 0
1 && 5  // 5
'строка' && undefined // undefined
'строка1' && 'строка2' // 'строка2'

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

false || false // false
true || false // true
false || true // true
true || true // true

Если в логическом выражении используются не булевы значения, то результатом этого выражения будет operand1, если его можно привести к true; иначе результатом этого выражения будет operand2.

5 || 0 // 5
1 || 5  // 1
'строка' || undefined // 'строка'
'строка1' || 'строка2' // 'строка1'

Результатом логического выражения будет значение true, если operand1 равно false или его можно привести к этому значению; иначе результатом этого выражения будет значение false.

!false // true
!true // false
!'строка' // false
!5 // false'

Конструкция if-else-if

Поиск на других ресурсах:

1. Какая общая форма конструкции if-else-if?

Общая форма оператора if-else-if имеет вид:

if (условие1)
    оператор1;
else
if (условие2)
    оператор2;
else
...
if (условиеN)
    операторN;
else
    оператор;

где

  • условие1, условие2, …, условиеN – условное выражение, содержащее операции отношения;
  • оператор, оператор1, оператор2, операторN – один или несколько операторов.

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

Если после выполнения условия нужно выполнить несколько операторов, то они обрамляются блоком { }.

2. Какой управляющий оператор заменяется конструкцией if-else-if?

Конструкция вида if-else-if может заменять оператор выбора switch.

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

Решение с помощью оператора switch:

int day;
boolean f_DayOff;

day = 7;
f_DayOff = false;

// реализация с оператором switch
switch (day)
{
    case 1: f_DayOff = false; break;
    case 2: f_DayOff = false; break;
    case 3: f_DayOff = false; break;
    case 4: f_DayOff = false; break;
    case 5: f_DayOff = false; break;
    case 6: f_DayOff = true; break;
    case 7: f_DayOff = true; break;
}

Решение задачи с использованием оператора if-else-if

int day;
boolean f_DayOff;

// ...
f_DayOff = false;

// конструкция if-else-if
if (day==1) f_DayOff = false;
else
if (day==2) f_DayOff = false;
else
if (day==3) f_DayOff = false;
else
if (day==4) f_DayOff = false;
else
if (day==5) f_DayOff = false;
else
if (day==6) f_DayOff = true;
else
if (day==7) f_DayOff = true;
3. Примеры использования конструкции if-else-if

Пример 1. Разработать программу вывода названия месяца, если он задан целым числом от 1 до 12. В программе использовать оператор if-else-if.

Фрагмент кода, решающий данную задачу:

int month; // номер месяца
String MONTH = ""; // название месяца

// ввод month
// ...

if (month==1) MONTH = "January";
else
if (month==2) MONTH = "February";
else
if (month==3) MONTH = "March";
else
if (month==4) MONTH = "April";
else
if (month==5) MONTH = "May";
else
if (month==6) MONTH = "June";
else
if (month==7) MONTH = "July";
else
if (month==8) MONTH = "August";
else
if (month==9) MONTH = "September";
else
if (month==10) MONTH = "October";
else
if (month==11) MONTH = "November";
else
if (month==12) MONTH = "December";

System.out.println(MONTH);

Пример 2. Разработать программу определения числа дней в месяце, если он задан номером от 1 до 12.

Фрагмент кода, решающий данную задачу

int month;
int n_days;

// ввод month
// ...

if ((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10))
    n_days = 31;
else
if (month==2)
    n_days = 28;
else
    n_days = 30;

Пример 3. Дано целое число n (1 ≤ n ≤ 4) и вещественное число x. По данному значению переменной n, которое есть номером функции, определить:

  • 1) cos x;
  • 2) tg x;
  • 3) sin x;
  • 4) ctg x.

Фрагмент кода, решающий данную задачу:

int n;
double f,x;

// ввод x, n
// ...

if (n==1) f = Math.cos(x);
else
if (n==2) f = Math.tan(x);
else
if (n==3) f = Math.sin(x);
else
    f = Math.cos(x)/Math.sin(x);
  • Оператор условного перехода if
  • Оператор выбора switch

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

Условный оператор if может использоваться в форме полной или неполной развилки.

Неполная развилка Полная развилка

1234

if (Условие){  БлокОпераций1;}

12345678

if (Условие){  БлокОпераций1;}else{  БлокОпераций2;}

В случае неполной развилки если Условие истинно, то БлокОпераций1 выполняется, если Условие ложно, то БлокОпераций1 не выполняется.
В случае полной развилки если Условие истинно, то выполняется БлокОпераций1, иначе выполняется БлокОпераций2.БлокОпераций может состоять из одной операции. В этом случае наличие фигурных скобок, ограничивающих блок, необязательно.
Основными операциями, проверяемыми внутри условного блока, являются операции отношения.Пример на C:

1234567891011121314

#define _CRT_SECURE_NO_WARNINGS // для возможности использования scanf#include <stdio.h>int main(){  int k;           // объявляем целую переменную k  printf(«k= «);   // выводим сообщение  scanf(«%d», &k); // вводим переменную k  if (k >= 5)      // если k>5    printf(«%d >= 5», k); // выводим «ЗНАЧЕНИЕ >= 5»  else             // иначе    printf(«%d < 5», k);  // выводим «ЗНАЧЕНИЕ < 5»  getchar(); getchar();  return 0;}

ifПример на C

123456789101112131415161718

#define _CRT_SECURE_NO_WARNINGS // для возможности использования scanf#include <stdio.h>#include <stdlib.h> // для использования функции systemint main() {  int key;  // объявляем целую переменную key  system(«chcp 1251»); // переходим в консоли на русский язык  system(«cls»);       // очищаем окно консоли  printf(«Введите номер пункта, 1 или 2: «);  scanf(«%d», &key);   // вводим значение переменной key  if (key == 1)        // если key = 1    printf(«\n Выбран первый пункт»); // выводим сообщение  else if (key == 2)   // иначе если key = 2    printf(«\n Выбран второй пункт»); // выводим сообщение  else                 // иначе    printf(«\n Первый и второй пункты не выбраны»); // выводим сообщение  getchar(); getchar();  return 0;}

Результат выполнения

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

123456789101112131415161718

#define _CRT_SECURE_NO_WARNINGS // для возможности использования scanf#include <stdio.h>#include <stdlib.h> // для использования функции systemint main() {  int key;  // объявляем целую переменную key  system(«chcp 1251»); // переходим в консоли на русский язык  system(«cls»);       // очищаем окно консоли  printf(«Введите номер пункта, 1 или 2: «);  scanf(«%d», &key);   // вводим значение переменной key  if (key != 1) {      // если key не равен 1    if (key == 2)    // если key равен 2      printf(«\n Выбран второй пункт»); // вывод сообщения  }              // если key — не 1 и не 2, то ничего не выводится  else // иначе, если key равен 1    printf(«\n Выбран первый пункт»); // вывод сообщения  getchar(); getchar();  return 0;}

Логические операторы

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

-not

Использование этого оператора переворачивает результат. Если результат значения равен False, то используя not, выражение все равно будет выполнен:

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

У -not есть алиас в виде восклицательного знака ! :

-and

And позволяет связывать несколько значений. Условие будет выполнено только в том случае, если все значения будут True:

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

Мы так же можем проверять существование нескольких значений:

-or

Отличия -and от -or в том, что нам достаточно получить True только от одного выражения:

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

Вам так же будет интересно:

Оператор if

Оператор if является наиболее простым из операторов ветвлений.

Синтаксис оператора :

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

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

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

Следующий код демонстрирует применение оператора :

<?php

$a1 = 5;

// Если значение переменной меньше 100, выполнить инструкцию, следующую за оператором if
if ($a1 < 100)
  echo "Число $a1 меньше, чем 100";
  
// переменная $username никак не инициализирована: по умолчанию значение null
// с помощью оператора (Логическое НЕ) инвертируем значение в TRUE
if (!$username) {
  $username = "User";
  // и выводим имя пользователя на экран
  echo $username;
}

?>

Операторы могут быть вложенными в другие операторы :

<?php
  
  $a = 0;
  $b = 50;
  $i = 10;
  $j = 15;
  
  // Если выражение "i == 10" возвращает true
  if($i == 10)
    // то выполняется проверка условного выражения вложенного оператора if
    if ($j < 20) $a = $b;
 
?>

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

Условия в массивах

Когда мы работаем с коллекциями, массивами или листами проверка вхождений работает немного иначе чем в предыдущих примерах

Тут важно учитывать не только порядок, но и логику:

Этот пример так же будет работать с логическими операторами:

Обратите внимание, что в случае с -ne, который ищет неравенство, результат будет True если хотя бы одно число и строка не совпадает с указанной:

Когда используются операторы типа ge, lt и другие, результат будет True если хотя бы одно из значений будет больше:

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

-contains

При использовании contains у нас возвращаются булевы значения True и False и является более логичным для проверки массивов:

Другие варианты использования:

  • contains — без учета регистра;
  • ccontains — с учетом регистра;
  • notcontains — отсутствие значения без учета регистра;
  • cnotcontains — отсутствие значение с учетом регистра.

-in

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

Доступные варианты:

  • in — регистр не имеет значения;
  • cin — регистр имеет значение;
  • notin — отсутствие вхождения, регистр не имеет значения;
  • cnotin — отсутствие вхождения, регистр имеет значения.

Больше примеров можно увидеть в статье Работа с массивом в Powershell и листами на примерах.

Оператор switch

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

Оператор switch предназначен именно для таких ситуаций. За ключевым словом switch следует выражение в скобках и блок кода в фигурных скобках:

switch(выражение) { 
   инструкции
}

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

Когда выполняется оператор switch, он вычисляет значение выражения, а затем ищет метку case, соответствующую этому значению (соответствие определяется с помощью оператора идентичности ===). Если метка найдена, выполняется блок кода, начиная с первой инструкции, следующей за меткой case. Если метка case с соответствующим значением не найдена, выполнение начинается с первой инструкции, следующей за специальной меткой default:. Если метка default: отсутствует, блок оператора switch пропускается целиком.

Работу оператора switch сложно объяснить на словах, гораздо понятнее выглядит объяснение на примере. Следующий оператор switch эквивалентен повторяющимся операторам if/else, показанным в предыдущем примере:

Обратите внимание на ключевое слово break в конце каждого блока case. Оператор break приводит к передаче управления в конец оператора switch и продолжению выполнения операторов, следующих далее

Конструкции case в операторе switch задают только начальную точку выполняемого программного кода, но не задают никаких конечных точек.

В случае отсутствия операторов break оператор switch начнет выполнение блока кода с меткой case, соответствующей значению выражения, и продолжит выполнение операторов до тех пор, пока не дойдет до конца блока. В редких случаях это полезно для написания программного кода, который переходит от одной метки case к следующей, но в 99% случаев следует аккуратно завершать каждый блок case оператором break. (При использовании switch внутри функции вместо break можно использовать оператор return. Оба этих оператора служат для завершения работы оператора switch и предотвращения перехода к следующей метке case.)

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

Обратите внимание, что в двух предыдущих примерах за ключевыми словами case следовали числа или строковые литералы. Именно так оператор switch чаще всего используется на практике, но стандарт ECMAScript позволяет указывать после case произвольные выражения

Оператор switch сначала вычисляет выражение после ключевого слова switch, а затем выражения case в том порядке, в котором они указаны, пока не будет найдено совпадающее значение. Факт совпадения определяется с помощью оператора идентичности ===, а не с помощью оператора равенства ==, поэтому выражения должны совпадать без какого-либо преобразования типов.

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

Как объяснялось ранее, если ни одно из выражений case не соответствует выражению switch, оператор switch начинает выполнение оператора с меткой default:. Если метка default: отсутствует, тело оператора switch полностью пропускается

Обратите внимание, что в предыдущих примерах метка default: указана в конце тела оператора switch после всех меток case. Это логичное и обычное место для нее, но на самом деле она может располагаться в любом месте внутри оператора switch

Сравнение строк

Как вы видите,
сравнение двух числовых значений выполняется вполне очевидным образом. Но можно
ли, например, сравнивать строки между собой? Оказывается да, можно. Чтобы
определить, что одна строка больше другой, Python использует
«алфавитный» или «лексикографический» порядок. Другими словами, строки сравниваются
посимвольно. Например:

print('Я' > 'А' )
print( 'Кот' > 'Код' )
print( 'Сонный' > 'Сон' )

Алгоритм
сравнения двух строк довольно прост:

  1. Сначала
    сравниваются первые символы строк.

  2. Если первый
    символ первой строки больше (меньше), чем первый символ второй, то первая
    строка больше (меньше) второй.

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

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

В примерах выше
сравнение ‘Я’ > ‘А’ завершится на первом шаге, тогда как строки
«Кот» и «Код» будут сравниваться посимвольно:

  1. К равна К.
  2. о равна о.
  3. т больше чем д.

Оператор условий if else в R

В языке программирования R оператор условий if else состоит из трех элементов:

  1. индикатор структуры: if, else или else if (в случае, когда условий больше одного)
  2. условие структуры, заключенного в круглые скобки (где находится условие для выполнения действия).
  3. тело структуры, заключенного в фигурные скобки (где находится код самого действия)

Пример 1: покупай больше, плати меньше — if без else

Давайте создадим простейший вариант структуры if else, когда есть только одно условие при соблюдении которого, требуется выполнить дополнительное действие в сценарии. Допустим, в магазине акция: при покупке на сумму от 100$, предоставляется 12.5% скидка. Сколько мы в итоге потратим если наша покупка (x) была на сумму 120$?

Итак, в скобках находится условие, что общая стоимость покупок будет меняться только в случае, если x >= 100. Внутри фигурных скобок отображен код, иллюстрирующий механизм изменения финальной стоимости. Как Вы видите, индикатор else был не указан в конструкции. Мы его опустили, так как в случае, если x < 100, то никаких действий производиться не будет.

Следует также отметить, что для того, чтобы изменить показатель x, и проверить финальную цену, нам придется запускать весь код конструкции заново. Это непрактично, именно поэтому конструкцию if else чаще всего используют внутри функции. Давайте создадим и запустим функцию с оператором условий if else внутри.

Пример 2: прогрессивная система скидок — индикатор else if

Добавим второе условие: если сумма покупок больше или равна 1000$, то магазин предоставит 25% скидку. Для этого условия мы будем использовать индикатор else if. В этом случае, нужно также изменить параметры первого условия, где x должно быть больше или равно 100, но меньше 1000. Если же ни первое, ни второе условие не соблюдается, то выведем на экран сообщение «No discounts» после финальной цены при помощи индикатора else.

Также внутрь оператора условий if else можно вставить другой оператор if else, либо циклы while или for. Подобное свойство вложения управляющих структур позволяет реализовывать сложные многоуровневые сценарии (алгоритмы) на практике, создавая функции с несколькими аргументами, и множеством условий и циклов внутри.

Оператор ветвления языка Си If

Оператор ветвления if (англ. «если») необходим в тех случаях, когда надо решить, должна ли быть выполнена конкретная инструкция программы .
Рассмотрим синтаксис условного оператора:

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

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

Операторы отношения, используемые в условии:

Оператор Значение Пример
== равно if (x == 0.06)
> больше if (s > 40)
меньше if (s
>= больше или равно if (y >= 10000)
меньше или равно if (t
!= не равно if (count != 1)

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

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

gets(name);
if (name == "Петя")
	puts("Приходи в гости");

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

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

В ситуации, когда при истинности условия должен быть выполнен один набор инструкций, а в противном случае — другой, используется конструкция :

If (условие)
 оператор1;
else 
 оператор2;

Пример:
Запрашивать в программе время. Если уже более 11 часов выводить сообщение «Пора домой», в противном случае — «еще рано!»

1
2
3
4
5
6
7
8
9
main()
{
int   time;
scanf("%d", &time);
if   (time>11)   
	puts ("Пора домой");
else   
	puts ("еще рано!");
}

Задача с 2_1: Дракон каждый год отращивает по три головы, но после того, как ему исполнится 100 лет — только по две

Сколько голов и глаз у дракона, которому N лет?

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

Оператор ИЛИ означает, что для выполнения оператора if достаточно истинности одного из двух или одновременно обоих условий.

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

Оператор отрицания означает, что оператор if выполняется, если некое условие оказалось ложным.

Пример: Принцесса выбирает претендентов-женихов, которые соответствуют следующим параметрам: рост менее 180 см, цвет глаз — голубой.
Задача сложна тем, что в ней присутствует строковая переменная. Для правильной работы необходимо «разложить» строковую переменную на символы:

color="blue"; 
color='b'; color1='l'; color2='u'; color3='e';

Показать решение:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>
main()
{
char color9;
int rost;
puts("what color?");
scanf("%s",&color);
puts("what rost?");
scanf("%d",&rost);
if(color=='b' && color1=='l' && color2=='u' && color3=='e' && rost<180)
	puts("podhodite!!!");
else 
	puts("good bye!");
}

Показать аналог в Паскаль:

1
2
3
4
5
6
7
8
9
10
11
12
var colorstring;
rostinteger;
begin
writeln ('kakov zvet glaz?');
readln(color);
writeln('kakov rost?');
readln(rost);
if (color='blue') and (rost<180) then
   writeln('podhodite')
   else
   writeln('good bye!')
end.

Операторы сравнения

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

-eq проверка эквивалентности

С помощью оператора -eq можно проверить полное соответствие между значениями. Для примера это может быть строка или число:

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

Powershell, по умолчанию, не является зависимым от регистра. Это значит, что «Строка» и «строка» будут эквивалентны друг другу. Что бы проверить равенство с учетом регистра нужно использовать -ceq:

Самые первые примеры, которые были показаны выше, являются сокращенным вариантом написания с оператором -eq:

Важно понять работу следующего примера:

Так как проверка на эквивалентность $false правдива, результат работы условия будет True.

-ne или не соответствие

Когда нужно проверить отсутствие конкретного значения используется команда -ne:

Как уже писалось выше, если первое условие возвращает True второе выполняться не будет:

Так же как и в предыдущем случае если оператор учета регистра -cne.

Для примера так мы запустим сервис, если он не равен Running:

-gt -ge -lt -le проверка на большее и меньшее значение

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

Дословно операторы выше переводятся как Less than (меньше чем) и Gt (больше чем) и именно поэтому выполняется условие else. Другие операторы, включающие букву ‘e’ вместо ‘t’ выполняют так же проверку на равенство, например ge — Greater or equal  (больше или равно). Таких операторов достаточно много:

  • gt — больше чем;
  • cgt — больше чем, но с учетом регистра;
  • ge — больше или равно;
  • cge — больше или равно с учетом регистра;
  • lt — меньше чем;
  • clt — меньше чем, но с учетом регистра;
  • le — меньше чем или равно;
  • cle — меньше чем или равно с учетом регистра.

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

-like проверка вхождений

В Powershell есть возможность проверки вхождений используя -like и определенный синтаксис:

  • ? — обозначение единственного пропущенного символа;
  • * —  обозначение любого количества пропущенных символов.

Выше мы проверяли начинается ли строка с символов AD. Если бы мы искали конец строки нужно было указывать символ * до последнего элемента:

Варианты использования:

  • like — поиск вхождения, не чувствителен к регистру;
  • clike — поиск вхождения, чувствителен к регистру; 
  • notlike — проверка на отсутствие вхождения, не чувствителен к регистру;
  • cnotlike — проверка на отсутствие вхождения, чувствителен к регистру.

-match использование регулярных выражений

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

Если не указывать маску/шаблон, то match будет искать по полному совпадению:

Так же есть несколько вариантов использования регулярных выражений:

  • match — регулярные выражения не чувствительные к регистру:
  • cmatch — чувствительные к регистру;
  • notmatch — поиск не совпадающих, не чувствительных к регистру значений;
  • cnotmatch — поиск не совпадающих, чувствительных к регистру значений.

-is проверка типов

Часто бывает необходимость проверить тип данных перед дальнейшем использованием. Использование сложения со строкой и числом приводит к разным последствиям. Для избежания этих проблем нужно проверять типы. На примере ниже я проверяю является ли значение числом:

Таких типов данных в Powershell около 13:

  • — строка;
  • — 16-битовая строка Unicode;
  • — 8 битовый символ;
  • — целое 32 битовое число;
  • — целое 64 битовое число;
  • — булево значение True/False;
  • — 128 битовое число с плавающей точкой;
  • — 32 битовое число с плавающей точкой;
  • — 64 битовое число с плавающей точкой;
  • — тип данных даты и времени;
  • — объект xml;
  • — массив;
  • — хэш таблица.

Так же можно использовать ключ -isnot, который выполняет противоположные действия.

Условное выражение

У начинающих программистов иногда возникают трудности в связи с тем, что в условном (управляющем) выражении операторов if или ? могут стоять любые операторы, причем это не обязательно операторы отношения или логические (как в языках Basic или Pascal). В языке С значением результата управляющего выражения являются ИСТИНА или ЛОЖЬ, однако тип результата может быть любым скалярным типом. Считается, что любой ненулевой результат представляет значение ИСТИНА, а нулевой — ЛОЖЬ.

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

/* Деление первого числа на второе. */

#include <stdio.h>

int main(void)
{
  int a, b;

  printf("Введите два числа: ");
  scanf("%d%d", &a, &b);

  if(b) printf("%d\n", a/b);
  else printf("Делить на нуль нельзя.\n");

  return 0;
}

Если управляющее выражение b равно 0, то его результат представляет значение ЛОЖЬ и выполняется оператор else. В противном случае (b не равно нулю) результат представляет значение ИСТИНА и выполняется деление чисел.

В последнем примере оператор if можно записать так:

if(b != 0) printf("%d\n", a/b);

Но следует отметить, что такая форма записи избыточна, она может привести к генерации неоптимального кода, кроме того, это считается признаком плохого стиля. Переменная b сама по себе представляет значение ИСТИНА или ЛОЖЬ, поэтому сравнивать ее с нулем нет необходимости.

Оператор if/else

Оператор if — это базовый управляющий оператор, позволяющий интерпретатору JavaScript принимать решения или, точнее, выполнять операторы в зависимости от условий. Оператор if имеет две формы. Первая:

if (выражение) 
   оператор

В этой форме сначала вычисляется выражение. Если полученный результат является истинным, то оператор выполняется. Если выражение возвращает ложное значение, то оператор не выполняется. Например:

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

Ее синтаксис:

Вторая форма оператора if вводит конструкцию else, выполняемую в тех случаях, когда выражение возвращает ложное значение. Ее синтаксис:

if (выражение) 
   оператор1
else
   оператор2

Эта форма выполняет оператор1, если выражение возвращает истинное значение, и оператор2, если выражение возвращает ложное значение. Например:

Собираем конструкцию if-else с бонусом в виде значений по умолчанию

Представим, что у нас есть список с ценами продуктового магазина:

price_list = {'fish': 8,
              'beef': 7,
              'broccoli': 3,}

Мы хотим вывести цену товара, но понимаем, что не каждый товар находится в прайс-листе. Поэтому мы решили создать функцию:

def find_price(item):
    if item in price_list:
        return 'The price for {} is {}'.format(item, price_list)
    else:
        return 'The price for {} is not available'.format(item)
>>>find_price('fish')
'The price for fish is 8'
>>>find_price('cauliflower')
'The price for cauliflower is not available'

Шикарно. Оператор if-else делает именно то, что мы хотим: возвращает значение по умолчанию, когда элемент недоступен. Но мы дважды обращаемся к словарю и используем два оператора, чтобы вернуть почти одно и то же. Можем ли мы сделать лучше? Есть ли способ, который вернет значение по умолчанию в том случае, если элемент отсутствует в списке? К счастью, есть возможность сделать это с помощью метода словарей Python get()

def find_price(item):
    return 'The price for {} is {}'.format(item, price_list.get(
        item, 'not available'))

Метод get() ищет ключ и возвращает значение по умолчанию если такого ключа не находит. Код определенно выглядит короче, но работает ли он так, как мы хотим?

>>>find_price('fish')
'The price for fish is 8'
>>>find_price('cauliflower')
'The price for cauliflower is not available'

Миленько!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector