Seu primeiro programa
por Sutton AshfordEntenda 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.
- 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;septroca o separador. endtroca o final da linha:end=""mantém o próximoprint()na mesma linha.#inicia um comentário;if __name__ == "__main__":protege a chamada damain().
Do conceito à prática
3 exemplos para ver a ideia funcionando.
01Olá, loja: textos, números e comentários
# 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: 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: 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.
- 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.
# ficha.py: ficha de um livro do acervo.
print("Biblioteca Municipal")
# complete com livro, autor, ano e situação
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
- O comentário na primeira linha diz o que o arquivo faz; o Python o ignora.
print("Biblioteca Municipal")escreve o título e pula para a linha seguinte.print("Livro:", "Dom Casmurro")passa dois valores; oprint()coloca um espaço entre eles, gerandoLivro: Dom Casmurro.- A linha do autor segue o mesmo padrão de rótulo e valor.
print("Ano:", 1899)mistura texto e número: oprint()converte o número para texto sozinho.- 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 viraAno: 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 chamaprint.
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.
- Os cinco ingredientes são passados num único
print()comsep=", ". - Os rótulos
Ingredientes:eModo de preparo:são impressos comend="", 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.
# receita.py: cartão de receita com sep e end.
print("Bolo de cenoura (", 8, " porções)", sep="")
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
- 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. print("Ingredientes: ", end="")escreve o rótulo e não pula de linha, porque o final passou a ser um texto vazio.- O
print()seguinte recebe os cinco ingredientes e os separa com", ", continuando na mesma linha do rótulo. - O modo de preparo repete a ideia, agora com
sep=" -> "para indicar a sequência dos passos. - 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. - 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 ficaIngredientes: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. Useend=".\n".print("cenoura, ovos, açúcar, farinha, óleo"): a saída é a mesma, mas não usasepcomo 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.
- A função
linha()usa"=" * 24e é chamada três vezes ao longo do programa. - Cada jogador é impresso com
sep=" | "e comend=" 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 deif __name__ == "__main__":.
# 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()
========================
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
linha()concentra o desenho da linha:"=" * 24repete o sinal de igual 24 vezes, e quem precisar da linha só chama a função.cabecalho()chamalinha(), imprime o título e chamalinha()de novo; o número 3 entra sem aspas e recebe o espaço do separador padrão.- Em
jogadores(),sep=" | "coloca a barra entre o nome e os pontos. end=" pontos\n"termina cada linha com a palavrapontose a quebra de linha, sem repetir esse texto como valor.main()define a ordem do programa: cabeçalho, jogadores, linha final e vencedora.- O bloco
if __name__ == "__main__":chamamain()só quando o arquivo é executado compython3 placar.py. - 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 doif __name__ == ...: dáNameError, porquemain()roda antes de a função existir. Deixe oifno fim do arquivo.linhasem parênteses dentro decabecalho(): não dá erro, mas também não chama a função, e a linha some da saída. Escrevalinha().print("Ana", 120, "pontos", sep=" | "): a saída viraAna | 120 | pontos, porque o separador entra entre todos os valores. Useendpara o final.- Chamar
main()fora doif: 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