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.
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))
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:
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)
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:
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")
Três detalhes:
- a letra
fvem 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.249999999nã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:.2fquando 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.