Pular para conteúdo

3. Entrada e saída de dados

Nesta aula

Ideia central: tudo o que vem do teclado chega como texto — mesmo quando a pessoa digitou um número. Esquecer disso é o erro nº 1 do semestre.

Ao fim você vai conseguir: pedir dados com input(); converter para número com int() e float(); montar mensagens legíveis com f-strings; e reconhecer, num programa que roda sem erro, o resultado que está errado.

Até agora os dados estavam presos no programa

Os programas dos capítulos anteriores só serviam para um caso. Para calcular a conta de outro cliente, era preciso editar o código.

input() resolve isso: ele para o programa, espera a pessoa digitar e devolve o que foi digitado.

nome = input("Digite seu nome: ")
print("Ola,", nome)
Digite seu nome: Ola, Ana

O texto entre parênteses é o convite: ele aparece na tela para a pessoa saber o que digitar. Repare, na saída acima, que Digite seu nome: e a resposta ficam na mesma linha — é assim mesmo, porque o convite não pula linha e o que você digita não é reimpresso pelo programa.

💡 Pense assim: o formulário no balcão

O atendente empurra o papel e espera. Ele não continua o atendimento até você preencher. input() é isso: o programa para ali, e só segue quando você aperta Enter.

É por isso que um programa que parece travado quase sempre está só esperando você digitar.

A pegadinha central: o que vem do teclado é texto

idade = input("Digite sua idade: ")
print("Voce digitou:", idade)
print("O tipo do que veio do teclado e:", type(idade))
Digite sua idade: Voce digitou: 20
O tipo do que veio do teclado e: <class 'str'>

A pessoa digitou 20, e o Python guardou "20" — texto, não número. É assim sempre, sem exceção, mesmo que a pessoa digite só dígitos.

E aqui está o problema que dá o tom da disciplina. Um programa que calcula quantos minutos o cliente fala por ano:

minutos = input("Quantos minutos: ")
print("No ano todo:", minutos * 12)
Quantos minutos: No ano todo: 137137137137137137137137137137137137

Este programa não deu nenhum erro. Ele rodou até o fim, imprimiu um resultado e não reclamou de nada. E o resultado está absurdamente errado: em vez de multiplicar 137 por 12, ele repetiu o texto "137" doze vezes — porque, com texto, é isso que * faz.

Guarde este exemplo. É o modo de falha mais perigoso que existe, e é o mesmo dos erros que um assistente de IA comete: o programa roda, parece certo e entrega o número errado. Quem tem que perceber é você.

Convertendo: int() e float()

Para calcular, converta o texto em número:

  • int(...) transforma em inteiro: "20" → 20;
  • float(...) transforma em decimal: "1.75" → 1.75.
idade = int(input("Digite sua idade: "))
print("Ano que vem voce faz", idade + 1)

altura = float(input("Digite sua altura em metros: "))
print("O dobro da sua altura e", altura * 2)
Digite sua idade: Ano que vem voce faz 21
Digite sua altura em metros: O dobro da sua altura e 3.5

Leia int(input("...")) de dentro para fora: primeiro o input roda e devolve o texto; depois o int pega esse texto e devolve o número. São duas instruções escritas uma dentro da outra.

Qual usar?

int para o que se conta: pessoas, minutos inteiros, portas, quantidade. float para o que se mede: altura, peso, preço, potência.

Na dúvida entre os dois, float é a escolha mais segura — ele aceita 20 e devolve 20.0, enquanto int recusa 1.75.

Quando a conversão não dá

int() só aceita um texto que seja mesmo um inteiro:

altura = int(input("Altura em metros: "))
print(altura)
ValueError: invalid literal for int() with base 10: '1.75'

ValueError quer dizer: o tipo está certo (é texto, como esperado), mas o valor não serve. invalid literal for int() é "isto não é um inteiro escrito". O mesmo acontece se a pessoa digitar vinte, ou usar vírgula em vez de ponto — que é o que a maioria das pessoas faz.

Por enquanto, isso derruba o programa. No capítulo 5 você vai aprender a verificar antes de converter.

Saída legível: f-strings

Juntar texto e valores com vírgulas funciona, mas fica difícil de ler quando a mensagem cresce. A f-string resolve: escreva a frase inteira e ponha os valores entre chaves.

equipamento = "ROTEADOR-LAB-01"
consumo = 12.5

# Sem f-string: a virgula junta os pedacos com um espaco.
print("O", equipamento, "consome", consumo, "W")

# Com f-string: o texto e escrito de uma vez, e o valor entra entre chaves.
print(f"O {equipamento} consome {consumo} W")

# O :.2f formata com duas casas decimais.
print(f"O {equipamento} consome {consumo:.2f} W")
O ROTEADOR-LAB-01 consome 12.5 W
O ROTEADOR-LAB-01 consome 12.5 W
O ROTEADOR-LAB-01 consome 12.50 W

Três detalhes:

  • a letra f vem antes das aspas — sem ela, as chaves saem impressas na tela como estão;
  • dentro das chaves vai o nome da variável, ou qualquer conta;
  • {consumo:.2f} formata com duas casas decimais. Isso importa para dinheiro: R$ 34.25 é uma resposta, R$ 34.249999999 não é.

💡 Pense assim: preencher lacunas

A f-string é um texto com espaços em branco, como um contrato: "O _ consome _ W". As chaves marcam as lacunas, e o Python preenche cada uma com o valor do momento.

O esqueleto de quase todo programa deste semestre

Junte as três partes do capítulo 1 e você tem a forma que vai repetir dezenas de vezes:

# 1. Entrada — pergunte e converta na mesma linha.
minutos = int(input("Quantos minutos falados: "))

# 2. Processamento — a conta, com nomes que dizem o que é.
preco_por_minuto = 0.25
total = minutos * preco_por_minuto

# 3. Saída — f-string, com formato quando for dinheiro.
print(f"Total a pagar: R$ {total:.2f}")

Quando um programa seu não funcionar, comece perguntando qual das três partes está faltando.

Erros comuns deste capítulo

Mensagem ou sintoma Causa provável
TypeError: can only concatenate str... faltou int() ou float() no input
ValueError: invalid literal for int() int() num texto com ponto decimal, vírgula ou letra
o número apareceu repetido muitas vezes multiplicou texto por número: faltou converter
a soma juntou os dígitos (2 e 3 → 23) os dois são texto: faltou converter
as chaves saíram impressas na tela faltou o f antes das aspas
o programa parece travado está esperando você digitar — clique no terminal
apareceram nove casas decimais faltou :.2f na f-string

Resumo

  • input() para o programa, espera a digitação e devolve sempre texto.
  • Converta antes de calcular: int() para o que se conta, float() para o que se mede.
  • Não converter nem sempre dá erro — às vezes dá um resultado errado em silêncio, que é pior.
  • ValueError é valor que não serve; TypeError é tipo que não combina.
  • f-string: f"texto {variavel}", com :.2f quando for dinheiro ou medida.
  • Todo programa tem entrada, processamento e saída. Quando emperrar, veja qual das três está faltando.

Para praticar

Lista 03 · Entrada e saída — programas completos, do tipo que você vai escrever o resto do semestre.