Pep 8 — руководство по написанию кода на python

Вложенные условия

Любая инструкция Python может быть помещена в «истинные» блоки и «ложный» блок, включая другой условный оператор. Таким образом, мы получаем вложенные условия. Блоки внутренних условий имеют отступы, используя в два раза больше пробелов (например, 8 пробелов). Давайте посмотрим пример. Если заданы координаты точки на плоскости, напечатайте ее квадрант.


2
-3
x = int(input())
y = int(input())
if x > 0:
    if y > 0:
        # x больше 0, y больше 0
        print("Quadrant I")
    else:    
        # x больше 0, y меньше или равно 0
        print("Quadrant IV")
else:
    if y > 0:
        # x меньше или равно 0, y больше 0
        print("Quadrant II")
    else:    
        # x меньше или равно 0, y меньше или равно 0
        print("Quadrant III")

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

A numeric example

I have another example that quite impressed me at the time.

Where all variables are positive integers, and a is at least as large as the n’th root of x, this algorithm returns the floor of the n’th root of x (and roughly doubling the number of accurate bits per iteration):

while a > (d := x // a**(n-1)):
    a = ((n-1)*a + d) // n
return a

It’s not obvious why that works, but is no more obvious in the «loop and a half» form. It’s hard to prove correctness without building on the right insight (the «arithmetic mean — geometric mean inequality»), and knowing some non-trivial things about how nested floor functions behave. That is, the challenges are in the math, not really in the coding.

If you do know all that, then the assignment-expression form is easily read as «while the current guess is too large, get a smaller guess», where the «too large?» test and the new guess share an expensive sub-expression.

To my eyes, the original form is harder to understand:

while True:
    d = x // a**(n-1)
    if a <= d:
        break
    a = ((n-1)*a + d) // n
return a

Объекты Bool и логические операторы

Когда мы суммируем два целых объекта с помощью оператора , например , мы получаем новый объект: . Точно так же, когда мы сравниваем два целых числа с помощью оператора , как , мы получаем новый объект: .

None
print(2 < 5)
print(2 > 5)
None
print(bool(-10))    # Правда
print(bool(0))      # False - ноль - единственное ошибочное число
print(bool(10))     # Правда

print(bool(''))     # False - пустая строка является единственной ложной строкой
print(bool('abc'))  # Правда

Иногда вам нужно сразу проверить несколько условий. Например, вы можете проверить, делится ли число на 2, используя условие ( дает остаток при делении на ). Если вам нужно проверить, что два числа и оба делятся на 2, вы должны проверить как и . Для этого вы присоединяетесь к ним с помощью оператора (логическое И): .

Python имеет логическое И, логическое ИЛИ и отрицание.

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

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

Оператор является унарным отрицанием, за ним следует некоторое значение. Он оценивается как если это значение и наоборот.

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

15
40
a = int(input())
b = int(input())
if a % 10 == 0 or b % 10 == 0:
    print('YES')
else:
    print('NO')

Давайте проверим, что число положительно, а число неотрицательно:

if a > 0 and not (b < 0):

Вместо мы можем написать .

Python Conditions and If statements

Python supports the usual logical conditions from mathematics:

  • Equals: a == b
  • Not Equals: a != b
  • Less than: a < b
  • Less than or equal to: a <= b
  • Greater than: a > b
  • Greater than or equal to: a >= b

These conditions can be used in several ways, most commonly in «if statements» and loops.

An «if statement» is written by using the if keyword.

Example

If statement:

a = 33 b = 200 if b > a:  print(«b is greater than a»)

In this example we use two variables, a and b, which are used as part of the if statement to test whether b is greater than a. As a is 33, and b is 200, we know that 200 is greater than 33, and so we print to screen that «b is greater than a».

Nested if Statements

When you have an if statement inside another if statement, this is called nesting in the programming world. It doesn’t have to always be a simple if statement but you could use the concept of if, if-else and even if-elif-else statements combined to form a more complex structure.

Lets code for the example discussed above:

Notice the use of in the code above? It is used so as to evaluate ‘Science’ and ‘science’ as the same coursework, and same goes for ‘English’ and ‘english’. You can make use of boolean statements such as or, and to combine multiple conditions together. But you have to be careful to understand the boolean output of such combined statements to fully realise the flow of control of your program.

We can rewrite the code above to check for the scores in the same statement, however this does make the code hard to read and the statements hard to debug sometimes.

Voila!


In this tutorial, you have tackled one of the major control flow mechanisms available in Python. You have worked with an example in multiple levels to see the variations of the humble if statement in action. To learn more about Python check out DataCamp’s Intro to Python for Data Science course.

Вложенные конструкции IF

Бывают случаи, когда вы хотите провести ещё одну проверку после того, как результат выражения принят как истина. В таком случае — можно использовать вложенные управляющие конструкции .

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

Ситаксис

if условие1:
   действие(я)
   if условие2:
      действие(я)
   elif условие3:
      действие(я)
   else
      действие(я)
elif условие4:
   statement(s)
else:
   statement(s)

Пример

var = 100
if var < 200:
   print "Expression value is less than 200"
   if var == 150:
      print "Which is 150"
   elif var == 100:
      print "Which is 100"
   elif var == 50:
      print "Which is 50"
elif var < 50:
   print "Expression value is less than 50"
else:
   print "Could not find true expression"

print "Good bye!"

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

Expression value is less than 200
Which is 100
Good bye!

Конструкция switch case

В Python отсутствует инструкция switch case

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

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

Однако есть и более экзотический вариант реализации этой конструкции, задействующий в основе своей python-словари

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

Python if…elif…else Statement

Syntax of if…elif…else

if test expression:
    Body of if
elif test expression:
    Body of elif
else: 
    Body of else

The is short for else if. It allows us to check for multiple expressions.

If the condition for is , it checks the condition of the next block and so on.

If all the conditions are , the body of else is executed.

Only one block among the several blocks is executed according to the condition.

The block can have only one block. But it can have multiple blocks.

Example of if…elif…else

When variable num is positive, Positive number is printed.

If num is equal to 0, Zero is printed.

If num is negative, Negative number is printed.

Python if-elif-else Example

Let’s say we have a function that accepts a country name and return its capital. We can implement this logic using if-else conditions.

def get_capital(country):
    if country == 'India':
        return 'New Delhi'
    elif country == 'France':
        return 'Paris'
    elif country == 'UK':
        return 'London'
    else:
        return None

Python if else elif Example

Earlier, we mentioned that elif statement is optional. Let’s look at another simple example where we don’t have elif statement.

def is_positive(num):
    if num >= 0:
        return 'Positive'
    else:
        return 'Negative'

Even the else block is optional. Let’s look at another example where we have only if condition.

def process_string(s):
    if type(s) is not str:
        print('not string')
        return
    # code to process the input string

In case you are wondering what is with empty return statement, it will return None to the caller.

Цикл for

Как было сказано ранее, мы используем цикл в тех случаях, когда вам нужно повторить что-нибудь n-ное количество раз. Это проще понять, если взглянуть на пример. Мы используем встроенную функцию Python range. Функция range создаст список длинной в «n» элементов. В Python версии 2.Х существует другая функция под названием xrange, которая является генератором чисел и не такая ресурсоемкая, как range. Ранее разработчики сменили xrange на range в Python 3. Вот пример:


Python

print(range(5)) # ответ: range(0, 5)

1 print(range(5))# ответ: range(0, 5)

Как вы видите, функция range взяла целое число и вернула объект range. Функция range также принимает начальное значение, конечное значение и значение шага. Вот еще два примера:

Python

a = range(5, 10) print(a) # range(5, 10)

b = list(range(1, 10, 2)) print(b) #

1 2 3 4 5

a=range(5,10)

print(a)# range(5, 10)

b=list(range(1,10,2))

print(b)#

В пером примере показано, что вы можете передать начальное и конечное значение, и функция range вернет числа, начиная с начального значения вплоть до (но не включая) последнее значение. Например, при запросе 5-10 мы получим 5-9. Во втором примере видно, как использовать функцию списка (list) для того, чтобы функция range вернула каждый второй элемент, между 1 и 10. Так что она начинает с 1, пропускает 2 и так далее. Теперь вы, наверное, гадаете, что же именно она будет делать с циклами? Что-ж, есть один простой способ показать, как работает цикл с использованием функции range! Давайте взглянем:

Python

for number in range(5): print(number)

1 2

fornumber inrange(5)

print(number)

Что здесь произошло? Давайте почитаем слева на право, чтобы понять это. Для каждого числа в диапазоне 5 мы вводим число. Мы знаем, что если мы вызываем range со значением 5, мы получим список из 5 элементов. Так что каждый раз, проходя через цикл, она выводит каждый из элементов. Цикл for, показанный выше, может быть эквивалентом следующего:

Python

for number in : print(number)

1 2

fornumber in,1,2,3,4

print(number)

Функция range лишь делает результат несколько меньшим. Цикл for может обходить любой итератор Python. Мы уже видели, как именно он может работать со списком. Давайте взглянем, может ли он выполнять итерацию со словарем.

Python

a_dict = {«one»:1, «two»:2, «three»:3}

for key in a_dict: print(key)

1 2 3 4

a_dict={«one»1,»two»2,»three»3}

forkey ina_dict

print(key)

Когда вы используете for в словаре, вы увидите, что он автоматически перебирает ключи. Вам не нужно указывать ключ for в a_dict.keys() (впрочем, это также работает). Python делает только нужные нам вещи. Вы возможно думаете, почему ключи выводятся в другом порядке, отличном от того, какой был указан в словаре? Как мы знаем из соответствующей статьи, словари не упорядочены, так что мы можем выполнять итерацию над ними, при этом ключи могут быть в любом порядке. Теперь, зная, что ключи могут быть отсортированы, вы можете отсортировать их до итерации. Давайте немного изменим словарь, чтобы увидеть, как это работает.

Python

a_dict = {1:»one», 2:»two», 3:»three»} keys = a_dict.keys()

keys = sorted(keys) for key in keys: print(key)

1 2 3 4 5 6

a_dict={1″one»,2″two»,3″three»}

keys=a_dict.keys()

keys=sorted(keys)

forkey inkeys

print(key)

Результат:

Python

1 2 3

1 2 3

1 2 3

Давайте остановимся и разберемся с тем, что делает этот код. Во-первых, мы создали словарь, в котором ключи выступают в качестве целых чисел, вместо строк. Далее, мы извлекли ключи из словаря. Каждый раз, когда вы взываете метод keys(), он возвращает неупорядоченный список ключей. Если вы выведите их, и увидите, что они расположен в порядке по возрастанию, то это просто случайность. Теперь у нас есть доступ к ключам словаря, которые хранятся в переменной, под названием keys. Мы сортируем наш список, после чего используем цикл for в нем. Теперь мы готовы к тому, чтобы сделать все немного интереснее. Мы попробуем применить цикл в функции range, но нам нужно вывести только целые числа. Чтобы сделать это, нам нужно использовать условный оператор вместо параметра шага range. Это можно сделать следующим образом:

Python

for number in range(10): if number % 2 == 0: print(number)

1 2 3

fornumber inrange(10)

ifnumber%2==

print(number)

Результат:

Python

0 2 4 6 8

1 2 3 4 5

2 4 6 8

Вы наверное гадаете, что вообще здесь происходит? Что еще за знак процента? В Python, % называется оператором модуля. Когда вы используете оператор модуля, он возвращает остаток. Когда вы делите целое число на два, вы получаете число без остатка, так что мы выводим эти числа. Вам, возможно, не захочется использовать оператор модуля часто в будущем, но в моей работе он нередко помогает. Теперь мы можем взглянуть на цикл while.

Basic Python if Command Example for String Comparison

Similar to the previous example, we can also use Python if command for string comparison as shown in the example below.

# cat if2.py
code = raw_input("What is the 2-letter state code for California?: ")
if code == 'CA':
  print("You passed the test.")
print("Thank You!")

In the above:

  • 1st line: Here we are getting the raw input from the user and storing it in the code variable. This will be stored as string.
  • 2nd line: In this if command, we are comparing whether the value of the code variable is equal to the string ‘CA’. Please note that we have enclosed the static string value in single quote (not double quote). The : at the end is part of the if command syntax.
  • 3rd line: As explained in the previous example, this line will get executed when the if command condition is true, as this line has indentation with spaces at the beginning.
  • 4th line: This will get executed whether the if command condition is true or false.

The following is the output of the above example code for both if condition true and false.

# python if2.py
What is the 2-letter state code for California?: CA
You passed the test.
Thank You!

# python if2.py
What is the 2-letter state code for California?: NV
Thank You!

Single test: if-else Statement

The if-else statement is used to code the same way you would use it in the English language. The syntax for the if-else statement is:

Source: python by Programiz

Lets try to work on the code from above, and redefine the problem: When recording the score for a certain coursework, you want to add together the points for the theory part and the practical part to get the total score. If the total score is less than 100 — you want to display a ‘Score okay’ message and if it is not then a warning like before.

Tip: If you only have a line of code to be executed rather than multiple lines in the code following the condition, you can place it all in the same line. This is not a rule but just a common practise amongst coders. Rewriting the code from above in this style:

Now imagine a case where one of the score exceeds 50, but the total is still less than 100. What do you think would happen then?

This is wrong, since you know that the maximum limit for individual scores for theory or practical should not exceed 50. How can you repesent this in code? The ans: if-elif-else statement.

Simple if statement

This is the simplest example of a conditional statement. The syntax is:

The block of lines indented the same amount after the colon () will be executed whenever the condition is TRUE.

Source: python by Programiz

For example, lets say you are recording the score for a certain course. The total score is 100, with 50 points for the theoritical work and 50 for practical. You want to display an error message or warning if the score exceeds 100.

The colon () is important because it separates the condition from the statements to be executed after the evaluation of the condition. This is specially important for statements where there is only a single statement and the bracket is not used. For example:

The above if statement checks for the ‘if’ condition and determines the statement (40 + 45 = 85) > 100 to be FALSE and thus, will not print the warning. Lets make the statement FALSE and see what happens:

Lets say you wanted to go a step further and display a statement when the total score was actually within the range, i.e. less than 100. This is when the if-else statement would help.

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

Зачем нужны условные инструкции

Фундаментальная важность условий для любого из языков программирования заключается в их возможности описывать большую часть логики работы программы. Говоря простыми словами, конструкция в Python указывает интерпретатору, следует ли выполнять определенный участок кода или нет

Говоря простыми словами, конструкция в Python указывает интерпретатору, следует ли выполнять определенный участок кода или нет.

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


С этим читают