Pular para o conteúdo

Fundamentos

Entrada e saída em Python: print() e input() na prática

Aprenda a mostrar resultados com print() e a ler dados do teclado com input(): sep, end, f-strings, o texto que input() devolve e os erros mais comuns.

Por Prof. Rodrigo Faustino · Atualizado em · 12 min de leitura

O print() mostra valores no Serial, o canal de texto que o programa usa para falar com quem o executa. O input() faz o contrário: para o programa, espera a pessoa digitar uma linha e apertar Enter, e devolve o que foi digitado. Há uma regra que vale guardar desde já: o input() devolve sempre texto, mesmo que a pessoa digite só números.

Os dois comandos formam a fronteira do programa com o mundo. Tudo o que um programa recebe entra por alguma porta de entrada, e tudo o que ele produz sai por alguma porta de saída. Vimos no artigo O que é um algoritmo e como o Python executa seu programa que todo algoritmo tem uma saída. Aqui você aprende a controlar essa saída e a abrir a porta de entrada, de modo que o mesmo programa sirva para valores diferentes sem precisar ser reescrito.

O problema: o programa que só sabe uma resposta

Um programa que calcula o dobro de 21 tem o 21 escrito dentro do código. Funciona, mas só resolve esse problema. Para calcular o dobro de outro número, alguém precisa abrir o arquivo, achar o 21, trocar o valor e rodar de novo. Com a entrada de dados, o programa pergunta, recebe a resposta e calcula com ela. O código não muda e a resposta muda a cada execução.

O mesmo vale para a saída. Um programa que calcula o troco de uma compra mas não mostra nada é inútil para quem o usa, e um que mostra 14.0 solto, sem dizer o que é, obriga a pessoa a adivinhar. Montar uma mensagem clara é parte do trabalho, e o print() tem recursos para isso que a maioria dos iniciantes só descobre depois de meses.

FastMindAssistente de IA local

A IA que lembra da sua vida e mora no seu computador

  • Memória de longo prazo com a fonte de cada resposta
  • Funciona offline: seus dados ficam no seu PC
  • Lê PDFs, slides, fotos e gravações de reunião
Baixar grátis para Windows

Plano Essencial grátis para sempre

O uso mais simples é passar um valor entre parênteses. Texto vai entre aspas, e números e variáveis vão sem aspas. Para mostrar vários valores na mesma linha, separe-os por vírgula: o print() coloca um espaço entre eles.

print("a", "b", "c")
print("a", "b", "c", sep="-")
print("carregando", end="")
print("...")
print()
print("fim")

Rode o exemplo e compare cada linha de código com a saída. A primeira mostra a b c. A segunda usa o parâmetro sep para trocar o espaço por um hífen. A terceira usa o end para não pular de linha no final, e por isso a quarta continua na mesma linha e a tela mostra carregando.... O print() sem nada dentro só pula uma linha, e é assim que se deixa uma linha em branco na saída.

Dois painéis com o mesmo print de três valores a, b e c. No primeiro, sem opções, a saída é a b c com um espaço entre os valores e uma nova linha no final. No segundo, com sep igual a hífen e end igual a ponto de exclamação, a saída é a-b-c! sem nova linha.
O print() separa os valores com um espaço e termina com nova linha. As opções sep e end trocam essas duas coisas.

O sep (de separador) e o end (de final) são parâmetros nomeados, que se escrevem sempre depois dos valores. Os valores padrão são um espaço e uma nova linha. Trocar o end é útil quando você quer escrever uma pergunta e deixar o cursor na mesma linha, ou montar uma linha de saída em pedaços dentro de um laço, assunto do módulo de repetição.

Aspas, aspas dentro de aspas e caracteres especiais

Texto pode ficar entre aspas duplas ou aspas simples, tanto faz, desde que a abertura e o fechamento sejam iguais. Isso resolve o problema do texto que contém aspas: se a frase tem aspas duplas, envolva tudo em aspas simples, e vice-versa. Quando as duas aparecem, a barra invertida \ avisa que o próximo caractere é parte do texto.

print("Ela disse: \"oi\"")
print('aspas "duplas" dentro')
print("linha 1\nlinha 2")
print("coluna\tcoluna")

O \n é uma quebra de linha dentro do texto e o \t é uma tabulação, um espaço largo que alinha colunas. Eles existem porque o teclado não tem uma tecla para escrever "pule uma linha aqui" no meio de uma frase.

Três jeitos de montar uma mensagem

Para juntar texto e variáveis numa só frase, o Python oferece caminhos diferentes. Cada um tem seu lugar.

nome = "Ana"
idade = 17
print("Nome:", nome, "Idade:", idade)
print("Nome: " + nome + ", Idade: " + str(idade))
print(f"{nome} tem {idade} anos")
preco = 3.5
print(f"Preço: R$ {preco:.2f}")

A primeira forma usa vírgulas e deixa o print() converter cada valor sozinho. É a mais fácil e serve para quase tudo no começo. A segunda usa o + para colar pedaços de texto, e exige que cada pedaço já seja texto: por isso a idade passa por str(). A terceira é a f-string, um texto com um f antes das aspas em que o que estiver entre chaves é substituído pelo valor da variável. Ela deixa a frase legível, quase como se fosse escrita à mão.

Repare na última linha. O trecho :.2f dentro das chaves manda mostrar o número com duas casas decimais, e por isso 3.5 aparece como 3.50. É o formato certo para dinheiro, e você vai usá-lo muitas vezes.

input(): lendo o que a pessoa digita

Quando o Python chega numa linha com input(), o programa para ali. Nenhuma linha seguinte roda até que a pessoa digite algo e aperte Enter. O texto entre parênteses, chamado de prompt, é mostrado antes da espera para dizer o que se espera que ela digite.

nome = input("Qual é o seu nome? ")
print("Olá,", nome)
print("Olá, " + nome + "!")

Se alguém digitar Ana, o Serial fica assim:

Qual é o seu nome? Ana
Olá, Ana
Olá, Ana!

Este exemplo não tem o botão "Abrir no simulador" porque ele depende de uma resposta sua. Copie o código para o editor do PyPlaca, clique em Executar e digite no campo Entrada que fica abaixo da aba Serial. O que você digita aparece ao lado do prompt, como num terminal de verdade.

Quatro etapas em sequência. O programa chega à linha com input, para e espera, recebe o texto Ana digitado pela pessoa e segue para a próxima linha. Embaixo, quatro quadros do Serial mostram o prompt Nome com o cursor, a pessoa digitando Ana, o texto devolvido e a saída Olá, Ana.
O input() congela o programa até a pessoa apertar Enter. O texto digitado volta para a variável, e só então a próxima linha roda.

Em cada passo, o programa fica congelado durante a espera e retoma exatamente do ponto onde parou. Na placa real, a entrada vem pelo terminal serial do computador, conectado pelo cabo USB, e funciona do mesmo jeito. Um programa com input() rodando numa ESP32 sem nenhum computador conectado ficaria esperando para sempre, porque não existe teclado ligado a ela. Em projetos de verdade, quem faz o papel da entrada são os botões e os sensores, e essa é a razão de o input() ser mais uma ferramenta de aprendizado e de teste do que de produto final. A trilha de entradas digitais mostra como ler um botão.

O prompt e o espaço no final

O prompt precisa terminar com um espaço, ou o texto digitado cola nele. Com input("Nome:"), a saída vira Nome:Ana, sem separação. É um detalhe de acabamento e não quebra nada, mas deixa o programa com cara de descuidado. Escreva input("Nome: "), com o espaço dentro das aspas.

Também existe input() sem prompt nenhum. Funciona, mas a pessoa fica olhando para uma tela em branco sem saber que o programa está esperando algo. Quando não houver prompt, use um print() antes para explicar.

O que o input() devolve é sempre texto

Este é o ponto que mais derruba quem está começando. Se a pessoa digita 5, o input() não devolve o número 5. Devolve o texto "5", um caractere entre aspas, que o computador trata como qualquer outra palavra. Textos e números respondem de jeitos diferentes às mesmas contas.

Duas colunas comparam as mesmas contas com texto e com número. Com texto, 5 mais 3 vira 53, 5 vezes 3 vira 555 e o tipo é str. Com números, 5 mais 3 dá 8, 5 vezes 3 dá 15 e o tipo é int. Uma faixa embaixo mostra idade igual a int de input como a conversão de uma coluna para a outra.
O input() devolve a coluna da esquerda. O int() leva o valor para a coluna da direita, onde as contas funcionam.

Com texto, o + junta pedaços e o * repete. Com número, fazem a conta. O código abaixo mostra a diferença com valores fixos, sem precisar digitar nada:

a = "5"
b = "3"
print(a + b)
print(a * 3)
print(int(a) + int(b))
print(type(a), type(int(a)))

A saída mostra 53, depois 555, depois 8, e por fim <class 'str'> <class 'int'>. A função type() revela o tipo de um valor, e é a primeira ferramenta para desconfiar quando uma conta der um resultado estranho.

A conversão que resolve o problema é o int(), que transforma um texto de dígitos em número inteiro, e o float(), que faz o mesmo para números com parte decimal. Normalmente você aplica a conversão na mesma linha em que lê o dado:

a = int(input("a: "))
b = int(input("b: "))
print(a + b)

Com as entradas 5 e 3, o Serial mostra a: 5, b: 3 e 8. A função input() fica por dentro, devolve o texto, e o int() por fora o transforma em número antes de guardar na variável. O artigo sobre conversão de tipos, mais adiante na série, trata das regras dessas funções com mais calma.

Uma diferença com o Python do computador aparece quando a conversão falha. Para int("abc"), o MicroPython escreve ValueError: invalid syntax for integer with base 10. O Python de um computador comum escreve invalid literal for int() with base 10: 'abc', e mostra o texto que causou o problema. O MicroPython não mostra esse texto. A causa é a mesma nos dois casos: o texto não tem a forma de um número.

FastTeacherPara professores

Da ementa ao semestre planejado

  • Plano de ensino e calendário montados sozinhos
  • Diário de aulas pronto para colar no SIGA
  • Slides e listas de exercícios com gabarito
Conhecer o FastTeacher

Versão Community grátis · Windows

Erros comuns de quem está começando

Os cenários abaixo são os que mais costumam aparecer nas primeiras aulas de laboratório. Em quase todos, o programa parece estar certo para quem o escreveu.

A soma que dá 53

O aluno pede dois números, soma e vê 53. Ele confere a conta de cabeça, olha o código, vê que usou o + e conclui que o computador errou. Na verdade o computador fez exatamente o que foi pedido: juntou dois textos. O erro é traiçoeiro porque não gera mensagem nenhuma, e o programa termina como se estivesse tudo certo. Quando o resultado de uma soma parecer "colado", pense em type() e em int().

A nota com vírgula

O aluno digita 7,5, que é como a nota aparece no boletim, e o programa quebra com ValueError: invalid syntax for number. A forma de escrever números em Python usa o ponto como separador decimal, e a vírgula não é reconhecida pelo float(). Duas saídas existem: pedir que a pessoa digite com ponto, ou trocar a vírgula antes de converter.

texto = input("Nota: ")
nota = float(texto.replace(",", "."))
print(nota)
print(nota * 2)

Com a entrada 7,5, o Serial mostra Nota: 7,5, 7.5 e 15.0. O método replace() troca todos os pedaços de texto iguais ao primeiro argumento pelo segundo, e quem o chama é o próprio texto, antes do float() receber o resultado.

Um caso parecido é digitar 7.5 quando o programa converte com int(). O int() só aceita dígitos inteiros, e int("7.5") dá o mesmo ValueError. Se o valor pode ter casas decimais, use float().

O Enter sem digitar nada

O aluno aperta Enter para "ver o que acontece" e o programa cai. Quando a pessoa não digita nada, o input() devolve um texto vazio, "". O int("") não tem dígito algum para converter e dá ValueError, com a mesma mensagem do caso das letras. O programa só vai ficar à prova desse problema quando você aprender a tratar erros, no último módulo da série, mas já vale testar com o campo vazio para ver como o seu código se comporta.

Número colado com texto

É comum escrever print("Total: " + total) quando total é um número. O Python reclama, na linha do print, com TypeError: unsupported types for __add__: 'str', 'float'. O + entre texto e número não sabe o que fazer. Há três saídas, e todas funcionam: converter com str(total), usar a vírgula (print("Total:", total)) ou usar uma f-string (print(f"Total: {total}")). Na prática, as três mostram Total: 14.0 para o mesmo valor.

O nome entre aspas que não é variável

Outro cenário clássico: o aluno escreve print("Olá, nome") e o programa mostra Olá, nome, literalmente, em vez do nome digitado. As aspas dizem "isto é texto, copie como está", então a palavra nome dentro delas é só uma palavra. O erro vira o oposto quando as aspas faltam: print(Ana) procura uma variável chamada Ana e termina em NameError. A regra é simples: texto vai entre aspas, variável vai sem.

O print sem parênteses

Vídeos e apostilas antigos de Python ensinavam print "oi", que era a sintaxe da versão 2 da linguagem. Quem copia desse material recebe SyntaxError: invalid syntax, e nenhuma linha do programa roda, como vimos no artigo anterior. Na versão atual, print é uma função como as outras e precisa de parênteses.

Exercício: dividir a conta do restaurante

Escreva um programa que pergunte o nome de quem está pagando, o valor total da conta e o número de pessoas, e mostre quanto cada um paga, com duas casas decimais. Pense primeiro nos passos em português: três entradas, uma divisão, uma saída.

Uma resposta possível:

nome = input("Nome: ")
conta = float(input("Valor da conta: "))
pessoas = int(input("Pessoas: "))
cada = conta / pessoas
print(f"{nome}, cada um paga R$ {cada:.2f}")

Com as entradas Maria, 90 e 4, o Serial mostra:

Nome: Maria
Valor da conta: 90
Pessoas: 4
Maria, cada um paga R$ 22.50
A IDE do PyPlaca com o programa da divisão da conta no editor. No Serial aparecem as perguntas Nome, Valor da conta e Pessoas, cada uma com a resposta digitada (Maria, 90 e 4), e a última linha mostra Maria, cada um paga R$ 22.50.
O exemplo da conta rodando no simulador: cada input() espera a resposta no Serial antes de seguir para a linha de baixo.

A conta pode ter centavos, por isso usa float(). O número de pessoas é sempre inteiro, por isso usa int(). Se você escrevesse print("Sem formatar:", cada), a saída seria 22.5, sem o zero final, e a f-string com :.2f é o que garante 22.50.

Para o resultado sair com vírgula, como se escreve no Brasil, troque o ponto depois de formatar: f"{cada:.2f}".replace(".", ",") produz 22,50. Tente também mudar o programa para mostrar a conta total no mesmo texto, e depois pense no que acontece se alguém digitar 0 pessoas. A resposta para esse último caso vem quando chegarmos às decisões, com um if que protege a divisão.

Perguntas frequentes

Posso pedir um número e já usar como número?

Não direto. O input() entrega texto, e a conversão com int() ou float() é um passo explícito que você escreve. A forma mais comum é envolver o input() pela conversão na mesma linha, como em int(input("Idade: ")).

O que acontece se eu digitar espaços antes ou depois do texto?

O input() guarda os espaços, porque eles fazem parte do que foi digitado. Se a pessoa digita Ana , a variável recebe esses mesmos espaços. O método strip() remove os que sobram nas pontas, e input().strip() é um hábito útil para nomes e códigos.

Dá para usar input() sem o campo de entrada do PyPlaca?

Dá, em qualquer ambiente de Python. No computador, o input() lê do teclado pelo terminal. Na ESP32, o MicroPython lê da porta serial USB, a mesma por onde sai o print(), e por isso um terminal serial conectado à placa também funciona. A ficha da ESP32 DevKit V1 mostra a placa que o simulador reproduz.

São as mais simples. Num programa para a ESP32, a saída pode ser também um LED, um display ou uma mensagem pela rede, e a entrada pode ser um botão, um sensor ou uma mensagem recebida. A lógica é a mesma: receber, processar e mostrar.

Para continuar

A trilha Lógica com Python tem desafios que usam exatamente o que foi visto aqui. O Eco do nome é o mais curto, só ler e mostrar. O Informação dupla pede dois valores na mesma saída, e o Dobro de um número exige a conversão com int(). Para praticar mensagens montadas, tente a Saudação customizada.

O próximo assunto da série são as variáveis e os tipos de dados: int, float, str e bool, e o que cada um aceita. Para ver o print() trabalhando junto com o hardware, o artigo Primeiros passos com MicroPython na ESP32 usa o Serial para conferir um LED piscando.

Para praticar no PyPlaca

Trilhas

Lições

Fichas de componentes

FastTeacherPara professores

Da ementa ao semestre planejado

  • Plano de ensino e calendário montados sozinhos
  • Diário de aulas pronto para colar no SIGA
  • Slides e listas de exercícios com gabarito
Conhecer o FastTeacher

Versão Community grátis · Windows

FastMindAssistente de IA local

A IA que lembra da sua vida e mora no seu computador

  • Memória de longo prazo com a fonte de cada resposta
  • Funciona offline: seus dados ficam no seu PC
  • Lê PDFs, slides, fotos e gravações de reunião
Baixar grátis para Windows

Plano Essencial grátis para sempre

FastTeacherPara professores

Da ementa ao semestre planejado

  • Plano de ensino e calendário montados sozinhos
  • Diário de aulas pronto para colar no SIGA
  • Slides e listas de exercícios com gabarito
Conhecer o FastTeacher

Versão Community grátis · Windows