Aulas do bloco

← Todas as aulas
Pythonaula 711/08/20261h32

Input, conversão de tipos e valores truthy/falsy

Estreia o fluxo de entrada com input() — enunciado, retorno sempre como string, conversão explícita com int() e float() usando replace() para vírgula, e regra de truthy/falsy com lower() + == para pergunta booleana — encadeando demos de type(), aninhamento int(input()) e formulário de nome/idade/peso/Linux reaproveitando conversões já vistas; sem aviso de prova, vale reabrir para treinar o input.

▶ Abrir gravaçãoIniciar exercíciosBaixa56/1000/18 exercícios

Para revisar rápido

Resumo da aula

7 pontos
  • input() pede dados no console e o retorno deve ser guardado em variáveis.

  • Valores escritos direto no código são hardcoded e devem ser evitados em aplicações reais.

  • input() sempre devolve string, mesmo quando a pessoa digita número ou booleano.

  • Números exigem conversão explícita com int() ou float(); valor inválido gera erro em runtime.

  • bool() segue truthy/falsy: string vazia, 0, 0.0, None e False são falsos; o restante é verdadeiro.

  • Textos se comparam com ==; Python é case sensitive e lower() ignora maiúsculas e minúsculas.

  • O formulário final junta nome, idade, peso e a pergunta sobre uso de Linux.

Guia de estudo

Hardcoded versus entrada de dados

Um programa que usa nome, idade e peso pode nascer com esses valores escritos direto no editor. Isso se chama hardcoded: os dados ficam fixos no código. Hardcoded é ruim porque polui a lógica e dificulta mudanças; cada alteração obriga a editar o próprio programa. Em aplicações reais, esses dados ficam em arquivos ou em banco de dados separados do código. A aula citou jogos como Need for Speed, em que configurações ficam em arquivos (por exemplo .in), o que permite mudar opções sem recompilar. Textos, imagens e músicas são assets e também ficam fora do código. A alternativa é a entrada de dados: o usuário informa os valores em tempo de execução. Assim o mesmo programa atende pessoas diferentes, sem reescrever constantes. O destino da aula é um formulário com nome, idade, peso e uma pergunta sobre uso de Linux, todos obtidos na execução, não gravados no código.

Dados fixos no código

nome = "Raito"
peso = 70
usa_linux = True
print(nome)
print(peso)
print(usa_linux)

Nome, peso e uso de Linux estão escritos no programa. Qualquer outra pessoa exigiria alterar essas linhas. A aula parte daqui para pedir os dados na execução.

A função input() e o armazenamento em variáveis

A função input() solicita uma entrada no console e devolve o que a pessoa digitou. Sem parâmetro, só abre o campo de digitação. Com um parâmetro, recebe uma string de enunciado que orienta o usuário, como Digite seu nome. O valor devolvido deve ir para uma variável; sem isso, o texto se perde e não dá para usar depois. O único lugar de digitação é a barra do console; a caixa da barra de ferramentas do editor não serve. Não existe timeout no input: o tempo exibido apenas conta desde que o campo apareceu. Para o programa continuar, é preciso digitar e pressionar Enter; sem Enter o print seguinte não aparece. Esse input do Python é para ferramentas de desenvolvimento e testes. Página de cadastro no navegador usa HTML, CSS e JavaScript, ou bibliotecas de interface gráfica, não o input do Python. A aula leu nome e sobrenome com dois inputs, concatenou as strings e imprimiu uma saudação.

input com enunciado

nome = input("Digite seu nome")
print(nome)

O parâmetro é o enunciado. O retorno vai para a variável nome e o print mostra exatamente o que foi digitado.

Nome, sobrenome e concatenação

nome = input("Digite seu nome")
sobrenome = input("Digite seu sobrenome")
print("Olá, " + nome + " " + sobrenome)

Dois inputs guardam textos. A concatenação junta as strings e forma a saudação, no estilo Olá, Raito Yagami.

O input sempre devolve string: conversão com int()

Pergunta essencial da aula: o input sempre devolve string? Sim. Não importa se a pessoa digitou número ou booleano; o retorno é texto. A função type() deixa isso visível ao mostrar que a idade chegou como str. Python não converte sozinho. A conversão é explícita: você chama int(), float() ou bool(). Sem converter, subtrair a idade de um ano para obter o ano de nascimento falha, porque não se mistura string com int. Em int(input()), há aninhamento de funções: a interna (input) resolve primeiro e o resultado vai para a externa (int). Dá para fazer on the fly em uma linha ou na versão didática, com variável intermediária como idade_texto e depois int(); a didática é mais clara para quem está começando. Python não tem tipagem estática como C#, Java ou Rust: não adianta colocar int antes do input para declarar o tipo da variável. Se não houver conta numérica, deixar o dado como string é funcional.

type() mostra que a idade é string

idade = input("Digite sua idade")
print(type(idade))

Mesmo digitando 20, type() revela str. Por isso ainda não dá para fazer conta com esse valor.

Versão didática com int() e ano de nascimento

idade_texto = input("Digite sua idade")
idade = int(idade_texto)
print(2026 - idade)

idade_texto guarda a string; int() gera o inteiro. Só então a subtração funciona. A forma oneliner equivalente seria idade = int(input(“Digite sua idade”)).

float(), replace() e erro de conversão

Peso pede casas decimais, então a conversão adequada é float(). Se a pessoa digitar só 67, o resultado vira 67.0, porque o float inclui a parte decimal. Nem sempre é melhor usar float no lugar de int: use o tipo que faz sentido para o dado. O Python usa ponto como separador decimal. Para aceitar vírgula digitada pelo usuário, o método replace() troca a vírgula por ponto na string antes de converter. int() é rígido: a string 67 funciona, mas 67.7 gera erro, assim como um texto qualquer, por exemplo uma frase sem número. Esse erro acontece em runtime, durante a execução. Sem estrutura condicional ou tratamento de erros, não há como exibir uma mensagem amigável no lugar da falha. Diferente do HTML, em que o campo pode ter tipo number, text ou password, no Python a validação de tipo é manual. O input padrão não restringe a números.

Peso com vírgula convertido para float

peso_texto = input("Digite seu peso")
peso = float(peso_texto.replace(",", "."))
print(peso)

replace() troca vírgula por ponto, que é o separador do Python. Depois float() obtém o número. Digitar 67 resulta em 67.0.

Truthy, falsy e conversão com bool()

A função bool() converte um valor para True ou False seguindo a regra de truthy e falsy, os verdadeirinhos e mentirinhos. São considerados falsos: string vazia, 0, 0.0, None e False. Todo valor que não está nessa lista é verdadeiro. Por isso a string false vira True, e um número negativo como -2 também é True. None representa ausência de valor e conta como falso. bool() não calcula maioridade sozinho: não basta converter a idade; seria necessária uma expressão de comparação. O ponto prático é gravar a lista curta de casos falsos, porque qualquer outro valor, inclusive textos não vazios, vira True. Experimentar bool() com vários valores no console ajuda a ver o comportamento, que às vezes contraria a intuição.

Experimentos de bool() com valores falsos e verdadeiros

print(bool(""))
print(bool(0))
print(bool(0.0))
print(bool(None))
print(bool(False))
print(bool("false"))
print(bool(-2))

Os cinco primeiros imprimem False. A string false e o número -2 imprimem True, porque não estão na lista de valores falsos.

Comparar textos e fechar o formulário

Quando a pergunta é de sim ou não, converter a string direto com bool() não funciona como a pessoa espera: qualquer texto não vazio é True. O caminho mostrado na aula é comparar textos com o operador ==, que verifica igualdade e devolve True ou False. Python é case sensitive: test e Test não são iguais. O método lower() transforma todos os caracteres em minúsculas, então Sim vira sim e a comparação fica estável. No fechamento, o formulário pergunta Você usa GNU/Linux?, aplica lower() e compara com sim. Qualquer entrada diferente, como batata, resulta em False; Sim vira sim e resulta em True. Nome permanece string, idade passa por int(), peso por float() e o uso de Linux vira booleano. Os quatro conceitos da aula — input, conversão numérica, truthy/falsy e comparação de texto — aparecem juntos no mesmo programa.

Formulário com nome, idade, peso e Linux

nome = input("Digite seu nome")
idade = int(input("Digite sua idade"))
peso = float(input("Digite seu peso").replace(",", "."))
usa_linux = input("Você usa GNU/Linux?").lower() == "sim"
print(nome)
print(idade)
print(peso)
print(usa_linux)

Nome fica string, idade vira int, peso vira float (aceitando vírgula) e a pergunta vira True só se, após lower(), o texto for exatamente sim.

Avisos administrativos — 1 recados sobre prazos, regras e funcionamento do curso
  • 01:31:01 A próxima aula será na sexta-feira, com mais exemplos de input. Na sequência entram operadores lógicos e estruturas condicionais.
Perguntas de aluno — 15 perguntas respondidas na gravação

O input sempre devolve uma string? (Gabriela) 00:38:15 Sim, o input sempre devolve string, não importa o que o usuário digite.

Dá para usar a caixa de input presente na barra? (Victor) 00:30:21 Não; o único lugar de digitação é a barra do console. Em navegadores antigos isso era possível, mas hoje não.

No desenvolvimento de uma página de cadastro, utilizamos esse input? (Jonathan) 00:31:14 Não; front-end é feito com HTML, CSS e JavaScript ou bibliotecas GUI. O input do Python é para ferramentas de desenvolvimento e testes.

Dá para configurar timeout no input? 00:32:50 Não há como colocar timeout no input; o tempo exibido é apenas o tempo decorrido desde que o input apareceu.

Por que sites não deixam cadastrar nome com apóstrofo? 00:33:35 Sistemas de validação normalmente consideram caracteres como apóstrofo especiais, no mesmo grupo de arroba e exclamação, e bloqueiam.

O meu fica executando e não aparece o print 00:34:36 · chat 00:29:43 Para enviar, é preciso digitar o valor e pressionar Enter.

Posso colocar int antes do input para dizer que a variável é int? (Natália) 00:51:43 Não; Python não tem tipagem estática. É preciso converter explicitamente o valor com int().

É funcional sem o uso do int? (Antônio) 00:53:30 · chat 00:50:34

é funcional sem o uso de "int"?

nome_completo = input("nome:")
cidade_atual = input("cidade:")
data_nascimento = input("data de nascimento:")
print(
    "...",
    nome_completo,
    "...",
    cidade_atual,
    "...",
    data_nascimento,
    "..." + "."
)

Sim, se você não precisa fazer operações numéricas com esses dados, pode tratá-los como strings.

No bool, se colocar se ele é maior ou menor de idade, ele faz as contas? 00:59:31 Não; você precisa de uma expressão de comparação (ex.: >= 18). Isso será visto com operadores lógicos na semana que vem.

Dá para mostrar mensagem de erro sem estrutura condicional? (Felipe) 01:00:25 Não; sem condicional ou tratamento de erros não é possível exibir uma mensagem adequada.

semana q vem ent já tem IF? 01:04:16 · chat 01:02:02 Sim, o plano prevê estruturas condicionais na semana que vem.

E se o usuário digitar só 67? 01:07:20 · chat 01:07:06 Sim, vira 67.0, pois float considera a parte decimal.

Seguindo a pergunta do Guilherme, não é melhor sempre usar float? 01:07:56 · chat 01:07:49 Não necessariamente; use o tipo que faz sentido para o dado. Float faz o que int faz, mas nem sempre é adequado.

Só consigo usar input int/input num com biblioteca externa? (Antônio) 01:09:51 Sim, o Python padrão não tem input restrito a números; é preciso biblioteca externa ou conversão manual.

Como você só declarou o lower como sim, qualquer coisa diferente de sim vai dar falso? (Dani) 01:28:42 Exatamente; qualquer entrada que, após lower(), não for igual a ‘sim’ resulta em False.

Trechos que valem reouvir — 5 momentos que mais rendem uma segunda escuta
  • 00:45:02 — Explicação passo a passo do aninhamento int(input()), mostrando como o Python resolve de dentro para fora — essencial para entender conversões.
  • 00:43:48 — Erro ao subtrair string de int; mostra na prática por que é preciso converter.
  • 01:11:41 — Experimentos de bool() com diversos valores; comportamento contra-intuitivo de truthy/falsy.
  • 01:05:57 — Uso de replace() para aceitar vírgula como separador decimal em float.
  • 01:24:27 — Montagem da pergunta ‘usa Linux’ combinando input, lower() e ==; exemplo completo de conversão para booleano.

Glossário da aula

Conceitos

Entrada de dados

00:05:49

É a informação que o usuário digita para o programa durante a execução. Serve para o programa não depender de valores fixos no código.

Hardcoded

00:06:36

É o dado escrito direto no código. É evitado porque mistura lógica com informação e dificulta mudanças, por isso em apps reais fica em arquivos ou banco separados.

input()

00:05:52

É a função que pede ao usuário para digitar algo no console. É usada para coletar dados em tempo de execução e sempre devolve o texto digitado.

Parâmetro do input

00:23:22

É o texto opcional dentro do input() que aparece como pergunta no console. Serve para orientar o usuário sobre o que deve digitar.

Variável

00:26:26

É um nome que guarda um valor para uso posterior no programa. É usada para armazenar o texto que o input() devolve.

type()

00:39:52

É a função que revela o tipo de um valor, como string ou inteiro. É usada para conferir, por exemplo, que a idade vinda do input é texto.

Input sempre devolve string

00:40:32

É a regra de que o input() sempre entrega texto, mesmo que o usuário digite número. Por isso é preciso converter o valor depois.

Conversão explícita

00:41:37

É a mudança manual de tipo que o programador faz no código. É necessária porque o Python não converte sozinho e exige funções como int() ou float().

É a função que transforma um texto em número inteiro. É usada para calcular com valores do input e falha se o texto não for um inteiro.

Aninhamento de funções

00:44:34

É o uso de uma função dentro de outra, como em int(input()). Acontece quando a função de dentro roda primeiro e seu resultado alimenta a de fora.

Versão oneliner vs didática

00:49:57

São duas formas de converter a entrada: tudo em uma linha ou em duas etapas com variável intermediária. A versão em duas linhas é mais clara para quem está começando.

float()

01:03:35

É a função que converte um texto em número com casas decimais. É usada para valores como peso, que precisam de ponto flutuante.

replace()

00:51:03

É o método de texto que troca um caractere por outro. É usado para trocar vírgula por ponto antes de converter número com decimal.

Separador decimal

01:06:01

É o símbolo que separa a parte inteira da decimal. Como o Python só aceita ponto, é preciso trocar a vírgula do usuário antes de converter.

bool()

00:59:01

É a função que transforma um valor em verdadeiro ou falso. É usada para testar a lógica de truthy e falsy do Python.

Truthy e falsy

01:15:28

São os valores classificados como verdadeiros ou falsos quando convertidos para booleano. Servem para entender que tudo que não é falso se torna verdadeiro.

Valores falsos

01:16:58

São os poucos valores que viram falso no bool(), como texto vazio, zero, zero ponto zero, None e False. Todos os outros são considerados verdadeiros.

É o valor especial que indica ausência de valor. É usado para representar nada e é considerado falso quando convertido para booleano.

Operador de igualdade ==

01:25:05

É o operador que compara dois valores para ver se são iguais. É usado em testes que precisam retornar verdadeiro ou falso.

lower()

01:24:27

É o método que transforma todo o texto em letras minúsculas. É usado para comparar entradas do usuário sem se importar com maiúsculas e minúsculas.

Case sensitive

01:26:30

É a característica de diferenciar letras maiúsculas de minúsculas. Por isso no Python 'test' e 'Test' são valores diferentes.

Erro de conversão

00:56:26

É a falha que ocorre quando se tenta converter um texto que não é número válido, como 'bandido quer chocolate', para inteiro. Faz o programa parar durante a execução.

Tipagem estática

00:52:13

É o sistema de linguagens como C#, Java e Rust em que o tipo da variável deve ser declarado. Serve para definir o tipo antes da execução.

HTML input type vs Python input

00:51:24

É a diferença de que no HTML o campo já tem tipo definido, como número ou senha. No Python o input sempre é texto e a validação é manual.

Biblioteca externa

01:10:05

É um código extra instalado além do Python padrão. É necessária quando se quer um input que já valide número sem programação manual.

Estruturas condicionais

01:00:37

São comandos como if e else que executam partes diferentes do código conforme uma condição. São usadas para decidir ações com base em testes.

Runtime error

00:55:52

É o erro que aparece só quando o programa já está rodando. Acontece, por exemplo, quando uma conversão de tipo falha.

On the fly

00:49:34

É fazer todas as etapas direto em uma única linha. É usado para converter e usar a entrada sem guardar em variável intermediária.

Arquivo de configuração

00:18:13

É o arquivo separado que guarda configurações fora do código, como em jogos. É usado para permitir mudanças sem precisar recompilar o programa.

É o recurso do programa como texto, imagem ou música que fica separado do código. Serve para manter conteúdo fora da lógica principal.

Prática autocorrigida

Exercícios

0/18 concluídos
  1. Classe crua do que o input devolveLeia uma linha sem convertê-la e mostre seu tipo usando type().facilinput()Input sempre devolve stringtype()
  2. Ano de nascimento a partir da idadeLeia uma idade inteira e mostre 2026 menos essa idade. Neste exercício, desconsidere mês e dia do aniversário.facilint()Aninhamento de funçõesConversão explícita
  3. Peso com vírgula vira floatLeia um número que pode usar vírgula ou ponto como separador decimal. Troque vírgulas por pontos com replace(), converta com float() e mostre o número.facilfloat()replace()Separador decimal
  4. Truthy e falsy da linha lidaLeia uma linha e mostre bool() desse texto. Uma linha vazia deve produzir False; qualquer texto não vazio deve produzir True.facilbool()Truthy e falsyValores falsos
  5. A resposta vira True só se for simLeia uma linha, aplique lower() e compare com sim usando ==. Mostre True apenas para sim em qualquer combinação de maiúsculas e minúsculas.facillower()Operador de igualdade ==Case sensitive
  6. Idade convertida e a classe delaLeia um inteiro com int(input()). Mostre o valor convertido e, na segunda linha, seu tipo usando type().facilint()type()Conversão explícita
  7. Booleano de um inteiro lidoLeia um inteiro e mostre bool() desse número: False para zero e True para qualquer outro inteiro.facilint()bool()Truthy e falsy
  8. Igualdade ignorando maiúsculasLeia duas linhas. Aplique lower() em ambas e use == para mostrar se os textos resultantes são iguais.medialower()operador de igualdade ==input()
  9. Booleano de um float lidoLeia um decimal com ponto e mostre bool() desse valor: False para zero e True para qualquer valor não zero.mediafloat()bool()Truthy e falsy
  10. A resposta é naoLeia uma linha, aplique lower() e compare com nao, sem acento, usando ==. Mostre o resultado booleano.medialower()operador de igualdade ==input()
  11. Igual a python sem mudar a caixaLeia uma linha e mostre True apenas se ela for exatamente python, em minúsculas. Não use lower() nem altere o texto.mediaoperador de igualdade ==Case sensitiveinput()
  12. Soma menos o produto de dois inteirosLeia dois inteiros a e b e mostre a + b - a * b.mediaint()operadores aritméticos básicosprecedência de operadores
  13. Converter segundos para minutosLeia um total inteiro não negativo de segundos. Mostre os minutos completos na primeira linha e os segundos restantes na segunda.mediaint()divisão inteira //resto %
  14. Duas partes com ponto e espaçoLeia duas linhas. Use + para mostrá-las em uma linha, acrescentando um ponto e um espaço entre elas.mediainput()concatenaçãostring
  15. Ímpares de seis linhasLeia seis linhas e mostre as posições 1, 3 e 5, uma por linha. Descarte as posições 2, 4 e 6.dificilinput()execução sequencialdescarte de leitura
  16. Resto somado a uma razãoLeia quatro inteiros w, x, y e z. Mostre w % x + y / z. Os divisores x e z não serão zero.dificiloperador resto %divisão /precedência
  17. Título e espaços viram hífenLeia uma linha, aplique title() e substitua cada espaço do resultado por hífen usando replace(). Mostre a string final.dificiltitle()replace()strings imutáveis
  18. Produto de quatro decimais e a classeLeia quatro decimais, um por linha. Mostre seu produto e, na segunda linha, o tipo desse produto usando type().dificilfloat()multiplicaçãotype()