Exercícios de Python com respostas

Estas 98 questões de múltipla escolha saem das aulas do Curso de Python Básico, uma por aula, na ordem do curso. Tente responder antes de abrir o gabarito: cada resposta explica o porquê e leva para a aula que ensina o assunto.

Como usar: leia a pergunta, escolha a sua alternativa e só depois abra "Ver a resposta". Quando errar, a explicação diz por que e o link leva à aula que ensina o assunto. As mesmas questões aparecem nas aulas como teste rápido, e o Curso de Python Básico é gratuito do começo ao fim.

Módulo 1: Boas-vindas ao mundo Python

Questão 1 · aula O que é Python e por que aprender essa linguagem

Por que Python é considerada a melhor linguagem para quem está começando?

  1. Porque é a linguagem mais rápida que existe.
  2. Porque a sintaxe é limpa e legível, deixando o iniciante focar na lógica.
  3. Porque é a única linguagem gratuita.
  4. Porque programas em Python não têm erros.
Ver a resposta

Resposta: B. Porque a sintaxe é limpa e legível, deixando o iniciante focar na lógica.

O ponto forte do Python para iniciantes é a legibilidade: o código parece inglês simples, então a energia vai para aprender lógica, não para decorar símbolos. Ele não é o mais rápido, não é a única linguagem gratuita e, como qualquer linguagem, tem erros.

Estudar a aula: O que é Python e por que aprender essa linguagem

Questão 2 · aula Onde Python é usado: sites, automações, dados, IA e segurança

O que explica a mesma linguagem Python servir para IA, sites, ciência e automação?

  1. Cada área usa uma versão diferente e incompatível do Python.
  2. O ecossistema de bibliotecas: código pronto e compartilhado para cada tipo de tarefa.
  3. Python é a única linguagem que os computadores modernos aceitam.
  4. É obrigatório por lei usar Python em projetos científicos.
Ver a resposta

Resposta: B. O ecossistema de bibliotecas: código pronto e compartilhado para cada tipo de tarefa.

A versatilidade vem das bibliotecas: pacotes de código prontos para cada área, criados pela comunidade. A linguagem base é a mesma que você vai aprender; o que muda entre as áreas são as bibliotecas importadas.

Estudar a aula: Onde Python é usado: sites, automações, dados, IA e segurança

Questão 3 · aula O que você vai construir até o final do curso

Por que os projetos do curso repetem temas, como a calculadora que volta blindada no módulo 14?

  1. Para encher o curso e parecer mais longo.
  2. Porque revisitar um problema com ferramentas novas fixa melhor o aprendizado.
  3. Porque a calculadora original tinha erros que ninguém percebeu.
  4. Para testar se o aluno estava prestando atenção.
Ver a resposta

Resposta: B. Porque revisitar um problema com ferramentas novas fixa melhor o aprendizado.

A espiral é proposital: retomar um projeto conhecido aplicando conceitos novos (como o tratamento de erros) consolida os dois aprendizados. Você compara o antes e o depois no seu próprio código.

Estudar a aula: O que você vai construir até o final do curso

Questão 4 · aula Como estudar programação sem travar no começo

Qual rotina tem mais chance de levar você até o fim do curso?

  1. Estudar 5 horas todo domingo, para adiantar vários módulos de uma vez.
  2. Ler todas as aulas primeiro e deixar para praticar no final.
  3. Estudar 30 a 40 minutos por dia, rodando os exemplos e respondendo os checkpoints.
  4. Esperar a motivação chegar para estudar de verdade.
Ver a resposta

Resposta: C. Estudar 30 a 40 minutos por dia, rodando os exemplos e respondendo os checkpoints.

Prática espaçada com recuperação ativa é o método com mais evidência: sessões curtas e frequentes, com código rodado de verdade e autoteste. Maratona cansa e não fixa; ler sem praticar forma leitor de código, não programador.

Estudar a aula: Como estudar programação sem travar no começo

Questão 5 · aula Seu primeiro código, agora, no navegador

O que acontece ao executar print("Bom dia") no Playground?

  1. O texto Bom dia aparece na área de saída.
  2. O navegador envia a mensagem Bom dia por e-mail.
  3. Aparece um erro, porque falta instalar o Python.
  4. Nada, porque print só funciona no Windows.
Ver a resposta

Resposta: A. O texto Bom dia aparece na área de saída.

O print mostra na saída o que estiver entre parênteses e aspas. O Playground roda Python de verdade no navegador, então não precisa de instalação, e o print funciona em qualquer sistema.

Estudar a aula: Seu primeiro código, agora, no navegador

Módulo 2: Preparando o seu ambiente

Questão 6 · aula Programar sem instalar nada: o Playground é um ambiente completo

Um aluno só pode estudar no computador do trabalho, onde é proibido instalar programas. O que ele consegue fazer neste curso?

  1. Apenas ler as aulas, sem praticar nada.
  2. Acompanhar o curso inteiro pelo Playground, incluindo práticas e projeto final.
  3. Estudar só até o módulo 5, porque o resto exige instalação.
  4. Nada, porque o curso exige o Python instalado desde a primeira aula.
Ver a resposta

Resposta: B. Acompanhar o curso inteiro pelo Playground, incluindo práticas e projeto final.

O Playground roda o interpretador Python real no navegador e cobre todas as aulas, práticas e o projeto final. Instalar no computador melhora o conforto e prepara para as próximas etapas da trilha, mas não é requisito deste curso.

Estudar a aula: Programar sem instalar nada: o Playground é um ambiente completo

Questão 7 · aula Como instalar o Python no Windows, passo a passo

O que acontece se você instalar o Python sem marcar a caixinha Add python.exe to PATH?

  1. O Python não é instalado e o computador reinicia.
  2. O Python é instalado, mas o comando python não é reconhecido no terminal.
  3. O Python fica mais lento, porque roda sem otimizações.
  4. Nada muda, a caixinha é apenas decorativa.
Ver a resposta

Resposta: B. O Python é instalado, mas o comando python não é reconhecido no terminal.

A caixinha adiciona a pasta do Python ao PATH, a lista de pastas onde o Windows procura comandos. Sem ela, o Python existe no computador, mas o terminal não o encontra e responde que o comando não é reconhecido. O conserto é rodar o instalador de novo em modo Modify ou reinstalar marcando a opção.

Estudar a aula: Como instalar o Python no Windows, passo a passo

Questão 8 · aula Conferindo a instalação: python --version e o modo interativo

Você digitou python --version e o terminal respondeu que o comando não é reconhecido. Qual é a causa mais provável?

  1. O computador não é compatível com Python.
  2. A pasta do Python não está no PATH, porque a caixinha ficou desmarcada na instalação.
  3. O Python só funciona no modo interativo, nunca com --version.
  4. Faltou conectar o computador à internet.
Ver a resposta

Resposta: B. A pasta do Python não está no PATH, porque a caixinha ficou desmarcada na instalação.

O aviso de comando não reconhecido significa que o Windows não encontrou o Python nas pastas do PATH, quase sempre porque a opção Add python.exe to PATH não foi marcada. Teste py --version, feche e reabra o terminal, e conserte pelo instalador em modo Modify.

Estudar a aula: Conferindo a instalação: python --version e o modo interativo

Questão 9 · aula Instalando e conhecendo o VS Code

Por que é preciso instalar a extensão Python no VS Code se o Python já foi instalado no Windows?

  1. Porque a extensão contém o próprio interpretador Python.
  2. Porque sem ela o VS Code desinstala o Python do computador.
  3. Porque a extensão ensina o editor a entender Python e a chamar o interpretador já instalado.
  4. Não é preciso: a extensão serve apenas para mudar as cores do tema.
Ver a resposta

Resposta: C. Porque a extensão ensina o editor a entender Python e a chamar o interpretador já instalado.

São peças diferentes: o interpretador (instalado na aula 2) executa o código; o VS Code é o editor onde você escreve; e a extensão Python é a ponte que dá ao editor as cores, a detecção de erros e o botão de play que chama o interpretador. A extensão não contém nem remove o Python.

Estudar a aula: Instalando e conhecendo o VS Code

Questão 10 · aula Terminal, editor e arquivo .py: quem faz o quê

Você quer testar rapidamente quanto dá 15 * 12 antes de usar o valor no seu programa. Qual é o caminho mais adequado?

  1. Criar um arquivo novo no VS Code, salvar e executar só para essa conta.
  2. Digitar 15 * 12 direto no prompt C:\> do Windows.
  3. Abrir o modo interativo com python, digitar 15 * 12, ver a resposta e sair com exit().
  4. Reinstalar o Python, porque contas exigem configuração especial.
Ver a resposta

Resposta: C. Abrir o modo interativo com python, digitar 15 * 12, ver a resposta e sair com exit().

Teste rápido e descartável é a especialidade do modo interativo: entrar, digitar a conta, ler a resposta e sair. Criar arquivo para isso funciona, mas é burocracia desnecessária; e o prompt do Windows não entende expressões Python, só comandos do sistema.

Estudar a aula: Terminal, editor e arquivo .py: quem faz o quê

Questão 11 · aula Prática: sua pasta de projetos e o primeiro .py executado

Ao rodar python ola.py, o terminal respondeu can't open file. O arquivo existe e está salvo em C:\meus-projetos-python. Qual é a causa mais provável?

  1. O Python foi desinstalado sozinho e precisa ser baixado de novo.
  2. O terminal está posicionado em outra pasta, então não encontra o arquivo.
  3. Arquivos .py só podem ser executados pelo botão de play do VS Code.
  4. O comando correto seria ola.py python, com as palavras invertidas.
Ver a resposta

Resposta: B. O terminal está posicionado em outra pasta, então não encontra o arquivo.

O comando python ola.py procura o arquivo no diretório de trabalho atual do terminal. Se o prompt mostra outra pasta, o arquivo não é encontrado, mesmo existindo no disco. Navegue com cd C:\meus-projetos-python e execute de novo. Conferir o prompt antes de rodar evita esse tropeço.

Estudar a aula: Prática: sua pasta de projetos e o primeiro .py executado

Módulo 3: Seu primeiro programa em Python

Questão 12 · aula O famoso print: a primeira ferramenta do programador

O que aparece na tela ao executar print("Total:", 10 + 5)?

  1. Total: 10 + 5
  2. Total: 15
  3. Total:15, sem espaço
  4. Um erro, porque texto e número não podem ficar no mesmo print.
Ver a resposta

Resposta: B. Total: 15

A conta 10 + 5 está sem aspas, então o Python calcula e obtém 15. O print mostra os dois argumentos na mesma linha com um espaço automático entre eles: Total: 15. Misturar texto e número com vírgula é permitido e muito comum.

Estudar a aula: O famoso print: a primeira ferramenta do programador

Questão 13 · aula Executando um programa: o que acontece quando você aperta rodar

Como o interpretador Python executa um programa salvo num arquivo .py?

  1. Lê o arquivo inteiro e escolhe a ordem mais eficiente para as linhas.
  2. Executa primeiro as linhas mais curtas, depois as mais longas.
  3. Lê e executa as linhas de cima para baixo, na ordem em que foram escritas.
  4. Executa todas as linhas ao mesmo tempo, em paralelo.
Ver a resposta

Resposta: C. Lê e executa as linhas de cima para baixo, na ordem em que foram escritas.

O interpretador é sequencial e literal: começa na primeira linha, executa, e desce uma a uma até o fim. Ele não reordena, não otimiza a sequência e não adivinha intenção. Por isso a ordem das linhas define a ordem da saída.

Estudar a aula: Executando um programa: o que acontece quando você aperta rodar

Questão 14 · aula Erros de sintaxe sem pânico: lendo o que o Python diz

Ao executar Print("Oi") com P maiúsculo, o que o Python responde?

  1. SyntaxError, porque a frase está mal escrita.
  2. NameError, porque o nome Print não existe; o Python até sugere o print correto.
  3. Nada: o Python corrige a maiúscula sozinho e mostra Oi.
  4. O computador trava e precisa ser reiniciado.
Ver a resposta

Resposta: B. NameError, porque o nome Print não existe; o Python até sugere o print correto.

A escrita é válida, então não é SyntaxError. O interpretador executa, procura o nome Print, não encontra (Python diferencia maiúsculas de minúsculas) e responde NameError: name 'Print' is not defined, com a sugestão Did you mean: 'print'?.

Estudar a aula: Erros de sintaxe sem pânico: lendo o que o Python diz

Questão 15 · aula Comentários no código: o que o Python ignora e você não deveria

Qual destes comentários segue a régua do bom comentário apresentada na aula?

  1. print("Ana") # imprime Ana
  2. # esta linha usa a função print
  3. # Moldura com 30 asteriscos para alinhar com a maior linha do cartão
  4. # fim
Ver a resposta

Resposta: C. # Moldura com 30 asteriscos para alinhar com a maior linha do cartão

Comentário bom registra o porquê: a alternativa correta explica uma decisão de tamanho que o código sozinho não conta. As outras três são eco: repetem o que qualquer pessoa vê na própria linha, ocupando espaço sem informar nada.

Estudar a aula: Comentários no código: o que o Python ignora e você não deveria

Questão 16 · aula Código limpo desde o início: os hábitos do PEP 8

O que acontece com um programa Python que ignora as convenções do PEP 8?

  1. Ele não executa, porque o interpretador exige o padrão.
  2. Ele executa normalmente, mas fica mais difícil de ler e manter.
  3. Ele executa mais devagar por causa da formatação.
  4. Ele executa, mas o Python mostra um aviso de estilo na tela.
Ver a resposta

Resposta: B. Ele executa normalmente, mas fica mais difícil de ler e manter.

O PEP 8 é convenção, não obrigação técnica: o interpretador ignora estilo e executa do mesmo jeito, na mesma velocidade e sem avisos. O preço de ignorar o guia é pago por pessoas, na hora de ler, revisar e corrigir o código.

Estudar a aula: Código limpo desde o início: os hábitos do PEP 8

Questão 17 · aula Prática: seu cartão de visitas em código

No cartão de visitas, como se imprime a linha em branco que separa o nome da frase favorita?

  1. Com print(" "), um espaço entre aspas.
  2. Com print(), sem nada dentro dos parênteses.
  3. Deixando uma linha vazia no meio do código, sem print.
  4. Com print("branco").
Ver a resposta

Resposta: B. Com print(), sem nada dentro dos parênteses.

O print() com parênteses vazios imprime uma linha em branco na saída. Linha vazia no código é ignorada pelo interpretador e não gera saída; print(" ") imprime um espaço quase invisível, mas não é a forma limpa; e print("branco") mostra a palavra branco.

Estudar a aula: Prática: seu cartão de visitas em código

Módulo 4: Variáveis e tipos de dados

Questão 18 · aula O que são variáveis: dando nome aos valores

O que a linha pontos = pontos + 10 faz em Python?

  1. Gera erro, porque nenhum número é igual a ele mesmo mais 10.
  2. Pega o valor atual de pontos, soma 10 e guarda o resultado de volta em pontos.
  3. Cria uma segunda variável chamada pontos + 10.
  4. Compara pontos com pontos + 10 e responde se são iguais.
Ver a resposta

Resposta: B. Pega o valor atual de pontos, soma 10 e guarda o resultado de volta em pontos.

O igual em Python não compara: ele atribui, da direita para a esquerda. Primeiro o Python calcula pontos + 10 com o valor atual; depois guarda o resultado sob o nome pontos, substituindo o valor antigo. É o padrão dos contadores que você verá no módulo 8.

Estudar a aula: O que são variáveis: dando nome aos valores

Questão 19 · aula Textos com str: o tipo que guarda palavras

O que print(len("bom dia")) mostra na tela?

  1. 6, porque espaços não contam.
  2. 7, porque o espaço é um caractere e entra na conta.
  3. bom dia, porque len devolve o próprio texto.
  4. Um erro, porque len só funciona com números.
Ver a resposta

Resposta: B. 7, porque o espaço é um caractere e entra na conta.

len() conta todos os caracteres da string, e o espaço é um caractere como qualquer outro. As letras b, o, m, d, i, a somam 6, mais o espaço, 7. len() funciona com strings (e, mais adiante no curso, com listas), devolvendo sempre um número inteiro.

Estudar a aula: Textos com str: o tipo que guarda palavras

Questão 20 · aula Números inteiros com int: contas sem vírgula

O que o Python faz com o underline em populacao = 212_000_000?

  1. Guarda o texto 212_000_000, com os underlines.
  2. Gera um erro de sintaxe, porque número não aceita símbolo.
  3. Ignora os underlines na conta: o valor é o inteiro 212000000.
  4. Divide o número em três variáveis separadas.
Ver a resposta

Resposta: C. Ignora os underlines na conta: o valor é o inteiro 212000000.

O underline dentro de um número é um separador visual para leitura humana: o Python o descarta ao interpretar o valor. 212_000_000 e 212000000 são o mesmo int, e o print mostra o número sem os underlines. Sem aspas, não há texto envolvido.

Estudar a aula: Números inteiros com int: contas sem vírgula

Questão 21 · aula Números decimais com float: o ponto no lugar da vírgula

O que acontece ao executar preco = 19,90 em Python?

  1. O Python guarda o decimal 19.90 normalmente.
  2. Aparece um SyntaxError apontando a vírgula.
  3. Sem nenhum erro, o Python cria uma tupla (19, 90), um dado errado e silencioso.
  4. O Python pergunta se você quis dizer ponto.
Ver a resposta

Resposta: C. Sem nenhum erro, o Python cria uma tupla (19, 90), um dado errado e silencioso.

A vírgula em Python separa valores, então 19,90 vira o par (19, 90), uma tupla de dois inteiros, sem nenhuma mensagem de erro. O programa segue rodando com o dado errado. Decimal em Python se escreve com ponto: preco = 19.90.

Estudar a aula: Números decimais com float: o ponto no lugar da vírgula

Questão 22 · aula Verdadeiro ou falso com bool: o tipo das decisões

Qual a diferença entre idade = 18 e idade == 18?

  1. Nenhuma; os dois comparam a idade com 18.
  2. O primeiro guarda 18 na variável; o segundo pergunta se o valor é 18 e devolve True ou False.
  3. O primeiro é para números e o segundo é para textos.
  4. O segundo gera erro, porque não existe operador com dois iguais.
Ver a resposta

Resposta: B. O primeiro guarda 18 na variável; o segundo pergunta se o valor é 18 e devolve True ou False.

Um sinal de igual atribui: cola a etiqueta idade no valor 18. Dois sinais comparam: perguntam se o valor guardado é 18 e devolvem um booleano, True ou False. Confundir os dois é o erro de digitação mais clássico da programação, então vale reler a linha sempre que uma comparação se comportar estranho.

Estudar a aula: Verdadeiro ou falso com bool: o tipo das decisões

Questão 23 · aula Descobrindo o tipo com type() e convertendo valores

Qual linha corrige o erro de print("Nota: " + 8) sem mudar o formato da mensagem?

  1. print("Nota: " + int(8))
  2. print("Nota: " + str(8))
  3. print(str("Nota: ") + 8)
  4. print("Nota: " == 8)
Ver a resposta

Resposta: B. print("Nota: " + str(8))

O + com uma string à esquerda exige string à direita. str(8) converte o número no texto "8", e a concatenação funciona: Nota: 8. Converter para int não ajuda (o problema é justamente o int na soma com texto), e o == compararia em vez de juntar.

Estudar a aula: Descobrindo o tipo com type() e convertendo valores

Questão 24 · aula Prática: um cadastro simples com os tipos certos

No cadastro da prática, por que a altura é 1.68 e a idade é 31, sem ponto?

  1. Por estética; os dois poderiam trocar de formato sem consequência.
  2. Porque altura é medida com fração (float, com ponto) e idade é contagem em anos completos (int).
  3. Porque o Python exige ponto em todo número menor que 2.
  4. Porque idade com ponto geraria um TypeError na hora.
Ver a resposta

Resposta: B. Porque altura é medida com fração (float, com ponto) e idade é contagem em anos completos (int).

A escolha do tipo segue o dado: altura é uma medida que carrega fração, então float com ponto decimal; idade se conta em anos completos, então int. Escrever idade = 31.0 não geraria erro, mas mentiria sobre a natureza do dado e traria os arredondamentos de float sem necessidade.

Estudar a aula: Prática: um cadastro simples com os tipos certos

Módulo 5: Entrada de dados com input()

Questão 25 · aula Pedindo informações ao usuário com input()

O que acontece quando o Python executa uma linha com input()?

  1. O programa mostra a mensagem e continua rodando sem esperar.
  2. O programa para, espera o usuário digitar e apertar Enter, e devolve o que foi digitado.
  3. O programa encerra e mostra o resultado final.
  4. O programa apaga tudo o que já estava na tela.
Ver a resposta

Resposta: B. O programa para, espera o usuário digitar e apertar Enter, e devolve o que foi digitado.

O input() pausa a execução: o programa fica esperando até o usuário digitar algo e apertar Enter. O valor digitado é devolvido pela função e, se nenhuma variável o guardar, ele se perde.

Estudar a aula: Pedindo informações ao usuário com input()

Questão 26 · aula Guardando as respostas em variáveis

Na linha cidade = input("Em que cidade você mora? "), o que o Python faz primeiro?

  1. Guarda um valor vazio na variável cidade e segue em frente.
  2. Executa o input(): mostra a pergunta e espera a resposta; só depois guarda o resultado em cidade.
  3. Cria a variável cidade com o texto da pergunta dentro.
  4. Mostra a pergunta e a resposta ao mesmo tempo, sem pausar.
Ver a resposta

Resposta: B. Executa o input(): mostra a pergunta e espera a resposta; só depois guarda o resultado em cidade.

O lado direito do sinal de igual resolve primeiro: o input() roda, pausa o programa e espera o Enter. O valor digitado é o resultado dessa espera, e só então a atribuição o guarda na variável cidade.

Estudar a aula: Guardando as respostas em variáveis

Questão 27 · aula Convertendo texto para número: int() e float()

O usuário digita 25 num input() sem conversão. Por que idade + "5" resulta em "255"?

  1. Porque o Python errou a conta de somar.
  2. Porque o input() devolveu o texto "25", e o + entre textos concatena em vez de somar.
  3. Porque 25 mais 5 é 255 no sistema binário dos computadores.
  4. Porque faltou apertar Enter duas vezes ao responder.
Ver a resposta

Resposta: B. Porque o input() devolveu o texto "25", e o + entre textos concatena em vez de somar.

O input() devolve sempre str: a variável guardou o texto "25", não o número 25. Entre textos, o sinal + emenda um no outro, então "25" + "5" produz "255". Convertendo com int(input()), a soma dá 30.

Estudar a aula: Convertendo texto para número: int() e float()

Questão 28 · aula Erros comuns com input() e como evitá-los

O usuário digita "vinte" num int(input("Idade: ")). O que acontece?

  1. O Python converte para 20, porque entende português.
  2. A variável guarda o texto vinte e o programa continua normal.
  3. O programa quebra com ValueError, porque o texto não tem como virar número inteiro.
  4. O programa pergunta de novo automaticamente até receber um número.
Ver a resposta

Resposta: C. O programa quebra com ValueError, porque o texto não tem como virar número inteiro.

A int() exige texto com cara de número, como "20". Recebendo "vinte", ela levanta ValueError e o programa para, mostrando o traceback. Perguntar de novo automaticamente exige try/except e repetição, assuntos dos módulos 14 e 8.

Estudar a aula: Erros comuns com input() e como evitá-los

Questão 29 · aula Prática: uma conversa completa no terminal

Com ano_atual = 2026, o usuário digita 40 na idade. O que ano_atual - idade + 100 calcula?

  1. 2086, o ano em que a pessoa completa 100 anos.
  2. 2166, somando tudo na ordem em que aparece.
  3. 1986, o ano aproximado de nascimento da pessoa.
  4. O programa quebra, porque idade é texto.
Ver a resposta

Resposta: A. 2086, o ano em que a pessoa completa 100 anos.

A conta é 2026 - 40 + 100 = 2086: do ano atual, recua até o nascimento aproximado (1986) e avança 100 anos. E não quebra porque a idade foi convertida com int(input()); sem a conversão, aí sim o programa pararia com TypeError ao misturar número e texto na conta.

Estudar a aula: Prática: uma conversa completa no terminal

Módulo 6: Operadores e cálculos

Questão 30 · aula Soma, subtração, multiplicação e divisão

O que o Python mostra ao executar print(10 / 2)?

  1. 5, um número inteiro.
  2. 5.0, porque a divisão com / sempre devolve float.
  3. Um erro, porque 10 e 2 são inteiros.
  4. 10/2, sem calcular nada.
Ver a resposta

Resposta: B. 5.0, porque a divisão com / sempre devolve float.

Em Python 3, o operador / devolve float em todos os casos, mesmo quando a divisão é exata. Por isso 10 / 2 resulta em 5.0. Para obter um resultado inteiro existe o operador //, tema da próxima aula.

Estudar a aula: Soma, subtração, multiplicação e divisão

Questão 31 · aula Divisão inteira e resto: os operadores // e %

Quanto vale a expressão 23 % 5 em Python?

  1. 4.6, o resultado da divisão comum.
  2. 4, quantas vezes o 5 cabe em 23.
  3. 3, o que sobra depois que o 5 cabe 4 vezes em 23.
  4. 0.23, porque % calcula porcentagem.
Ver a resposta

Resposta: C. 3, o que sobra depois que o 5 cabe 4 vezes em 23.

O operador % devolve o resto da divisão inteira: 5 cabe 4 vezes em 23 (totalizando 20) e sobram 3. A divisão comum 23 / 5 daria 4.6, o quociente inteiro 23 // 5 daria 4, e o % não tem relação com porcentagem.

Estudar a aula: Divisão inteira e resto: os operadores // e %

Questão 32 · aula Potência e a ordem das operações

Quanto vale a expressão 2 + 3 * 4 ** 2 em Python?

  1. 400, calculando da esquerda para a direita.
  2. 50, porque primeiro 4 ** 2 dá 16, depois 3 * 16 dá 48, depois 2 + 48.
  3. 80, porque a soma resolve primeiro.
  4. 56, porque a potência resolve por último.
Ver a resposta

Resposta: B. 50, porque primeiro 4 ** 2 dá 16, depois 3 * 16 dá 48, depois 2 + 48.

A ordem é: potência primeiro (4 ** 2 = 16), multiplicação depois (3 * 16 = 48) e soma por último (2 + 48 = 50). Calcular da esquerda para a direita, ignorando a precedência, é o erro que leva ao 400.

Estudar a aula: Potência e a ordem das operações

Questão 33 · aula Operadores de comparação: perguntas de sim ou não

Qual a diferença entre idade = 18 e idade == 18 em Python?

  1. Nenhuma; as duas formas comparam valores.
  2. A primeira guarda o valor 18 na variável; a segunda pergunta se idade vale 18 e responde True ou False.
  3. A primeira só funciona com números; a segunda só com textos.
  4. A segunda guarda o valor com mais precisão que a primeira.
Ver a resposta

Resposta: B. A primeira guarda o valor 18 na variável; a segunda pergunta se idade vale 18 e responde True ou False.

Um sinal de igual é atribuição (ordem de guardar valor); dois sinais são comparação (pergunta de igualdade, com resposta bool). Confundir os dois é o erro clássico, e o Python acusa SyntaxError quando encontra atribuição onde esperava comparação.

Estudar a aula: Operadores de comparação: perguntas de sim ou não

Questão 34 · aula Operadores lógicos: and, or e not

Por que a expressão idade == 17 or 18 está errada para testar se idade é 17 ou 18?

  1. Porque o or não aceita números, só True e False.
  2. Porque o Python lê (idade == 17) or (18), e o 18 sozinho vale como verdadeiro, tornando a expressão sempre verdadeira.
  3. Porque faltou um parêntese em volta de 17 or 18.
  4. Porque o certo seria usar and no lugar de or.
Ver a resposta

Resposta: B. Porque o Python lê (idade == 17) or (18), e o 18 sozinho vale como verdadeiro, tornando a expressão sempre verdadeira.

Cada lado do or é avaliado separadamente: o lado direito é só o número 18, que conta como verdadeiro na avaliação lógica. Por isso a expressão dá um valor verdadeiro com qualquer idade, sem erro nenhum. O correto é idade == 17 or idade == 18, com uma comparação completa de cada lado.

Estudar a aula: Operadores lógicos: and, or e not

Questão 35 · aula Prática: sua calculadora simples no terminal

Com a = 10 e b = 20, por que a expressão a + b / 2 NÃO calcula a média corretamente?

  1. Porque média em Python exige uma função especial.
  2. Porque a divisão tem precedência sobre a soma: b / 2 resolve primeiro e o resultado é 20.0, não 15.0.
  3. Porque a e b precisariam ser inteiros para a média funcionar.
  4. Porque o resultado correto seria 30.0.
Ver a resposta

Resposta: B. Porque a divisão tem precedência sobre a soma: b / 2 resolve primeiro e o resultado é 20.0, não 15.0.

Pela ordem das operações, b / 2 calcula primeiro (10.0) e depois soma com a (20.0). A média verdadeira exige parênteses: (a + b) / 2, que soma primeiro (30.0) e divide depois (15.0). É o erro silencioso mais comum desta prática.

Estudar a aula: Prática: sua calculadora simples no terminal

Módulo 7: Condições com if, elif e else

Questão 36 · aula O que é uma condição: o programa que escolhe caminho

O que é uma condição em Python?

  1. Um comando que apaga variáveis do programa.
  2. Uma expressão que o Python avalia até virar True ou False.
  3. Um tipo de comentário especial no código.
  4. Uma mensagem de erro que aparece quando o código quebra.
Ver a resposta

Resposta: B. Uma expressão que o Python avalia até virar True ou False.

Condição é uma expressão, geralmente uma comparação como idade >= 18, que o Python avalia e transforma em True ou False. É sobre essa resposta que o if decide qual caminho o programa segue.

Estudar a aula: O que é uma condição: o programa que escolhe caminho

Questão 37 · aula Usando o if: a anatomia da primeira decisão

O que acontece com o bloco indentado de um if quando a condição vira False?

  1. O programa mostra uma mensagem de erro e para.
  2. O bloco roda mesmo assim, mas mais devagar.
  3. O Python pula o bloco inteiro e segue o programa na próxima linha sem indentação.
  4. O Python pergunta ao usuário se deve executar o bloco.
Ver a resposta

Resposta: C. O Python pula o bloco inteiro e segue o programa na próxima linha sem indentação.

Condição False não é erro: o Python simplesmente pula o bloco indentado, sem executar nenhuma linha dele, e retoma o programa na primeira linha alinhada à margem esquerda. O silêncio do bloco pulado é a decisão funcionando.

Estudar a aula: Usando o if: a anatomia da primeira decisão

Questão 38 · aula Usando o else: o caminho alternativo

Por que a linha "else idade < 18:" gera erro em Python?

  1. Porque a comparação deveria usar <= em vez de <.
  2. Porque o else nunca leva condição: ele já significa todos os casos em que o if deu False.
  3. Porque faltou indentar o else com 4 espaços.
  4. Porque else só funciona com números inteiros.
Ver a resposta

Resposta: B. Porque o else nunca leva condição: ele já significa todos os casos em que o if deu False.

O else é o caminho do senão: por definição, ele cobre exatamente os casos em que a condição do if virou False. Colocar condição nele é SyntaxError. Quando existe uma segunda condição de verdade a testar, a ferramenta certa é o elif.

Estudar a aula: Usando o else: o caminho alternativo

Questão 39 · aula Usando o elif: várias faixas de decisão

Numa escada if/elif/else com nota = 9.5, por que começar por if nota >= 5 dá resultado errado?

  1. Porque o Python não aceita a condição >= 5 no primeiro degrau.
  2. Porque 9.5 >= 5 é True, o primeiro degrau vence e os degraus das faixas altas nunca são testados.
  3. Porque o elif só funciona com números inteiros.
  4. Porque faltou um else no final da escada.
Ver a resposta

Resposta: B. Porque 9.5 >= 5 é True, o primeiro degrau vence e os degraus das faixas altas nunca são testados.

A escada para no primeiro True. Como 9.5 também satisfaz nota >= 5, a condição mais aberta engole a nota antes de as faixas altas serem testadas. Em faixas com >=, ordene do valor mais alto para o mais baixo.

Estudar a aula: Usando o elif: várias faixas de decisão

Questão 40 · aula Condições com números e textos, sem armadilhas

O que acontece ao rodar: idade = input("Idade: ") e depois if idade >= 18: ?

  1. Funciona normalmente, porque o Python converte sozinho.
  2. O programa quebra com TypeError, porque o input devolve texto e texto não se compara com número usando >=.
  3. A condição vale sempre False, sem erro.
  4. O Python pergunta ao usuário se o valor é um número.
Ver a resposta

Resposta: B. O programa quebra com TypeError, porque o input devolve texto e texto não se compara com número usando >=.

O input sempre devolve string. Comparar string com int usando >= gera TypeError, porque o Python não adivinha a conversão. A correção é converter na leitura: idade = int(input("Idade: ")).

Estudar a aula: Condições com números e textos, sem armadilhas

Questão 41 · aula Indentação sem erro: a regra dos 4 espaços

Um if termina em dois pontos e a linha seguinte está colada na margem esquerda. O que o Python faz?

  1. Executa a linha normalmente, como parte do if.
  2. Levanta IndentationError: expected an indented block, porque o if exige pelo menos uma linha recuada.
  3. Ignora o if e segue o programa sem avisar.
  4. Adiciona os 4 espaços automaticamente.
Ver a resposta

Resposta: B. Levanta IndentationError: expected an indented block, porque o if exige pelo menos uma linha recuada.

Os dois pontos anunciam um bloco, e bloco exige recuo. Sem nenhuma linha indentada depois do if, o Python para com IndentationError: expected an indented block, apontando a linha. A correção é recuar o conteúdo do if com 4 espaços.

Estudar a aula: Indentação sem erro: a regra dos 4 espaços

Questão 42 · aula Prática: pode votar? Pode tirar CNH?

No verificador, uma pessoa de 17 anos cai no degrau elif idade < 18. Por que essa condição basta, sem testar idade >= 16 junto?

  1. Porque o Python testa o >= 16 automaticamente em segundo plano.
  2. Porque a escada só chega nesse degrau se os anteriores deram False: quem passou do idade < 16 tem 16 ou mais.
  3. Porque idade < 18 e idade >= 16 são a mesma comparação.
  4. Porque o else final corrige qualquer classificação errada.
Ver a resposta

Resposta: B. Porque a escada só chega nesse degrau se os anteriores deram False: quem passou do idade < 16 tem 16 ou mais.

A escada é lida de cima para baixo e para no primeiro True. Se a execução chegou ao elif idade < 18, é porque idade < 16 já deu False, ou seja, a idade é 16 ou mais. O degrau herda essa informação e só precisa testar o teto da faixa.

Estudar a aula: Prática: pode votar? Pode tirar CNH?

Módulo 8: Repetições com while

Questão 43 · aula O que é um loop: o superpoder de repetir sem cansar

O que define quando um while para de repetir?

  1. O número de linhas do bloco indentado.
  2. A condição do while: quando o teste responde falso, o loop termina.
  3. O tamanho do programa: loops param sozinhos depois de 100 voltas.
  4. O comando print, que encerra o loop ao ser executado.
Ver a resposta

Resposta: B. A condição do while: quando o teste responde falso, o loop termina.

O while testa a condição antes de cada volta. Enquanto a resposta for verdadeira, o bloco executa de novo; quando a condição vira falsa, o programa segue para a linha depois do loop. Não existe limite automático de voltas, e o print não tem relação com o encerramento.

Estudar a aula: O que é um loop: o superpoder de repetir sem cansar

Questão 44 · aula Como funciona o while: anatomia e passo a passo

Num while, quando a condição é testada?

  1. Depois de cada volta, para decidir se a volta valeu.
  2. Antes de cada volta, inclusive antes da primeira; se já for falsa, o bloco não roda nenhuma vez.
  3. Uma única vez, no início do programa.
  4. Só quando a variável de controle muda de valor.
Ver a resposta

Resposta: B. Antes de cada volta, inclusive antes da primeira; se já for falsa, o bloco não roda nenhuma vez.

O while é um loop com teste na entrada: avalia a condição antes de cada iteração, inclusive antes da primeira. Por isso, um while cuja condição já nasce falsa pula o bloco por completo, sem executar nem uma volta e sem gerar erro.

Estudar a aula: Como funciona o while: anatomia e passo a passo

Questão 45 · aula Loop infinito: como evitar, como reconhecer e como parar

Um while imprime a mesma mensagem sem parar. Qual é a causa mais provável?

  1. O computador está com defeito na memória.
  2. O print está escrito com letra minúscula.
  3. A variável de controle não é atualizada dentro do bloco, então a condição nunca vira falsa.
  4. O Python tem um limite de voltas que foi ultrapassado.
Ver a resposta

Resposta: C. A variável de controle não é atualizada dentro do bloco, então a condição nunca vira falsa.

Se nada dentro do bloco muda a variável testada na condição, o teste dá verdadeiro para sempre e o loop nunca termina. A correção é garantir a linha de atualização (ou um break). Para parar o programa travado, use Ctrl+C no terminal ou o botão de parar no Playground.

Estudar a aula: Loop infinito: como evitar, como reconhecer e como parar

Questão 46 · aula Contadores e acumuladores: contando e somando dentro do loop

No programa da aula, qual é o papel da linha soma = soma + numero?

  1. Contar quantos números o usuário digitou.
  2. Acumular o total: somar o número da volta atual ao que já foi somado antes.
  3. Encerrar o loop quando o número for zero.
  4. Converter o texto digitado em número inteiro.
Ver a resposta

Resposta: B. Acumular o total: somar o número da volta atual ao que já foi somado antes.

Essa linha é o acumulador em ação: pega o total somado até aqui, adiciona o número da volta atual e guarda o resultado de volta em soma. Quem conta as voltas é quantidade = quantidade + 1, quem encerra o loop é a condição numero != 0 e quem converte a entrada é o int.

Estudar a aula: Contadores e acumuladores: contando e somando dentro do loop

Questão 47 · aula Menus com while: o padrão que aparece em todo programa de terminal

Num menu com while True, o que acontece se o programador esquecer o break na opção sair?

  1. O Python mostra um erro de sintaxe e não roda o programa.
  2. O programa se despede, mas o menu volta a aparecer: sem break, o while True nunca termina.
  3. O menu funciona normalmente, porque o while percebe a intenção de sair.
  4. O programa fecha sozinho após 10 voltas.
Ver a resposta

Resposta: B. O programa se despede, mas o menu volta a aparecer: sem break, o while True nunca termina.

A condição do while True é sempre verdadeira, então a única saída é o break. Sem ele, a opção sair executa a despedida e o loop recomeça, prendendo o usuário no menu. Não é erro de sintaxe: o Python roda o código exatamente como foi escrito.

Estudar a aula: Menus com while: o padrão que aparece em todo programa de terminal

Questão 48 · aula Prática: seu menu interativo de 4 opções

Na opção 3 do menu (contar até N), por que o contador = 1 fica dentro do elif, e não antes do while principal?

  1. Por estética, para o código ficar mais bonito.
  2. Para a contagem recomeçar do 1 toda vez que a opção 3 for escolhida.
  3. Porque o Python proíbe criar variáveis antes de um while True.
  4. Para economizar memória do computador.
Ver a resposta

Resposta: B. Para a contagem recomeçar do 1 toda vez que a opção 3 for escolhida.

Se o contador nascesse antes do loop principal, ele valeria 1 apenas na primeira contagem; nas seguintes, continuaria do valor em que parou e a condição contador <= n poderia já nascer falsa. Dentro do elif, cada escolha da opção 3 zera o estado e a contagem sempre sai completa.

Estudar a aula: Prática: seu menu interativo de 4 opções

Módulo 9: Repetições com for e range()

Questão 49 · aula for ou while: a diferença de mentalidade

Você precisa repetir uma ação exatamente 50 vezes. Qual loop expressa melhor essa intenção e por quê?

  1. while, porque ele é o único que aceita contadores.
  2. for, porque a quantidade de repetições é conhecida e a sequência controla o fim sozinha.
  3. while, porque o for só funciona com textos.
  4. Tanto faz, porque os dois exigem atualizar o contador manualmente.
Ver a resposta

Resposta: B. for, porque a quantidade de repetições é conhecida e a sequência controla o fim sozinha.

Quando a quantidade de voltas é conhecida de antemão, o for é a escolha natural: a sequência (como range(50)) decide quantas voltas acontecem, sem contador manual e sem risco de loop infinito. O while continua sendo o certo quando o fim depende de uma condição imprevisível, como a resposta do usuário.

Estudar a aula: for ou while: a diferença de mentalidade

Questão 50 · aula Usando o range(): início, fim e passo

Quais números o for i in range(3, 8) coloca na variável i, volta a volta?

  1. 3, 4, 5, 6, 7 e 8.
  2. 3, 4, 5, 6 e 7.
  3. 4, 5, 6, 7 e 8.
  4. 0, 1, 2, 3, 4, 5, 6 e 7.
Ver a resposta

Resposta: B. 3, 4, 5, 6 e 7.

O range(3, 8) começa no 3 (início incluído) e para antes do 8 (fim exclusivo), gerando 3, 4, 5, 6 e 7. O 8 é o muro: marca onde a sequência para, mas nunca entra nela.

Estudar a aula: Usando o range(): início, fim e passo

Questão 51 · aula Repetindo ações: N vezes, com ou sem contador

O que este código imprime? soma = 0 for n in range(1, 4): soma = soma + n print(soma)

  1. 6, porque o loop soma 1 + 2 + 3 no acumulador.
  2. 10, porque o loop soma 1 + 2 + 3 + 4.
  3. 3, porque soma recebe só o último número do range.
  4. 0, porque o print está fora do loop.
Ver a resposta

Resposta: A. 6, porque o loop soma 1 + 2 + 3 no acumulador.

O range(1, 4) gera 1, 2 e 3 (fim exclusivo). O acumulador soma começa em 0 e recebe 1, depois 2, depois 3, chegando a 6. O print fora do loop mostra o total uma única vez, que é o comportamento desejado.

Estudar a aula: Repetindo ações: N vezes, com ou sem contador

Questão 52 · aula Percorrendo textos letra por letra

Quantas voltas o loop for letra in "bom dia" executa, e por quê?

  1. 6, porque espaços não contam como caracteres.
  2. 7, porque a string tem 7 caracteres e o espaço é um deles.
  3. 2, porque o for percorre as palavras, não as letras.
  4. 1, porque a string inteira cabe numa volta só.
Ver a resposta

Resposta: B. 7, porque a string tem 7 caracteres e o espaço é um deles.

O for percorre a string caractere por caractere, e "bom dia" tem 7: b, o, m, espaço, d, i, a. O espaço é um caractere como qualquer outro, então ganha uma volta própria. Percorrer palavras em vez de letras é possível, mas exige outra ferramenta (o split(), que aparece no módulo 12).

Estudar a aula: Percorrendo textos letra por letra

Questão 53 · aula Tabuada com for: do 7 sozinho ao 1 ao 10 completo

Num for aninhado em que o loop de fora dá 10 voltas e o de dentro dá 10, quantas vezes o print mais interno executa?

  1. 10 vezes, porque os loops dividem as voltas.
  2. 20 vezes, porque 10 + 10.
  3. 100 vezes, porque o loop de dentro roda completo a cada volta do de fora.
  4. 1 vez, porque o print está muito indentado.
Ver a resposta

Resposta: C. 100 vezes, porque o loop de dentro roda completo a cada volta do de fora.

Para CADA volta do loop de fora, o de dentro roda do início ao fim: 10 voltas de fora vezes 10 de dentro dá 100 execuções do miolo. É a mecânica do relógio: o ponteiro dos minutos completa a volta inteira para o das horas avançar uma posição.

Estudar a aula: Tabuada com for: do 7 sozinho ao 1 ao 10 completo

Questão 54 · aula Prática: tabuada automática do jeito que o usuário pedir

No programa do intervalo, por que o loop de fora usa range(inicio, fim + 1) em vez de range(inicio, fim)?

  1. Porque o range não aceita duas variáveis como limites.
  2. Porque o fim do range é exclusivo, e sem o + 1 a última tabuada pedida ficaria de fora.
  3. Porque o + 1 corrige a contagem que começa do zero.
  4. Por estilo: as duas formas imprimem as mesmas tabuadas.
Ver a resposta

Resposta: B. Porque o fim do range é exclusivo, e sem o + 1 a última tabuada pedida ficaria de fora.

O usuário que pede do 3 ao 6 espera ver a tabuada do 6, mas range(3, 6) para no 5, por causa do fim exclusivo. O fim + 1 traduz a contagem humana (que inclui as pontas) para a do range. Sem ele, o programa roda sem erro e entrega menos do que prometeu.

Estudar a aula: Prática: tabuada automática do jeito que o usuário pedir

Módulo 10: Listas em Python

Questão 55 · aula O que é uma lista: muitos valores numa variável só

Qual é a principal vantagem de usar uma lista em vez de 30 variáveis separadas?

  1. A lista faz o programa rodar 30 vezes mais rápido.
  2. A lista guarda todos os valores numa variável só, em ordem, pronta para crescer e ser percorrida.
  3. A lista corrige sozinha os valores digitados errados.
  4. A lista só aceita números, o que evita erros de tipo.
Ver a resposta

Resposta: B. A lista guarda todos os valores numa variável só, em ordem, pronta para crescer e ser percorrida.

A lista agrupa valores relacionados numa única variável ordenada: dá para medir com len(), percorrer com for e crescer sem editar o código. Velocidade não é o ponto, ela não corrige nada sozinha e aceita qualquer tipo, inclusive misturados.

Estudar a aula: O que é uma lista: muitos valores numa variável só

Questão 56 · aula Criando e acessando itens: o índice começa em zero

Na lista cores = ["azul", "verde", "vermelho"], o que imprime print(cores[1])?

  1. azul, porque o índice 1 é o primeiro item.
  2. verde, porque a contagem começa em 0 e o índice 1 é o segundo item.
  3. vermelho, porque o índice 1 conta do fim da lista.
  4. Um IndexError, porque o índice 1 não existe nessa lista.
Ver a resposta

Resposta: B. verde, porque a contagem começa em 0 e o índice 1 é o segundo item.

A contagem começa em zero: cores[0] é "azul", cores[1] é "verde" e cores[2] é "vermelho". O índice 1 existe (a lista tem 3 itens, índices de 0 a 2) e quem conta do fim são os índices negativos, como cores[-1].

Estudar a aula: Criando e acessando itens: o índice começa em zero

Questão 57 · aula Adicionando itens: append no fim, insert na posição

O que faz o padrão lista vazia + loop + append, usado no exemplo dos convidados?

  1. Cria 3 listas diferentes, uma para cada convidado.
  2. Constrói uma lista aos poucos: cada volta do loop acrescenta um item novo no fim.
  3. Apaga a lista e recomeça a cada volta do loop.
  4. Ordena os convidados em ordem alfabética automaticamente.
Ver a resposta

Resposta: B. Constrói uma lista aos poucos: cada volta do loop acrescenta um item novo no fim.

A lista nasce vazia e cada volta do loop dá um append, acrescentando o item novo no fim sem tocar nos anteriores. Ao final, a lista tem um item por volta executada. É o padrão de construção de listas mais comum do Python.

Estudar a aula: Adicionando itens: append no fim, insert na posição

Questão 58 · aula Removendo itens: remove, pop e del, cada um no seu papel

Qual a principal diferença entre remove() e pop()?

  1. Nenhuma: os dois fazem exatamente a mesma coisa.
  2. remove() apaga pelo VALOR e não devolve nada; pop() apaga pela POSIÇÃO e devolve o item removido.
  3. remove() apaga a lista inteira; pop() apaga só um item.
  4. pop() só funciona em listas de números; remove() só em listas de textos.
Ver a resposta

Resposta: B. remove() apaga pelo VALOR e não devolve nada; pop() apaga pela POSIÇÃO e devolve o item removido.

remove("banana") procura o valor e apaga a primeira ocorrência, sem devolver nada (e gera ValueError se não achar). pop(0) tira o item da posição e o entrega para você guardar numa variável; sem argumento, tira o último. Os dois funcionam com qualquer tipo de item.

Estudar a aula: Removendo itens: remove, pop e del, cada um no seu papel

Questão 59 · aula Percorrendo listas com for: visitar, somar e comparar

O que imprime este código? valores = [3, 8, 5] total = 0 for v in valores: total = total + v print(total)

  1. 8, porque total guarda o maior valor da lista.
  2. 16, porque total acumula a soma de 3, 8 e 5.
  3. 5, porque total termina com o último item da lista.
  4. 0, porque o total volta a zero a cada volta do loop.
Ver a resposta

Resposta: B. 16, porque total acumula a soma de 3, 8 e 5.

É o padrão acumulador: total começa em 0 e recebe cada valor da lista, uma volta por vez (0+3=3, 3+8=11, 11+5=16). O total = 0 fica FORA do loop, então não zera a cada volta. O mesmo resultado sairia de sum(valores).

Estudar a aula: Percorrendo listas com for: visitar, somar e comparar

Questão 60 · aula Verificando se um item existe: in, count e index

Qual código adiciona um nome à lista SOMENTE se ele ainda não estiver lá?

  1. if nome in convidados: convidados.append(nome)
  2. if nome not in convidados: convidados.append(nome)
  3. if convidados.count(nome) > 0: convidados.append(nome)
  4. if convidados.index(nome): convidados.append(nome)
Ver a resposta

Resposta: B. if nome not in convidados: convidados.append(nome)

Para evitar duplicata, o append só deve acontecer quando o nome está AUSENTE, e quem expressa ausência é o not in. As alternativas com in e count > 0 fazem o contrário (só adicionam quem JÁ está lá), e o index gera ValueError quando o nome não existe.

Estudar a aula: Verificando se um item existe: in, count e index

Questão 61 · aula Prática: lista de compras interativa com menu

Na opção de remover, por que o programa confere if item in compras antes de chamar remove()?

  1. Para deixar o programa mais rápido.
  2. Porque remove() com item inexistente geraria ValueError e derrubaria o programa; o if troca o erro por um aviso.
  3. Porque o remove() só funciona depois de um if.
  4. Para impedir o usuário de remover mais de um item.
Ver a resposta

Resposta: B. Porque remove() com item inexistente geraria ValueError e derrubaria o programa; o if troca o erro por um aviso.

remove() levanta ValueError quando o valor não está na lista, e um erro não tratado encerra o programa na hora. Conferir com in antes permite responder com uma mensagem educada e voltar ao menu. É o caso de borda mais importante do projeto; velocidade e quantidade não têm relação com o if.

Estudar a aula: Prática: lista de compras interativa com menu

Módulo 11: Tuplas, dicionários e conjuntos

Questão 62 · aula O que é uma tupla: a lista que não muda

O que acontece ao executar cores = ("azul", "verde") e depois cores[0] = "roxo"?

  1. A tupla passa a ser ("roxo", "verde").
  2. O Python converte a tupla em lista automaticamente.
  3. O programa para com um TypeError, porque tupla não aceita alteração de item.
  4. Nada acontece; a linha é ignorada em silêncio.
Ver a resposta

Resposta: C. O programa para com um TypeError, porque tupla não aceita alteração de item.

Tupla é imutável: depois de criada, nenhum item pode ser trocado, adicionado ou removido. A tentativa gera TypeError na hora, o que é proposital: melhor um erro visível agora do que um dado corrompido em silêncio.

Estudar a aula: O que é uma tupla: a lista que não muda

Questão 63 · aula Lista ou tupla: como escolher a certa

Um programa guarda a latitude e a longitude fixas de uma loja. Qual estrutura combina melhor e por quê?

  1. Lista, porque coordenadas são números.
  2. Tupla, porque é um registro fixo que não deve mudar durante o programa.
  3. Lista, porque tem só dois itens.
  4. Tanto faz, porque as duas guardam valores em ordem.
Ver a resposta

Resposta: B. Tupla, porque é um registro fixo que não deve mudar durante o programa.

Coordenadas de um lugar fixo são o exemplo clássico de registro fixo: nascem prontas e qualquer alteração seria erro. A tupla protege contra mudança acidental e ainda avisa quem lê o código de que aquele dado é fechado. Tamanho e tipo não são o critério; o comportamento no tempo é.

Estudar a aula: Lista ou tupla: como escolher a certa

Questão 64 · aula Dicionários: cada valor com o seu nome

Num dicionário sem a chave "Felipe", qual a diferença entre idades["Felipe"] e idades.get("Felipe", 0)?

  1. Nenhuma; as duas formas devolvem 0.
  2. Os colchetes devolvem None e o get gera KeyError.
  3. Os colchetes geram KeyError e param o programa; o get devolve 0 e a execução continua.
  4. As duas formas param o programa, mas com mensagens diferentes.
Ver a resposta

Resposta: C. Os colchetes geram KeyError e param o programa; o get devolve 0 e a execução continua.

Com colchetes, chave inexistente gera KeyError na hora. O get faz a mesma busca com plano B: devolve o valor padrão informado (aqui, 0) e o programa segue. Use colchetes quando a chave deve existir e o get quando a ausência é uma possibilidade normal.

Estudar a aula: Dicionários: cada valor com o seu nome

Questão 65 · aula Cadastro com dicionário: a ficha completa

O que o laço for campo, valor in aluno.items() entrega a cada volta?

  1. Só as chaves do dicionário, uma por volta.
  2. Só os valores do dicionário, um por volta.
  3. Um par completo: a chave em campo e o valor correspondente em valor.
  4. O dicionário inteiro, repetido a cada volta.
Ver a resposta

Resposta: C. Um par completo: a chave em campo e o valor correspondente em valor.

O método items entrega os pares chave e valor juntos, desempacotados nas duas variáveis do for. É diferente do for direto no dicionário, que percorre apenas as chaves, e do values, que percorre apenas os valores.

Estudar a aula: Cadastro com dicionário: a ficha completa

Questão 66 · aula Conjuntos com set: sem ordem e sem repetição

O que o Python guarda ao executar set([1, 2, 2, 3, 3, 3])?

  1. Um conjunto com os seis números, na ordem digitada.
  2. Um conjunto com {1, 2, 3}: as repetições são descartadas em silêncio.
  3. Um erro, porque conjuntos não aceitam valores repetidos na criação.
  4. Uma lista ordenada [1, 2, 3].
Ver a resposta

Resposta: B. Um conjunto com {1, 2, 3}: as repetições são descartadas em silêncio.

O conjunto não aceita repetição, mas isso não gera erro: as cópias extras são simplesmente descartadas, sobrando uma ocorrência de cada valor. O resultado é um set com {1, 2, 3}, sem garantia de ordem, e não uma lista.

Estudar a aula: Conjuntos com set: sem ordem e sem repetição

Questão 67 · aula Prática: a ficha de aluno completa

Um aluno tirou 6.0 e 5.0. Pelo programa da prática, qual situação a ficha mostra?

  1. Aprovado, porque as duas notas são maiores que 5.
  2. Recuperação, porque a média 5.5 é maior ou igual a 5 e menor que 7.
  3. Reprovado, porque nenhuma nota chegou a 7.
  4. O programa para com KeyError ao calcular a média.
Ver a resposta

Resposta: B. Recuperação, porque a média 5.5 é maior ou igual a 5 e menor que 7.

A média é (6.0 + 5.0) / 2 = 5.5. O teste media >= 7 falha, o teste media >= 5 passa, então a situação é Recuperação. As regras olham a MÉDIA, não cada nota isolada: é assim que o if, elif e else do programa foi montado.

Estudar a aula: Prática: a ficha de aluno completa

Módulo 12: Trabalhando com textos

Questão 68 · aula Maiúsculas e minúsculas: upper, lower, title e capitalize

Depois de rodar nome = "ana" e nome.upper() em linhas separadas, o que print(nome) mostra?

  1. ANA, porque o método alterou a variável.
  2. ana, porque .upper() devolve uma string nova e o resultado não foi guardado.
  3. Ana, porque .upper() só muda a primeira letra.
  4. Um erro, porque strings não aceitam métodos.
Ver a resposta

Resposta: B. ana, porque .upper() devolve uma string nova e o resultado não foi guardado.

Strings são imutáveis: .upper() fabrica uma string nova e a devolve. Como o resultado não foi guardado em nenhuma variável, ele se perdeu, e nome continua valendo ana. Para mudar, seria nome = nome.upper().

Estudar a aula: Maiúsculas e minúsculas: upper, lower, title e capitalize

Questão 69 · aula Removendo espaços: strip, lstrip e rstrip

Por que vale a pena escrever input("Opção: ").strip() em vez de só input("Opção: ")?

  1. Porque o input() sem .strip() gera erro de sintaxe.
  2. Porque o .strip() remove espaços acidentais das pontas, evitando que "sim " seja tratado como resposta diferente de "sim".
  3. Porque o .strip() converte a resposta para minúsculas.
  4. Porque o .strip() remove todos os espaços do texto, inclusive entre palavras.
Ver a resposta

Resposta: B. Porque o .strip() remove espaços acidentais das pontas, evitando que "sim " seja tratado como resposta diferente de "sim".

O usuário pode digitar espaços sem perceber, e "sim " é diferente de "sim" numa comparação. O .strip() limpa só as pontas (o miolo fica intacto) e não mexe na caixa das letras; para isso existe o .lower(). Sem .strip() não há erro, há bug silencioso.

Estudar a aula: Removendo espaços: strip, lstrip e rstrip

Questão 70 · aula Procurando e substituindo: in, find, count e replace

Após texto = "bom dia" e texto.replace("dia", "noite") em linha solta, o que print(texto) mostra?

  1. bom noite, porque o replace alterou a variável.
  2. bom dia, porque .replace() devolve uma string nova e o resultado não foi guardado.
  3. Um erro, porque replace exige três argumentos.
  4. Uma string vazia.
Ver a resposta

Resposta: B. bom dia, porque .replace() devolve uma string nova e o resultado não foi guardado.

Mesma regra de todos os métodos de string: .replace() fabrica uma string nova com a troca feita e a devolve. Sem guardar o resultado (texto = texto.replace("dia", "noite")), o original segue intacto. O terceiro argumento do replace existe, mas é opcional.

Estudar a aula: Procurando e substituindo: in, find, count e replace

Questão 71 · aula f-strings: mensagens formatadas do jeito moderno

Com valor = 9.5, o que print(f"R$ {valor:.2f}") mostra na tela?

  1. R$ 9.5
  2. R$ 9.50
  3. R$ 09.5
  4. Um erro, porque 9.5 já tem casa decimal.
Ver a resposta

Resposta: B. R$ 9.50

O :.2f força exatamente duas casas decimais: quando o número tem menos, o Python completa com zero (9.5 vira 9.50); quando tem mais, ele arredonda. É o formato padrão para exibir dinheiro, com o detalhe de usar ponto, não vírgula.

Estudar a aula: f-strings: mensagens formatadas do jeito moderno

Questão 72 · aula Contando caracteres e palavras: len, split e join

Qual expressão conta corretamente as palavras de frase = "bom dia, Brasil"?

  1. len(frase)
  2. frase.count(" ")
  3. len(frase.split())
  4. frase.split(len)
Ver a resposta

Resposta: C. len(frase.split())

O .split() quebra a frase numa lista de palavras (["bom", "dia,", "Brasil"]) e o len() conta os itens da lista: 3. O len(frase) contaria caracteres (15), e contar espaços falharia com espaços duplicados ou nas pontas, caso em que o split sem argumento continua certo.

Estudar a aula: Contando caracteres e palavras: len, split e join

Questão 73 · aula Prática: formatador de nomes

No formatador, por que a linha entrada.strip().lower().split() usa os três métodos NESSA ordem de propósito?

  1. A ordem é obrigatória: qualquer outra gera erro de sintaxe.
  2. Porque limpar as pontas e zerar a caixa antes de separar garante palavras limpas e minúsculas, prontas para o teste de conectivo em minúsculas.
  3. Porque o .split() só funciona depois de um .lower().
  4. A ordem não importa em nenhum caso; é só estilo.
Ver a resposta

Resposta: B. Porque limpar as pontas e zerar a caixa antes de separar garante palavras limpas e minúsculas, prontas para o teste de conectivo em minúsculas.

O pipeline prepara o dado para o passo seguinte: o strip tira a sujeira das pontas, o lower zera a caixa (essencial para SILVA casar com o teste in CONECTIVOS, que compara em minúsculas) e o split separa as palavras. Outras ordens até rodam sem erro de sintaxe, mas a lógica de conectivos falharia se a caixa não estivesse normalizada antes do teste.

Estudar a aula: Prática: formatador de nomes

Módulo 13: Funções

Questão 74 · aula O que é uma função: o bloco de código com nome

Qual é o principal problema de copiar o mesmo trecho de código em cinco lugares do programa?

  1. O programa fica mais lento a cada cópia.
  2. O Python proíbe trechos repetidos e mostra um erro.
  3. Qualquer correção precisa ser feita nas cinco cópias; esquecer uma cria um erro silencioso.
  4. Código repetido só funciona em arquivos pequenos.
Ver a resposta

Resposta: C. Qualquer correção precisa ser feita nas cinco cópias; esquecer uma cria um erro silencioso.

Código repetido funciona, e é isso que o torna traiçoeiro: quando algo muda, todas as cópias precisam mudar juntas. Uma cópia esquecida deixa o programa inconsistente sem nenhuma mensagem de erro. A função resolve isso concentrando o bloco num lugar só.

Estudar a aula: O que é uma função: o bloco de código com nome

Questão 75 · aula Criando funções com def: anatomia completa

Um programa contém só a definição de uma função com def e nenhuma chamada. O que acontece ao executar?

  1. O corpo da função executa uma vez, automaticamente.
  2. Nada aparece na tela: o def só guarda a função; sem chamada, o corpo não executa.
  3. O Python mostra um erro, porque toda função definida precisa ser chamada.
  4. O corpo executa em loop até alguém parar o programa.
Ver a resposta

Resposta: B. Nada aparece na tela: o def só guarda a função; sem chamada, o corpo não executa.

Definir não é executar. O def apenas registra a função na memória e o programa segue. O corpo só roda quando existe uma chamada: o nome da função seguido de parênteses. Definição sem chamada não é erro; é só uma receita que ninguém cozinhou ainda.

Estudar a aula: Criando funções com def: anatomia completa

Questão 76 · aula Parâmetros: as entradas da função

Com def saudar(nome, saudacao="Olá") definida, o que a chamada saudar("Pedro") imprime?

  1. Um erro, porque faltou o segundo argumento.
  2. Olá, Pedro!, porque o parâmetro saudacao usa o valor padrão.
  3. Pedro, Olá!, porque a ordem se inverte quando falta um argumento.
  4. Nada, porque a função precisa dos dois argumentos para executar.
Ver a resposta

Resposta: B. Olá, Pedro!, porque o parâmetro saudacao usa o valor padrão.

O parâmetro saudacao tem valor padrão, então ele é opcional: sem o segundo argumento, vale Olá e a função imprime Olá, Pedro!. O parâmetro nome, sem padrão, continua obrigatório; esquecê-lo aí sim geraria erro de argumento faltando.

Estudar a aula: Parâmetros: as entradas da função

Questão 77 · aula Retorno com return: a função que devolve resultado

Uma função executa um print e termina sem return. O que a variável x = minha_funcao() guarda?

  1. O texto que o print mostrou na tela.
  2. O número zero.
  3. None, porque função sem return devolve None.
  4. Nada: o programa para com erro na atribuição.
Ver a resposta

Resposta: C. None, porque função sem return devolve None.

Sem return, a chamada devolve None, e é isso que fica em x. O texto do print apareceu na tela, mas tela e retorno são canais diferentes: mostrar não é devolver. Nenhum erro acontece na hora, o que torna esse comportamento fácil de não perceber.

Estudar a aula: Retorno com return: a função que devolve resultado

Questão 78 · aula Mostrar ou retornar: print não é return

A função dobro(n) só executa print(n * 2), sem return. O que acontece com x = dobro(5) e depois print(x + 1)?

  1. Imprime 10 e depois 11, porque o print interno devolveu o valor.
  2. Imprime 10 e depois quebra com TypeError, porque x guardou None.
  3. Imprime 11 apenas, pois o Python soma direto o que foi mostrado.
  4. Não imprime nada, porque a função não tem return.
Ver a resposta

Resposta: B. Imprime 10 e depois quebra com TypeError, porque x guardou None.

O print interno mostra 10 na tela, mas mostrar não é devolver: sem return, a chamada vale None, e é isso que x guarda. Na linha seguinte, None + 1 gera TypeError citando NoneType. A correção é trocar o print da função por return e deixar o print para o programa principal.

Estudar a aula: Mostrar ou retornar: print não é return

Questão 79 · aula Organizando programas com funções

Num programa bem organizado com funções, qual é o papel do programa principal?

  1. Fazer todos os cálculos, deixando as funções só para imprimir.
  2. Chamar as funções na ordem certa, conectando o retorno de uma à entrada da outra.
  3. Guardar as definições de todas as funções do arquivo.
  4. Repetir o código das funções, por segurança, caso alguma falhe.
Ver a resposta

Resposta: B. Chamar as funções na ordem certa, conectando o retorno de uma à entrada da outra.

O programa principal é o coordenador: chama as funções na sequência, passa os retornos adiante e cuida da exibição final. Os cálculos e decisões moram nas funções, cada uma com sua tarefa. Repetir código por segurança é exatamente o problema que as funções eliminam.

Estudar a aula: Organizando programas com funções

Questão 80 · aula Prática: funções de notas, média e aprovação

Por que calcular_media(notas) funciona para 2, 3 ou 10 notas sem mudar nenhuma linha?

  1. Porque o Python ajusta o código da função automaticamente a cada chamada.
  2. Porque sum e len trabalham com a lista inteira, seja qual for o tamanho dela.
  3. Porque a função tem um parâmetro para cada nota possível.
  4. Não funciona: seria preciso uma função para cada quantidade de notas.
Ver a resposta

Resposta: B. Porque sum e len trabalham com a lista inteira, seja qual for o tamanho dela.

O parâmetro notas recebe a lista inteira como um único valor, e sum e len operam sobre ela sem se importar com o tamanho: somam tudo e contam tudo. É a combinação de listas (módulo 10) com funções que torna o código genérico de graça.

Estudar a aula: Prática: funções de notas, média e aprovação

Módulo 14: Tratamento básico de erros

Questão 81 · aula Por que erros acontecem: as três famílias

Um programa calcula a média de três notas, roda sem nenhuma mensagem de erro e mostra 17.3. Que família de erro é essa?

  1. Erro de escrita, porque o código foi digitado errado.
  2. Erro de execução, porque uma exceção interrompeu o programa.
  3. Erro de lógica: o programa roda até o fim, mas o raciocínio da conta estava errado.
  4. Não é erro, porque o Python não reclamou de nada.
Ver a resposta

Resposta: C. Erro de lógica: o programa roda até o fim, mas o raciocínio da conta estava errado.

Média de notas de 0 a 10 não pode dar 17.3. Como o programa rodou sem mensagem, não é erro de escrita nem de execução: é erro de lógica, a família silenciosa. O Python fez a conta escrita, que não era a conta pretendida.

Estudar a aula: Por que erros acontecem: as três famílias

Questão 82 · aula Lendo mensagens de erro: a anatomia do traceback

Apareceu um traceback de 15 linhas na sua tela. Qual é o primeiro passo para entendê-lo?

  1. Ler a primeira linha, porque o Python mostra o mais importante primeiro.
  2. Ler a última linha, que traz o tipo do erro e a mensagem, e depois subir para achar o arquivo e a linha.
  3. Fechar o terminal e rodar de novo, porque tracebacks longos indicam problema no computador.
  4. Contar quantas linhas o traceback tem para medir a gravidade do erro.
Ver a resposta

Resposta: B. Ler a última linha, que traz o tipo do erro e a mensagem, e depois subir para achar o arquivo e a linha.

A regra de ouro é ler de baixo para cima: a última linha resume o tipo e a mensagem do erro, e as linhas File e line acima dela dão o endereço. O tamanho do traceback só reflete quantas funções estavam envolvidas, não a gravidade.

Estudar a aula: Lendo mensagens de erro: a anatomia do traceback

Questão 83 · aula TypeError, ValueError e a turma dos erros mais comuns

O usuário digitou a palavra "dez" e o programa executou int("dez"). Qual erro o Python levanta?

  1. TypeError, porque texto não pode virar número.
  2. ValueError, porque int() aceita texto, mas o valor dez não contém um número.
  3. NameError, porque a palavra dez não foi definida como variável.
  4. SyntaxError, porque a linha foi escrita errada.
Ver a resposta

Resposta: B. ValueError, porque int() aceita texto, mas o valor dez não contém um número.

A função int() aceita texto como entrada, então o tipo está certo; o problema é o VALOR, que não contém dígitos para converter. Isso é ValueError. Seria TypeError se a operação recusasse o tipo em si, como somar texto com número.

Estudar a aula: TypeError, ValueError e a turma dos erros mais comuns

Questão 84 · aula Usando try e except: tratando o erro esperado

Por que escrever except ValueError em vez de except sozinho ao tratar a conversão de um input?

  1. Porque o except sem nome não funciona e gera SyntaxError.
  2. Porque o except específico captura só o erro esperado; os demais continuam aparecendo para você corrigir.
  3. Porque except ValueError roda mais rápido que o except comum.
  4. Não faz diferença: as duas formas se comportam exatamente igual.
Ver a resposta

Resposta: B. Porque o except específico captura só o erro esperado; os demais continuam aparecendo para você corrigir.

O except puro é válido e funciona, mas captura QUALQUER erro, inclusive defeitos de digitação seus que o traceback denunciaria, escondendo-os atrás de uma mensagem genérica. O except específico trata o risco real (ValueError no input) e deixa os erros inesperados visíveis.

Estudar a aula: Usando try e except: tratando o erro esperado

Questão 85 · aula Prática: a calculadora à prova de erros

Na função pedir_numero, o que acontece quando o usuário digita "abc"?

  1. O programa cai com ValueError, porque float não converte letras.
  2. A função retorna zero, o valor padrão para entradas inválidas.
  3. O except captura o ValueError, mostra a mensagem amigável e o while pede o número de novo.
  4. O while True trava o programa num loop infinito sem saída.
Ver a resposta

Resposta: C. O except captura o ValueError, mostra a mensagem amigável e o while pede o número de novo.

O float("abc") levanta ValueError dentro do try, o except captura, avisa o usuário e o while volta ao input. O loop só termina no return, que roda quando a conversão dá certo: por isso a função nunca derruba o programa nem devolve valor inválido.

Estudar a aula: Prática: a calculadora à prova de erros

Módulo 15: Arquivos de texto

Questão 86 · aula O que é um arquivo de texto e por que salvar dados nele

Por que um programa precisa salvar dados em arquivo em vez de deixar tudo em variáveis?

  1. Porque variáveis só aceitam textos curtos.
  2. Porque variáveis vivem na memória, que é apagada quando o programa fecha; o arquivo fica no disco.
  3. Porque o Python apaga as variáveis a cada 10 minutos.
  4. Porque arquivos são mais rápidos que variáveis.
Ver a resposta

Resposta: B. Porque variáveis vivem na memória, que é apagada quando o programa fecha; o arquivo fica no disco.

Variáveis moram na memória RAM, uma área de trabalho que o sistema limpa quando o programa termina. O arquivo é gravado no disco e persiste: continua lá depois que o programa fecha e até depois que o computador desliga. Velocidade é o contrário: memória é mais rápida que disco.

Estudar a aula: O que é um arquivo de texto e por que salvar dados nele

Questão 87 · aula Criando e escrevendo arquivos com open e write

Um arquivo notas.txt já tem 10 linhas. O que acontece ao executar open("notas.txt", "w")?

  1. As 10 linhas são preservadas e a escrita começa no fim.
  2. O Python pergunta se você quer sobrescrever o arquivo.
  3. O conteúdo é apagado imediatamente, mesmo antes de qualquer write.
  4. Acontece um erro, porque o arquivo já existe.
Ver a resposta

Resposta: C. O conteúdo é apagado imediatamente, mesmo antes de qualquer write.

O modo w zera o arquivo no momento da abertura, sem aviso e sem chance de recuperar. Para preservar o conteúdo e escrever no fim, o modo certo é a, de append. Abrir em w um arquivo existente não gera erro nenhum, e é justamente por isso que a pegadinha é perigosa.

Estudar a aula: Criando e escrevendo arquivos com open e write

Questão 88 · aula Lendo arquivos: read, linha a linha e o arquivo que não existe

O que acontece ao executar open("dados.txt", "r") se o dados.txt não existe?

  1. O Python cria o dados.txt vazio e devolve o arquivo aberto.
  2. O read devolve um texto vazio, sem erro.
  3. O Python levanta FileNotFoundError, que pode ser tratado com try/except.
  4. O programa trava para sempre esperando o arquivo aparecer.
Ver a resposta

Resposta: C. O Python levanta FileNotFoundError, que pode ser tratado com try/except.

Diferente de w e a, que criam o arquivo quando ele não existe, o modo r exige que o arquivo esteja lá. Sem o arquivo, o open levanta FileNotFoundError na hora. Envolvendo a leitura num try/except FileNotFoundError, o programa trata a ausência com uma mensagem amigável em vez de quebrar.

Estudar a aula: Lendo arquivos: read, linha a linha e o arquivo que não existe

Questão 89 · aula Fechamento automático com with: o jeito certo de abrir arquivos

Qual é a principal vantagem do with sobre chamar close manualmente?

  1. O with faz o programa rodar mais rápido.
  2. O with fecha o arquivo sempre, mesmo se um erro acontecer dentro do bloco.
  3. O with permite escrever números sem converter para texto.
  4. O with cria o arquivo em qualquer modo, inclusive no r.
Ver a resposta

Resposta: B. O with fecha o arquivo sempre, mesmo se um erro acontecer dentro do bloco.

A garantia do with é o fechamento incondicional: terminou o bloco, por conclusão normal ou por erro, o arquivo é fechado. O close manual depende de você lembrar e de nenhum erro interromper a execução antes dele. Velocidade, conversão de tipos e o comportamento do modo r não mudam com o with.

Estudar a aula: Fechamento automático com with: o jeito certo de abrir arquivos

Questão 90 · aula Cuidados ao salvar dados: acentos, validação e caminhos

Por que declarar encoding="utf-8" nos opens do seu programa?

  1. Para o arquivo ocupar menos espaço no disco.
  2. Para acentos e ç serem gravados e lidos do mesmo jeito em qualquer máquina, sem depender do padrão do sistema.
  3. Para o Python ler o arquivo mais rápido.
  4. Porque sem encoding o modo w deixa de criar o arquivo.
Ver a resposta

Resposta: B. Para acentos e ç serem gravados e lidos do mesmo jeito em qualquer máquina, sem depender do padrão do sistema.

O encoding é a tabela que traduz caracteres em números no disco. O Windows em português usa por padrão uma tabela antiga, e a mistura de tabelas quebra os acentos ou gera UnicodeDecodeError. Declarando utf-8 na escrita e na leitura, o programa se comporta igual em qualquer sistema. Espaço e velocidade não são o ponto, e o modo w cria o arquivo com ou sem encoding.

Estudar a aula: Cuidados ao salvar dados: acentos, validação e caminhos

Questão 91 · aula Prática: lista de tarefas que sobrevive ao fim do programa

Na função listar_tarefas, por que o with está dentro de um try/except FileNotFoundError?

  1. Porque o with não funciona fora de um try.
  2. Para o programa avisar que não há tarefas quando o tarefas.txt ainda não existe, em vez de quebrar.
  3. Para o arquivo ser criado automaticamente no modo r.
  4. Para as tarefas serem listadas em ordem alfabética.
Ver a resposta

Resposta: B. Para o programa avisar que não há tarefas quando o tarefas.txt ainda não existe, em vez de quebrar.

Na primeira execução, ninguém adicionou tarefa e o tarefas.txt não existe; abrir em modo r levantaria FileNotFoundError e derrubaria o programa. O try/except transforma essa situação esperada numa mensagem amigável. O with funciona fora de try normalmente, o modo r nunca cria arquivo e ordenação não tem relação com o tratamento de erro.

Estudar a aula: Prática: lista de tarefas que sobrevive ao fim do programa

Módulo 16: Projeto final: seu gerenciador de tarefas

Questão 92 · aula O projeto: seu gerenciador de tarefas

O que significa construir o projeto de forma incremental, como este módulo propõe?

  1. Escrever o programa inteiro de uma vez e corrigir os erros no final.
  2. Adicionar uma parte pequena por aula, terminando cada aula com o programa acumulado funcionando.
  3. Copiar o código final da aula 6 e estudar o que ele faz.
  4. Escrever cada aula num arquivo diferente, para não misturar os códigos.
Ver a resposta

Resposta: B. Adicionar uma parte pequena por aula, terminando cada aula com o programa acumulado funcionando.

Construção incremental é crescer em camadas: cada aula evolui o mesmo arquivo gerenciador.py com uma parte nova e termina com tudo rodando. Escrever cem linhas de uma vez multiplica os erros e esconde onde eles estão; copiar o código pronto rouba o treino.

Estudar a aula: O projeto: seu gerenciador de tarefas

Questão 93 · aula Estruturando o programa: o esqueleto que já funciona

No esqueleto, por que o menu reaparece depois de cada ação escolhida?

  1. Porque a função mostrar_menu chama a si mesma no final.
  2. Porque o while True volta ao início do bloco após cada ação, e mostrar_menu é a primeira linha do bloco.
  3. Porque o Python repete automaticamente qualquer função que tenha print.
  4. Porque o if/elif força o programa a recomeçar do zero.
Ver a resposta

Resposta: B. Porque o while True volta ao início do bloco após cada ação, e mostrar_menu é a primeira linha do bloco.

O loop principal é um while True: ao terminar uma ação, a execução volta para o topo do bloco, que chama mostrar_menu de novo e lê outra opção. O ciclo só quebra quando a opção 5 executa o break.

Estudar a aula: Estruturando o programa: o esqueleto que já funciona

Questão 94 · aula Adicionando e listando tarefas

Na função listar_tarefas, o que enumerate(tarefas, start=1) entrega a cada volta do for?

  1. Só o número da posição da tarefa, começando do 1.
  2. Só o dicionário da tarefa, sem número.
  3. O número da posição (a partir do 1) e o dicionário da tarefa, juntos.
  4. A lista completa de tarefas, uma vez por volta.
Ver a resposta

Resposta: C. O número da posição (a partir do 1) e o dicionário da tarefa, juntos.

enumerate percorre a lista entregando pares: a posição e o item. Com start=1, a contagem começa em 1 em vez de 0. Por isso o for declara duas variáveis, i e tarefa, e consegue numerar a listagem sem contador manual.

Estudar a aula: Adicionando e listando tarefas

Questão 95 · aula Concluindo e removendo tarefas

Por que a conversão int(resposta) fica dentro de um try/except ValueError?

  1. Porque int() só funciona dentro de try no Python 3.
  2. Para deixar o código mais bonito, sem efeito prático.
  3. Porque se o usuário digitar algo que não é número, int() levanta ValueError e, sem o except, o programa fecha na hora.
  4. Para converter o número mais rápido.
Ver a resposta

Resposta: C. Porque se o usuário digitar algo que não é número, int() levanta ValueError e, sem o except, o programa fecha na hora.

int("abc") levanta ValueError, e exceção sem tratamento derruba o programa inteiro, perdendo as tarefas da sessão. O try/except transforma essa falha numa mensagem educada e devolve o usuário ao menu, que é o comportamento de um programa profissional.

Estudar a aula: Concluindo e removendo tarefas

Questão 96 · aula Salvando e carregando do arquivo

Na primeira execução do programa, o arquivo tarefas.txt ainda não existe. O que acontece?

  1. O programa quebra com FileNotFoundError na tela.
  2. O Python cria o arquivo automaticamente ao tentar ler.
  3. O except FileNotFoundError captura a situação e carregar_tarefas devolve a lista vazia; o programa abre normalmente.
  4. O programa pede para o usuário criar o arquivo à mão.
Ver a resposta

Resposta: C. O except FileNotFoundError captura a situação e carregar_tarefas devolve a lista vazia; o programa abre normalmente.

Abrir para leitura um arquivo inexistente levanta FileNotFoundError, mas carregar_tarefas envolve o open num try/except exatamente para isso: captura o erro, ignora com pass e devolve a lista vazia. O arquivo passa a existir na primeira gravação, feita pelo salvar_tarefas no modo w.

Estudar a aula: Salvando e carregando do arquivo

Questão 97 · aula Polindo o programa: os toques finais

Na confirmação da remoção, por que qualquer resposta diferente de s cancela, em vez de exigir um n explícito para cancelar?

  1. Porque o Python não consegue comparar com duas letras diferentes.
  2. Por segurança: em ação destrutiva, só um sim explícito autoriza; qualquer dúvida, erro de digitação ou Enter vazio deve preservar os dados.
  3. Para deixar o código com uma linha a menos.
  4. Porque o lower() só funciona com a letra s.
Ver a resposta

Resposta: B. Por segurança: em ação destrutiva, só um sim explícito autoriza; qualquer dúvida, erro de digitação ou Enter vazio deve preservar os dados.

É a assimetria proposital das ações sem volta: apagar exige a intenção clara (a letra s), e todo o resto, inclusive um Enter apressado ou um erro de digitação, cai no caminho seguro do cancelamento. Perder um clique é barato; perder um dado, não.

Estudar a aula: Polindo o programa: os toques finais

Questão 98 · aula E agora? Próximos passos na trilha

Qual é o jeito recomendado de evoluir o gerenciador por conta própria depois do curso?

  1. Reescrever o programa inteiro do zero a cada nova ideia.
  2. Implementar todas as evoluções ao mesmo tempo, para economizar testes.
  3. Uma mudança por vez, testando antes de seguir e guardando uma cópia da versão que funciona.
  4. Procurar um gabarito pronto de cada evolução antes de tentar.
Ver a resposta

Resposta: C. Uma mudança por vez, testando antes de seguir e guardando uma cópia da versão que funciona.

É o mesmo método incremental do módulo: mudanças pequenas, teste após cada uma e uma cópia de segurança da versão funcionando. Mudar tudo junto esconde a origem dos erros, e buscar gabarito antes de tentar rouba exatamente o exercício de autonomia que a evolução existe para dar.

Estudar a aula: E agora? Próximos passos na trilha

Terminou a lista?

Quem acertou quase tudo já pode encarar o exame final do curso, com 20 questões sorteadas e aprovação a partir de 70%. Quem errou bastante ganha mais voltando às aulas dos módulos em que tropeçou: cada questão acima leva direto à aula certa.

Ir para o Curso de Python Básico