Explicar a ramificação condicional com se declarações em Python.
- Noções básicas de se declarações (se, elif, else)
- Especificar condições com operadores de comparação, etc.
- Especificar as condições por número, lista, etc.
- Especificar múltiplas condições ou negações com operadores lógicos (e, ou não)
- Expressões condicionais em novas linhas e múltiplas linhas
Há também um operador ternário que descreve um ramo condicional numa só linha. Ver o artigo seguinte.
- RELACIONADO:Escrever se declarações numa linha com o operador ternário de Python (operador condicional)
Noções básicas de se declarações (se, elif, else)
A forma básica da declaração if é a seguinte
if Conditional expression 1:
`Processing to be performed if Expression 1 is True.`
elif Conditional expression 2:
`Processing to be performed when expression 1 is false and expression 2 is true.`
elif Expression 3:
`Process when expression 1 and 2 are false and expression 3 is true.`
...
else:
`Processing when all conditionals are false.`
O “elif” corresponde ao “outro se” em C e outras línguas, e pode haver qualquer número de “elifs”.
Se houver apenas uma expressão condicional ou processamento quando não for necessário falso, os blocos “elif” e “else” podem ser omitidos.
Especificar condições com operadores de comparação, etc.
Especificar a condição com uma operação que devolve um tipo de bool (verdadeiro, falso), tal como um operador de comparação.
Os operadores de comparação Python são os seguintes
operador | resultado |
---|---|
x < y | verdadeiro se x for inferior a y |
x <= y | verdadeiro se x for menor ou igual a y |
x > y | verdadeiro se x for maior que y |
x >= y | verdadeiro se x for maior ou igual a y |
x == y | verdadeiro se os valores x e y forem iguais |
x != y
x is y
x is not y
x in y
x not in y
Exemplo. Por conveniência, é definida como uma função com a declaração def.
def if_test(num):
if num > 100:
print('100 < num')
elif num > 50:
print('50 < num <= 100')
elif num > 0:
print('0 < num <= 50')
elif num == 0:
print('num == 0')
else:
print('num < 0')
if_test(1000)
# 100 < num
if_test(70)
# 50 < num <= 100
if_test(0)
# num == 0
if_test(-100)
# num < 0
O seguinte pode ser escrito de uma forma que é exclusiva de Python. Ver o artigo seguinte para detalhes.a < x < b
def if_test2(num):
if 50 < num < 100:
print('50 < num < 100')
else:
print('num <= 50 or num >= 100')
if_test2(70)
# 50 < num < 100
if_test2(0)
# num <= 50 or num >= 100
==
!=
O acima exposto é uma comparação de valores; para comparar as identidades dos objectos, use o seguinte
is
is not
Por exemplo, ao comparar um número inteiro e um número de ponto flutuante, “==” retorna verdadeiro se os valores forem equivalentes, mas “é” retorna falso porque são objectos diferentes.
i = 10
print(type(i))
# <class 'int'>
f = 10.0
print(type(f))
# <class 'float'>
print(i == f)
# True
print(i is f)
# False
Também é possível fazer a condição se uma lista ou uma corda contém um elemento específico (carácter).
in
:incluirnot in
:não incluindo
def if_test_in(s):
if 'a' in s:
print('a is in string')
else:
print('a is NOT in string')
if_test_in('apple')
# a is in string
if_test_in('melon')
# a is NOT in string
Especificar as condições por número, lista, etc.
A expressão condicional de uma declaração pode ser um número, lista, ou outro objecto que não seja do tipo bool (verdadeiro, falso).
if 10:
print('True')
# True
if [0, 1, 2]:
print('True')
# True
Na expressão condicional de um Python se a declaração for falsa, os seguintes objectos são considerados falsos.
- Constantes definidas para serem falsas:
None
,false
- Zero em tipo numérico:
0
,0
,0j
,Decimal(0)
,Fraction(0, 1)
- Sequência ou colecção vazia:
''
,()
,[]
,{}
,set()
,range(0)
Truth Value Testing — Built-in Types — Python 3.10.4 Documentation
Números representando zero, cordas vazias, listas, etc. são considerados falsos; todos os outros são considerados verdadeiros.
A forma como o objecto é julgado pode ser verificada com bool().
print(bool(10))
# True
print(bool(0.0))
# False
print(bool([]))
# False
print(bool('False'))
# True
Isto pode ser utilizado para simplesmente escrever o processo quando a lista está vazia, por exemplo.
def if_test_list(l):
if l:
print('list is NOT empty')
else:
print('list is empty')
if_test_list([0, 1, 2])
# list is NOT empty
if_test_list([])
# list is empty
Note-se que a corda 'Falsa' também será verdadeira, porque, como se mostra no exemplo acima, qualquer corda que não esteja vazia na corda será verdadeira'. Para converter uma string específica como 'Verdadeiro' ou 'Falso' para 1,0, usar strtobool() no módulo distutils.util.
Especificar múltiplas condições ou negações com operadores lógicos (e, ou não)
Os operadores lógicos (e, ou não) podem ser usados para lidar com a conjunção lógica, disjunção lógica, e negação de múltiplas condições.
operador | (Result (na expressão condicional de uma declaração de se) |
---|---|
x and y | verdadeiro se ambos x e y forem verdadeiros |
x or y | verdadeiro se x ou y for verdadeiro |
not x | falso se x for verdadeiro, verdadeiro se x for falso |
def if_test_and_not(num):
if num >= 0 and not num % 2 == 0:
print('num is positive odd')
else:
print('num is NOT positive odd')
if_test_and_not(5)
# num is positive odd
if_test_and_not(10)
# num is NOT positive odd
if_test_and_not(-10)
# num is NOT positive odd
De facto, “x e y” e “x ou y” não retornam Verdadeiro ou Falso, mas sim x ou y. Desde que sejam utilizados em expressões condicionais em se declarações, não há necessidade de se preocupar com eles, uma vez que avaliam para Verdadeiro ou Falso. Ver o artigo seguinte para detalhes.
- RELACIONADO:Os operadores lógicos de Python “e, ou não” (conjunção lógica, disjunção lógica, negação)
É possível utilizar e e ou mais do que uma vez.
def if_test_and_not_or(num):
if num >= 0 and not num % 2 == 0 or num == -10:
print('num is positive odd or -10')
else:
print('num is NOT positive odd or -10')
if_test_and_not_or(5)
# num is positive odd or -10
if_test_and_not_or(10)
# num is NOT positive odd or -10
if_test_and_not_or(-10)
# num is positive odd or -10
Expressões condicionais em novas linhas e múltiplas linhas
Quando múltiplas expressões condicionais são utilizadas ligando-as com “e” ou “ou” e cada linha se torna longa, é por vezes necessário quebrar a expressão condicional e escrevê-la em múltiplas linhas.
Uma quebra de linha pode ser feita usando uma barra invertida ou encerrando a linha inteira entre parênteses.
def if_test_and_backslash(num):
if num >= 0 \
and not num % 2 == 0:
print('num is positive odd')
else:
print('num is NOT positive odd')
if_test_and_backslash(5)
# num is positive odd
def if_test_and_brackets(num):
if (num >= 0
and not num % 2 == 0):
print('num is positive odd')
else:
print('num is NOT positive odd')
if_test_and_brackets(5)
# num is positive odd
Pode usar uma barra invertida para quebrar uma linha quantas vezes quiser. Da mesma forma, pode quebrar uma linha qualquer número de vezes dentro de parênteses. Não há limite de indentação.
Note-se que esta é uma técnica que pode ser usada em qualquer lugar em código Python, e não apenas em declarações.