Condições e lógica booleana em Python

Aprenda como um programa Python toma decisões. Compare números e textos com operadores de comparação, combine condições com and, or e not e use if, elif e else para executar o código adequado a cada situação. Depois, aninhe decisões, use o valor lógico em contexto dos valores, teste cada ramo com entradas bem escolhidas e escolha entre casos com a instrução match.

BásicoAula 2 de 10 do curso Curso de Introdução à programação com Python

O que você vai aprender

  1. Escreva comparações com os seis operadores de comparação do Python, preveja se elas produzem True ou False para números e textos e evite confusões que tornam uma condição incorreta sem aviso.
    • Compare números com os seis operadores de comparação
      Use ==, !=, <, <=, > e >= para comparar números, interprete cada resultado como um valor booleano e distinga comparação de atribuição.
    • Compare textos, valores de tipos diferentes e intervalos
      Compare strings exatamente e em ordem alfabética, converta a entrada digitada antes de compará-la com números e teste intervalos, pertencimento e None com o operador adequado.
  2. Escreva decisões de uma, duas e várias alternativas para que um programa execute o bloco de código adequado a cada situação e preveja exatamente quais linhas serão executadas para uma dada entrada.
    • Execute código somente quando uma condição for verdadeira
      Escreva uma instrução if com cabeçalho, dois-pontos e bloco indentado e rastreie quais linhas são executadas e quais são ignoradas.
    • Escolha entre duas ações com if e else
      Adicione um ramo else para que exatamente um de dois blocos seja executado e use uma expressão condicional para escolher entre dois valores em uma única linha.
    • Escolha entre vários casos com elif
      Construa cadeias if–elif–else que testem condições em ordem, executem apenas o primeiro ramo cuja condição seja verdadeira e ordenem os testes para que cada entrada corresponda ao caso correto.
  3. Combine e negue condições com and, or e not, preveja seus resultados com tabelas-verdade e leia condições mais longas na ordem em que o Python as avalia.
    • Combine e negue condições com and, or e not
      Use tabelas-verdade para prever os resultados de and, or e not, traduza regras cotidianas em condições combinadas e evite o erro clássico com or.
    • Preveja como o Python avalia condições mais longas
      Aplique a precedência de operadores e a avaliação de curto-circuito, adicione parênteses que deixem claro o agrupamento pretendido e reescreva condições negadas com as leis de De Morgan.
  4. Aninhe decisões quando uma escolha depender de outra, teste valores diretamente pelo seu valor lógico em contexto e rastreie e teste cada ramo para que a lógica funcione para toda entrada.
    • Aninhe decisões dentro de outras decisões
      Coloque uma instrução if dentro de outro ramo quando uma segunda decisão depender da primeira, interprete o aninhamento pela indentação e reduza-o quando and ou elif expressar a mesma ideia de modo mais simples.
    • Teste valores diretamente pelo seu valor lógico em contexto
      Preveja quais valores o Python considera verdadeiros ou falsos em uma condição, use isso para testar de forma concisa se a entrada está vazia e evite situações em que 0, "0" ou "False" se comportam de maneira inesperada.
    • Rastreie e teste cada ramo de uma decisão
      Rastreie uma decisão manualmente, escolha entradas de teste que alcancem cada ramo e cada limite e corrija condições que deixem lacunas, sobreposições ou ramos que nunca possam ser executados.
  5. Use a instrução match do Python para comparar um valor com vários padrões, capturar valores e adicionar condições de guarda, e decida quando match é mais claro que uma cadeia if–elif.
    • Compare um valor com casos fixos
      Escreva uma instrução match com padrões literais, alternativas e um curinga e preveja qual único caso será executado.
    • Capture valores e adicione condições de guarda aos casos
      Use padrões de captura e as para nomear o valor correspondente, adicione condições de guarda if para condições que um literal não consegue expressar e evite a armadilha em que um nome de variável em um caso corresponde a tudo.

Guia de estudo de Condições em Python

5 capítulos

1

Comparações que respondem sim ou não

Um programa precisa de um teste preciso antes de escolher uma ação. Comparações transformam perguntas sobre valores em respostas que o Python pode usar: a pontuação é alta o suficiente, a resposta corresponde ou a entrada está em um intervalo válido? Números e textos seguem regras de comparação diferentes. Ler essas regras com cuidado ajuda você a encontrar erros que parecem razoáveis na tela, especialmente em um limite ou quando algarismos digitados ainda estão armazenados como texto.

1.1 Números, igualdade e limites

Uma comparação faz uma pergunta sobre valores. Seu resultado é um valor booleano: True ou False. Esses são valores do tipo bool, escritos com a primeira letra maiúscula e sem aspas. "True" é texto; true em minúsculas é um nome e gera NameError quando não foi definido.

Escolha o operador que corresponde à regra
OperadorPerguntaCom x = 7
==Igual a?x == 7 produz True
!=Diferente de?x != 7 produz False
<Menor que?x < 7 produz False
<=Menor ou igual a?x <= 7 produz True
>Maior que?x > 5 produz True
>=Maior ou igual a?x >= 7 produz True

Os operadores de dois caracteres permanecem juntos, com = por último. Escreva <=, não =<. Um número inteiro e um de ponto flutuante podem ser iguais em uma comparação: 7 == 7.0 produz True porque seus valores numéricos coincidem.

Uma comparação é uma expressão, então você pode imprimir ou armazenar seu resultado:

x = 7
is_big = x > 5
print(is_big)

O Python avalia x > 5, obtém True e atribui esse valor a is_big. A saída é True. Um nome como is_big ou has_ticket faz uma variável booleana ser lida como uma pergunta de sim ou não.

Distinga atribuição de comparação

x = 5 armazena um novo valor em x. x == 5 verifica o valor atual sem alterá-lo. Escrever if x = 5: é um erro de sintaxe. O erro inverso pode ser mais difícil de perceber:

x = 7
x == 5
print(x)

Em um script, o resultado da comparação não é usado. A saída continua sendo 7; a linha do meio nunca atribui 5.

Calcule as operações aritméticas antes de comparar

Em 2 + 3 > 4, o Python primeiro soma e obtém 5, depois compara 5 > 4. O resultado é True. Um teste útil para números inteiros é n % 2 == 0: % produz o resto da divisão, e números pares deixam resto 0 quando divididos por 2.

Para n = 10, os passos são 10 % 2 e depois 0 == 0, produzindo True. Para n = -7, -7 % 2 é 1, então o teste de paridade é False. Com o divisor positivo 2, o resto do Python para um inteiro ímpar é 1, inclusive para um inteiro ímpar negativo.

Decida se o limite está incluído

“Pelo menos 18” inclui 18: age >= 18. “Mais de 18” o exclui: age > 18. Da mesma forma, “menos de 13” é age < 13, e “no máximo 3” é bags <= 3. Teste o próprio limite ao escolher um operador. Em age = 18, o primeiro teste de idade é verdadeiro e o segundo é falso.

Considere pequenas diferenças entre números de ponto flutuante

Muitas frações decimais têm apenas representações binárias aproximadas. O Python armazena 0.1 + 0.2 como 0.30000000000000004, então 0.1 + 0.2 == 0.3 é False.

Para uma comparação com tolerância absoluta de 1e-9, use:

print(abs((0.1 + 0.2) - 0.3) < 1e-9)

abs() fornece a magnitude da diferença sem seu sinal. Essa diferença é menor que um bilionésimo, então esse teste imprime True. A tolerância estabelece quanta diferença essa verificação aceita; ela não é uma igualdade exata.

Principais conclusões

  • Comparações produzem os valores booleanos True e False.
  • = atribui um valor; == compara valores sem alterá-los.
  • Escolha < ou <= e > ou >= conforme o limite esteja incluído ou não.
  • As operações aritméticas acontecem antes da comparação, então n % 2 == 0 testa se um número é par.
  • Números de ponto flutuante calculados podem precisar de um teste de tolerância em vez de igualdade exata.

1.2 Texto, números digitados e intervalos

Os valores nos dois lados de uma comparação importam tanto quanto o operador. Um texto pode parecer um número e ainda assim seguir as regras das strings.

Compare textos exatamente

A igualdade de strings verifica cada caractere, incluindo maiúsculas, minúsculas e espaços. "yes" == "Yes" é False, e "yes" == "yes " também é False. Para aceitar diferenças comuns de capitalização e espaços nas extremidades, compare uma cópia normalizada:

answer = " Yes "
print(answer.strip().lower() == "yes")

strip() remove caracteres em branco das duas extremidades. lower() transforma letras em minúsculas. O texto normalizado é "yes", então o resultado é True. O valor armazenado em answer permanece inalterado, a menos que você atribua a ele o valor normalizado.

Entenda a ordem das strings

O Python compara strings da esquerda para a direita usando pontos de código Unicode, os números atribuídos aos caracteres. Ele para no primeiro par diferente. Com letras inglesas sem acentos e com a mesma capitalização, isso segue a ordem alfabética: "apple" < "banana" é True. Quando uma string é o início da outra, a mais curta vem primeiro: "cat" < "catalog" é True.

Essa não é uma regra completa de ordenação de dicionário. A a Z têm pontos de código de 65 a 90, e a a z têm de 97 a 122. Assim, "Zebra" < "apple" é True. O é acentuado também vem depois de z, então "zebra" < "éclair" é True.

Dígitos em strings seguem a mesma regra de caracteres. "10" < "9" é True: a primeira comparação é entre "1" e "9", não entre os números dez e nove.

Converta a entrada para decisões numéricas

input() retorna uma string. Se alguém digitar 5, "5" == 5 produz False; a igualdade não converte o texto. A comparação de ordem é diferente: "5" < 10 gera TypeError porque o Python não consegue ordenar essa string e esse inteiro juntos.

age = int(input("Age: "))
print(age >= 18)

Para o texto digitado "18", int() produz o inteiro 18, e o teste imprime True. Use float() quando a entrada representar um valor decimal.

Use uma cadeia para um intervalo

0 <= score <= 100 exige que ambas as comparações entre valores vizinhos sejam verdadeiras. Isso significa 0 <= score and score <= 100. Para score = 105, o teste do limite inferior passa, mas o do limite superior falha, então toda a cadeia é False.

RegraTeste em Python
De 1 a 10, incluindo ambos os extremos1 <= x <= 10
Estritamente entre 1 e 101 < x < 10

Uma cadeia compara apenas valores vizinhos. 1 < 3 > 2 é True porque 1 < 3 e 3 > 2 são ambos verdadeiros; ela não compara 1 diretamente com 2.

Use pertencimento ou identidade quando necessário

Os operadores de pertencimento testam se um texto ocorre dentro de outro. "nan" in "banana" é True; "Ban" in "banana" é False. "x" not in "banana" é True.

None representa a ausência de valor. Verifique-o com result is None ou result is not None. O operador is pergunta se é exatamente o mesmo objeto, enquanto == pergunta se os valores são iguais. Use == para igualdade de números e strings: um teste de identidade como x is 5 não é confiável para essa finalidade e produz um SyntaxWarning.

Principais conclusões

  • Comparações de strings distinguem maiúsculas de minúsculas e consideram os espaços.
  • Converta algarismos digitados com int() ou float() antes de comparações numéricas.
  • Um intervalo em comparação encadeada exige que cada comparação entre valores vizinhos seja verdadeira.
  • in testa pertencimento; is None verifica o marcador de ausência de valor.
2

Escolhendo o código que será executado

Uma comparação se torna útil quando controla uma ação. O Python marca cada escolha com uma condição e um bloco indentado, de modo que a disposição mostra quais linhas são executadas juntas. Comece com um bloco que pode ser ignorado, depois dê a ele uma alternativa e, por fim, escolha entre vários casos. O essencial é acompanhar o programa em ordem: uma linha posterior pode usar um valor definido por um ramo anterior, e um teste posterior em uma cadeia pode nunca ser alcançado.

2.1 O cabeçalho if e seu bloco

Uma instrução if executa um bloco somente quando sua condição é verdadeira. O cabeçalho começa com if, apresenta a condição e termina com dois-pontos. As linhas abaixo são indentadas para mostrar que pertencem ao corpo.

Acompanhe uma decisão de uma alternativa
temperature = 31
if temperature > 30:
    print("Hot day")
    print("Drink water")
print("Done")

No cabeçalho, o Python lê o valor atual de temperature. A comparação 31 > 30 é True, então ambas as linhas indentadas são executadas. O programa chega à linha fora do bloco. Sua saída é:

Hot day
Drink water
Done

Altere a primeira linha para temperature = 25. Agora 25 > 30 é False, então o Python ignora todo o corpo. Apenas Done é impresso. A condição é testada uma vez quando o Python chega ao cabeçalho; um if não continua a verificá-la.

Use a indentação para mostrar quais linhas pertencem ao bloco

Por convenção, use 4 espaços para cada nível de indentação. Linhas no mesmo nível pertencem ao mesmo bloco. Retornar ao nível externo encerra o bloco. Se você indentar print("Done") em 4 espaços, ela passa para o corpo do if e só é executada quando a condição é verdadeira.

Um fluxograma mostra a mesma escolha com um losango. O caminho verdadeiro entra no corpo, o caminho falso o contorna, e os caminhos se encontram na próxima instrução fora do bloco.

ProblemaO que corrigir
Dois-pontos ausentesTermine o cabeçalho com :.
Corpo sem indentaçãoIndente as linhas controladas pelo if.
Indentação inconsistenteAlinhe as instruções que pertencem ao mesmo bloco.
Tabulações e espaços misturadosConfigure o editor para inserir espaços.

O Python pode informar SyntaxError, IndentationError ou TabError para esses problemas. Comece pelo cabeçalho e pela indentação ao redor da linha indicada. Parênteses em torno da condição são opcionais; if temperature > 30: é a forma usual.

Um corpo não pode estar vazio. Para reservar um lugar para uma ação, escreva um pass indentado. É uma instrução válida que não faz nada:

if temperature > 30:
    pass
Verificações separadas são independentes
score = 95
if score >= 50:
    print("Pass")
if score >= 90:
    print("Excellent")

O Python chega aos dois cabeçalhos. Ambas as condições são verdadeiras, então ele imprime as duas mensagens. Instruções if separadas são adequadas para regras cujas ações podem se aplicar à mesma entrada.

Forneça um valor que o código posterior possa usar

Um nome ao qual se atribui um valor apenas no corpo pode nunca ser criado:

x = 0
if x > 0:
    message = "positive"
print(message)

Em um script recém-iniciado, o corpo é ignorado e message não tem valor, então a última linha gera NameError. Uma correção fornece um valor inicial antes da escolha:

x = 0
message = "not positive"
if x > 0:
    message = "positive"
print(message)

Agora a linha posterior tem um valor nos dois caminhos. Para zero, ela imprime not positive; para um x positivo, o corpo substitui esse texto por positive.

Principais conclusões

  • Um cabeçalho if termina com :, seguido de um corpo indentado.
  • Uma condição falsa faz com que todo o corpo seja ignorado; a execução continua depois dele.
  • Instruções if separadas são testadas individualmente quando alcançadas.
  • Use um valor inicial ou faça uma atribuição em cada ramo antes de ler uma variável posteriormente.
  • pass fornece um corpo válido que não faz nada.

2.2 Dois caminhos e um valor a escolher

Uma instrução if–else escolhe um de dois blocos. Quando a condição é verdadeira, o Python executa o corpo do if. Caso contrário, executa o corpo do else. Exatamente um é executado quando a execução chega a essa decisão.

Alinhe as alternativas
number = int(input("Enter a whole number: "))
if number % 2 == 0:
    print(number, "is even")
else:
    print(number, "is odd")

Para a entrada 14, o resto é 0, então a saída é 14 is even. Para a entrada -7, o resto é 1, então a saída é -7 is odd. O else pertence ao if no mesmo nível de indentação. Seu corpo tem indentação própria.

Não há condição depois de else: ele significa que a condição anterior foi falsa. else number < 0: é um erro de sintaxe. Mantenha a cláusula diretamente após o corpo do if; uma instrução sem indentação e sem relação com ele entre os dois quebra a estrutura.

Verifique o que “todo o restante” inclui

Com if answer == "yes":, um else não significa apenas "no". Ele também aceita "maybe", "Yes" e "", pois nenhum deles é igual a "yes". Isso é útil quando todas as entradas restantes merecem a mesma ação. Se várias entradas rejeitadas precisarem de respostas diferentes, serão necessários outros testes.

Atribua valores nos dois caminhos

Uma regra de frete oferece frete grátis para totais de pelo menos 50 reais e cobra 5,99 reais nos demais casos:

total = 42.50
if total >= 50:
    shipping = 0
else:
    shipping = 5.99
print(total + shipping)

Primeiro, 42.50 >= 50 produz False. O Python ignora a atribuição de 0, executa o else e armazena 5.99. A última linha está fora dos dois corpos e imprime 48.49. Altere total para 60: o primeiro corpo armazena 0, o outro é ignorado e a última linha imprime 60. Ambos os caminhos definem shipping antes de seu uso.

Escolha um valor com uma expressão condicional

Quando a única diferença é o valor a atribuir, uma expressão condicional pode expressar isso em uma linha:

shipping = 0 if total >= 50 else 5.99

Sua forma é value_if_true if condition else value_if_false. Embora o valor verdadeiro apareça primeiro na página, o Python avalia primeiro a condição. Ele avalia apenas o valor escolhido e depois atribui o resultado a shipping.

Outro exemplo é label = "even" if n % 2 == 0 else "odd". Para n = 14, ele seleciona "even". Para n = -7, seleciona "odd".

NecessidadeForma adequada
Várias ações em qualquer um dos caminhosBlocos if–else completos
Um de dois valoresExpressão condicional

A expressão exige ambos os valores. x = 1 if flag está incompleta e gera SyntaxError porque não há valor para else. Uma instrução if completa pode omitir else porque pode simplesmente não executar nenhuma ação no caminho falso; uma expressão ainda precisa produzir um valor.

Principais conclusões

  • else: não tem condição e fica alinhado com seu if.
  • Um else abrange toda entrada rejeitada pela condição.
  • Atribuir um valor à mesma variável nos dois corpos a torna disponível após qualquer um dos caminhos.
  • Uma expressão condicional tem a forma a if condition else b e avalia apenas o valor selecionado.

2.3 Vários casos em uma ordem planejada

Use elif, abreviação de “else if”, para adicionar outro teste a uma decisão. O Python testa as condições de cima para baixo. A primeira condição verdadeira prevalece, e o restante da cadeia é ignorado.

Rastreie uma decisão de notas
score = 85
if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
elif score >= 60:
    grade = "D"
else:
    grade = "F"
print(grade)

O primeiro teste, 85 >= 90, é falso. O segundo, 85 >= 80, é verdadeiro, então o Python armazena "B". Ele não testa as condições restantes nem entra em else. A saída é B.

PontuaçãoPrimeiro caminho bem-sucedidoNota
90score >= 90A
89score >= 80B
60score >= 60D
59else finalF
Use o que as falhas anteriores informam

Chegar a elif score >= 80: já informa que a pontuação é inferior a 90. Para pontuações inteiras, esse ramo abrange de 80 a 89. Adicionar and score < 90 repetiria uma verificação que o programa já resolveu.

A ordem importa porque esses intervalos se sobrepõem. Se score >= 60 vier primeiro, ele abrange 85 e 95 antes que os testes para notas mais altas sejam alcançados. Para testes de limite inferior com >=, coloque o maior valor limiar primeiro. Para testes de limite superior com <, comece pelo menor valor limiar.

Mantenha uma escolha em uma cadeia

Substituir as palavras reservadas elif por if altera o comportamento. Com uma pontuação de 85, o teste para 80 atribui "B", o teste para 70 atribui "C" e o teste para 60 atribui "D". O valor final é "D". Cada novo if inicia uma decisão independente.

Essa distinção também afeta else. Em um grupo de instruções if separadas, um else final pertence apenas ao seu if correspondente, não ao grupo inteiro. Mantenha os ramos ligados quando representarem uma única classificação.

Considere os limites e as entradas sem correspondência

Uma cadeia elif pode ter qualquer número de testes adicionais, e seu else final é opcional. Sem um ramo para os demais casos, ela pode não executar nenhum corpo:

temp = 20
if temp < 18:
    print("Cool")
elif temp > 24:
    print("Warm")

Nenhuma das condições é verdadeira. Adicione else: com um print("Comfortable") indentado se toda temperatura precisar de uma mensagem. Da mesma forma, t < 18 seguido de t > 18 deixa exatamente 18 sem correspondência. Nos valores limiares das notas, escrever score > 90 enviaria 90 ao ramo "B".

Menus de texto usam a mesma estrutura: teste choice == "1", depois choice == "2" e dê a qualquer outra entrada uma resposta "Unknown option". Essas verificações comparam strings porque input() retorna texto. Quando muitos testes comparam um valor com opções fixas, match oferece outra maneira de organizar a decisão.

Principais conclusões

  • Apenas o primeiro ramo verdadeiro de uma cadeia if–elif é executado.
  • Testes anteriores falsos restringem as entradas que podem chegar a um ramo posterior.
  • Ordene valores limiares sobrepostos para que um teste amplo não esconda um caso mais restrito.
  • Instruções if separadas podem executar vários corpos e sobrescrever atribuições anteriores.
  • Um else final trata entradas que não passam em nenhum dos testes.
  • Teste os valores limiares exatos para encontrar lacunas e erros de uma unidade.
3

Combinando testes sem alterar a regra

Decisões reais muitas vezes dependem de vários fatos ao mesmo tempo: um intervalo tem dois limites, e o acesso pode exigir tanto permissão quanto uma vaga disponível. Operadores booleanos unem esses fatos em uma condição. Seu agrupamento e sua ordem de avaliação também importam, pois o Python pode parar antes de chegar a parte de um teste. Traduza primeiro a regra e depois acompanhe a expressão da esquerda para a direita, observando os parênteses e as partes ignoradas.

3.1 Ambos, pelo menos um e o oposto

Os operadores booleanos and, or e not permitem que você construa uma condição a partir de condições mais simples. O Python os escreve como palavras em minúsculas.

Leia todas as possibilidades

Para entradas booleanas, and produz True somente quando ambas as entradas são verdadeiras. or produz True quando pelo menos uma é verdadeira, inclusive quando ambas são verdadeiras. Este é um ou inclusivo.

ABA and BA or B
TrueTrueTrueTrue
TrueFalseFalseTrue
FalseTrueFalseTrue
FalseFalseFalseFalse

not inverte um valor lógico: not True produz False, e not False produz True. Uma tabela-verdade lista todas as combinações de entradas booleanas. Duas entradas precisam de quatro linhas; três precisam de oito. Cada entrada booleana independente adicional dobra as combinações.

Para A and not B, primeiro inverta B e depois combine-o com A. Na linha A = True, B = False, not B é True, então o resultado é True. As outras três linhas produzem False.

Traduza uma regra em testes completos

Um museu dá desconto na entrada para visitantes com menos de 12 anos ou com 65 anos ou mais:

has_discount = age < 12 or age >= 65

Na idade 10, a primeira comparação é verdadeira. Aos 65, a segunda é verdadeira. As idades 30 e 64 não passam em nenhuma das duas. Usar and exigiria que a mesma idade fosse menor que 12 e de pelo menos 65, o que não pode acontecer.

Um brinquedo exige uma altura de pelo menos 120 centímetros e ausência de problema cardíaco:

can_ride = height >= 120 and not has_heart_condition

As duas exigências devem ser atendidas juntas. Na altura mínima com has_heart_condition = False, ambas as partes são verdadeiras. Se qualquer uma das exigências falhar, can_ride é False.

Distinga dentro de fora de um intervalo
SignificadoTeste
Dentro do intervalo de 0 a 100score >= 0 and score <= 100
Fora do intervalo de 0 a 100score < 0 or score > 100

O teste para dentro exige ambos os limites. O teste para fora exige que pelo menos um deles não seja atendido. score < 0 and score > 100 nunca pode ser verdadeiro para um número.

Cada comparação precisa dos dois lados. score >= 0 and <= 100 é uma sintaxe incompleta. Um problema mais sutil é executado sem erro:

if answer == "y" or "yes":
    print("Accepted")

O Python vê (answer == "y") or "yes". Quando a comparação é falsa, a string não vazia "yes" ainda faz com que a condição seja considerada verdadeira. Repita a comparação: answer == "y" or answer == "yes".

A linguagem cotidiana exige o mesmo cuidado. “Fechado no sábado e no domingo” significa day == "Saturday" or day == "Sunday"; um dia não precisa ter os dois nomes ao mesmo tempo. Para uma variável booleana, negue-a diretamente com not is_member. Uma comparação negada como not (age >= 18) também pode ser escrita de forma mais simples como age < 18. Os operadores do Python aqui são palavras, não &&, || ou !.

Principais conclusões

  • and exige ambas as entradas booleanas; o or inclusivo exige pelo menos uma.
  • not inverte um valor lógico e sempre produz um booleano.
  • Estar dentro de um intervalo exige and; estar fora exige or.
  • Repita a comparação completa em cada lado de um operador booleano.
  • Uma tabela-verdade verifica todas as combinações, incluindo o caso em que ambas as entradas são verdadeiras.

3.2 Agrupamento, partes ignoradas e negação

Uma condição mais longa tem duas questões a resolver: como suas partes são agrupadas e quais partes o Python realmente avalia. A precedência de operadores responde à primeira. A avaliação de curto-circuito responde à segunda.

Leia primeiro o agrupamento

Para os operadores usados aqui, a precedência vai da maior para a menor:

  1. Potenciação: **.
  2. Multiplicação, divisão, divisão com arredondamento para baixo, resto: *, /, //, %.
  3. Adição e subtração: +, -.
  4. Comparações, incluindo in, not in, is e is not.
  5. not, depois and, depois or.
  6. A expressão condicional: a if condition else b.

Parênteses alteram o agrupamento. Por exemplo, x > 3 or x < 0 and x != 5 é agrupado como x > 3 or (x < 0 and x != 5). Em x = 5, a comparação à esquerda é verdadeira e todo o grupo à direita é ignorado. O resultado é True.

Com (x > 3 or x < 0) and x != 5, os parênteses fazem do primeiro grupo um operando de and. Em x = 5, esse grupo é verdadeiro, mas x != 5 é falso, então o resultado é False.

É por isso que is_weekend or is_holiday and is_sunny aceita todo fim de semana, mesmo com chuva. Para a regra “um dia de folga que também esteja ensolarado”, escreva (is_weekend or is_holiday) and is_sunny.

Acompanhe a avaliação da esquerda para a direita
ExpressãoQuando o Python ignora B
A and BA é considerado falso
A or BA é considerado verdadeiro

Para and, uma primeira parte falsa já descartou toda a exigência. Para or, uma primeira parte verdadeira já a satisfez. A precedência não obriga o Python a calcular um operando ignorado só porque ele contém operadores de precedência maior.

Você pode usar isso para colocar uma verificação de proteção antes de uma operação que falharia:

count = 0
total = 50
is_large_average = count != 0 and total / count > 10
print(is_large_average)

count != 0 é falso, então o Python nunca tenta 50 / 0. Ele armazena e imprime False. Inverter os operandos faz com que a divisão seja tentada primeiro e gera ZeroDivisionError; a verificação posterior não pode proteger o trabalho anterior.

Passe not por um teste agrupado

As leis de De Morgan reescrevem uma negação invertendo cada parte e trocando o operador que as une:

OriginalEquivalente
not (A and B)not A or not B
not (A or B)not A and not B

“Não é adolescente” pode ser testado como not (age >= 13 and age <= 19). O teste direto equivalente é age < 13 or age > 19. As idades 12 e 20 passam; 13, 16 e 19 não passam.

Manter and depois de negar ambas as partes altera a regra. Em A = True, B = False, not (A and B) é verdadeiro, mas not A and not B é falso. Compare cada linha da tabela-verdade ao verificar a equivalência de duas formas booleanas.

Para uma variável que já contém um booleano, escreva if is_valid: ou if not is_valid:. Compará-la com True ou False acrescenta um teste de que a condição não precisa.

Principais conclusões

  • A precedência agrupa uma expressão; a avaliação de curto-circuito determina quais operandos são alcançados.
  • and ignora seu operando direito após um operando esquerdo considerado falso; or o ignora após um operando esquerdo considerado verdadeiro.
  • Coloque uma verificação de proteção antes da operação que ela protege.
  • As leis de De Morgan negam ambas as partes e trocam and por or ou vice-versa.
  • Use parênteses para mostrar o agrupamento pretendido ao misturar and e or.
  • Teste variáveis booleanas diretamente com seu nome ou com not.
4

Tornando decisões fáceis de rastrear e testar

Uma decisão pode depender de outra, e um valor pode atuar como condição sem uma comparação explícita. Ambos tornam os scripts mais curtos, mas também criam caminhos fáceis de ignorar. A indentação mostra quais verificações dependem de escolhas anteriores; o valor lógico em contexto explica como texto vazio e zero se comportam. Rastrear esses caminhos e testar os limites exatos permite encontrar respostas ausentes, valores sobrescritos e ramos que nenhuma entrada consegue alcançar.

4.1 Decisões dentro de outros ramos

Uma condicional aninhada coloca uma decisão dentro de um ramo de outra. A decisão interna só é alcançada quando a execução entra nesse ramo externo. Cada nível de aninhamento acrescenta 4 espaços de indentação.

Rastreie a escolha externa antes da interna
has_ticket = True
age = 15
if has_ticket:
    if age >= 13:
        print("Enjoy the movie")
    else:
        print("This movie needs an adult")
else:
    print("Please buy a ticket first")

Primeiro, has_ticket é verdadeiro, então o Python entra no corpo externo. Depois testa 15 >= 13, obtém verdadeiro e imprime Enjoy the movie. Os corpos dos else interno e externo são ambos ignorados.

Altere a idade para 10 mantendo o ingresso. O Python ainda entra no corpo externo, mas a condição interna falha, então ele imprime This movie needs an adult. Com has_ticket = False, o teste de idade nunca é alcançado; o else externo imprime Please buy a ticket first.

Associe cada else pela indentação

Um else pertence ao if no seu próprio nível de indentação. Movê-lo pode alterar o comportamento mesmo que o script continue válido. Considere esta variante menor:

if has_ticket:
    if age >= 13:
        print("Enter")
else:
    print("Buy a ticket")

O else pertence a if has_ticket:. Uma pessoa de 10 anos com ingresso não recebe mensagem. Mova esse else e seu corpo um nível para dentro, e ele passará a pertencer a if age >= 13:. Agora a mesma criança recebe Buy a ticket, enquanto alguém sem ingresso não recebe mensagem. A disposição alterada expressa uma regra diferente.

No exemplo completo do filme, o if interno já tem um else. Mover o else externo para dentro ali criaria duas alternativas para o mesmo if e causaria um erro de sintaxe.

Reduza o aninhamento de duas exigências

Quando há apenas uma ação e nenhum dos níveis tem else, and muitas vezes elimina um nível de aninhamento:

if is_member and total >= 50:
    print("Free shipping")

Isso executa a mesma ação que um if is_member: externo contendo um if total >= 50: interno. Ambas as exigências devem ser atendidas, e a segunda só é alcançada depois que a primeira é atendida. Mantenha o aninhamento quando os ramos externos precisarem de ações próprias e diferentes, como na compra de um ingresso.

Um else cuja única ação é outro if–else pode se tornar uma cadeia elif. Para positivo, negativo e zero, a forma sem aninhamento é if x > 0:, depois elif x < 0: e depois else:. Ela mantém os mesmos três resultados com menos indentação.

Valide antes de classificar

Uma decisão de notas precisa rejeitar pontuações fora do intervalo permitido antes de atribuir uma letra:

if 0 <= score <= 100:
    if score >= 90:
        print("A")
    else:
        print("Below A")
else:
    print("Score must be between 0 and 100")

Em score = 150, a verificação externa falha, então nenhuma nota é atribuída. O aninhamento também revela caminhos impossíveis: um if x < 5: interno sob if x > 10: nunca pode ser verdadeiro. Quando a indentação se tornar profunda, procure exigências combinadas, uma cadeia elif ou uma verificação de validação anterior que torne os caminhos restantes mais claros.

Principais conclusões

  • Uma condição interna só é testada depois que se entra em seu ramo externo.
  • A indentação determina a qual if um else pertence.
  • Duas exigências aninhadas com uma ação e sem alternativas podem se tornar uma condição com and.
  • Valide o intervalo permitido antes de atribuir uma categoria.
  • Exigências internas e externas contraditórias criam código inalcançável.

4.2 Vazio, zero e valores usados como condições

O Python pode testar um valor diretamente em uma condição. Seu valor lógico em contexto determina se o corpo será executado. Isso dispensa comparações, mas o valor lógico em contexto pode diferir do que seu texto parece dizer.

Reconheça valores considerados falsos

Para os tipos embutidos aqui, False, None, zero numérico, strings vazias e coleções vazias são considerados falsos. Números diferentes de zero e strings ou coleções não vazias são considerados verdadeiros.

Valorbool(value)Por quê
0, 0.0FalseZero numérico
-3TrueNúmero diferente de zero
""FalseString vazia
" "TrueContém um espaço
"0", "False", "no"TrueStrings não vazias
NoneFalseMarcador de ausência de valor
[], (), {}FalseColeções vazias

bool() converte um valor em seu valor lógico booleano. Em uma condição, if value: escolhe o mesmo ramo que if bool(value):. Isso não transforma o valor armazenado em um booleano.

Teste uma entrada vazia sem interpretá-la incorretamente
name = input("Name: ")
if name:
    print("Hello", name)
else:
    print("No name entered")

Pressionar Enter sem digitar produz "", então o segundo corpo é executado. Um nome formado inteiramente por espaços não está vazio e passa no primeiro teste. if name.strip():, por sua vez, testa o texto após remover os caracteres em branco das extremidades, então uma resposta formada apenas por espaços também falha.

Uma resposta de sim ou não exige uma pergunta diferente. if answer: executa o bloco para "no" e "False" porque ambos contêm caracteres. Para reconhecer uma resposta afirmativa, compare o texto, por exemplo, answer == "yes". O valor lógico em contexto verifica se a string está vazia, não o significado de uma palavra.

Distinga um zero válido de dados ausentes

Suponha que quantity seja None antes de um valor ser fornecido e possa legitimamente ser 0. if quantity: rejeita ambos. Use quantity is not None para perguntar se há um valor; isso aceita zero.

Para uma variável realmente booleana, o teste direto é claro. Para outros valores, x == True faz algo diferente de if x:. Com x = 5, o teste do valor lógico em contexto passa, mas 5 == True é falso; a igualdade numérica considera True igual a 1, não a todo número diferente de zero.

and e or retornam um valor que examinam

Esses operadores retornam um operando, que pode não ser um booleano:

ExpressãoValor retornado
"" or "Guest""Guest"
"Ana" or "Guest""Ana"
0 and 50
3 and 55

Para or, o Python retorna o valor à esquerda se ele for considerado verdadeiro; caso contrário, avalia e retorna o valor à direita. Para and, ele retorna o valor à esquerda se ele for considerado falso; caso contrário, avalia e retorna o valor à direita.

display_name = name or "Guest" fornece um valor padrão para entrada vazia. O mesmo padrão com quantity or 1 substitui um zero real por 1. Use um valor padrão dessa forma apenas quando todo valor considerado falso significar ausência. not comporta-se de outra maneira: ele sempre retorna True ou False. Se uma variável sinalizadora armazenada precisar ser booleana, has_name = bool(name or nickname) converte o texto selecionado em um valor lógico.

Principais conclusões

  • Contêineres embutidos e textos vazios, zero, None e False são considerados falsos.
  • Strings não vazias continuam sendo consideradas verdadeiras mesmo quando contêm "0" ou "False".
  • Use is not None quando zero for um valor válido fornecido.
  • and e or retornam operandos; not sempre retorna um booleano.
  • Um valor padrão com or substitui todo valor à esquerda considerado falso, incluindo zero.
  • strip() torna vazia uma entrada formada apenas por espaços antes de testá-la.

4.3 Rastreando caminhos e testando os limites

Um script pode ser executado sem erro de sintaxe e ainda assim escolher o ramo errado. O rastreamento acompanha uma execução manualmente. O teste executa entradas escolhidas e compara o resultado observado com o resultado exigido pela regra.

Planeje e rastreie um caminho

Antes de escrever código, apresente as escolhas em passos de linguagem comum, ou pseudocódigo. Um fluxograma coloca cada condição em um losango com setas para verdadeiro e falso. Ambos os caminhos precisam de um próximo passo ou fim claro.

Para rastrear o código, anote os valores iniciais, avalie cada condição alcançada, registre as atribuições e copie a saída exatamente. Para a cadeia de notas com score = 72:

Condição alcançadaResultadoAção
score >= 90FalseContinue para o próximo teste
score >= 80FalseContinue para o próximo teste
score >= 70TrueDefina grade como "C"
Restante da cadeiaNão avaliadoContinue após a cadeia

“Não avaliado” é diferente de falso. O Python já selecionou um ramo, então não precisa das comparações posteriores.

Cubra cada ramo e cada limite

Uma cadeia com quatro ramos precisa de pelo menos quatro entradas para executar cada ramo uma vez. Escolha-as pelos caminhos pretendidos, não pela variedade aparente dos números. Várias pontuações altas podem exercitar o mesmo primeiro corpo.

A cobertura de ramos, por si só, pode deixar passar um limite incorreto. Para age >= 18, teste 17, 18 e 19. Um > incorreto passa nos dois testes externos como esperado, mas rejeita o valor exato do limite. Para um valor limiar de nota de 90, compare 89, 90 e 91; faça o mesmo nos outros valores limiares. Para entradas decimais, escolha valores próximos adequados à precisão da medida.

Encontre ramos que não podem ser executados
if score >= 60:
    print("Pass")
elif score >= 90:
    print("Excellent")

O segundo ramo é inalcançável. Qualquer pontuação de pelo menos 90 já passou no primeiro teste. Coloque o valor limiar mais restritivo primeiro ou altere os intervalos para corresponder à regra pretendida.

Uma lacuna deixa um caso pretendido sem tratamento: t < 0 seguido de t > 0 ignora zero. Uma sobreposição pode fazer várias ações independentes serem executadas: os testes separados t >= 0 e t <= 10 são ambos verdadeiros para 5. Uma cadeia permite apenas seu primeiro ramo verdadeiro, mas sua ordem ainda determina qual condição sobreposta prevalece.

Inclua entradas difíceis

Teste valores negativos, zero, texto vazio e respostas em maiúsculas quando o script espera minúsculas. Se apenas "y" e "n" forem aceitos, dê a qualquer outro texto uma resposta clara, como "Please answer y or n".

Quando um teste se comportar de maneira inesperada, inspecione o valor e seu tipo antes de avaliar a comparação suspeita:

print(repr(age), type(age))

Para age = "18", isso imprime '18' <class 'str'>. Converta o texto antes de tentar age >= 18; colocar a comparação incorreta nesse mesmo print() de depuração geraria TypeError antes de a saída de diagnóstico aparecer. Para problemas estruturais, inspecione a indentação e a mensagem de erro de sintaxe.

Por fim, uma comparação pode definir uma variável sinalizadora booleana diretamente: is_adult = age >= 18. Ela substitui dois ramos cujas únicas atribuições são True e False. Use bool() quando a expressão original puder retornar outro tipo de valor.

Principais conclusões

  • Rastreie apenas as condições que o programa alcança e registre os testes ignorados como ignorados.
  • Teste cada ramo, além do valor no limite e dos valores próximos de cada limite.
  • Testes amplos anteriores podem tornar ramos posteriores inalcançáveis.
  • Verifique lacunas, sobreposições e entradas inesperadas em relação à regra pretendida.
  • Inspecione o valor e seu tipo antes de avaliar uma comparação que possa falhar.
5

Escolhendo casos com match

Menus e comandos costumam comparar um valor com várias escolhas fixas. Uma instrução match organiza essas escolhas como padrões e executa o primeiro caso correspondente. Valores literais, alternativas e um curinga final tratam muitos menus simples. Capturas e condições de guarda acrescentam flexibilidade, mas um nome dentro de um padrão se comporta de modo diferente de um nome em uma comparação. Aprender essa distinção evita que um caso aceite acidentalmente todas as entradas.

5.1 Valores fixos, alternativas e um caso para os demais

Uma instrução match, disponível no Python 3.10 e posteriores, compara um valor com uma série de padrões. Esse valor é o valor sujeito. Cada case fornece um padrão e um corpo indentado.

Acompanhe o primeiro caso correspondente
command = "stop"
match command:
    case "start":
        print("Starting")
    case "stop":
        print("Stopping")
    case _:
        print("Unknown command")
print("Ready")

O valor sujeito é "stop". Ele não corresponde a "start", então o Python tenta o próximo caso. "stop" corresponde, e o corpo imprime Stopping. O Python sai de toda a instrução match e imprime Ready. Apenas um corpo de caso é executado; a execução não passa para o próximo corpo e não é necessário break.

Um valor sujeito "jump" chega ao padrão curinga final, _, que aceita qualquer valor. A saída é Unknown command e depois Ready. Sem esse caso, um valor sujeito sem correspondência simplesmente não executa nenhum corpo de caso e continua após a instrução.

Mantenha a disposição e o caso para os demais em ordem

Os cabeçalhos case são indentados 4 espaços abaixo de match, e seus corpos, mais 4 espaços. Cada cabeçalho termina com dois-pontos. Um case _: sem condição de guarda deve ser o último, pois aceita tudo. Colocar mais casos depois dele gera SyntaxError: esses padrões posteriores nunca poderiam ser alcançados.

Um curinga com condição de guarda pode aparecer antes porque sua condição extra pode falhar. Uma instrução match em um script de execução sequencial também não pode conter break; essa instrução exige um laço ao seu redor.

Entenda como os literais correspondem

Um padrão literal usa um número fixo, uma string, True, False ou None. Padrões de string exigem correspondência exata e distinguem maiúsculas de minúsculas: "stop" não corresponde a "Stop". Padrões numéricos usam igualdade, então case 1: corresponde a 1, 1.0 e True, que é igual a 1.

Os padrões True, False e None usam identidade. Assim, case True: corresponde ao booleano True, mas não ao inteiro 1. A ordem dos padrões importa se um caso numérico e um caso booleano puderem aceitar o valor sujeito.

Una alternativas fixas com uma barra

Um padrão de alternativas une alternativas com |:

day = int(input("Day number: "))
match day:
    case 6 | 7:
        print("Weekend")
    case 1 | 2 | 3 | 4 | 5:
        print("Weekday")
    case _:
        print("Not a day number")

Para 6, o primeiro corpo é executado; para 3, o segundo é executado; para 9, o curinga é executado. Sem int(), o "6" digitado continua sendo uma string e não corresponde ao número 6.

Use o separador de padrões |, não a palavra booleana or. case "y" or "yes": é inválido; case "y" | "yes": é válido.

DecisãoEscolha inicial clara
Um valor sujeito comparado com muitos valores fixosmatch
Intervalos como score >= 90if–elif
Condições envolvendo variáveis diferentesif–elif

Para comandos fixos, uma cadeia if–elif baseada em igualdade pode produzir as mesmas saídas. Escolha a disposição que torne os casos mais fáceis de ler.

Principais conclusões

  • match exige Python 3.10 ou posterior e executa apenas o primeiro caso correspondente.
  • Um curinga _ sem condição de guarda aceita tudo e deve ser o último.
  • Use | para unir padrões alternativos.
  • Literais de string e numéricos correspondem por igualdade; padrões True, False e None usam identidade.
  • Valores sujeitos sem correspondência não executam nenhum corpo quando não há caso para os demais.
  • Use match para escolhas fixas e if–elif para testes comuns de intervalo.

5.2 Capturas, condições de guarda e valores nomeados

Padrões podem fazer mais do que verificar um literal fixo. Um padrão pode dar um nome ao valor sujeito, e uma condição de guarda pode verificar uma condição extra antes de o caso ser aceito.

Capture primeiro e depois verifique a condição de guarda

Um padrão de captura é um nome isolado como n. Ele aceita qualquer valor sujeito e o atribui ao nome. Uma condição de guarda vem após o padrão com if condition; o corpo só é executado se o padrão corresponder e a condição de guarda for verdadeira.

temperature = -5
match temperature:
    case 0:
        print("Exactly freezing")
    case t if t < 0:
        print("Below freezing by", -t, "degrees")
    case _:
        print("Above freezing")

Em -5, o primeiro literal não corresponde. O próximo padrão captura -5 em t e depois testa t < 0. A condição de guarda é verdadeira, então a saída é Below freezing by 5 degrees.

Em 0, o caso literal prevalece antes de a captura ser tentada. Em 12, a captura tem sucesso, mas a condição de guarda falha, então o Python tenta o curinga e imprime Above freezing. Uma condição de guarda falsa não encerra a busca por um caso.

Um nome isolado não consulta uma constante

Suponha que QUIT = "q". É tentador escrever case QUIT: para verificar se o valor sujeito é igual a esse valor. Mas um nome isolado é sempre uma captura, mesmo em maiúsculas. O caso aceita qualquer valor sujeito e sobrescreve QUIT com ele.

Se outros casos vierem após uma captura sem condição de guarda, o Python informa um erro de sintaxe porque a captura os torna inalcançáveis. Se a captura for a última, o erro pode passar despercebido durante a execução. Compare explicitamente com uma condição de guarda:

QUIT = "q"
key = "x"
match key:
    case k if k == QUIT:
        print("Quit")
    case _:
        print("Keep working")

Aqui k captura "x". A condição de guarda o compara com o "q" existente, falha e permite que o curinga imprima Keep working. Um literal case "q": é mais simples quando o valor fixo pode ser escrito diretamente.

Distinga um padrão de valor com ponto

Um nome com ponto, como math.pi, é um padrão de valor, não uma captura. Ele consulta um valor existente e compara o valor sujeito com ele usando ==. Constantes nomeadas fornecidas por módulos ou classes podem usar essa forma. A distinção a reconhecer é o ponto: case n: atribui um nome; um padrão com ponto verifica um valor existente.

Nomeie uma correspondência específica com as
answer = "y"
match answer:
    case "y" | "yes" as accepted:
        print("Accepted:", accepted)
    case _:
        print("Please answer y or yes")

O padrão de alternativas verifica as strings permitidas, e as armazena em accepted o valor sujeito que correspondeu. Para "y", a saída é Accepted: y. Ele não substitui a entrada por uma palavra padrão: "yes" armazenaria "yes". "Yes" não corresponde a nenhuma das duas strings porque maiúsculas e minúsculas ainda importam.

Uma ou duas condições de guarda podem se encaixar naturalmente entre casos fixos. Quando quase todo caso é um teste de intervalo ou usa variáveis diferentes, uma cadeia if–elif costuma ser mais clara. Qualquer uma das estruturas precisa de um caso final para os demais quando toda entrada deve receber uma resposta.

Principais conclusões

  • Um padrão com nome isolado captura o valor sujeito mesmo que esse nome já tenha um valor.
  • Uma condição de guarda é verificada depois que um padrão corresponde; uma condição falsa permite testar casos posteriores.
  • Um padrão de valor com ponto compara com um valor existente.
  • as nomeia o valor sujeito aceito por um padrão mais específico.
  • Use um literal ou uma comparação com condição de guarda para evitar a captura acidental do nome de uma constante.

Exercícios resolvidos de Condições em Python

5 Lições Interativas

1

Transforme valores em comparações confiáveis

13 passos
Acompanhe uma verificação de limite de armazenamento, das comparações numéricas à entrada digitada, às verificações de texto e a um intervalo inclusivo.
  1. 1
    IntroduçãoUm limite de armazenamento precisa de um teste exato

    Um armário de armazenamento aceita pacotes com peso de 1 a 8 quilogramas, incluindo ambos os limites. Antes de escolher uma ação, o programa precisa transformar essa regra em uma resposta de sim ou não, um booleano produzido por uma comparação, de modo que toda decisão posterior se apoie em um teste exato.

    Comece com comparações individuais e depois combine os dois limites em um intervalo. Ao longo do caminho, verifique se um valor é um número ou apenas texto que parece numérico.

  2. 2
    ExplicaçãoUma comparação produz um booleano

    Com weight = 8, a expressão weight < 8 é False: oito não é menor que si mesmo. A expressão weight <= 8 é True, pois inclui a igualdade.

    Ambos os resultados têm o tipo bool. Escreva True e False com iniciais maiúsculas e sem aspas. Um texto como "True" é uma string, e um true em minúsculas não definido gera NameError em vez de fornecer um booleano.

  3. 3
    ExemploArmazene o resultado sem alterar o peso
    weight = 8
    fits_upper_limit = weight <= 8
    print(weight, fits_upper_limit)
    

    Primeiro, 8 <= 8 é avaliado como True. A atribuição armazena esse booleano em fits_upper_limit; o peso original permanece inalterado. A saída é 8 True.

    O = único realiza a atribuição. A comparação usa <=; para uma pergunta sobre valores iguais, use ==.

  4. 4
    DesafioUma comparação atualiza o valor?

    Preveja a saída:

    weight = 6
    weight == 8
    print(weight)
    

    ---reveal---

    Ele imprime 6. A linha do meio compara o peso atual com 8, mas nunca atribui um valor substituto. Em um script, seu resultado falso não é usado. Uma atribuição com um único weight = 8 mudaria a saída final para 8.

  5. 5
    ConexãoUma operação aritmética pode fornecer o valor a comparar

    Um teste de número inteiro pode comparar um resultado aritmético: n % 2 == 0 primeiro encontra o resto da divisão por 2 e depois verifica a igualdade com zero.

    Para n = -9, o resto é 1, então o teste é falso. O resto do Python com divisor positivo 2 é 1 para inteiros ímpares, mesmo quando o inteiro original é negativo. Comparar o resto com 1 testa se o número é ímpar.

  6. 6
    DicaNúmeros de ponto flutuante calculados podem diferir ligeiramente

    0.1 + 0.2 é armazenado como 0.30000000000000004, então seu teste de igualdade exata com 0.3 falha.

    Uma verificação de tolerância faz outra pergunta: abs((0.1 + 0.2) - 0.3) < 1e-9 testa se a distância é menor que um bilionésimo. abs() remove o sinal da diferença. Esse teste é verdadeiro; ele aceita uma pequena diferença em vez de afirmar uma igualdade exata.

  7. 7
    ExemploAlgarismos digitados começam como texto
    weight = input("Weight in kilograms: ")
    

    Se o usuário digitar 8, a variável conterá "8". Comparar weight <= 8 gera TypeError, pois tenta ordenar uma string e um inteiro.

    Leia uma medida decimal com weight = float(input("Weight in kilograms: ")). Os mesmos algarismos digitados agora produzem 8.0, que pode ser comparado numericamente com 8.

  8. 8
    ExplicaçãoStrings seguem os caracteres a partir da esquerda

    A ordem do texto é baseada em pontos de código Unicode. "18" < "8" é verdadeiro porque o primeiro par diferente é "1" e "8"; o Python não trata essas strings como dezoito e oito.

    Maiúsculas, minúsculas e espaços também importam. "ready" == "Ready" é falso. Comparar answer.strip().lower() com "ready" remove caracteres em branco das extremidades e normaliza a capitalização antes da verificação de igualdade.

  9. 9
    DesafioVerifique o que o pertencimento realmente pergunta

    Avalie estes dois testes:

    "box" in "mailbox"
    "Box" in "mailbox"
    

    ---reveal---

    O primeiro é True, e o segundo é False. O pertencimento procura a substring exata, incluindo maiúsculas e minúsculas. As letras "box" aparecem juntas no final de "mailbox"; o "B" maiúsculo não aparece ali. not in inverteria cada resultado.

  10. 10
    ExemploVerifique os dois limites da regra do armário
    weight = 8
    fits_locker = 1 <= weight <= 8
    print(fits_locker)
    

    A cadeia verifica 1 <= 8 e 8 <= 8. Ambos os testes passam, então o resultado é True. Com weight = 0.5, o teste inferior falha; com 8.5, o teste superior falha.

    Toda comparação entre valores vizinhos em uma cadeia deve ser verdadeira. Substituir qualquer um dos <= por < exclui esse extremo.

  11. 11
    Ideia-chaveDados ausentes são uma questão diferente

    None significa que não há valor presente. Verifique-o com weight is None ou weight is not None.

    O operador is pergunta se as referências identificam o mesmo objeto. A igualdade numérica usa ==, então não substitua weight == 8 por weight is 8. Valores podem ser iguais sem ser o mesmo objeto, e uma comparação de identidade com um literal numérico produz um aviso.

  12. 12
    DesafioCombine conversão com uma verificação de limite

    Um script executa weight = float(input("Weight: ")), e o usuário digita "8.5". O que 1 <= weight <= 8 retorna, e a própria conversão rejeita a entrada?

    ---reveal---

    Ela retorna False porque 8.5 <= 8 falha. A conversão tem sucesso: 8,5 é um número de ponto flutuante válido. Converter texto estabelece um tipo numérico; o teste de intervalo decide separadamente se esse número é permitido.

  13. 13
    RecapitulaçãoTrês questões a manter separadas

    Escolha o operador que corresponde ao limite, estabeleça o tipo do valor e depois rastreie a comparação.

    A ordenação numérica precisa de valores numéricos. Verificações de string preservam os caracteres exatos, a menos que você normalize o texto. Um intervalo precisa dos dois limites, pertencimento pergunta sobre uma substring e identidade é a ferramenta adequada para verificar None.

2

Acompanhe uma escolha de entrega por seus ramos

14 passos
Construa uma decisão de entrega a partir de um único if até chegar a duas alternativas, um valor selecionado e faixas de serviço ordenadas.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoDe uma regra a um caminho pelo código
  2. 2
    ExemploUm aviso que pode ser ignorado
  3. 3
    DicaCorrija a estrutura antes de interpretar os resultados
  4. 4
    DesafioMova a última linha para dentro do corpo
  5. 5
    ExemploDê uma ação ao caminho falso
  6. 6
    Ideia-chaveElse significa toda entrada rejeitada
  7. 7
    ExemploEscolha apenas a taxa em uma expressão
  8. 8
    DesafioLeia os valores ao redor da condição
  9. 9
    ExemploOrganize três faixas de serviço
  10. 10
    ExemploUse a falha anterior para restringir o intervalo
  11. 11
    DesafioAltere a ordem dos testes sobrepostos
  12. 12
    ConexãoUm novo if é uma nova decisão
  13. 13
    DesafioEncontre a classificação e a taxa
  14. 14
    RecapitulaçãoAdapte a estrutura à escolha
3

Construa e proteja uma condição combinada

13 passos
Traduza uma regra de reserva, agrupe alternativas, use verificações de proteção com curto-circuito e negue um intervalo corretamente.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoVários fatos podem controlar uma ação
  2. 2
    ExplicaçãoExija ambos os fatos com and
  3. 3
    ExemploPermita qualquer uma das formas de pagamento com or
  4. 4
    DesafioEscolha uma linha que passe
  5. 5
    DicaDê a cada comparação seus próprios operandos
  6. 6
    ExemploColoque as alternativas dentro da exigência compartilhada
  7. 7
    Ideia-chaveAgrupamento não é a ordem de execução
  8. 8
    ExemploColoque uma verificação de proteção antes de uma média
  9. 9
    DesafioQual operação é alcançada?
  10. 10
    ExplicaçãoNegar um intervalo altera o conector
  11. 11
    DesafioPreserve os extremos incluídos
  12. 12
    DesafioTraduza duas exigências e uma exclusão
  13. 13
    RecapitulaçãoLeia o significado, o agrupamento e as operações alcançadas
4

Valide, classifique e teste uma solicitação de entrega

16 passos
Acompanhe verificações aninhadas, preserve valores zero válidos e construa testes que revelem lacunas e valores limiares incorretos.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoCada entrada precisa seguir o caminho pretendido
  2. 2
    ExemploValide antes de escolher um serviço
  3. 3
    ExemploRastreie o caminho interno
  4. 4
    DesafioEncontre a qual if o else pertence
  5. 5
    ConexãoReduza o aninhamento quando houver uma ação compartilhada
  6. 6
    ExplicaçãoZero e ausência são ambos considerados falsos
  7. 7
    ExemploUm texto que parece negativo ainda pode passar
  8. 8
    DesafioPreserve um zero real
  9. 9
    Ideia-chaveUm operador pode selecionar texto
  10. 10
    ExemploRegistre um caminho sem inventar testes
  11. 11
    DicaEscolha testes para caminhos e limites
  12. 12
    DesafioUma condição ampla esconde um ramo posterior
  13. 13
    ConexãoProcure lacunas e sobreposições indesejadas
  14. 14
    DicaInspecione o valor antes de uma comparação arriscada
  15. 15
    DesafioTeste completamente uma decisão corrigida
  16. 16
    RecapitulaçãoDê um propósito claro a valores e testes
5

Compare comandos e adicione casos com condições de guarda

15 passos
Construa um menu de comandos, rastreie um match numérico com condição de guarda e distinga nomes de captura de constantes existentes.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoUm valor sujeito, vários casos possíveis
  2. 2
    ExemploOrganize o menu de comandos
  3. 3
    Ideia-chaveO próximo caso não é executado automaticamente
  4. 4
    ExemploUse um corpo para dois comandos exatos
  5. 5
    DesafioColoque a alternativa para os demais no lugar adequado
  6. 6
    DicaVerifique o comportamento de padrões numéricos e booleanos
  7. 7
    ExplicaçãoUm nome isolado captura qualquer valor sujeito
  8. 8
    ExemploAdicione uma condição de guarda ao valor capturado
  9. 9
    DesafioContinue após uma condição de guarda falsa
  10. 10
    ExemploUm nome em maiúsculas ainda captura
  11. 11
    ConexãoUm ponto altera o comportamento da consulta
  12. 12
    ExemploNomeie uma alternativa literal correspondente
  13. 13
    DesafioEscolha uma estrutura de menu para a tarefa
  14. 14
    DesafioMantenha um nome fixo e permita uma alternativa
  15. 15
    RecapitulaçãoLeia os padrões antes de ler os corpos dos casos

Questões de Condições em Python

40 Questões de Prática em 4 conjuntos

Conjunto 1: Aplique regras e diagnostique ramos incorretos10 Questões de Prática

Questão 1 de 10

Qual valor booleano é armazenado em is_odd?

n = -13
is_odd = n % 2 == 1
  1. False, porque n é negativo.
  2. False, porque o resto é -1.
  3. True, porque todo número diferente de zero é ímpar.
  4. True, porque o resto é 1.
Mostrar respostaOcultar resposta
Resposta: D
Com o divisor positivo 2, o Python fornece resto 1 para o inteiro ímpar negativo -13. Comparar esse resto com 1 armazena True. Um resto de -1 usaria uma regra de sinal diferente da regra do Python para % com divisor positivo.

Questão 2 de 10

Um programa lê level = input("Level: "). O usuário digita 16. O que acontece quando ele avalia level < 20 em seguida?
  1. Ele gera TypeError.
  2. Ele é avaliado como True.
  3. Ele é avaliado como False.
  4. Ele altera level para 20.
Mostrar respostaOcultar resposta
Resposta: A
input() armazena o texto "16", não o inteiro 16. O Python não consegue ordenar uma string em relação a um inteiro, então a comparação gera TypeError. Ela seria verdadeira após uma conversão com int(), mas o código mostrado não fez essa conversão.

Questão 3 de 10

Qual é a instrução específica do Python para não executar nenhuma ação em um ramo incompleto?
  1. else
  2. elif
  3. pass
  4. if
Mostrar respostaOcultar resposta
Resposta: C
pass é a instrução específica do Python para não executar nenhuma ação, então fornece a um ramo incompleto um corpo indentado válido. Um else inicia uma cláusula alternativa e não pode servir como esse corpo. O ramo ainda precisa de uma instrução, mesmo quando sua condição seria falsa.

Questão 4 de 10

Qual é o valor final de label?

points = 37
if points >= 30:
    label = "High"
if points >= 10:
    label = "Middle"
else:
    label = "Low"
  1. "High"
  2. "Middle"
  3. "Low"
  4. "High Middle"
Mostrar respostaOcultar resposta
Resposta: B
O primeiro if independente atribui "High", mas a execução chega depois ao segundo if. Sua condição também é verdadeira, então ele sobrescreve label com "Middle" e ignora seu else. Manter "High" trataria incorretamente o segundo if como um elif da primeira decisão.

Questão 5 de 10

Qual par de entradas booleanas torna is_open and not is_full verdadeiro?
  1. is_open = False, is_full = False
  2. is_open = True, is_full = True
  3. is_open = False, is_full = True
  4. is_open = True, is_full = False
Mostrar respostaOcultar resposta
Resposta: D
A primeira exigência precisa de is_open verdadeiro, e a segunda exigência negada precisa de is_full falso. Com ambas as entradas verdadeiras, not is_full torna-se falso e a condição combinada falha. Ter espaço disponível, por si só, também não satisfaz a exigência de que o local esteja aberto.

Questão 6 de 10

Uma reserva é permitida apenas em um dia útil e somente se o usuário tiver crédito ou um voucher. Qual expressão aplica essa regra?
  1. is_weekday and (has_credit or has_voucher)
  2. is_weekday and has_credit and has_voucher
  3. (is_weekday and has_credit) or has_voucher
  4. is_weekday or (has_credit and has_voucher)
Mostrar respostaOcultar resposta
Resposta: A
A exigência de dia útil aplica-se às duas formas de pagamento, então as alternativas de pagamento devem ficar juntas entre parênteses. Sem esse agrupamento, and tem precedência e um voucher sozinho pode tornar a expressão verdadeira mesmo fora de um dia útil. A versão que usa or para o dia útil também aceita dias que não atendem à exigência estabelecida.

Questão 7 de 10

O que é impresso?

is_open = False
has_booking = True
if is_open:
    if has_booking:
        print("Enter")
    else:
        print("Book first")
else:
    print("Closed")
  1. Apenas Book first
  2. Apenas Closed
  3. Enter, depois Closed
  4. Nada é impresso
Mostrar respostaOcultar resposta
Resposta: B
A condição externa falsa faz com que todo o corpo seja ignorado, incluindo o teste interno de reserva e seu else. O else externo, alinhado com if is_open:, imprime Closed. Escolher Enter testaria uma condição interna cujo ramo externo o Python nunca acessa.

Questão 8 de 10

Qual valor "" or "Reader" retorna?
  1. A string vazia ""
  2. O booleano False
  3. A string "Reader"
  4. O booleano True
Mostrar respostaOcultar resposta
Resposta: C
A string vazia à esquerda é considerada falsa, então or avalia e retorna seu operando direito, "Reader". Esse resultado é uma string, não um booleano. Retornar True confundiria o valor lógico usado para escolher um operando com o operando que a expressão realmente retorna.

Questão 9 de 10

Qual cabeçalho de caso encaminha a string "edit" ou a string "change" para um único corpo?
  1. case "edit" | "change":
  2. case "edit" or "change":
  3. case "edit" and "change":
  4. case "edit" == "change":
Mostrar respostaOcultar resposta
Resposta: A
Um padrão de alternativas separa as opções com o símbolo |, então qualquer uma das strings exatas pode corresponder ao caso. A palavra booleana or não é um separador de padrões válido. Um cabeçalho de caso descreve padrões para correspondência, então a sintaxe comum de expressão booleana não pode substituí-los aqui.

Questão 10 de 10

O que é impresso?

value = 11
match value:
    case n if n < 0:
        print("Negative", n)
    case n if n % 2 == 0:
        print("Even", n)
    case _:
        print("Other")
  1. Negative 11
  2. Even 11
  3. Nada é impresso
  4. Apenas Other
Mostrar respostaOcultar resposta
Resposta: D
A primeira captura aceita 11, mas sua condição de guarda para número negativo falha. O Python tenta o próximo caso, cuja captura também tem sucesso, mas cuja condição de guarda para número par falha porque o resto é 1. Ele então imprime Other; uma captura bem-sucedida, por si só, não seleciona um corpo quando sua condição de guarda é falsa.
Conjunto 2: Leia comparações e acompanhe decisões10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um pacote pode pesar no máximo 6 quilogramas. Qual teste aceita exatamente os pesos permitidos usando weight?
  1. weight < 6
  2. weight >= 6
  3. weight <= 6
  4. weight > 6
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Qual é o resultado de "14" < "7"?
  1. False, pois 14 é maior que 7.
  2. True, pois "1" vem antes de "7".
  3. False, pois as strings são diferentes.
  4. True, pois dois dígitos superam um.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

O que é impresso?

stock = 0
if stock > 0:
    print("Available")
print("Checked")
  1. Apenas Available
  2. Available, depois Checked
  3. Nada é impresso
  4. Apenas Checked
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Qual valor é atribuído a fee?

has_pass = False
fee = 2 if has_pass else 7
  1. 7
  2. 2
  3. False
  4. 0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

O que é impresso?

points = 46
if points >= 50:
    print("Gold")
elif points >= 30:
    print("Silver")
elif points >= 10:
    print("Bronze")
else:
    print("Starter")
  1. Silver, depois Bronze
  2. Apenas Silver
  3. Apenas Bronze
  4. Apenas Starter
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Um download pode começar se um usuário tiver uma assinatura ou um passe diário, incluindo usuários que tenham ambos. Qual condição implementa a regra?
  1. has_subscription or has_day_pass
  2. has_subscription and has_day_pass
  3. not has_subscription and has_day_pass
  4. not (has_subscription or has_day_pass)
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Para total e items numéricos, uma variável sinalizadora deve ser verdadeira somente quando uma média for maior que 8. Zero itens deve produzir falso sem tentar a divisão. Qual expressão implementa ambas as exigências?
  1. total / items > 8 and items != 0
  2. items == 0 or total / items > 8
  3. items != 0 or total / items > 8
  4. items != 0 and total / items > 8
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

O que bool("no") retorna?
  1. A string "no"
  2. O booleano False
  3. O booleano True
  4. O valor None
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Uma regra para números inteiros deve aceitar visits de pelo menos 24. Uma pessoa programadora escreveu visits > 24. Qual entrada revela mais diretamente o resultado incorreto?
  1. 23
  2. 25
  3. 24
  4. 26
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

O que é impresso?

mode = "SAVE"
match mode:
    case "save" | "write":
        print("Stored")
    case _:
        print("Unknown")
print("End")
  1. Apenas Stored
  2. Unknown, depois End
  3. Stored, depois End
  4. Apenas Unknown
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 3: Rastreie valores por várias decisões10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um cálculo produz a = 0.1 + 0.2, e um valor esperado é b = 0.3. A verificação deve aceitar diferenças menores que 1e-8. Qual teste a implementa?
  1. a == b
  2. abs(a - b) > 1e-8
  3. abs(a - b) < 1e-8
  4. abs(a + b) < 1e-8
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

O que é impresso?

remaining = 4
if remaining > 0:
    remaining = 0
if remaining == 0:
    print("Empty")
print(remaining)
  1. Empty, depois 0
  2. Apenas 0
  3. Empty, depois 4
  4. Apenas 4
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Qual valor é atribuído a label?

has_booking = True
label = "Reserved" if has_booking else "Open"
  1. True
  2. "Open"
  3. False
  4. "Reserved"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

O que acontece quando esta expressão é avaliada?

is_admin = True
count = 0
total = 18
is_admin or count != 0 and total / count > 6
  1. Ela gera ZeroDivisionError imediatamente.
  2. Ela retorna True sem dividir.
  3. Ela retorna False sem dividir.
  4. Ela divide após verificar count.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

O que é impresso e por quê?

has_badge = True
is_active = False
if has_badge:
    if is_active:
        print("Enter")
else:
    print("Get a badge")
print("Checked")
  1. Get a badge, depois Checked; o teste interno falha.
  2. Enter, depois Checked; o teste do crachá passa.
  3. Apenas Checked; o else externo é ignorado.
  4. Apenas Get a badge; o else interno é executado.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Zero é uma quantidade válida fornecida, e None significa que nenhuma quantidade foi fornecida. Qual atribuição usa um valor padrão de 9 somente para dados ausentes?
  1. count = supplied or 9
  2. count = 9 if not supplied else supplied
  3. count = supplied if supplied else 9
  4. count = 9 if supplied is None else supplied
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Este classificador de inteiros deve imprimir exatamente uma classificação de sinal para cada inteiro. Qual entrada revela um caso ausente?

if balance < 0:
    print("Negative")
elif balance > 0:
    print("Positive")
  1. 0
  2. -1
  3. 1
  4. 2
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

O que é impresso?

reply = "later"
match reply:
    case "now" | "later" as chosen:
        print(chosen)
    case _:
        print("Unknown")
  1. now
  2. later
  3. Unknown
  4. True
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Um sensor aceita leituras numéricas de -4 a 9, inclusive. Qual condição é equivalente a not (-4 <= reading <= 9)?
  1. reading <= -4 or reading >= 9
  2. reading < -4 and reading > 9
  3. reading >= -4 and reading <= 9
  4. reading < -4 or reading > 9
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

O que acontece com EXIT?

EXIT = "x"
key = "z"
match key:
    case EXIT:
        print(EXIT)
  1. Continua "x", e nada é impresso.
  2. Continua "x", e x é impresso.
  3. Torna-se "z", e z é impresso.
  4. Torna-se True, e True é impresso.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 4: Corrija e teste regras de decisão combinadas10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Uma mensagem de solicitação de entrada aceita "go" apesar de diferenças de caracteres em branco nas extremidades e de maiúsculas e minúsculas. Ela deve rejeitar "gopher" e "stop". Qual condição implementa isso?
  1. answer.strip().lower() in "go"
  2. answer.strip().lower() == "go"
  3. "go" in answer.strip().lower()
  4. answer.strip() == "go"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

O que é impresso?

units = 0
amount = 15
result = amount / units if units != 0 else "No units"
print(result)
  1. Apenas No units
  2. Apenas 0
  3. Apenas 15
  4. Um ZeroDivisionError é gerado.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Para pontuações inteiras, uma classificação é "High" para pelo menos 70 pontos, "Mid" de 35 a 69 e "Low" abaixo de 35. Os testes usam >= em uma cadeia. Qual ordem de ramos e quais classificações implementam a regra?
  1. >= 35: Mid; >= 70: High; caso contrário: Low
  2. >= 70: High; >= 35: Low; caso contrário: Mid
  3. >= 35: High; >= 70: Mid; caso contrário: Low
  4. >= 70: High; >= 35: Mid; caso contrário: Low
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Um serviço deve ser executado somente quando pelo menos uma de duas conexões, wired e wireless, estiver disponível e a manutenção estiver desativada. Qual condição implementa toda a regra?
  1. wired or wireless and not maintenance
  2. wired and wireless and not maintenance
  3. (wired or wireless) and not maintenance
  4. (wired or wireless) or not maintenance
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

As pontuações são inteiros de 0 a 12, inclusive. Pontuações válidas de pelo menos 9 precisam de "High"; outras pontuações válidas precisam de "Low"; pontuações inválidas precisam de "Invalid". Um script classifica com if score >= 9: e else:, mas nunca valida o intervalo. Qual estrutura o corrige para toda pontuação inteira?
  1. Verifique score >= 0 externamente; classifique dentro; caso contrário, imprima Invalid.
  2. Verifique 0 <= score <= 12 externamente; classifique dentro; caso contrário, imprima Invalid.
  3. Verifique score <= 12 externamente; classifique dentro; caso contrário, imprima Invalid.
  4. Classifique primeiro; depois verifique 0 <= score <= 12 e imprima Invalid se falhar.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Qual valor é armazenado em chosen?

preferred = ""
alternate = "Morgan"
chosen = preferred or alternate or "Visitor"
  1. "Morgan"
  2. "Visitor"
  3. True
  4. ""
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Para pontuações inteiras, um classificador deve usar "Top" para pelo menos 80, "Pass" de 40 a 79 e "Retry" abaixo de 40. Qual entrada de teste revela um erro neste código?

if score >= 40:
    print("Pass")
elif score >= 80:
    print("Top")
else:
    print("Retry")
  1. 39
  2. 40
  3. 79
  4. 80
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

O que é impresso?

value = True
match value:
    case 1:
        print("Number case")
    case True:
        print("Boolean case")
    case _:
        print("Other case")
  1. Apenas Boolean case
  2. Number case, depois Boolean case
  3. Apenas Number case
  4. Apenas Other case
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Uma cadeia com quatro ramos imprime uma de quatro classificações. Quatro entradas diferentes imprimem a primeira classificação. Quantos ramos esses testes cobriram?
  1. Um ramo
  2. Dois ramos
  3. Três ramos
  4. Quatro ramos
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Qual palavra reservada introduz a condição extra após um padrão em case n ___ n > 4:?
  1. and
  2. if
  3. as
  4. elif
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Travou em uma questão sua? Ajuda com Tarefas

Termos-Chave

55 Termos-Chave, cada um com sua definição

A

Atribuição
Uma atribuição armazena um valor sob o nome de uma variável usando =, substituindo qualquer valor já associado a esse nome.
A atribuição score = 28 altera score; escrever score == 28 apenas compara seu valor atual.
Avaliação de curto-circuito
A avaliação de curto-circuito ignora um operando booleano posterior quando o operando esquerdo já definiu se a condição é verdadeira.
A avaliação de curto-circuito ignora total / count após um teste count != 0 falso ligado por and.

B

Bloco
Um bloco é um grupo de instruções no mesmo nível de indentação que o Python trata como corpo de uma condicional ou de outra instrução.
Duas chamadas indentadas de print() sob um teste de temperatura estão no bloco que o teste controla.

C

Cláusula elif
Uma cláusula elif adiciona outro ramo condicional a uma cadeia if e só é considerada depois que todas as condições anteriores falham.
A cláusula elif para pontuações de pelo menos 80 só é alcançada depois que o teste para 90 falha.
Cobertura de ramos
A cobertura de ramos verifica se os testes escolhidos executaram cada ramo pelo menos uma vez, incluindo ramos para os demais casos e ramos aninhados.
A cobertura de ramos de uma cadeia com quatro ramos precisa de pelo menos quatro entradas que sigam caminhos diferentes.
Comparação encadeada
Uma comparação encadeada une comparações entre valores vizinhos em uma expressão e só é verdadeira quando todas as comparações da cadeia são verdadeiras.
A comparação encadeada 2 <= level <= 9 inclui 2 e 9, mas rejeita um nível de 10.
Comparação que distingue maiúsculas de minúsculas
Uma comparação que distingue maiúsculas de minúsculas trata letras maiúsculas e minúsculas como caracteres diferentes ao verificar a igualdade ou a ordem de textos.
Uma comparação que distingue maiúsculas de minúsculas rejeita "Yes" quando o texto exato exigido é "yes".
Condição de guarda de case
Uma condição de guarda de case é uma condição if após um padrão que deve ser verdadeira antes de seu corpo ser executado; uma condição falsa permite testar casos posteriores.
A condição de guarda de case em case n if n < 0: verifica o número capturado antes de escolher o caso negativo.
Condição externa
Uma condição externa controla a entrada em um bloco que contém outra decisão, determinando se o teste interno será alcançado.
Quando a condição externa has_ticket é falsa, a comparação interna de idade é ignorada.
Condicional aninhada
Uma condicional aninhada é uma condicional dentro de outro ramo, de modo que seu teste só é alcançado quando a execução entra nesse ramo externo.
A condicional aninhada verifica a idade de um visitante somente depois que a verificação externa do ingresso passa.
Condições equivalentes
Condições equivalentes produzem o mesmo valor lógico para todas as combinações permitidas de suas entradas, mesmo quando suas formas escritas diferem.
As condições equivalentes not (age >= 18) e age < 18 coincidem para toda idade inteira.
Conjunção
Uma conjunção é uma condição unida por and que só é verdadeira quando ambas as exigências são atendidas, como os dois limites de um intervalo.
A conjunção age >= 13 and age <= 19 rejeita idades em qualquer um dos lados do intervalo da adolescência.
Conversão de tipo
Uma conversão de tipo cria um valor de outro tipo, como ao transformar texto com algarismos em um inteiro com int() antes de comparar grandezas.
A conversão de tipo em level = int(input("Level: ")) torna possível um teste de limite numérico.

D

Decisão de duas alternativas
Uma decisão de duas alternativas escolhe exatamente um de dois caminhos usando if e else, com um corpo a executar para cada valor lógico.
Uma decisão de duas alternativas atribui uma cobrança de frete nos dois caminhos antes de o total ser impresso.

E

Expressão condicional
Uma expressão condicional seleciona e produz um de dois valores usando a if condition else b, avaliando apenas o valor selecionado.
A expressão condicional fee = 0 if has_pass else 4 armazena 4 quando o passe está ausente.

F

Fluxograma
Um fluxograma é um diagrama de caminhos de programa que mostra uma decisão como um losango com caminhos separados para verdadeiro e falso até a próxima ação.
Um fluxograma mostra os dois caminhos voltando a se unir após o corpo de uma decisão de temperatura com uma alternativa.

I

Indentação
Indentação é o espaço no início da linha que indica a qual bloco uma instrução pertence; a convenção do Python usa 4 espaços por nível.
Remover um nível de indentação de print("Done") dentro do corpo de um if faz com que ela seja executada após toda a decisão.
Instrução if
Uma instrução if verifica uma condição e executa seu corpo indentado somente quando a condição é considerada verdadeira; depois, continua após esse corpo.
A instrução if iniciada por if stock > 0: ignora seu corpo quando stock é zero.
Instrução match
Uma instrução match testa um valor sujeito em relação a padrões de caso ordenados e executa apenas o corpo do primeiro caso correspondente; depois, continua.
A instrução match para "stop" ignora case "start": e executa o corpo sob case "stop":.
Instrução pass
Uma instrução pass é uma instrução válida que não executa nenhuma ação, permitindo que um bloco obrigatório exista antes de seu código útil ser escrito.
Uma instrução pass indentada mantém válido um corpo if incompleto sem produzir saída.

L

Leis de De Morgan
As leis de De Morgan reescrevem um grupo booleano negado ao negar cada parte e trocar and por or ou vice-versa, preservando seu valor lógico.
As leis de De Morgan transformam not (A or B) em not A and not B, com ambas as partes negadas.
Limite inclusivo
Um limite inclusivo é um limite que pertence ao intervalo aceito, expresso com <= ou >= em uma comparação numérica.
O limite inclusivo em age >= 18 permite que uma pessoa com exatamente 18 anos passe no teste.

O

Operador booleano
Um operador booleano combina ou inverte valores lógicos; o Python usa as palavras em minúsculas and, or e not para essas operações.
Um operador booleano une as duas exigências em has_ticket and is_open em um único teste.
Operador de comparação
Um operador de comparação verifica a igualdade ou a ordem de valores e produz um resultado booleano, como faz <= ao incluir um limite.
O operador de comparação em weight <= 8 aceita um peso de exatamente 8 quilogramas.
Operador de pertencimento
Um operador de pertencimento testa se um valor ocorre dentro de outro; para strings, in e not in testam substrings exatas.
O operador de pertencimento em "rain" in "raincoat" encontra o texto e retorna True.
Operando
Um operando é um valor ou expressão sobre o qual um operador atua; and e or retornam um de seus operandos em vez de sempre retornarem um booleano.
O operando esquerdo de "" or "Guest" é considerado falso, então a expressão retorna o operando direito.
Ou inclusivo
Um ou inclusivo aceita qualquer uma das alternativas e também aceita ambas juntas; o or booleano do Python segue esse significado.
O ou inclusivo permite que is_member or has_coupon seja verdadeiro quando há tanto uma associação quanto um cupom.

P

Padrão as
Um padrão as nomeia o valor sujeito aceito por um padrão mais específico, preservando o valor real que correspondeu para uso no corpo.
O padrão as em case "y" | "yes" as reply: armazena "y" quando essa é a string fornecida.
Padrão curinga
Um padrão curinga é _, que aceita qualquer valor sujeito sem nomeá-lo; um caso curinga sem condição de guarda deve aparecer por último.
Um padrão curinga imprime "Unknown command" quando padrões anteriores de comandos fixos falham.
Padrão de alternativas
Um padrão de alternativas une padrões alternativos com | e tem sucesso quando qualquer alternativa corresponde, compartilhando um corpo de caso.
O padrão de alternativas case "open" | "load": executa o mesmo corpo para qualquer uma das strings de comando.
Padrão de captura
Um padrão de captura é um nome isolado que aceita qualquer valor sujeito e o atribui a esse nome, mesmo quando o nome já armazena um valor.
O padrão de captura case STOP: sobrescreve STOP; escrever em maiúsculas não o transforma em uma consulta.
Padrão de valor
Um padrão de valor é um nome com ponto que consulta um valor existente e compara o valor sujeito com ele usando igualdade, sem capturá-lo.
O padrão de valor math.pi compara com um valor existente de módulo em vez de atribuir um nome isolado.
Padrão literal
Um padrão literal verifica um número fixo, uma string, um booleano ou None; literais numéricos e de string são comparados por igualdade.
O padrão literal case 6: aceita o número 6, mas rejeita o texto "6" retornado pela entrada.
Ponto de código Unicode
Um ponto de código Unicode é o número atribuído a um caractere; o Python usa esses números ao comparar strings da esquerda para a direita.
O ponto de código Unicode de "Z" é menor que o de "a", então "Zebra" < "apple" é verdadeiro.
Precedência de operadores
A precedência de operadores determina como uma expressão agrupa seus operadores sem parênteses adicionais, com and agrupado antes de or.
Pela precedência de operadores, A or B and C é lido como A or (B and C), a menos que parênteses alterem o agrupamento.
Pseudocódigo
O pseudocódigo descreve passos de um programa em linguagem comum, tornando claras as escolhas pretendidas antes de serem escritas na sintaxe do Python.
O pseudocódigo pode dizer “Rejeite uma pontuação fora do intervalo; caso contrário, atribua sua nota” antes da programação.

R

Ramo else
Um ramo else é o corpo alternativo executado quando a condição do if correspondente é falsa; o cabeçalho else: não tem condição.
Em um teste if de números pares, o ramo else é executado para -7, pois seu resto não é zero.
Ramo inalcançável
Um ramo inalcançável é um ramo no qual nenhuma entrada pode entrar porque decisões anteriores ou exigências contraditórias sempre o impedem.
Um ramo inalcançável resulta quando elif score >= 90: vem após o mais amplo if score >= 60:.
Ramo para os demais casos
Um ramo para os demais casos trata entradas que casos anteriores não aceitaram, como um else final em uma instrução condicional com várias alternativas.
Um ramo para os demais casos pode imprimir "Unknown option" para entradas de menu diferentes de "1" ou "2".
Redução de aninhamento
A redução de aninhamento reescreve decisões aninhadas com menos níveis de indentação, mantendo as mesmas escolhas de ramos e ações.
A redução de aninhamento de duas verificações com uma ação compartilhada pode substituí-las por uma condição com and.
Regra da primeira correspondência
A regra da primeira correspondência seleciona o primeiro ramo bem-sucedido em uma cadeia de decisão e ignora todas as condições e corpos restantes.
Pela regra da primeira correspondência, uma pontuação de 95 é abrangida por >= 60 se esse teste amplo aparecer primeiro.

T

Tabela de rastreamento
Uma tabela de rastreamento registra valores de variáveis, condições alcançadas e ações em ordem de execução para que o caminho de um programa possa ser acompanhado manualmente.
Uma tabela de rastreamento marca testes posteriores de notas como ignorados após um ramo anterior atribuir a nota.
Tabela-verdade
Uma tabela-verdade lista todas as combinações de entradas booleanas e o resultado de cada uma, permitindo verificar completamente uma condição composta.
Uma tabela-verdade para duas entradas tem quatro linhas, incluindo o caso em que ambas são verdadeiras.
Teste de identidade
Um teste de identidade usa is ou is not para verificar se referências identificam o mesmo objeto, frequentemente para reconhecer None.
O teste de identidade result is None distingue um resultado ausente de um valor real igual a zero.
Teste de valor limite
Um teste de valor limite verifica um limite e entradas próximas para detectar uma comparação que inclui ou exclui o extremo errado.
Um teste de valor limite usa 17, 18 e 19 para verificar uma regra de números inteiros escrita como age >= 18.
Tolerância
Uma tolerância é a diferença que uma verificação numérica aceita quando valores calculados podem conter pequenos erros de aproximação.
Uma tolerância de 1e-9 permite que abs(a - b) < 1e-9 aceite uma pequena diferença entre números de ponto flutuante calculados.

V

Validação de entrada
A validação de entrada verifica se os dados fornecidos atendem às regras permitidas pelo programa antes de serem usados em outra decisão.
A validação de entrada com 0 <= score <= 100 rejeita 150 antes que uma nota possa ser atribuída.
Valor booleano
Um valor booleano é um dos dois valores True e False, que o Python usa para expressar o resultado de um teste de sim ou não.
O valor booleano armazenado por is_ready = count >= 4 é True quando count é igual a 4.
Valor considerado falso
Um valor considerado falso é um valor que faz uma condição falhar, incluindo zero, None, False, texto vazio e coleções embutidas vazias.
Um zero considerado falso faz com que quantity or 1 escolha o valor padrão mesmo que zero tenha sido informado intencionalmente.
Valor considerado verdadeiro
Um valor considerado verdadeiro é um valor que faz uma condição passar, incluindo números diferentes de zero e strings não vazias, mesmo strings que dizem falso.
O valor "False", considerado verdadeiro, passa em if answer: porque seus caracteres tornam a string não vazia.
Valor limiar
Um valor limiar é um valor no qual uma decisão muda de resultado, e o operador de comparação determina qual lado inclui esse valor.
Um valor limiar de nota igual a 90 atribui 90 à faixa superior quando o teste é score >= 90.
Valor lógico em contexto
O valor lógico em contexto é o valor lógico que o Python usa quando um valor geral aparece em uma condição, permitindo que números ou textos controlem um ramo.
O valor lógico em contexto permite que if name: rejeite uma resposta vazia sem uma comparação explícita com "".
Valor padrão
Um valor padrão é uma alternativa usada quando um valor preferido está ausente ou é inadequado, como um texto selecionado por uma expressão or.
O valor padrão "Guest" é selecionado em name or "Guest" quando name é a string vazia.
Valor sujeito
O valor sujeito é o valor que uma instrução match verifica em relação aos padrões de caso, escrito após a palavra reservada match no cabeçalho.
Em match command:, o valor atual de command é o valor sujeito usado em cada tentativa de caso.
Verificação de proteção
Uma verificação de proteção é uma verificação colocada antes de uma operação para que a avaliação de curto-circuito possa impedi-la quando ela falharia.
Uma verificação de proteção testa count != 0 antes da divisão em count != 0 and total / count > 10.

Sobre esta aula

Por StudeliRelatar um erro

Crie seus próprios Materiais de Estudo

Transforme suas anotações, slides e documentos em Guias de Estudo, Questões de Prática, Flashcards e mais 6 ferramentas.

Começar