Условные операторы
Содержание:
- 4. complex()
- Рекурсивные функции
- Тестирование объекта на None и присвоение ему
- Python Compound If Statement Example
- Арифметические операторы
- Что такое функция main()?
- Условный оператор if/elif/else, ветвление кода программы.
- Проверяет, что все элементы в последовательности True.
- Проверьте себя
- Проверьте себя!
- Python Tutorial
- Python NumPy
- Оператор elif
- Настройка видеокарты
- Как работает if else
- Python if else if Command Example
- 8.3. The for statement¶
- Оператор elif и конструкция if – elif – else
- 4.3. The range() Function¶
- Оператор if
- 4.6. Defining Functions¶
- Спецификация оператора for/in/else:
4. complex()
Рекурсивные функции
Рекурсия — это не особенность Python. Это общепринятая и часто используемая техника в Computer Science, когда функция вызывает сама себя. Самый известный пример — вычисление факториала n! = n * n — 1 * n -2 * … 2 *1. Зная, что 0! = 1, факториал можно записать следующим образом:
Другой распространенный пример — определение последовательности Фибоначчи:
Рекурсивную функцию можно записать так:
Важно, чтобы в ней было была конечная инструкция, иначе она никогда не закончится. Реализация вычисления факториала выше, например, не является надежной
Если указать отрицательное значение, функция будет вызывать себя бесконечно. Нужно написать так:
Если рекурсия содержит баги (например, длится бесконечно), функции может не хватить памяти. Задать максимальное значение рекурсий можно с помощью модуля .
Тестирование объекта на None и присвоение ему
Вы часто хотите назначить что — то объект , если он не является , указав , что он не был назначен. Мы будем использовать .
Самый простой способ сделать это состоит в использовании тест.
(Обратите внимание , что это не более Pythonic сказать вместо ). Но это может быть немного оптимизирована за счет использования понятия , что не оценит , чтобы в логическое выражение
Следующий код эквивалентен:
Но это может быть немного оптимизирована за счет использования понятия , что не оценит , чтобы в логическое выражение. Следующий код эквивалентен:
Но есть и более питонский способ. Следующий код также эквивалентен:
Это делает оценку короткого замыкания . Если инициализируется и не является , то он получает назначение в себе, без чистого эффекта. Если это , то получает назначение в .
Python Compound If Statement Example
The following example shows how you can use compound conditional commands in the if statement.
# cat if7.py a = int(input("Enter a: ")) b = int(input("Enter b: ")) c = int(input("Enter c: ")) if a < b < c: print("Success. a < b < c")
In the above:
The print block will get executed only when the if condition is true. Here, we are using a compound expression for the if statement where it will be true only when a is less than b and b is less than c.
The following is the output when if condition becomes true.
# python if7.py Enter a: 10 Enter b: 20 Enter c: 30 Success. a < b < c
The following is the output when if condition becomes false.
# python if7.py Enter a: 10 Enter b: 10 Enter c: 20
Арифметические операторы
Арифметические операторы обычно работают с числами. Есть операторы для сложения, вычитания, умножения, деления, модуля и экспоненциальных операций. Некоторые из этих операторов работают и со строками. Все арифметические операторы — специальные символы.
- +: оператор сложения;
- -: оператор вычитания;
- *: оператор умножения;
- /: оператор деления;
- **: экспоненциальный оператор;
- //: оператор деления этажей.
Давайте посмотрим на пример арифметических операторов в Python.
x = 15 y = 7 sum = x + y print("addition =", sum) subtraction = x - y print("subtraction =", subtraction) multiplication = x * y print("multiplication =", multiplication) division = x / y print("division =", division) modulus = x % y print("modulus =", modulus) exponent = x ** 2 print("exponent =", exponent) floor_division = x // y print("division =", floor_division) # 2
Вывод:
Python поддерживает операторы сложения и умножения для строк.
print("addition of strings =", ("Python" + " " + "Operators")) print("multiplication of strings =", ("Python" * 2))
Вывод:
addition of strings = Python Operators multiplication of strings = PythonPython
Что такое функция main()?
Main — это специальная функция, которая позволяет добавить больше логики в структуру программ. В Python можно вызвать функцию в нижней части программы, которая и будет запущена. Рассмотрим такой пример:
Копировать
Запустим этот код:
Можно увидеть, что выражение «Дайте печенье.» выводится до «Печенье вкусное!», потому что метод не вызывается вплоть до последней строки, а именно в этой функции хранится предложение «Печенье вкусное!».
Такой код работает, но его довольно сложно читать. В таких языках программирования, как C++ и Java весь основной код программы хранится внутри основной функции. Это хороший способ для распределения всего кода программы. Те, кто только знакомится с Python, но уже работал, например, с C++ будут благодарны за использование функции .
Условный оператор if/elif/else, ветвление кода программы.
Возможно, самый известный тип инструкций — это конструкция . Часто возникает необходимость, чтобы некоторый код выполнялся только при соблюдении определенного условия или код подлежащий выполнению, должен выбираться исходя из выполнения одного из нескольких взаимоисключающих условий.Например:
>>> x = int(input("Please enter an integer: ")) Please enter an integer 42 >>> if x < ... x = ... print('Negative changed to zero') ... elif x == ... print('Zero') ... elif x == 1 ... print('Single') ... else ... print('More') ... More >>>
Ключевое слово является сокращением от . Инструкции и могут отсутствовать и не являются обязательными. Инструкция может повторяться сколько угодно раз . Такая последовательность инструкций является заменой для конструкции или , которые есть в других языках программирования.
Составная инструкция , и обеспечивает условное выполнение блоков инструкций.Она имеет следующий синтаксис:
if выражение: блок кода elif выражение: блок кода elif выражение: блок кода ... ... else: блок кода
Конструкция вычисляет и оценивает выражения одно за другим, пока одно из них не окажется истинным, затем выполняется соответствующий блок кода . После выполнения блока кода первого истинного () выражения, последующие инструкции / не вычисляются и не оцениваются, а блоки кода в них не выполняется. Если все выражения ложны (), выполняется блок кода инструкции , если он присутствует.
В предложениях и в качестве условия можно использовать любое выражение Python. В подобных случаях говорят, что условие используется в логическом контексте. В логическом контексте любое выражение рассматривается как истинное или ложное. Любое ненулевое число или любой непустой контейнер (строка, кортеж, список, словарь, множество) расценивается как истинное значение. Нуль (любого числового типа), и пустой контейнер расцениваются как ложные значения. Для тестирования значения в логическом контекстеиспользуйте следующий стиль написания кода:
if x
Это наиболее ясная и соответствующая духу Python форма кода.
Примеры конструкций
Использование в конструкции :
a = None if a is not None print('a НЕ равно None') else print('a равно None')
Использование и в конструкции :
bul = False if bul print('bul = True') else print('bul = False')
Использование числа 0 в конструкции :
number = if number print('number не равно 0') else print('number = 0')
Использование числовых сравнений в конструкции :
a = 10 b = 20 if a != b and a > b print('a не равно b и a больше b') else print('a не равно b и a меньше b')
Вложенные конструкции :
a = 15 b = 3 if a != b if a > b print('a больше b') else print('a меньше b') else print('a равно b')
Проверка наличия слова в строке с помощью конструкции :
string1 = 'Привет мир' string2 = 'мир' if string2 in string1 print('Слово "мир" присутствует в строке "Привет мир"') else print('Слово "мир" отсутствует в строке "Привет мир"')
Проверка вхождения элемента в список с помощью конструкции :
a = 'bc' lst = list'ac', 'bc', , 1, 3, 'abc' if a in lst print('Значение "bc" входит в список', lst) else print('Значение "bc" не входит в список', lst)
Проверка вхождения элемента в кортеж с помощью конструкции :
a = 'bc' tpl = tuple('ac', 'bc', , 1, 3, 'abc') if a in tpl print('Значение "bc" входит в кортеж', tpl) else print('Значение "bc" не входит в кортеж', tpl)
Проверка вхождения элемента в множество с помощью конструкции :
a = 'bc' set_ = set'ac', 'bc', , 1, 3, 'abc' if a in set_ print('Значение "bc" входит в множество', set_) else print('Значение "bc" не входит в множество', set_)
Проверка наличия ключа в словаре с помощью конструкции :
Проверяет, что все элементы в последовательности True.
Описание:
Функция возвращает значение , если все элементы в итерируемом объекте — истинны, в противном случае она возвращает значение .
Если передаваемая последовательность пуста, то функция также возвращает .
Функция применяется для проверки на ВСЕХ значений в последовательности и эквивалентна следующему коду:
def all(iterable): for element in iterable if not element return False return True
Так же смотрите встроенную функцию
В основном функция применяется в сочетании с оператором ветвления программы . Работу функции можно сравнить с оператором в Python, только работает с последовательностями:
>>> True and True and True # True >>> True and False and True # False >>> all() # True >>> all() # False
Но между и в Python есть два основных различия:
- Синтаксис.
- Возвращаемое значение.
Функция всегда возвращает или (значение )
>>> all() # True >>> all(]) # False
Если в выражении все значения , то оператор возвращает ПЕРВОЕ истинное значение, а если все значения , то последнее ложное значение. А если в выражении присутствует значение , то ПЕРВОЕ ложное значение. Что бы добиться поведения как у функции , необходимо выражение с оператором обернуть в функцию .
>>> 3 and 1 and 2 and 6 # 6 >>> 3 and and 3 and [] # 0 >>> bool(3 and 1 and 2 and 6) # True >>> bool(3 and and 3 and []) # False
Из всего сказанного можно сделать вывод, что для успешного использования функции необходимо в нее передавать последовательность, полученную в результате каких то вычислений/сравнений, элементы которого будут оцениваться как или . Это можно достичь применяя функцию или выражения-генераторы списков, используя в них встроенные функции или методы, возвращающие значения, операции сравнения, оператор вхождения и оператор идентичности .
num = 1, 2.0, 3.1, 4, 5, 6, 7.9 # использование встроенных функций или # методов на примере 'isdigit()' >>> str(x).isdigit() for x in num # # использование операции сравнения >>> x > 4 for x in num # # использование оператора вхождения `in` >>> '.' in str(x) for x in num # # использование оператора идентичности `is` >>> type(x) is int for x in num # # использование функции map() >>> list(map(lambda x x > 1, num)) False, True, True, True, True, True, True
Примеры проводимых проверок функцией .
Допустим, у нас есть список чисел и для дальнейших операций с этой последовательностью необходимо знать, что все числа например положительные.
>>> num1 = range(1, 9) >>> num2 = range(-1, 7) >>> all() # True >>> all() # False
Или проверить, что последовательность чисел содержит только ЦЕЛЫЕ числа.
>>> num1 = 1, 2, 3, 4, 5, 6, 7 >>> num2 = 1, 2.0, 3.1, 4, 5, 6, 7.9 >>> all() # True >>> all() # False
Или есть строка с числами, записанными через запятую и нам необходимо убедится, что в строке действительно записаны только цифры. Для этого, сначала надо разбить строку на список строк по разделителю и проверить каждый элемент полученного списка на десятичное число методом . Что бы учесть правила записи десятичных чисел будем убирать точку перед проверкой строки на десятичное число.
>>> line1 = "1, 2, 3, 9.9, 15.1, 7" >>> line2 = "1, 2, 3, 9.9, 15.1, 7, девять" >>> all() # True >>> all() # False
Еще пример со строкой. Допустим нам необходимо узнать, есть ли в строке наличие открытой И закрытой скобки?
Проверьте себя
Вот случайное целое число: .
Нужно узнать две вещи о нем:
- Делится ли оно на 17 без остатка?
- В нем больше 12 цифр?
Если оба условия верны, тогда вернем .
Если одно из них ложно, тогда стоит запустить второй тест:
- Делится ли оно без остатка на 13?
- В нем больше 10 цифр?
Если оба условия верны, тогда вернем .
Если оригинальное число не определяется ни как , ни как , тогда выведем просто .
Итак: является ли число или или это просто случайное число?
Решение
— это число .
Рассмотрим подробнее код:
В первой строке число сохраняется в переменную, так что его не придется записывать каждый раз, а код будет смотреться изящнее: .
После этого создается последовательность условия if-elif-else.
В строке есть два условия. Первое — проверка, делится ли на 17 без остатка. Это часть . Во втором нужно подсчитать количество цифр в . Из-за ограничений языка сделать это нельзя, поэтому нужно преобразовать число в строку с помощью функции . После этого необходимо использовать функцию и узнать количество символов. Это часть .
Выходит, что оба оригинальных условия были верны, потому что на экран вывелось . Но если бы это было не так, следующая строка проделала бы то же самое, но проверяла, делится ли число на 13 (а не 17), а символов должно было быть больше 10 (не 12).
Если бы и это условие оказалось ложным, инструкция запустила бы .
Не так уж и сложно, не правда ли?
Проверьте себя!
Пришло время узнать, насколько вы разобрались с инструкцией if, циклами for и их объединением. Попробуйте решить следующее задание.
Создайте скрипт на Python, который узнает ваш возраст максимум с 8 попыток. Он должен задавать только один вопрос: угадывать возраст (например, «Вам 67 лет?»). Отвечать же можно одним из трех вариантов:
- correct
- less
- more
Основываясь на ответе, компьютер должен делать новые попытки до тех пор, пока не узнает корректный возраст.
Готовы? Вперед!
Решение
Вот код решения.
Примечание: решить задачу можно и с помощью цикла . Но поскольку он еще не рассматривался, был выбран вариант с for.
Логика решения следующая:
-
Устанавливаем диапазон от 0 до 100, предполагая, что возраст «игрока» будет где-то посередине.
-
Скрипт всегда спрашивает среднее значение диапазона (первой попыткой будет 50):
-
После получения ответа от «игрока» могут быть 4 возможных сценария:
-
Если ответ «меньше», тогда цикл начинается сначала, но перед этим максимальное значение диапазона устанавливается на уровне последнего предположения (Так, вторая итерация будет искать середину между 0 и 50).
-
То же самое для «больше» — только в этом случае меняется минимум:
-
И в конце обрабатываются ошибки или опечатки:
-
Python Tutorial
Python HOMEPython IntroPython Get StartedPython SyntaxPython CommentsPython Variables
Python Variables
Variable Names
Assign Multiple Values
Output Variables
Global Variables
Variable Exercises
Python Data TypesPython NumbersPython CastingPython Strings
Python Strings
Slicing Strings
Modify Strings
Concatenate Strings
Format Strings
Escape Characters
String Methods
String Exercises
Python BooleansPython OperatorsPython Lists
Python Lists
Access List Items
Change List Items
Add List Items
Remove List Items
Loop Lists
List Comprehension
Sort Lists
Copy Lists
Join Lists
List Methods
List Exercises
Python Tuples
Python Tuples
Access Tuples
Update Tuples
Unpack Tuples
Loop Tuples
Join Tuples
Tuple Methods
Tuple Exercises
Python Sets
Python Sets
Access Set Items
Add Set Items
Remove Set Items
Loop Sets
Join Sets
Set Methods
Set Exercises
Python Dictionaries
Python Dictionaries
Access Items
Change Items
Add Items
Remove Items
Loop Dictionaries
Copy Dictionaries
Nested Dictionaries
Dictionary Methods
Dictionary Exercise
Python If…ElsePython While LoopsPython For LoopsPython FunctionsPython LambdaPython ArraysPython Classes/ObjectsPython InheritancePython IteratorsPython ScopePython ModulesPython DatesPython MathPython JSONPython RegExPython PIPPython Try…ExceptPython User InputPython String Formatting
Python NumPy
NumPy IntroNumPy Getting StartedNumPy Creating ArraysNumPy Array IndexingNumPy Array SlicingNumPy Data TypesNumPy Copy vs ViewNumPy Array ShapeNumPy Array ReshapeNumPy Array IteratingNumPy Array JoinNumPy Array SplitNumPy Array SearchNumPy Array SortNumPy Array FilterNumPy Random
Random Intro
Data Distribution
Random Permutation
Seaborn Module
Normal Distribution
Binomial Distribution
Poisson Distribution
Uniform Distribution
Logistic Distribution
Multinomial Distribution
Exponential Distribution
Chi Square Distribution
Rayleigh Distribution
Pareto Distribution
Zipf Distribution
NumPy ufunc
ufunc Intro
ufunc Create Function
ufunc Simple Arithmetic
ufunc Rounding Decimals
ufunc Logs
ufunc Summations
ufunc Products
ufunc Differences
ufunc Finding LCM
ufunc Finding GCD
ufunc Trigonometric
ufunc Hyperbolic
ufunc Set Operations
Оператор elif
позволяет программе выбирать из нескольких вариантов. Это удобно, например, в том случае, если одну переменную необходимо многократно сравнить с разными величинами.
Такая конструкция может содержать сколь угодно большую последовательность условий, которые интерпретатор будет по порядку проверять.
Но помните, что первое условие всегда задается с
Также не стоит забывать, что как только очередное условие в операторе оказывается истинным, программа выполняет соответствующий блок инструкций, а после переходит к следующему выражению.
Из этого вытекает, что даже если несколько условий истинны, то исполнению подлежит все равно максимум один, первый по порядку, блок кода с истинным условием.
Если ни одно из условий для частей и не выполняется, то срабатывает заключительный блок под оператором (если он существует).
Настройка видеокарты
Иногда игра не может запуститься и работать в режиме полного экрана из-за устаревших или некорректных драйверов для видеокарты. Такая проблема решается с помощью или обновления драйверов, или их переустановкой. Для того, чтобы сделать это, необходимо, в зависимости от производителя видеокарты, выполнить следующие действия:
- Nvidia. Открыть панель управления, выбрать раздел nVidia и, уже в нем, регулирование масштабирования. При включении этого параметра игра должна будет расшириться до параметров дисплея.
- ATI. Запустить программу Catalyst Control Center и произвести аналогичные действия.
В большинстве случаев, если проблема касается видеокарты, эти проблемы решаются как раз изменением параметров масштабирования.
Как работает if else
Синтаксис
Оператор в языке Python – это типичная условная конструкция, которую можно встретить и в большинстве других языков программирования.
Синтаксически конструкция выглядит следующим образом:
- сначала записывается часть с условным выражением, которое возвращает истину или ложь;
- затем может следовать одна или несколько необязательных частей (в других языках вы могли встречать );
- Завершается же запись этого составного оператора также необязательной частью .
Принцип работы оператора выбора в Python
Для каждой из частей существует ассоциированный с ней блок инструкций, которые выполняются в случае истинности соответствующего им условного выражения.
То есть интерпретатор начинает последовательное выполнение программы, доходит до и вычисляет значение сопутствующего условного выражения. Если условие истинно, то выполняется связанный с набор инструкций. После этого управление передается следующему участку кода, а все последующие части и часть (если они присутствуют) опускаются.
Отступы
Отступы – важная и показательная часть языка Python. Их смысл интуитивно понятен, а определить их можно, как размер или ширину пустого пространства слева от начала программного кода.
Благодаря отступам, python-интерпретатор определяет границы блоков. Все последовательно записанные инструкции, чье смещение вправо одинаково, принадлежат к одному и тому же блоку кода. Конец блока совпадает либо с концом всего файла, либо соответствует такой инструкции, которая предшествует следующей строке кода с меньшим отступом.
Таким образом, с помощью отступов появляется возможность создавать блоки на различной глубине вложенности, следуя простому принципу: чем глубже блок, тем шире отступ.
Примеры
Рассмотрим несколько практических примеров использования условного оператора.
Пример №1: создание ежедневного бэкапа (например базы данных):
Пример №2: Проверка доступа пользователя к системе. В данном примере проверяет наличие элемента в списке:
Пример №3: Валидация входных данных. В примере к нам приходят данные в формате . Нам необходимо выбрать все записи определенного формата:
Python if else if Command Example
In Python, if else if is handled using if elif else format.
The following example shows how to use if..elif..else command in Python.
# cat if6.py code = raw_input("Type a 2-letter state code that starts with letter C: ") if code == 'CA': print("CA is California") elif code == 'CO': print("CO is Colorado") elif code == 'CT': print("CT is Connecticut") else: print("Invalid. Please enter a valid state code that starts with letter C") print("Thank You!")
In the above:
- When the first if code == ‘CO’ condition fails, then it goes to the next elif command.
- When the elif code == ‘CO’ condition fails, then it goes to the next elif code command.
- When the elif code == ‘CT’ condition fails, then it just executes whatever is available as part of the final else: block.
- At any point when the 1st if condition becomes true, or any one of the remaining elif condition becomes true, then it executes the statement that is part of its block and stops checking further condition.
- This also means that when any of the if condition or elif condition becomes true, the statement that is part of the else block will not get executed.
- Also, just like previous example, the colon at the end of if, elif, else command is part of the Python syntax, which should be specified.
The following is the output when the first if condition becomes true.
# python if6.py Type a 2-letter state code that starts with letter C: CA CA is California Thank You!
The following is the output when the first elif condition becomes true.
# python if6.py Type a 2-letter state code that starts with letter C: CO CO is Colorado Thank You!
The following is the output when the second elif condition becomes true.
# python if6.py Type a 2-letter state code that starts with letter C: CT CT is Connecticut Thank You!
The following is the output when the if condition is false, and all the remaining elif condition is also false. Here this, executes the else block.
# python if6.py Type a 2-letter state code that starts with letter C: NV Invalid. Please enter a valid state code that starts with letter C Thank You!
8.3. The for statement¶
The statement is used to iterate over the elements of a sequence
(such as a string, tuple or list) or other iterable object:
for_stmt ::= "for" "in" ":"
The expression list is evaluated once; it should yield an iterable object. An
iterator is created for the result of the . The suite is
then executed once for each item provided by the iterator, in the order returned
by the iterator. Each item in turn is assigned to the target list using the
standard rules for assignments (see ), and then the suite is
executed. When the items are exhausted (which is immediately when the sequence
is empty or an iterator raises a exception), the suite in
the clause, if present, is executed, and the loop terminates.
A statement executed in the first suite terminates the loop
without executing the clause’s suite. A
statement executed in the first suite skips the rest of the suite and continues
with the next item, or with the clause if there is no next
item.
The for-loop makes assignments to the variables in the target list.
This overwrites all previous assignments to those variables including
those made in the suite of the for-loop:
for i in range(10): print(i) i = 5 # this will not affect the for-loop # because i will be overwritten with the next # index in the range
Names in the target list are not deleted when the loop is finished, but if the
sequence is empty, they will not have been assigned to at all by the loop. Hint:
the built-in function returns an iterator of integers suitable to
emulate the effect of Pascal’s ; e.g.,
returns the list .
Оператор elif и конструкция if – elif – else
Вообще elif примерно расшифровывается, как else + if. Чтобы можно было реализовать программу, которая выбирала бы из нескольких альтернативных вариантов, используется указанная конструкция.
Рассмотрим код, в котором имеется несколько условий:
if balance < 0: print("Баланс ниже нуля, положите деньги на счет, чтобы Вам не выписали штраф") elif balance == 0: print("Баланс равен нулю, скорее внесите деньги на счет") else: print("Ваш баланс выше нуля, все хорошо")
Так, программа может рассмотреть варианты с тремя условиями. И если переменная balance будет равна 150, то перед пользователем появится надпись: Ваш баланс выше нуля, все хорошо.
Оператор elif позволяет упростить код. Сделать его легче читаемым. Позволяет избежать написание несколько условий if в Python.
4.3. The range() Function¶
If you do need to iterate over a sequence of numbers, the built-in function
comes in handy. It generates arithmetic progressions:
>>> for i in range(5): ... print(i) ... 1 2 3 4
The given end point is never part of the generated sequence; generates
10 values, the legal indices for items of a sequence of length 10. It
is possible to let the range start at another number, or to specify a different
increment (even negative; sometimes this is called the ‘step’):
range(5, 10) 5, 6, 7, 8, 9 range(, 10, 3) , 3, 6, 9 range(-10, -100, -30) -10, -40, -70
To iterate over the indices of a sequence, you can combine and
as follows:
>>> a = 'Mary', 'had', 'a', 'little', 'lamb' >>> for i in range(len(a)): ... print(i, ai]) ... 0 Mary 1 had 2 a 3 little 4 lamb
In most such cases, however, it is convenient to use the
function, see .
A strange thing happens if you just print a range:
>>> print(range(10)) range(0, 10)
In many ways the object returned by behaves as if it is a list,
but in fact it isn’t. It is an object which returns the successive items of
the desired sequence when you iterate over it, but it doesn’t really make
the list, thus saving space.
We say such an object is , that is, suitable as a target for
functions and constructs that expect something from which they can
obtain successive items until the supply is exhausted. We have seen that
the statement is such a construct, while an example of a function
that takes an iterable is :
>>> sum(range(4)) # 0 + 1 + 2 + 3 6
Later we will see more functions that return iterables and take iterables as
arguments. Lastly, maybe you are curious about how to get a list from a range.
Here is the solution:
>>> list(range(4))
Оператор if
С английского название этого оператора переводится, как «если». То есть он задает условие. После данного оператора записывается само выражение. Если оно оказывается истинным, то программа переходит к выполнению инструкции, заданной в указанном операторе. Выражение считается истинным, когда оно:
- не равно нулю;
- не является пустым;
- является логическим
Для ясности рассмотрим пример использования if — условия в Python 3:
if 3: print("Привет 3")
На экране перед пользователем появится запись: Привет 3.
Усложним код:
a = 6 if a == 6: print("Привет 2")
На дисплее компьютера отобразится: Привет 2.
Также можно задать условие формулой или условным выражением:
a = 5 if a > 2: print("Привет 3")
Переменная равна 5, условие, чтобы она была больше 2. Оно истинное, поэтому перед нами появится: Привет 3.
Еще более сложный вариант с несколькими переменными:
a = 0 b = 34 c = 10 if c < 100: a = b + c print(a)
Поскольку с действительно меньше 100, а станет равным 44, и именно это число появится на дисплее при выполнении данного кода. Если бы с изначально было большее 100, например, 110, то на экране бы отобразился 0, переменная а просто не изменилась бы вообще.
4.6. Defining Functions¶
We can create a function that writes the Fibonacci series to an arbitrary
boundary:
>>> def fib(n): # write Fibonacci series up to n ... """Print a Fibonacci series up to n.""" ... a, b = , 1 ... while a < n ... print(a, end=' ') ... a, b = b, a+b ... print() ... >>> # Now call the function we just defined: ... fib(2000) 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
The keyword introduces a function definition. It must be
followed by the function name and the parenthesized list of formal parameters.
The statements that form the body of the function start at the next line, and
must be indented.
The first statement of the function body can optionally be a string literal;
this string literal is the function’s documentation string, or docstring.
(More about docstrings can be found in the section .)
There are tools which use docstrings to automatically produce online or printed
documentation, or to let the user interactively browse through code; it’s good
practice to include docstrings in code that you write, so make a habit of it.
The execution of a function introduces a new symbol table used for the local
variables of the function. More precisely, all variable assignments in a
function store the value in the local symbol table; whereas variable references
first look in the local symbol table, then in the local symbol tables of
enclosing functions, then in the global symbol table, and finally in the table
of built-in names. Thus, global variables and variables of enclosing functions
cannot be directly assigned a value within a function (unless, for global
variables, named in a statement, or, for variables of enclosing
functions, named in a statement), although they may be
referenced.
The actual parameters (arguments) to a function call are introduced in the local
symbol table of the called function when it is called; thus, arguments are
passed using call by value (where the value is always an object reference,
not the value of the object). When a function calls another function, a new
local symbol table is created for that call.
A function definition associates the function name with the function object in
the current symbol table. The interpreter recognizes the object pointed to by
that name as a user-defined function. Other names can also point to that same
function object and can also be used to access the function:
>>> fib <function fib at 10042ed0> >>> f = fib >>> f(100) 0 1 1 2 3 5 8 13 21 34 55 89
Coming from other languages, you might object that is not a function but
a procedure since it doesn’t return a value. In fact, even functions without a
statement do return a value, albeit a rather boring one. This
value is called (it’s a built-in name). Writing the value is
normally suppressed by the interpreter if it would be the only value written.
You can see it if you really want to using :
>>> fib() >>> print(fib()) None
It is simple to write a function that returns a list of the numbers of the
Fibonacci series, instead of printing it:
>>> def fib2(n): # return Fibonacci series up to n ... """Return a list containing the Fibonacci series up to n.""" ... result = [] ... a, b = , 1 ... while a < n ... result.append(a) # see below ... a, b = b, a+b ... return result ... >>> f100 = fib2(100) # call it >>> f100 # write the result
This example, as usual, demonstrates some new Python features:
Спецификация оператора for/in/else:
for_stmt :: = "for" target_list "in" expression_list ":" suite "else" ":" suite
Список выражений для перебора инструкцией вычисляется один раз и должен давать объект поддерживающий итерацию. Итератор создается для результата . Каждый элемент из в свою очередь присваивается целевой переменной , значение которой передается в блок кода внутри инструкции . Затем код блока выполняется один раз для каждого элемента. Когда элементы исчерпаны, что происходит сразу же, когда последовательность пуста или итератор вызывает исключение , выполняется набор в предложении , если он присутствует, и цикл завершается.
- Оператор : выполняется код внутри до оператора и завершает цикл без выполнения блока внутри .
- Оператор : выполняется код внутри до оператора , пропускает оставшуюся часть кода в блоке и продолжает работу со следующим элементом списка перебираемых выражений или с оператором , если следующего элемента нет.
Применим оператор и в коде и посмотрим на их поведение. Будем создавать список четных чисел из последовательности чисел от 0 до 14.
lst = [] for item in range(15) # если число 10 есть в списке if 10 in lst # прерываем цикл, при этом блок else не выполнится break # остаток от деления элемента списка a = item % 2 # если элемент списка не четный или равен 0 if a != or item == # пропускаем оставшийся код continue # добавление числа в список lst.append(item) else print ("Напечатает, если убрать условие с break") print(lst) # Код выведет: 2, 4, 6, 8, 10
Цикл выполняет назначения переменным в целевом списке. Это перезаписывает все предыдущие назначения этим переменным, включая те, которые были сделаны в блоке :
Пример:
for i in range(10): print(i) i = 5 # это не повлияет на цикл for так как переменная i # будет перезаписана следующим итерируемым элементом
Имена в целевом списке не удаляются, когда цикл завершен, но если последовательность пуста, то код внутри цикла не будет выполнен.
Подсказка: встроенная функция возвращает итератор целых чисел, подходящий для эмуляции эффекта языка Pascal например, возвращает список .
Обратите внимание. Существует тонкость, когда последовательность, по которой проходит итерация, пытаются изменить внутри цикла
Существует внутренний счетчик, который используется для отслеживания того, какой элемент используется следующим, и он увеличивается на каждой итерации. Когда этот счетчик достигнет длины последовательности, цикл завершается. Это означает, что если код внутри цикла удаляет текущий (или предыдущий) элемент из последовательности, по которой идет итерация, следующий элемент будет пропущен, так как он получает индекс текущего элемента, который уже был обработан.
Аналогично, если код внутри цикла вставляет элемент в последовательность перед текущим элементом. Текущий элемент будет обработан снова на следующем этапе итерации. Это может привести к неприятным ошибкам, которых можно избежать, сделав временную копию с использованием фрагмента всей последовательности.