Python Seu Primeiro Programa

Chegou a hora de escrever um programa de verdade, do começo ao fim. Ele vai começar com uma linha só, o famoso "Olá, mundo!", e crescer aos poucos até virar o recibo da padaria do bairro. No caminho, você vai conhecer a instrução print (que mostra coisas na tela), aprender a escrever textos entre aspas, fazer as primeiras contas e, principalmente, ver os erros que todo mundo comete no primeiro dia, com as mensagens reais do Python e o jeito de consertar cada um.

Você vai aprender
  • A escrever o "Olá, mundo!" com print, e o que é cada parte da linha.
  • A escrever textos entre aspas duplas ou simples, e quando usar cada uma.
  • Que várias linhas de print aparecem na ordem em que foram escritas, e como deixar uma linha em branco.
  • A diferença entre print(2 + 3) e print("2 + 3"), e como mostrar texto e número juntos.
  • Os erros mais comuns do primeiro programa: aspas e parênteses sem fechar, Print com maiúscula, aspas "curvas" copiadas de um documento e a vírgula esquecida.
  • A diferença entre um SyntaxError (nada roda) e um NameError (roda até o erro).

A ideia: o recado no quadro de avisos

Imagine que você deixa recados para alguém num quadro de avisos, um embaixo do outro. A pessoa chega e lê de cima para baixo, na ordem. O print é o seu jeito de "escrever no quadro": cada print põe uma linha na tela, e o Python segue as linhas do arquivo na ordem em que você escreveu.

Você vai precisar de um lugar para escrever e rodar. Use o que for mais cômodo:

  • as caixas Experimente desta página (é só editar e clicar em Rodar; a aula O Editor do Guia explica tudo o que elas fazem);
  • ou o seu computador: crie o arquivo com o nano e rode com python3, como na aula Rodando um Programa (.py).

1. Olá, mundo!

Desde os anos 1970, o primeiro programa de quem aprende uma linguagem nova é o que escreve "Olá, mundo!" na tela. É uma tradição: ele é curto, e mostra que tudo está funcionando. Em Python, ele tem uma linha:

print("Olá, mundo!")
$ python3 ola.py
Olá, mundo!
print
"Imprimir", no sentido de "mostrar na tela". É uma função que vem pronta no Python: um "ajudante" que faz um trabalho quando você chama o nome dele.
(
Abre os parênteses. O que vai dentro deles é o que você entrega ao print para ele mostrar.
"Olá, mundo!"
Um texto. As aspas marcam onde ele começa e onde termina. Elas não aparecem na tela: são a embalagem, não o conteúdo.
)
Fecha os parênteses. Todo parêntese aberto precisa ser fechado.

Repare no que não tem: não tem ponto e vírgula no fim, não tem nada antes do print, não tem "começo" e "fim" de programa. O arquivo inteiro é o programa. Os textos podem ter acentos, cedilha e emojis à vontade: o Python 3 entende todos.

Missão: rode o "Olá, mundo!" e depois troque mundo por Ana, para aparecer Olá, Ana!. Mude só o que está entre as aspas.

print("Olá, mundo!")
print("Olá, Ana!")

2. Aspas duplas ou simples

Em Python, um texto pode ir entre aspas duplas (") ou simples ('). As duas formas dão exatamente o mesmo texto. A escolha fica útil quando o texto tem aspas dentro:

print("Olá, mundo!")
print('Olá, mundo!')
print("Um copo d'água, por favor.")
print('A placa dizia "Fechado".')
$ python3 aspas.py
Olá, mundo!
Olá, mundo!                                        « o mesmo texto
Um copo d'água, por favor.
A placa dizia "Fechado".
O texto tem…UseExemplo
Nenhuma aspa dentroQualquer uma (o costume é a dupla)"Olá, mundo!"
Um apóstrofo ('), como em "d'água"Aspas duplas por fora"Um copo d'água"
Aspas duplas dentro, como uma citaçãoAspas simples por fora'A placa dizia "Fechado".'

A regra é uma só: o texto termina na primeira aspa igual à que o abriu. Por isso uma aspa simples dentro de aspas duplas não atrapalha, e vice-versa. Os textos (que o Python chama de strings) têm uma aula inteira: Strings (Textos).


3. Várias linhas, na ordem

Cada print mostra uma linha, e o Python faz um de cada vez, de cima para baixo. Com cinco print, a Ana montou um cartão de visita:

print("==========================")
print("Ana Souza")
print("Confeiteira")
print("Teresina - PI")
print("==========================")
$ python3 cartao.py
==========================
Ana Souza
Confeiteira
Teresina - PI
==========================

A tela mostra as linhas na mesma ordem do arquivo. Para o Python, os sinais de = dentro das aspas são só texto, como qualquer outro; o efeito de "moldura" é coisa sua.

Uma linha em branco: print()

Com os parênteses vazios, o print não tem nada para mostrar, e escreve só a quebra de linha. O resultado é uma linha em branco, ótima para separar partes:

print("Lista de compras")
print()
print("arroz")
print("feijão")
$ python3 vazio.py
Lista de compras
                                                   « a linha em branco do print()
arroz
feijão

Missão: acrescente uma linha com print() vazio entre o nome e a profissão, para separar os dois, e rode. Depois, se quiser, troque o nome, a profissão e a cidade pelos seus e faça o seu cartão de visita.

print("==========================")
print("Ana Souza")
print("Confeiteira")
print("Teresina - PI")
print("==========================")
print("==========================")
print("Ana Souza")
print()
print("Confeiteira")
print("Teresina - PI")
print("==========================")

4. Números e contas

O print não mostra só textos. Sem aspas, o Python calcula antes de mostrar:

print(2 + 3)
print("2 + 3")
print("Total:", 2 + 3)
print("Pães:", 10, "unidades")
print("Preço de 10 pães:", 10 * 0.75)
$ python3 contas.py
5                                                  « sem aspas: a conta
2 + 3                                              « com aspas: o texto, do jeito que está
Total: 5
Pães: 10 unidades
Preço de 10 pães: 7.5
print(2 + 3)
Sem aspas, 2 + 3 é uma conta: o Python calcula, e o print recebe o resultado, 5.
print("2 + 3")
Com aspas, "2 + 3" é um texto que, por acaso, tem números. O Python não faz conta nenhuma: mostra os cinco caracteres como estão.
print("Total:", 2 + 3)
A vírgula separa as coisas que você quer mostrar na mesma linha. O print mostra uma, um espaço, e a outra: Total: 5. O espaço é colocado sozinho.
print("Pães:", 10, "unidades")
Quantas coisas você quiser, separadas por vírgulas. Cada vírgula vira um espaço na tela.
10 * 0.75
O * é a multiplicação, e os decimais usam ponto: 0.75, nunca 0,75 (a vírgula, você acabou de ver, separa valores).

As contas têm aula própria (Operadores Aritméticos), e o print tem muito mais truques (print() e As Opções sep e end).


5. Juntando tudo: o recibo da padaria

A Padaria Pão Quente vende o pão a R$ 0,75 e o litro de leite a R$ 6,50. Com o que você já sabe, a Ana escreveu um recibo:

print("Padaria Pão Quente")
print("------------------")
print("10 pães:", 10 * 0.75)
print("1 leite:", 6.50)
print("Total:", 10 * 0.75 + 6.50)
print("------------------")
print("Obrigado e volte sempre!")
$ python3 recibo.py
Padaria Pão Quente
------------------
10 pães: 7.5
1 leite: 6.5                                       « o zero do fim sumiu
Total: 14.0
------------------
Obrigado e volte sempre!

Funciona, mas repare em dois detalhes: o 6.50 apareceu como 6.5, e o total como 14.0. Para o Python, 6.50 e 6.5 são o mesmo número, e ele mostra do jeito mais curto. Um recibo de verdade mostraria R$ 6,50; você vai aprender a formatar assim na aula f-strings: Formatando Textos. Por enquanto, o importante é que a conta está certa: 7,50 + 6,50 = 14.

Missão: a cliente também levou 2 cafés de R$ 3,50. Acrescente uma linha print("2 cafés:", 2 * 3.50) depois do leite e some o café no total (+ 2 * 3.50). O total deve ficar 21.0.

print("Padaria Pão Quente")
print("------------------")
print("10 pães:", 10 * 0.75)
print("1 leite:", 6.50)
print("Total:", 10 * 0.75 + 6.50)
print("------------------")
print("Obrigado e volte sempre!")
print("Padaria Pão Quente")
print("------------------")
print("10 pães:", 10 * 0.75)
print("1 leite:", 6.50)
print("2 cafés:", 2 * 3.50)
print("Total:", 10 * 0.75 + 6.50 + 2 * 3.50)
print("------------------")
print("Obrigado e volte sempre!")

Formas diferentes de mostrar a mesma coisa

As três linhas abaixo mostram exatamente Total: 5:

print("Total: 5")
print("Total:", 5)
print("Total:", 2 + 3)
FormaQuando usar
print("Total: 5")Quando o texto é fixo e você já sabe o número
print("Total:", 5)Texto e número separados; útil quando o número vem de uma variável
print("Total:", 2 + 3)Quando o Python precisa calcular. É o caso mais comum num programa de verdade: você não faz a conta de cabeça, o Python faz

Mais adiante você vai conhecer as f-strings, o jeito mais usado hoje de misturar texto e valores: print(f"Total: {2 + 3}").


Quando dá errado

Todo mundo erra no primeiro programa. Os erros abaixo são os mais comuns, com a mensagem real do Python. Para todos eles, o conselho é o mesmo da aula Introdução: leia a última linha (o que deu errado), depois o número da linha e os ^ (onde foi).

Esqueceu de fechar as aspas
print("Olá, mundo!)
$ python3 e1.py
  File "/home/ana/python/e1.py", line 1
    print("Olá, mundo!)
          ^
SyntaxError: unterminated string literal (detected at line 1)

O que aconteceu: "texto não terminado (percebido na linha 1)". As aspas abriram antes de Olá (o ^ aponta para elas) e nunca fecharam, então o Python achou que o ) também fazia parte do texto, e chegou ao fim da linha sem achar o fim do texto. Em inglês, um texto escrito no código é um string literal.

Como resolver: feche as aspas: print("Olá, mundo!").

Aspas que não combinam
print("Olá, mundo!')
$ python3 e6.py
  File "/home/ana/python/e6.py", line 1
    print("Olá, mundo!')
          ^
SyntaxError: unterminated string literal (detected at line 1)

O que aconteceu: o mesmo erro. O texto abriu com aspa dupla, e a aspa simples do fim não fecha um texto aberto com dupla (ela é só mais uma letra do texto). Como resolver: use o mesmo tipo de aspa nos dois lados.

Esqueceu de fechar o parêntese
print("Olá, mundo!"
$ python3 e2.py
  File "/home/ana/python/e2.py", line 1
    print("Olá, mundo!"
         ^
SyntaxError: '(' was never closed

O que aconteceu: "o ( nunca foi fechado". O ^ aponta para o parêntese que abriu. Como resolver: feche-o: print("Olá, mundo!"). Quando o programa tem várias linhas, confira a linha que a mensagem indica: o parêntese esquecido está lá, mesmo que o erro pareça estar mais embaixo.

Print com P maiúsculo
Print("Olá, mundo!")
$ python3 e3.py
Traceback (most recent call last):
  File "/home/ana/python/e3.py", line 1, in <module>
    Print("Olá, mundo!")
    ^^^^^
NameError: name 'Print' is not defined. Did you mean: 'print'?

O que aconteceu: para o Python, maiúsculas e minúsculas são letras diferentes. print existe; Print, não: "o nome Print não está definido. Você quis dizer print?". Os celulares e alguns editores de texto põem a primeira letra da linha em maiúscula sozinhos, e esse erro aparece muito por isso. Como resolver: print, tudo em minúsculas.

Aspas "curvas", copiadas de um documento

A Ana copiou a linha de um documento do editor de textos e colou no programa:

print(“Olá, mundo!”)
$ python3 e4.py
  File "/home/ana/python/e4.py", line 1
    print(“Olá, mundo!”)
          ^
SyntaxError: invalid character '“' (U+201C)

O que aconteceu: "caractere inválido: “". Olhe de perto: as aspas são curvas (“ ”), as aspas "bonitas" que o LibreOffice, o Word e muitos sites colocam sozinhos. Para o Python, só valem as aspas retas do teclado (" e '). O U+201C é o código desse caractere na tabela Unicode, para você poder procurar o que ele é.

Como resolver: apague as aspas curvas e digite as retas no teclado. E escreva os programas num editor de código (aula Instalar o Python), nunca num editor de documentos.

Esqueceu a vírgula entre o texto e o número
print("Total:" 2 + 3)
$ python3 e5.py
  File "/home/ana/python/e5.py", line 1
    print("Total:" 2 + 3)
          ^^^^^^^^^^^^^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?

O que aconteceu: "sintaxe inválida. Talvez você tenha esquecido uma vírgula?". Um texto colado num número, sem nada entre eles, não forma uma frase que o Python entenda. Os ^ sublinham o trecho todo onde a vírgula deveria estar. Como resolver: print("Total:", 2 + 3).

Sem parênteses e sem aspas
print Olá
$ python3 e7.py
  File "/home/ana/python/e7.py", line 1
    print Olá
    ^^^^^^^^^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?

O que aconteceu: o mesmo erro do código antigo de Python 2 da Introdução: "faltam os parênteses na chamada do print". E, consertando os parênteses, ainda faltariam as aspas no texto. Como resolver: print("Olá").

SyntaxError × NameError: quando o programa chega a rodar

Compare dois programas de três linhas, cada um com um erro na terceira:

antes.py (aspas sem fechar)antes2.py (Print com maiúscula)
print("Linha 1")
print("Linha 2")
print("Linha 3)
print("Linha 1")
print("Linha 2")
Print("Linha 3")
$ python3 antes.py
  File "/home/ana/python/antes.py", line 3
    print("Linha 3)
          ^
SyntaxError: unterminated string literal (detected at line 3)
$ python3 antes2.py
Linha 1
Linha 2
Traceback (most recent call last):
  File "/home/ana/python/antes2.py", line 3, in <module>
    Print("Linha 3")
    ^^^^^
NameError: name 'Print' is not defined. Did you mean: 'print'?

No primeiro, nenhuma linha apareceu, nem as duas certas. No segundo, as duas primeiras rodaram. Por quê? Antes de executar qualquer coisa, o Python lê o arquivo inteiro para entender a "gramática" (a sintaxe). Um SyntaxError é descoberto nessa leitura, e o programa nem começa: é como um cozinheiro que lê a receita antes e diz "não dá para entender o passo 3". Já o NameError só aparece quando o Python executa a linha 3 e procura o nome Print; até lá, as linhas 1 e 2 já tinham rodado. Repare também que o SyntaxError não tem a linha Traceback: ela só aparece em erros de um programa que já estava rodando.

Missão final: o programa com três erros

Missão: a Ana escreveu um aviso para a porta da padaria, mas o programa tem três erros, um em cada linha. Rode, leia a mensagem, conserte e rode de novo, até as três linhas aparecerem: Bom dia, Padaria Pão Quente!, Pães quentinhos: 30 e Volte sempre!.

print("Bom dia, Padaria Pão Quente!)
Print("Pães quentinhos:", 30)
print("Volte sempre!"
print("Bom dia, Padaria Pão Quente!")
print("Pães quentinhos:", 30)
print("Volte sempre!")

Repare na ordem em que os erros aparecem: primeiro os de sintaxe (as aspas e o parêntese), e só quando eles estiverem consertados, o NameError do Print.


Referência rápida

EscritaO que mostra
print("Olá, mundo!")Olá, mundo!
print('Olá, mundo!')Olá, mundo! (aspas simples: o mesmo texto)
print("Um copo d'água")Apóstrofo dentro de aspas duplas
print()Uma linha em branco
print(2 + 3)5 (a conta)
print("2 + 3")2 + 3 (o texto)
print("Total:", 2 + 3)Total: 5 (a vírgula vira um espaço)
MensagemCausa provável
SyntaxError: unterminated string literalAspas sem fechar, ou fechadas com o outro tipo de aspa
SyntaxError: '(' was never closedParêntese sem fechar
NameError: name 'Print' is not defined. Did you mean: 'print'?Maiúscula no lugar errado (ou erro de digitação)
SyntaxError: invalid character '“' (U+201C)Aspas curvas copiadas de um documento
SyntaxError: invalid syntax. Perhaps you forgot a comma?Faltou a vírgula entre dois valores
SyntaxError: Missing parentheses in call to 'print'print sem parênteses (jeito do Python 2)

Exercícios

1. Complete o Olá

Complete o nome da função e as aspas:

()

2. Texto e número na mesma linha

Complete o sinal que separa o texto do número, para aparecer Idade: 30:

print("Idade:" 30)

3. A linha em branco

Complete para o programa deixar uma linha em branco:

print

4. O que print("10 + 5") mostra?

5. Qual destas linhas mostra A placa dizia "Fechado". sem erro?

6. Um programa de 5 linhas tem as aspas sem fechar na linha 4. O que aparece quando a Ana roda?


Resumo

  • print("…") mostra um texto na tela. As aspas marcam o texto e não aparecem; os parênteses envolvem o que vai ser mostrado.
  • Textos podem ir entre aspas duplas ou simples; use as duplas quando o texto tem apóstrofo, e as simples quando tem aspas duplas.
  • Cada print é uma linha, na ordem do arquivo; print() deixa uma linha em branco.
  • Sem aspas, o Python calcula (print(2 + 3) mostra 5); com aspas, é texto. A vírgula junta valores na mesma linha, com um espaço entre eles. Decimais usam ponto.
  • Os erros do primeiro dia: aspas ou parêntese sem fechar, Print com maiúscula, aspas curvas de documento, vírgula esquecida.
  • Um SyntaxError impede o programa inteiro de rodar; um NameError aparece só quando a linha é executada.
  • Próximo passo: as regras de escrita do Python, em Sintaxe e Indentação.