Entrada e Saída de Dados no Python

Cansado de programar?

Cansado(a) de quebrar a cabeça para aprender a programar Python de verdade?

Conheça a melhor e mais completa formação de Python e Django e sinta-se um programador verdadeiramente competente. Além de Python e Django, você também vai aprender Banco de Dados, SQL, HTML, CSS, Javascript, Bootstrap e muito mais!

Quero aprender Python e Django de Verdade! Quero aprender!
Suporte

Tire suas dúvidas diretamente com o professor

Suporte

Projetos práticos voltados para o mercado de trabalho

Suporte

Formação moderna com foco na prática profissional

Download do Artigo

Olá Pythonista!

Nesse post vamos falar sobre entrada de dados, saída de dados, a função input() do Python, a função print() e MUITO MAIS!

Com essa funções, podemos tornar um simples script Python muito mais dinâmico e poderoso, ao possibilitar a interação com o usuário.

Veremos como utilizar a função input para adquirir dados de entrada passados pelo usuário, assim como mostrar informações aos usuários com a função print.

Então, vamos nessa!

Para que servem input() e print() em Python? A função input() lê dados que o usuário digita no teclado e os devolve sempre como str (texto). Já a print() faz o contrário: mostra valores na tela (o terminal). Juntas, elas formam a entrada e a saída básicas de um programa, permitindo que ele interaja com quem o usa.

Vá Direto ao Assunto…

Entrada de dados com a Função input

A função input() pausa o programa, lê o que o usuário digita e devolve o conteúdo como uma string. É assim que pegamos dados de quem está usando o programa.

Vamos começar falando sobre entrada do usuário.

Esse é um artifício muito comum em programação, quando precisamos que o usuário passe ao programa algum tipo de dado.

Em Python, fazemos isso utilizando a função input(), que é literalmente ‘entrada’ em inglês.

A função input() recebe como parâmetro uma string que será mostrada como auxílio ao usuário, geralmente o informando que tipo de dado o programa está aguardando receber.

Vejo um exemplo:

1
input("Escreva seu nome: ")

Quando fazemos isso, o terminal ou prompt de comando irá:

  • Mostrar o texto "Escreva seu nome: " na tela; e
  • Aguardar até que o usuário digite alguma informação.

Após a entrada de dados pelo usuário, o programa irá continuar sua execução, passando para as instruções seguintes.

Ao rodar o script, no terminal aparecerá algo mais ou menos assim (o Lucas foi digitado pelo usuário):

1
Escreva seu nome: Lucas

O input() SEMPRE retorna uma string

Esse é o ponto que mais confunde quem está começando: não importa o que o usuário digite, o input() devolve sempre uma str (texto). Se a pessoa digitar 42, você recebe a string '42', e não o número 42.

Dá para confirmar isso com a função type(), que mostra o tipo de um valor:

1
2
valor = input("Digite um número: ")
print(type(valor))

Digitando 42, a saída é:

1
2
Digite um número: 42
<class 'str'>

Mesmo o usuário tendo digitado um número, o Python guardou como string. (Se o conceito de tipos ainda está nebuloso, vale revisar os tipos de variáveis no Python.)

Convertendo (cast) a entrada para número

Para tratar a entrada como número, você precisa converter a string explicitamente - isso se chama cast. As duas conversões mais comuns são:

  • int(input(...)) → para números inteiros (ex.: idade, quantidade);
  • float(input(...)) → para números com casas decimais (ex.: preço, altura).

Veja como ler uma idade e já usá-la em uma conta:

1
2
3
idade = int(input("Digite sua idade: "))

print("No ano que vem você terá", idade + 1, "anos.")

Digitando 30, a saída é:

1
2
Digite sua idade: 30
No ano que vem você terá 31 anos.

Repare que o int() “embrulha” o input(): primeiro o input() lê o texto, depois o int() o transforma em número inteiro. Com float() funciona igual, mas para valores decimais.

O erro clássico: somar str com int

Se você esquecer o cast e tentar somar a entrada (uma string) com um número, o Python levanta um TypeError. Esse é, provavelmente, o erro nº 1 de quem está aprendendo input().

Veja o que acontece ao tentar "23" + 5:

1
print("23" + 5)

O Python interrompe o programa com o erro:

1
2
3
Traceback (most recent call last):
  File "<string>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str

A mensagem é literal: o Python só sabe concatenar (juntar) uma str com outra str. Ele não tenta adivinhar se você queria somar ou colar os valores.

A correção é converter antes de somar - aí o + vira uma soma de verdade:

1
2
print("23" + 5)        # TypeError
print(int("23") + 5)   # 28

Com o cast, a segunda linha imprime:

1
28

Cuidado: somar dois inputs sem cast só junta as strings

Há um caso traiçoeiro: como input() sempre retorna str, o operador + entre dois inputs não soma - ele concatena (cola) os textos. O programa não dá erro, mas o resultado fica errado.

Imagine uma “calculadora” que pede dois números:

1
2
3
4
a = input("Primeiro número: ")
b = input("Segundo número: ")

print(a + b)

Digitando 2 e depois 3, em vez de 5 você obtém:

1
2
3
Primeiro número: 2
Segundo número: 3
23

Faz sentido: "2" + "3" é a mesma coisa que colar dois textos, resultando em "23". Para somar de verdade, basta converter cada entrada com int():

1
2
3
4
a = int(input("Primeiro número: "))
b = int(input("Segundo número: "))

print(a + b)

Agora a saída é a soma correta:

1
2
3
Primeiro número: 2
Segundo número: 3
5

ValueError: quando o texto não é um número

Há um detalhe importante: o int() e o float() só convertem textos que realmente representam números. Se o usuário digitar letras (ou você passar um texto não-numérico), o Python levanta um ValueError.

1
print(int("abc"))

O resultado é:

1
2
3
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'abc'

Ou seja: "abc" não é um número inteiro válido. Em programas reais, é comum proteger essa conversão com tratamento de erros (try/except), mas isso é assunto para um próximo post. :wink:

Saída de dados com a Função print

A função print() mostra valores na tela (o terminal) e aceita parâmetros para controlar como esses valores aparecem. É a função para imprimir dados em Python.

Ela é responsável por mostrar valores em seu terminal:

1
print('Olá Mundo')

Imprime a string no terminal:

1
Olá Mundo

Além do que você quer imprimir, o print() aceita alguns parâmetros que controlam o formato da saída. Os três mais usados são:

Parâmetro O que faz Padrão
sep Separa os itens passados (separados por vírgula) ' ' (espaço)
end Define o caractere colocado no fim da impressão '\n' (nova linha)
flush Força a saída a aparecer na hora, sem esperar buffer False

Vamos ver cada um na prática.

Está curtindo esse conteúdo? :thumbsup:

Que tal receber 30 dias de conteúdo direto na sua Caixa de Entrada?

Sua assinatura não pôde ser validada.
Você fez sua assinatura com sucesso.

Assine as PyDicas e receba 30 dias do melhor conteúdo Python na sua Caixa de Entrada: direto e sem enrolação!

O parâmetro sep= da função print

O sep= define qual caractere fica entre os itens que você passa ao print separados por vírgula.

Por padrão, quando utilizamos virgula para separar os itens, a função print utiliza espaços para separar cada saída.

Porém, podemos utilizar o parâmetro sep= para definir um caractere de separação.

Entenda no exemplo a seguir:

1
2
3
print('Dia', 'Mês', 'Ano', sep='/')
print('ontem', 'Hoje', 'Amanhã', sep='-')
print("B", "n", "n", ".", sep='a')

Observe a saída com os caracteres definidos:

1
2
3
Dia/Mês/Ano
ontem-Hoje-Amanhã
Banana.

Perceba que a função print incluiu o caracter indicado em sep= como separador dos dados a serem mostrados ao usuário!

O parâmetro end= da função print

O end= controla o que vem depois do que foi impresso - é ele que decide se a próxima impressão fica em uma nova linha ou continua na mesma.

Por padrão, a função print utiliza a quebra de linha (\n) como último caracter.

O parâmetro end= é responsável por alterar esse comportamento, possibilitando ao desenvolvedor trocar qual caracter será adicionado ao final do dado impresso no terminal.

Vamos entender melhor no exemplo a seguir:

1
2
3
4
5
6
7
8
9
10
11
# Exemplo com fim de linha sem nenhum caracter
print('Vamos estudar Na ', end='')
print('Python Academy')

# Exemplo com fim de linha igual à ->
print('As rosas são', end=' -> ')
print('Vermelhas')

# Exemplo com fim de linha igual à :
print("Quantidade", end=': ')
print(40)

Dessa forma, a saída será:

1
2
3
Vamos estudar Na Python Academy
As rosas são -> Vermelhas
Quantidade: 40

O parâmetro flush= da função print

O flush= força o texto a aparecer na tela imediatamente, em vez de ficar aguardando em um buffer interno.

Por padrão (flush=False), o Python pode segurar a saída em memória e só exibi-la quando “junta o suficiente” ou quando o programa encontra uma quebra de linha. Na maioria dos casos isso passa despercebido - mas faz diferença quando você imprime aos poucos, sem \n, e quer ver o progresso na hora (como uma barra de carregamento).

Veja um exemplo que imprime pontinhos um a um:

1
2
3
4
5
6
7
import time

print('Carregando', end='', flush=True)
for _ in range(3):
    time.sleep(1)
    print('.', end='', flush=True)
print(' Pronto!')

Com flush=True, cada ponto aparece na tela na hora em que é impresso (a cada segundo). Ao final, a saída completa é:

1
Carregando... Pronto!

Sem o flush=True, todos os pontos só apareceriam de uma vez, no fim - o que estragaria o efeito de progresso.

Imprimindo variáveis com f-strings no print

A forma mais legível de juntar texto e variáveis dentro do print() é usar uma f-string - uma string iniciada por f em que você coloca variáveis entre { }:

1
2
3
4
nome = 'Erick'
idade = 30

print(f'Olá, {nome}! Você tem {idade} anos.')

A saída é:

1
Olá, Erick! Você tem 30 anos.

Repare que, dentro da f-string, o {idade} já mostra o número sem precisar de cast - o Python cuida da conversão para texto na hora de imprimir. Para se aprofundar nesse recurso, veja o guia completo de f-strings no Python.

:bulb: Estou construindo o Ebookr.ai, uma plataforma onde você cria ebooks profissionais com IA sobre qualquer assunto - do zero ao PDF pronto, com capas e infográficos gerados automaticamente. Dá uma olhada!

Juntando entrada e saída com input e print

Combinando input() e print() você já consegue montar programas interativos: pede um dado, processa e mostra o resultado.

Agora que conhecemos as duas funções, podemos juntá-las para fazer programas mais completos.

Vamos armazenar o nome do usuário utilizando input e mostrar o dado para ele com print.

Podemos juntar e imprimir vários itens em print(), basta separá-los por virgula, como no exemplo abaixo:

1
2
3
nome = input("Escreva seu nome: ")

print('Seu nome é:', nome)

Perceba que a função input retorna para nós aquilo que o usuário digitou. Portanto, nesse caso, o que o usuário digitar será passado à variável nome!

Observe a saída:

1
2
Escreva seu nome: Erick
Seu nome é: Erick

Quando você precisar pedir vários dados em sequência - ou repetir uma pergunta até o usuário responder corretamente - vale combinar o input() com as estruturas de repetição (os loops).

Utilizando print para gravar dados em arquivos

A função print() também funciona para gravar dados em arquivos.

Para isso, utilizamos o parâmetro file= da função print.

Também precisamos de um arquivo aberto, o que é feito utilizando-se a função open.

Veja o exemplo abaixo:

1
2
3
with open('arquivo.txt', 'w') as arquivo:
    print("Escreva isso dentro do arquivo,", file=arquivo)
    print("Escreva outra linha dentro do arquivo.", file=arquivo)

Se abrirmos o arquivo.txt, veremos o seguinte conteúdo:

1
2
Escreva isso dentro do arquivo,
Escreva outra linha dentro do arquivo.

Conclusão

Vimos nesse post como utilizar as funções input e print e como utilizá-las para pegar dados do usuários e mostrar dados para o usuário.

O ponto mais importante para guardar: o input() sempre retorna str, então, sempre que precisar de número, faça o cast com int() ou float() - caso contrário, você esbarra no famoso TypeError. No print(), lembre que sep, end e flush dão controle total sobre a saída, e que f-strings deixam tudo mais legível.

Esse é um conhecimento básico que todo programador Python, os chamados Pythonistas, devem saber!

Se ficou com alguma dúvida, fique à vontade para deixar um comentário no box aqui embaixo! Será um prazer te responder! :wink:

Perguntas frequentes

O input() retorna string em Python?

Sim. O input() sempre retorna uma str, mesmo quando o usuário digita números. Por isso input() de 42 vira '42' (texto), e não o número 42. Para usar como número, faça o cast com int() ou float().

Como ler um número com input() no Python?

Envolva o input() com a função de conversão: use idade = int(input('Idade: ')) para inteiros e preco = float(input('Preço: ')) para decimais. Assim o texto digitado vira número e já pode entrar em contas.

Como imprimir sem quebrar linha com print() em Python?

Use o parâmetro end. Por padrão o print() termina com \n (nova linha); passando end='' os próximos print continuam na mesma linha. Ex.: print('Carregando', end='').

Como separar valores no print() com sep em Python?

O parâmetro sep define o que vai entre os itens separados por vírgula. Por padrão é um espaço; com print('Dia', 'Mês', 'Ano', sep='/') a saída fica Dia/Mês/Ano.

Como mostrar uma variável junto com texto no print()?

Você pode passar vários itens separados por vírgula, como print('Seu nome é:', nome), ou usar uma f-string: print(f'Seu nome é: {nome}'). A f-string costuma ser mais legível.

Começe agora sua Jornada na Programação!

Não deixe para amanhã o sucesso que você pode começar a construir hoje!

#newsletter Olá :wave: Curtiu o artigo? Então faça parte da nossa Newsletter! Privacidade Não se preocupe, respeitamos sua privacidade. Você pode se descadastrar a qualquer momento.