Sua dose diária de programação

Conceito, 3 exemplos e 3 exercícios: uma pequena conquista de cada vez.

✦   Lição

Seu primeiro programa

Um programa em Python é um arquivo de texto com extensão .py que o interpretador lê e executa de cima para baixo, uma linha por vez. Não há etapa de compilação separada: você salva o arquivo e roda python3 arquivo.py no terminal.

Python Fundamentos Iniciante 3 exemplos + 3 exercícios
42 lições publicadas 10 linguagens novas lições todo dia útil
Python / Fundamentos

Seu primeiro programa

por Sutton Ashford
Iniciante

Entenda o conceito

Um programa em Python é um arquivo de texto com extensão .py que o interpretador lê e executa de cima para baixo, uma linha por vez. Não há etapa de compilação separada: você salva o arquivo e roda python3 arquivo.py no terminal.

A primeira ferramenta de todo programa é a função print(), que escreve valores na tela. Ela aceita vários valores separados por vírgula e os junta com um espaço; o parâmetro sep troca esse separador e o parâmetro end troca o que vem no fim (por padrão, a quebra de linha \n).

Linhas que começam com # são comentários e são ignoradas pelo Python. Conforme o programa cresce, é comum organizá-lo em funções e chamar uma main() dentro de if __name__ == "__main__":, para que o código só rode quando o arquivo é executado diretamente.

↳ Pontos-chave
  • Rode um programa com python3 arquivo.py; o código é executado de cima para baixo.
  • print() escreve na tela e, ao terminar, pula de linha; print() vazio imprime uma linha em branco.
  • Valores separados por vírgula no print() saem separados por espaço; sep troca o separador.
  • end troca o final da linha: end="" mantém o próximo print() na mesma linha.
  • # inicia um comentário; if __name__ == "__main__": protege a chamada da main().

Do conceito à prática

3 exemplos para ver a ideia funcionando.

01Olá, loja: textos, números e comentários

ola_loja.py
# ola_loja.py: o primeiro programa da nossa loja.
# Linhas que começam com # são comentários: o Python as ignora.

# print() escreve um texto na tela e pula para a linha seguinte.
print("Olá! Bem-vindo à Loja do Bairro.")

# Textos (strings) podem usar aspas duplas ou simples.
print('Hoje temos frutas, pães e café.')

# print() sem nada imprime uma linha em branco.
print()

# Números não precisam de aspas.
print(3)
print(2.5)

# O Python executa as linhas de cima para baixo, uma por vez.
print("Obrigado pela visita!")
print("Volte sempre.")

O exemplo mostra o essencial: cada chamada a print() escreve um valor e pula para a linha seguinte. Textos vão entre aspas (duplas ou simples, tanto faz), números vão sem aspas, e print() sem argumentos gera uma linha em branco.

Os comentários com # explicam o código para quem lê, mas o Python os ignora. Repare que a saída aparece exatamente na ordem das linhas do arquivo.

02Etiqueta de produto com sep e end

etiqueta.py
# etiqueta.py: vários valores no mesmo print().

# Com vírgulas, o print() junta os valores separando-os por um espaço.
print("Produto:", "Café torrado")
print("Preço:", 18.9, "reais")
print("Unidades em estoque:", 12)

print()

# sep troca o separador colocado entre os valores.
print("café", "pão", "leite", sep=" | ")
print("2026", "10", "13", sep="-")

print()

# end troca o que vem no fim: o padrão é a quebra de linha "\n".
print("Carregando estoque", end="")
print(".", end="")
print(".", end="")
print(".")
print("Pronto!")

# Os dois juntos: valores separados por vírgula e um ponto final.
print("maçã", "banana", "uva", sep=", ", end=".\n")

Quando você passa vários valores ao print(), ele os junta com um espaço, inclusive números misturados com texto. O parâmetro sep troca esse espaço por outro separador, como " | " ou "-".

O parâmetro end controla o fim da linha. Com end="", o próximo print() continua na mesma linha, o que permite montar "Carregando estoque..." aos poucos. Na última linha, sep e end trabalham juntos.

03Recibo organizado em funções com main()

recibo.py
# recibo.py: o programa organizado em funções, com uma main().

LINHA = "-" * 28  # o operador * repete o texto 28 vezes


def imprimir_cabecalho():
    """Mostra o nome da loja entre duas linhas."""
    print(LINHA)
    print("LOJA DO BAIRRO")
    print(LINHA)


def imprimir_itens():
    """Mostra cada item com o preço depois de dois-pontos."""
    print("2x Pão francês", "R$ 1,50", sep=": ")
    print("1x Café torrado", "R$ 18,90", sep=": ")
    print("3x Banana", "R$ 2,10", sep=": ")


def main():
    imprimir_cabecalho()
    imprimir_itens()
    print(LINHA)
    print("Total", "R$ 22,50", sep=": ")
    print("Obrigado e até logo!")


# Só chama main() quando o arquivo é executado diretamente
# (python3 recibo.py), e não quando é importado por outro arquivo.
if __name__ == "__main__":
    main()

Aqui o mesmo print() ganha estrutura: cada parte do recibo fica numa função definida com def, e a main() chama essas partes na ordem certa. A constante LINHA usa "-" * 28 para repetir o traço sem digitá-lo 28 vezes.

O bloco if __name__ == "__main__": só chama main() quando o arquivo é executado com python3 recibo.py. Se outro arquivo importar este, as funções ficam disponíveis sem imprimir nada sozinhas. É o esqueleto que você vai reaproveitar nos próximos programas.


Agora é com você

Tente resolver no rascunho antes de abrir a resposta. Os códigos não são executados nesta página.

01Ficha de um livro da bibliotecaFácil

Escreva um programa que mostre a ficha de um livro do acervo da Biblioteca Municipal, uma informação por linha, exatamente como na saída esperada.

↳ Requisitos
  • A primeira linha mostra apenas Biblioteca Municipal.
  • As linhas seguintes usam print() com dois valores separados por vírgula (rótulo e valor).
  • O ano 1899 é passado como número, sem aspas.
  • A saída tem exatamente 5 linhas.
código inicial
# ficha.py: ficha de um livro do acervo.
print("Biblioteca Municipal")
# complete com livro, autor, ano e situação
saída esperada
Biblioteca Municipal
Livro: Dom Casmurro
Autor: Machado de Assis
Ano: 1899
Situação: disponível
Ver dica

Ao separar dois valores por vírgula, o print() já coloca um espaço entre eles: não é preciso pôr espaço no fim do rótulo.

Ver resposta
# ficha.py: ficha de um livro do acervo.
print("Biblioteca Municipal")
print("Livro:", "Dom Casmurro")
print("Autor:", "Machado de Assis")
print("Ano:", 1899)  # número, sem aspas
print("Situação:", "disponível")

Passo a passo

  1. O comentário na primeira linha diz o que o arquivo faz; o Python o ignora.
  2. print("Biblioteca Municipal") escreve o título e pula para a linha seguinte.
  3. print("Livro:", "Dom Casmurro") passa dois valores; o print() coloca um espaço entre eles, gerando Livro: Dom Casmurro.
  4. A linha do autor segue o mesmo padrão de rótulo e valor.
  5. print("Ano:", 1899) mistura texto e número: o print() converte o número para texto sozinho.
  6. A última linha usa acentos (Situação, disponível) normalmente, porque o Python 3 trabalha com UTF-8.

Por que funciona

Cada chamada a print() produz uma linha completa, porque o final padrão é a quebra de linha. Como o programa roda de cima para baixo, a ordem das linhas do código é a ordem da saída.

Separar rótulo e valor por vírgula deixa o print() cuidar do espaço e permite passar números sem transformá-los em texto antes.

Erros comuns

  • print("Ano: ", 1899): o espaço extra no rótulo soma com o espaço do separador e a saída vira Ano: 1899, com dois espaços. Tire o espaço de dentro das aspas.
  • print("Ano:" + 1899): dá TypeError, porque + não junta texto com número. Use a vírgula.
  • Print("Livro:", "Dom Casmurro"): dá NameError; o Python diferencia maiúsculas de minúsculas e a função se chama print.

Outra forma de resolver

Dá para escrever cada linha como um único texto, por exemplo print("Ano: 1899"). Funciona, mas deixa de usar o número como número; a forma com vírgula é preferível quando o valor vai mudar ou vir de uma variável.

Saída esperada

Biblioteca Municipal
Livro: Dom Casmurro
Autor: Machado de Assis
Ano: 1899
Situação: disponível

02Cartão de receita com sep e endMédio

Monte o cartão da receita de bolo de cenoura usando os parâmetros sep e end do print(). Os ingredientes e os passos do preparo devem ser passados como valores separados, não como um texto único.

↳ Requisitos
  • Os cinco ingredientes são passados num único print() com sep=", ".
  • Os rótulos Ingredientes: e Modo de preparo: são impressos com end="", deixando a lista na mesma linha.
  • Os passos do preparo usam sep=" -> ".
  • Os números 8, 180 e 40 são passados sem aspas, e o ponto final da última linha vem do end.
código inicial
# receita.py: cartão de receita com sep e end.
print("Bolo de cenoura (", 8, " porções)", sep="")
saída esperada
Bolo de cenoura (8 porções)
Ingredientes: cenoura, ovos, açúcar, farinha, óleo
Modo de preparo: bater -> assar -> esfriar
Forno a 180 graus por 40 minutos.
Ver dica

Imprima o rótulo com end="" e, no print() seguinte, passe os itens um a um com o sep adequado.

Ver resposta
# receita.py: cartão de receita com sep e end.
print("Bolo de cenoura (", 8, " porções)", sep="")

# end="" mantém o cursor na mesma linha para o próximo print()
print("Ingredientes: ", end="")
print("cenoura", "ovos", "açúcar", "farinha", "óleo", sep=", ")

print("Modo de preparo: ", end="")
print("bater", "assar", "esfriar", sep=" -> ")

# o ponto final entra pelo end, no lugar da quebra de linha padrão
print("Forno a", 180, "graus por", 40, "minutos", end=".\n")

Passo a passo

  1. A primeira linha usa sep="" para colar o texto, o número 8 e o resto sem espaços extras; os espaços que aparecem estão dentro das aspas.
  2. print("Ingredientes: ", end="") escreve o rótulo e não pula de linha, porque o final passou a ser um texto vazio.
  3. O print() seguinte recebe os cinco ingredientes e os separa com ", ", continuando na mesma linha do rótulo.
  4. O modo de preparo repete a ideia, agora com sep=" -> " para indicar a sequência dos passos.
  5. Na última linha, os valores são separados pelo espaço padrão e end=".\n" coloca o ponto final e a quebra de linha.
  6. Os números 180 e 40 entram sem aspas; o print() os converte para texto ao escrever.

Por que funciona

O print() monta cada saída como valor1 + sep + valor2 + ... + end. Trocando sep, você muda o que vai entre os itens; trocando end, você muda o que vem depois do último. Com end="", duas chamadas seguidas escrevem na mesma linha.

Por isso o rótulo e a lista podem vir de chamadas diferentes e ainda assim formar uma linha só.

Erros comuns

  • print("Ingredientes:", end="") sem o espaço no fim: a saída fica Ingredientes:cenoura, ..., colada. O espaço precisa estar dentro do rótulo.
  • print("Forno a", 180, "graus por", 40, "minutos", end="."): falta o \n, então o terminal mostra o prompt logo depois do ponto. Use end=".\n".
  • print("cenoura, ovos, açúcar, farinha, óleo"): a saída é a mesma, mas não usa sep como o enunciado pede.

Outra forma de resolver

O rótulo pode entrar como primeiro valor de um print() só, se ele já não tiver o separador: print("Modo de preparo:", "bater -> assar -> esfriar"). É mais curto quando os itens são fixos; a versão com sep é melhor quando os itens são valores separados que podem mudar.

Saída esperada

Bolo de cenoura (8 porções)
Ingredientes: cenoura, ovos, açúcar, farinha, óleo
Modo de preparo: bater -> assar -> esfriar
Forno a 180 graus por 40 minutos.

03Placar da rodada organizado em funçõesDesafio

Escreva o placar da rodada 3 de um jogo organizado em funções: uma linha() que imprime 24 sinais de igual, um cabeçalho, a lista de jogadores e uma main() que chama tudo na ordem.

↳ Requisitos
  • A função linha() usa "=" * 24 e é chamada três vezes ao longo do programa.
  • Cada jogador é impresso com sep=" | " e com end=" pontos\n", com os pontos passados como número.
  • Existe uma função main() que chama o cabeçalho, os jogadores, a linha final e o vencedor.
  • main() só é chamada dentro de if __name__ == "__main__":.
código inicial
# placar.py: placar da rodada organizado em funções.


def linha():
    pass  # troque pelo print da linha de iguais


def main():
    pass


if __name__ == "__main__":
    main()
saída esperada
========================
PLACAR DA RODADA 3
========================
Ana | 120 pontos
Bruno | 95 pontos
Carla | 140 pontos
========================
Vencedora: Carla
Ver dica

Uma função pode chamar outra: o cabeçalho pode chamar linha() antes e depois do título.

Ver resposta
# placar.py: placar da rodada organizado em funções.


def linha():
    """Imprime a linha de 24 sinais de igual."""
    print("=" * 24)


def cabecalho():
    linha()
    print("PLACAR DA RODADA", 3)
    linha()


def jogadores():
    # sep coloca a barra entre nome e pontos; end completa a linha
    print("Ana", 120, sep=" | ", end=" pontos\n")
    print("Bruno", 95, sep=" | ", end=" pontos\n")
    print("Carla", 140, sep=" | ", end=" pontos\n")


def main():
    cabecalho()
    jogadores()
    linha()
    print("Vencedora:", "Carla")


if __name__ == "__main__":
    main()

Passo a passo

  1. linha() concentra o desenho da linha: "=" * 24 repete o sinal de igual 24 vezes, e quem precisar da linha só chama a função.
  2. cabecalho() chama linha(), imprime o título e chama linha() de novo; o número 3 entra sem aspas e recebe o espaço do separador padrão.
  3. Em jogadores(), sep=" | " coloca a barra entre o nome e os pontos.
  4. end=" pontos\n" termina cada linha com a palavra pontos e a quebra de linha, sem repetir esse texto como valor.
  5. main() define a ordem do programa: cabeçalho, jogadores, linha final e vencedora.
  6. O bloco if __name__ == "__main__": chama main() só quando o arquivo é executado com python3 placar.py.
  7. Definir uma função não executa nada; o código dentro dela só roda quando ela é chamada.

Por que funciona

O Python lê o arquivo de cima para baixo, mas as linhas com def apenas registram as funções. A execução de verdade começa no if do final, que chama main(), e daí em diante cada chamada desvia para o corpo da função correspondente e volta.

Como a linha de iguais está numa função só, mudar o tamanho do placar exige mudar um único lugar. E sep e end montam cada linha de jogador sem que você precise concatenar textos com números.

Erros comuns

  • def linha(): print("=" * 24) definida depois do if __name__ == ...: dá NameError, porque main() roda antes de a função existir. Deixe o if no fim do arquivo.
  • linha sem parênteses dentro de cabecalho(): não dá erro, mas também não chama a função, e a linha some da saída. Escreva linha().
  • print("Ana", 120, "pontos", sep=" | "): a saída vira Ana | 120 | pontos, porque o separador entra entre todos os valores. Use end para o final.
  • Chamar main() fora do if: funciona ao executar, mas imprime o placar sempre que outro arquivo importar este.

Outra forma de resolver

Sem funções, o mesmo resultado sai de oito print() seguidos. É aceitável num script de poucas linhas que nunca vai crescer; com funções, o programa fica pronto para receber mais rodadas ou jogadores sem repetir código.

Saída esperada

========================
PLACAR DA RODADA 3
========================
Ana | 120 pontos
Bruno | 95 pontos
Carla | 140 pontos
========================
Vencedora: Carla

Últimas lições

Ver o arquivo completo →