Aulas do bloco

← Todas as aulas
Pythonaula 814/08/20261h37

Estruturas condicionais: if/else e operadores de comparação

Estreia if/else com dois pontos e indentação, operadores de comparação e as funções len() e count() com validações encadeadas de idade, nome e senha usando and/or — retoma input e conversão de tipos apenas como apoio.

▶ Abrir gravaçãoIniciar exercíciosMédia68/1000/30 exercícios

Para revisar rápido

Resumo da aula

7 pontos
  • input() sempre devolve string; é preciso converter com int(), float() ou str() antes de calcular ou comparar como número.

  • Python tem tipagem rígida: não concatena string com número diretamente, é preciso converter explicitamente.

  • Operadores de comparação >, <, >=, <=, ==, != devolvem True ou False; para strings, a aula usou apenas == e !=.

  • if/else exige dois pontos após a condição e indentação (4 espaços) para definir o bloco que será executado.

  • len() mede a quantidade de caracteres e count() conta ocorrências de uma sequência dentro da string.

  • and exige todas as condições verdadeiras, or exige pelo menos uma; use parênteses para agrupar e dar prioridade.

  • Comparação apenas faz uma pergunta booleana, não valida se o valor é plausível; implantado nos exemplos de idade, senha 'the_game' e validações de nome/senha.

Guia de estudo

1. Relembrando input, conversão e tipagem rígida

Tudo começa com a entrada do usuário. O comando input() sempre entrega uma string, mesmo que o usuário digite 18 ou 1.75. Por isso, se você precisa fazer conta ou comparar como número, deve converter explicitamente.

altura = input("Digite sua altura: ")
print(type(altura))  # sempre <class 'str'>
altura_num = float(altura)
print("Sua altura é " + str(altura_num))

Se tentar print("Sua altura é " + altura_num) sem converter, o Python dá erro. Isso mostra a rigidez de tipos: ele não converte automaticamente como JavaScript faz. Para inteiro use int(), para decimal float(), para voltar a texto str(). bool() existe, mas não serve para converter entrada do usuário. Essa conversão é a ponte entre o que o usuário digita e o que o programa consegue processar numericamente.

Conversão correta para concatenação

altura = input("Digite sua altura: ")
altura_num = float(altura)
print("Sua altura é " + str(altura_num))

Converte string do input para float e depois para string novamente para concatenar.

Comparação entre tipos diferentes

print("10" == 10)
print("10" == "10")

String ‘10’ é de tipo diferente de inteiro 10, por isso a primeira comparação dá False.

2. Por que sair do programa linear

Até aqui o programa era linear: executa de cima para baixo, sem desvios. Isso serve para ler, converter e mostrar, mas não para decidir. Se queremos liberar acesso apenas para maiores de idade ou só para quem acerta uma senha, precisamos de um desvio.

É para isso que serve a estrutura condicional. Ela faz uma pergunta cuja resposta é sempre um booleano (True ou False) e escolhe qual bloco executar. Outras formas existem (switch case, match case, ternário), mas nesta aula o foco foi if/else. Entender o programa linear ajuda a perceber o motivo do if: sem ele, não há escolha, só sequência.

3. Operadores de comparação e o tipo booleano

Operadores de comparação transformam dois valores em True ou False:

  • > maior que
  • < menor que
  • >= maior ou igual
  • <= menor ou igual
  • == igualdade (não confundir com = que é atribuição)
  • != diferente

A aula demonstrou com duas variáveis A e B:

A = 10
B = 5
print(A > B)   # True
print(A < B)   # False
print(A >= 10) # True
print(A == B)  # False
print(A != B)  # True

Para strings, a aula destacou que apenas == e != são usados diretamente. Um ponto importante: comparar "10" == 10 devolve False porque são tipos diferentes. A comparação não valida se o valor faz sentido (por exemplo, idade 200 ainda é >= 18), ela só responde à pergunta que você fez. Essa resposta booleana é o que alimenta o if.

Operadores com A e B

A = 10
B = 5
print(A > B)
print(A == B)
print(A != B)

Demonstração dos operadores com variáveis A e B, todos devolvem booleano.

4. Sintaxe do if/else: dois pontos e indentação

A sintaxe do if/else em Python tem duas marcas obrigatórias: dois pontos : no final da condição, que funcionam como um “então”, e indentação para indicar o bloco.

idade = int(input("Digite sua idade: "))
if idade >= 18:
    print("Acesso liberado")
else:
    print("Acesso negado")

Se a condição for True, entra no primeiro bloco; se False, vai para o else. A indentação geralmente é de 4 espaços, mas pode ser tab, desde que seja consistente no arquivo. No ambiente DeepNote, tabs são convertidos para espaços.

Repare que o if não valida nada sozinho. idade >= 18 só pergunta se é maior ou igual a 18. Cabe a você escrever a pergunta certa. Essa ideia de “pergunta vs validação” aparece em todos os exemplos seguintes.

Validação de idade

idade = int(input("Digite sua idade: "))
if idade >= 18:
    print("Acesso liberado")
else:
    print("Acesso negado")

Primeiro exemplo da aula: desvia o fluxo dependendo da comparação da idade.

5. Strings na prática: len() e count()

Quando o dado é texto, precisamos de outras ferramentas. A aula usou len() e count().

len() devolve a quantidade de caracteres, contando espaços:

print(len("teste")) # 5
print(len(""))      # 0 - string vazia
print(len("   "))   # 3 - três espaços contam

Com isso dá para validar nome:

nome = input("Digite seu nome: ")
if len(nome) == 0:
    print("Nome vazio, invalido")
else:
    print("Ola, " + nome)

count() conta quantas vezes uma sequência aparece:

senha = "aaa@@@bbb"
print(senha.count("@"))  # 3
print(senha.count("ab")) # 0 ou mais, depende da sequência

Dois exemplos com strings mostraram a conexão com if/else. Primeiro, acesso a fórum anônimo com senha exata:

segredo = input("Digite a senha: ")
if segredo == "the_game":
    print("Acesso liberado")
else:
    print("Senha incorreta")

Segundo, validação de senha que exige pelo menos três arrobas:

senha = input("Digite sua senha: ")
if senha.count("@") >= 3:
    print("Senha valida")
else:
    print("Precisa de pelo menos 3 arrobas")

Note como len e count transformam características do texto em números, que então podem ser comparados e usados no if.

Senha do fórum

segredo = input("Digite a senha: ")
if segredo == "the_game":
    print("Acesso liberado")
else:
    print("Senha incorreta")

Comparação de strings com == para liberar acesso.

Validação com count

senha = input("Digite sua senha: ")
if senha.count("@") >= 3:
    print("Senha valida")
else:
    print("Precisa de pelo menos 3 arrobas")

Usa count para exigir mínimo de caracteres especiais.

6. Combinando condições com and, or e parênteses

Perguntas simples resolvem um caso, mas e se a regra for “precisa ter 3 arrobas E 2 hashtags”? Ou “aceita 1 OU 2 caracteres especiais”? Para isso usamos operadores lógicos.

  • and exige que todas as condições sejam True
  • or exige que pelo menos uma seja True
  • parênteses agrupam e definem prioridade

A aula combinou count() com and e or:

senha = input("Digite sua senha: ")
if senha.count("@") >= 3 and senha.count("#") >= 2:
    print("Senha valida: tem arrobas e hashtags suficientes")
else:
    print("Senha invalida")

Se a regra fosse “um ou dois” de um tipo, usamos or:

senha = input("Digite sua senha: ")
if senha.count("@") == 1 or senha.count("@") == 2:
    print("Quantidade aceita")
else:
    print("Quantidade nao aceita")

Com parênteses, a leitura fica clara quando há várias condições:

senha = input("Digite sua senha: ")
if (senha.count("@") >= 3) and (senha.count("#") >= 2):
    print("Valida")

Um erro comum destacado foi tentar usar vírgula no lugar de and — a vírgula não é operador lógico e não funciona. O if/else sempre decide sobre True/False, mesmo quando a pergunta é composta; o resultado final da expressão com and/or ainda é um único booleano. Esses combinadores são os que mais geram erro e serão base para a continuação com elif na próxima aula.

Condição com and

senha = input("Digite sua senha: ")
if senha.count("@") >= 3 and senha.count("#") >= 2:
    print("Senha valida")
else:
    print("Senha invalida")

Combina duas exigências com and; ambas precisam ser verdadeiras.

Condição com or

senha = input("Digite sua senha: ")
if senha.count("@") == 1 or senha.count("@") == 2:
    print("Quantidade aceita")
else:
    print("Quantidade nao aceita")

Usa or para aceitar uma entre duas possibilidades.

Avisos administrativos — 5 recados sobre prazos, regras e funcionamento do curso
  • 01:31:38 TP2 já está disponível; semana que vem a aula vai falar sobre ele.
  • 00:06:24 Conteúdo de estruturas condicionais começou hoje (antecipado) e continua na semana que vem.
  • 01:34:27 Dever de casa: instalar Linux (brincadeira) — ‘vou cobrar na semana que vem’.
  • 01:20:05 Elif será visto na semana que vem.
  • 01:10:08 Webinar do INFNET sobre fóruns anônimos (link compartilhado).
Perguntas de aluno — 10 perguntas respondidas na gravação

Francisco: e se a gente perguntar se a string ‘10’ é igual ao número 10? 00:33:35 Devolve False, pois o Python compara tipos diferentes e eles não são iguais.

São quatro espaços ou você usou o tab? 00:49:01 · chat 00:48:55 Tanto faz, desde que a indentação seja consistente; no DeepNote, tabs são convertidos para espaços.

Francisco: como acessar a Dark Web? 01:09:35 Se você precisa perguntar como acessar, você não deveria acessar.

o if/else só compara true e false? 01:17:28 · chat 01:17:24 Sim, if else toma decisões baseadas em true ou false; a pergunta pode ser complexa, mas a resposta é sempre booleana.

Vinícius: como ficaria o código com mais de uma condição (ex.: três arrobas e dois hashtags)? 01:25:16 Usa o operador lógico and para combinar as condições.

E no caso de por exemplo ‘sua senha precisa ter ao menos 1 ou 2 caracteres especiais ’ ? Seria com and também ? 01:28:32 · chat 01:28:21 Se for ‘um ou dois’, usa o operador lógico or.

em vez do ‘and’ podia coloca a virgula? 01:30:01 · chat 01:28:40 Não, a vírgula não é operador lógico; tem que usar and.

Python tem ponteiros? 01:19:55 · chat 01:19:45 Não da forma que o C tem; mas teoricamente toda linguagem tem, de alguma forma.

Ruby on Rails 00:41:02 · chat 00:40:23 Vale, é uma linguagem consolidada.

Mas não conseguimos usar Python para a área de investimento? 00:42:37 · chat 00:42:12 Sim, Python e R são linguagens para análise econômica.

Trechos que valem reouvir — 5 momentos que mais rendem uma segunda escuta
  • 00:24:39 — Base dos operadores de comparação; essencial para entender o comportamento de true/false.
  • 00:46:28 — Estrutura if/else com indentação; é o núcleo da aula.
  • 01:28:54 — Combinação de and/or com parênteses; trecho mais fácil de errar e importante para a próxima aula.
  • 00:13:10 — Erro de concatenação de string com número; mostra a rigidez de tipos do Python.
  • 00:33:40 — Comparação entre string ‘10’ e inteiro 10; reforça a diferença entre tipos e como o Python responde.

Glossário da aula

Conceitos

input()

00:09:57

É um método que pede um dado ao usuário e sempre entrega o resultado como texto. É usado quando você precisa ler o que a pessoa digitou.

É uma função que transforma um valor em número inteiro, sem parte decimal. É usada quando você precisa calcular com números inteiros vindos de texto.

float()

00:10:30

É uma função que transforma um valor em número com parte decimal. É usada quando você precisa calcular com valores quebrados vindos de texto.

bool()

00:10:38

É um tipo que representa apenas verdadeiro ou falso, não serve para converter o que o usuário digitou. É usado para guardar respostas de perguntas sim ou não.

É uma função que transforma um valor em texto. É usada quando você precisa garantir que o dado seja tratado como string.

Comando vs função

00:10:55

Comando é uma instrução direta para a linguagem executar algo. Função é uma estrutura chamada com parênteses que executa uma ação específica quando chamada.

Concatenação de strings

00:12:55

É a junção de um texto com outro texto. Só funciona entre strings, por isso misturar texto com número gera erro e exige conversão.

Tipagem fraca

00:13:41

É o comportamento de linguagens como JavaScript que convertem tipos sozinhas. Isso pode causar resultados inesperados em contas e por isso exige atenção.

Tipagem rígida do Python

00:14:35

É a regra do Python de só permitir operações entre valores do mesmo tipo. Por isso você precisa converter o tipo de forma explícita antes de operar.

Programa linear

00:15:55

É um programa que executa seus comandos em sequência, de cima para baixo. É usado quando não há desvios ou decisões no fluxo.

Estrutura condicional

00:19:11

É o mecanismo que permite ao código tomar decisões. Inclui recursos como if/else, switch case, match case, ternário, short circuit e object map para escolher caminhos.

if/else

00:19:52

É uma estrutura que testa uma condição. Se for verdadeira executa um bloco, senão executa outro, para escolher entre dois caminhos.

Booleano

00:22:55

É um tipo que guarda apenas True ou False. É usado para representar a resposta de uma comparação ou pergunta lógica.

Operador de comparação

00:25:10

É um operador que compara dois valores e devolve um resultado booleano. É usado para fazer perguntas que o if pode testar.

> (maior que)

00:25:12

É um operador que compara dois valores e devolve True se o primeiro for maior que o segundo. É usado para testar limite superior.

< (menor que)

00:26:24

É um operador que compara dois valores e devolve True se o primeiro for menor que o segundo. É usado para testar limite inferior.

>= (maior ou igual)

00:26:29

É um operador que compara dois valores e devolve True se o primeiro for maior ou igual ao segundo. É usado para incluir o limite na comparação.

<= (menor ou igual)

00:26:37

É um operador que compara dois valores e devolve True se o primeiro for menor ou igual ao segundo. É usado para incluir o limite na comparação.

== (igualdade)

00:26:42

É um operador que verifica se dois valores são iguais e devolve um booleano. Não deve ser confundido com = que serve para atribuir valor.

!= (diferença)

00:26:47

É um operador que compara dois valores e devolve True se eles forem diferentes. É usado para testar quando valores não devem ser iguais.

= (atribuição)

00:26:59

É um operador que coloca um valor dentro de uma variável. Ele não compara valores, apenas atribui, diferente de ==.

Comparação de strings

00:32:45

É a comparação de textos onde apenas == e != funcionam diretamente. É usada para verificar se duas strings são iguais ou diferentes.

É uma função que conta e devolve a quantidade de caracteres de um texto. É usada quando você precisa saber o tamanho da string.

count()

00:33:10

É um método que conta quantas vezes uma sequência de caracteres aparece dentro de um texto. É usado para medir ocorrências em strings.

Indentação

00:47:50

É o recuo com espaços, geralmente quatro, que marca o bloco de código. É usada para definir quais linhas pertencem ao if ou else.

Dois pontos no if

00:47:17

São os dois pontos que finalizam a linha da condição do if. Funcionam como um 'então' para indicar o início do bloco.

É o bloco que é executado quando a condição do if resulta em falso. Serve como caminho alternativo quando a pergunta principal falha.

Validação vs pergunta

00:45:27

É a diferença entre apenas perguntar algo com comparação e validar se o valor faz sentido. A comparação sozinha não garante que o dado é plausível.

É um operador lógico que só devolve verdadeiro quando todas as condições ligadas são verdadeiras. É usado para exigir várias exigências ao mesmo tempo.

É um operador lógico que devolve verdadeiro quando pelo menos uma das condições ligadas é verdadeira. É usado para aceitar alternativas.

Parênteses em condições

01:29:13

São parênteses usados para agrupar expressões lógicas. Servem para definir a ordem e a prioridade de avaliação das condições.

É uma estrutura de repetição que repete um bloco enquanto sua condição for verdadeira. É usada para manter uma ação até a condição mudar.

É uma estrutura de repetição que percorre os elementos de uma estrutura de dados. É usada para executar uma ação para cada item da coleção.

É uma estrutura condicional adicional do Python para testar outra condição quando o if anterior falha. Será vista na próxima semana para encadear escolhas.

match case

00:19:32

É uma estrutura condicional do Python mencionada como alternativa ao if/else. É usada para escolher entre vários casos possíveis de um valor.

Object map

00:19:42

É um padrão mencionado para tomar decisões usando mapas de objetos. É usado como alternativa a estruturas como if/else para escolher caminhos.

Igualdade estrita (===)

00:34:55

É um operador do JavaScript que compara valor e tipo juntos. É usado para evitar conversões automáticas e resultados inesperados.

JavaScript vs Java

00:36:11

São linguagens diferentes com nomes parecidos por motivo de marketing. Java é mais estruturado e JavaScript é mais anárquico em seu comportamento.

É uma linguagem recomendada para o futuro e usada em ferramentas. Está substituindo C e C++ em partes do kernel do Linux por sua segurança.

É uma linguagem antiga ainda usada em sistemas bancários. Tem demanda no mercado mas não é recomendada para quem está começando agora.

replace()

01:16:06

É uma função mencionada para substituir caracteres dentro de um texto. É usada quando você precisa trocar partes de uma string por outras.

Distros Linux

01:34:37

São variações do sistema Linux. Entre as recomendadas estão Mint, OpenSUSE Tumbleweed, Arch e Debian, enquanto Elementary e Zorin não são recomendadas.

Prática autocorrigida

Exercícios

0/30 concluídos
  1. Validação de maioridadeLeia uma idade inteira. Use if/else para mostrar Acesso liberado se a idade for maior ou igual a 18; caso contrário, mostre Acesso negado.facilinput()int()if/else
  2. Senha exata do fórumLeia uma senha. Use if/else e == para mostrar Acesso liberado quando ela for exatamente the_game; caso contrário, mostre Senha incorreta. Não altere a caixa das letras.facilinput()if/else== (igualdade)
  3. Nome vazio com lenLeia um nome. Use len() e if/else para mostrar Nome invalido se o tamanho for zero; caso contrário, mostre Nome valido. Espaços contam como caracteres.facilinput()len()if/else
  4. Senha precisa de três arrobasLeia uma senha. Use count("@"), >= e if/else para mostrar Senha valida se houver pelo menos 3 arrobas; caso contrário, mostre Senha invalida.facilinput()count()if/else
  5. Senha com arrobas e hashtagsLeia uma senha. Use count(), and e if/else para mostrar Senha valida quando houver pelo menos 3 arrobas e pelo menos 2 hashtags. Caso contrário, mostre Senha invalida.facilinput()count()and
  6. Aceita um ou dois arrobasLeia uma senha. Use count(), or e if/else para mostrar Quantidade aceita quando houver exatamente 1 ou 2 arrobas. Nos demais casos, mostre Quantidade nao aceita.facilinput()count()or
  7. Positivo ou não positivoLeia um inteiro. Use if/else e > para mostrar positivo se ele for maior que zero; caso contrário, mostre nao positivo.facilint()Operador de comparaçãoif/else
  8. Diferente de adminLeia uma linha. Use != no if para mostrar comum se o texto for diferente de admin; caso contrário, mostre admin. Não use lower().facilComparação de strings!=if/else
  9. Curto ou longoLeia uma linha. Use len(), <= e if/else para mostrar curto se houver até 5 caracteres; caso contrário, mostre longo. Espaços contam.facillen()<=if/else
  10. Animado com pontos de exclamaçãoLeia uma linha. Use count("!"), >= e if/else para mostrar animado se houver pelo menos 2 exclamações; caso contrário, mostre calmo.facilcount()>=if/else
  11. Contato com arroba e pontoLeia uma linha. Use count(), and e if/else para mostrar contato ok quando houver pelo menos uma arroba e um ponto; caso contrário, mostre contato invalido.facilcount()andif/else
  12. Aceito por tamanho ou arrobaLeia uma linha. Use len(), count(), or e if/else para mostrar aceito se houver pelo menos 6 caracteres ou exatamente uma arroba; caso contrário, mostre rejeitado.facillen()count()or
  13. Aprovado com seisLeia uma nota decimal. Use if/else para mostrar aprovado se ela for maior ou igual a 6.0; caso contrário, mostre reprovado.mediainput()float()if/else
  14. Iguais ou diferentesLeia dois inteiros. Use if/else para mostrar iguais quando os valores forem iguais; caso contrário, mostre diferentes.mediainput()int()if/else
  15. Apelido com tamanho mínimoLeia um apelido. Use len() e if/else para mostrar valido se houver pelo menos 4 caracteres; caso contrário, mostre invalido. Espaços contam.mediainput()len()if/else
  16. Senha com três asteriscosLeia uma senha. Use count("*") e if/else para mostrar valida se houver pelo menos 3 asteriscos; caso contrário, mostre invalida.mediainput()count()if/else
  17. Nota e presença para aprovarLeia nota e presença como inteiros, um por linha. Use and e if/else para mostrar aprovado se nota >= 7 e presença >= 75; caso contrário, mostre reprovado.mediainput()int()and
  18. Destaque por tamanho ou exclamaçãoLeia um comentário. Use len(), count(), or e if/else para mostrar destaque se houver pelo menos 12 caracteres ou alguma exclamação. Caso contrário, mostre normal.mediainput()len()count()
  19. Soma de três decimaisLeia três decimais, um por linha, e mostre a soma dos três. Use ponto como separador decimal.mediafloat()str()input()
  20. Três textos separados por vírgulaLeia três linhas e mostre-as na mesma linha, acrescentando vírgula e um espaço entre cada par de textos.mediaConcatenação de stringsinput()
  21. Diferença entre dois produtosLeia quatro inteiros w, x, y e z e mostre w * x - y * z.mediaint()input()
  22. Remover pontos e espaçosLeia uma linha. Use replace() para remover todos os pontos e espaços. Mostre o texto restante; se não sobrar nada, imprima uma linha em branco.mediareplace()input()
  23. Repetir com hífen entre cópiasLeia um texto e um inteiro n não negativo. Mostre n cópias do texto, separadas por hífen. Para n = 0, imprima uma linha em branco; para n = 1, apenas o texto.mediaMultiplicação de string por inteiroinput()int()
  24. Três caixas do mesmo textoLeia uma linha. Mostre upper(), lower() e title() desse texto, nessa ordem, um resultado por linha.mediainput()upper()lower()
  25. Cruzado de seis: 2, 5, 3 e 6Leia seis linhas e mostre as posições 2, 5, 3 e 6, uma por linha. Descarte as posições 1 e 4.dificilinput()print()Execução sequencial
  26. Parênteses antes de multiplicar e dividirLeia dois inteiros w e x, depois dois decimais y e z, um por linha. Mostre (w + x) * y / z. Some primeiro; z não será zero.dificilfloat()int()precedência de operadores
  27. Sanitizar com title, hífen e lowerLeia uma linha. Aplique title(), substitua cada espaço por hífen com replace() e aplique lower(), nessa ordem. Mostre somente o resultado final.dificiltitle()replace()lower()
  28. Repetir n vezes e fechar com hífenLeia um texto e um inteiro n não negativo. Use * e + para mostrar o texto repetido n vezes, seguido de um hífen e de mais uma cópia do texto.dificilMultiplicação de string por inteiroConcatenação com +replace()
  29. Prefixo, str de float e classe originalLeia um prefixo e depois um decimal. Mostre o prefixo concatenado com str() do número, sem espaço. Na segunda linha, mostre type() da variável numérica, sem reatribuí-la.dificilstr()type()int()
  30. Bloco em maiúsculas repetido com hífenLeia um texto e um inteiro n não negativo. Monte um bloco com o texto em maiúsculas, um hífen e o texto original. Mostre n blocos, um por linha. Para n = 0, não imprima nada. Use concatenação e multiplicação de strings.dificilMultiplicação de string por inteiroupper()Caractere de quebra de linha (\n)