Capítulo 2 — Variáveis, tipos de dados e entrada do usuário

Até agora, seus programas fazem sempre a mesma coisa. Você digita um comando, o Python executa, fim. Mas pense em um jogo: o computador precisaria de um jeito para lembrar da sua pontuação, do seu nome, de quantas vidas você tem. Um app de banco precisa guardar quanto dinheiro você tem na conta. Quando você digita algo no YouTube, o site precisa lembrar o que você digitou para fazer a busca.

Tudo isso envolve guardar e organizar informações. O Python faz isso com variáveis. Uma variável é um espaço na memória do computador que guarda um valor — e você escolhe o nome dessa caixa. Neste capítulo, vamos aprender a criar variáveis, entender os diferentes tipos de dados que podemos guardar nelas e como fazer o usuário digitar informações para o seu programa.


1. O que são variáveis?

Analogia: variável como caixa etiquetada

Imagine que você tem várias caixas em seu quarto. Cada caixa tem uma etiqueta na frente com um nome — uma diz "Roupas limpas", outra diz "Livros", outra diz "Eletrônicos". Dentro de cada caixa, você guarda coisas do tipo descrito na etiqueta.

Variáveis em programação são exatamente assim. Uma variável é uma "caixa" que guarda um valor. A etiqueta é o nome da variável, e o conteúdo é o valor que você guarda ali. Quando você quer saber o que está em uma caixa, você olha para o nome dela.

Por exemplo:

idade = 16

Aqui, criamos uma "caixa" chamada idade e colocamos o valor 16 dentro dela. Toda vez que você escreve idade no código, o Python sabe que você quer dizer "o valor que está na caixa chamada idade", que é 16.

Atribuição com = e o operador de atribuição

O símbolo = é chamado de operador de atribuição. Ele não quer dizer "é igual a" (como em matemática) — quer dizer "recebe" ou "é atribuído".

Quando você escreve:

nome = "Ana"

Você está dizendo "a variável nome recebe o valor "Ana"". Daí em diante, toda vez que o Python ver nome, ele sabe que está falando sobre "Ana".

Vamos ver um exemplo prático:

nota = 8.5

print("Minha nota foi:")
print(nota)

Quando você roda esse código:

Minha nota foi:
8.5

Na primeira linha, você cria a variável nota e atribui o valor 8.5 a ela. Na terceira linha, o print(nota) exibe o valor da variável, não a palavra "nota".

Você pode mudar o valor de uma variável quantas vezes quiser:

pontos = 10
print("Pontos no início:")
print(pontos)

pontos = 15
print("Pontos depois da ação:")
print(pontos)

pontos = pontos + 5
print("Pontos finais:")
print(pontos)

Resultado:

Pontos no início:
10
Pontos depois da ação:
15
Pontos finais:
20

Repare a última linha: pontos = pontos + 5. Parece estranho, mas faz sentido:

  1. Python olha para pontos + 5 (o lado direito)
  2. Pega o valor atual de pontos, que é 15
  3. Soma 5: 15 + 5 = 20
  4. Atribui esse resultado de volta à variável pontos

Então pontos agora é 20.

Regras para nomes de variáveis

Nem qualquer nome funciona como nome de variável. O Python tem algumas regras rigorosas:

Nomes válidos: - Podem conter letras (a-z, A-Z) - Podem conter números (0-9), mas não podem começar com número - Podem conter underscore (_) - Não podem ter espaços - Não podem ter acentos

Nomes inválidos: - 2idade — começa com número - meu numero — tem espaço - idade-aluno — tem hífen - alunó — tem acento - class — é uma palavra reservada do Python

Veja alguns exemplos:

# VÁLIDO
nome = "João"
idade = 16
nota_final = 9.5
x = 100
_privado = 42

# INVÁLIDO (vai dar erro)
# 1ano = 2024  # começa com número
# meu nome = "Ana"  # tem espaço
# telefone-celular = "11987654321"  # tem hífen
# país = "Brasil"  # tem acento

Convenções: snake_case e nomes descritivos

Você tecnicamente poderia escrever:

x = 16
y = "João"
z = 9.5

Mas isso deixa o código confuso. Quem olha não sabe o que x, y e z significam.

A convenção em Python é usar snake_case: junta as palavras com underscore, tudo minúsculo. E, mais importante, use nomes descritivos — nomes que deixam claro o que a variável representa.

# RUIM — nomes confusos
a = 16
b = "João"
c = 9.5

# BOM — nomes descritivos em snake_case
idade = 16
nome_aluno = "João"
nota_media = 9.5

Qual é mais fácil de entender três meses depois? Óbvio, a segunda. O código é lido muito mais vezes do que é escrito — invista em nomes que façam sentido.


2. Tipos de dados básicos

Python guarda diferentes tipos de informação em variáveis. Um número é diferente de um texto, que é diferente de uma resposta de sim/não. O Python chama esses tipos de tipos de dados.

int — números inteiros

Um inteiro (integer, ou int em Python) é um número sem casa decimal: 5, -10, 0, 1000, etc.

idade = 16
pontos = 100
temperatura = -5
ano = 2024

print(idade)
print(pontos)
print(temperatura)
print(ano)

Resultado:

16
100
-5
2024

Você pode fazer contas com inteiros:

a = 10
b = 3

print(a + b)  # 13
print(a - b)  # 7
print(a * b)  # 30
print(a // b)  # 3 (divisão inteira)
print(a % b)   # 1 (resto da divisão)

float — números decimais

Um float é um número com ponto decimal: 3.14, 2.5, -0.1, etc.

Importante: Em Python, você usa ponto, não vírgula! Se você digitar 2,5, o Python entende como algo diferente (uma tupla). Sempre use ponto.

altura = 1.75
peso = 68.5
pi = 3.14159
temperatura = -2.3

print(altura)
print(peso)

Resultado:

1.75
68.5

Você pode fazer contas com floats também:

comprimento = 5.5
largura = 3.2

area = comprimento * largura
print(area)  # 17.6

Uma observação sobre divisão: quando você divide dois números inteiros em Python 3, o resultado é sempre um float, mesmo que seja exato:

print(10 / 2)   # 5.0 (float, não int!)
print(10 // 2)  # 5 (int — divisão inteira)

Use / quando quer decimais e // quando quer apenas a parte inteira.

str — texto (strings) entre aspas simples ou duplas

Uma string é uma sequência de caracteres — ou seja, texto. Você coloca texto entre aspas, simples ou duplas:

nome = "Ana"
cidade = 'São Paulo'
mensagem = "Olá, mundo!"
email = "aluno@escola.com.br"

print(nome)
print(cidade)
print(mensagem)

Resultado:

Ana
São Paulo
Olá, mundo!
aluno@escola.com.br

Você pode usar aspas simples ou duplas — elas funcionam igual. Use uma ou outra, não é importante. Mas se a string tiver um apóstrofo, cuidado:

# ERRADO — Python acha que a string terminou no apóstrofo
frase = 'Maria's apple'  # Erro!

# CERTO — use aspas duplas
frase = "Maria's apple"

# OU — escape o apóstrofo
frase = 'Maria\'s apple'

Você pode combinar strings com o operador +:

primeiro_nome = "João"
sobrenome = "Silva"
nome_completo = primeiro_nome + " " + sobrenome

print(nome_completo)  # João Silva

Ou repetir strings com *:

risada = "ha" * 3
print(risada)  # hahaha

linha = "-" * 20
print(linha)  # --------------------

bool — True e False

Um bool (booleano) tem apenas dois valores possíveis: True ou False. Você vai usar muito mais no capítulo 3 quando aprender if, mas apresentamos aqui para ser completo.

python_eh_legal = True
entendi_tudo = False

print(python_eh_legal)
print(entendi_tudo)

Resultado:

True
False

Repare: sem aspas! True e False são valores especiais do Python, não strings.

Verificando tipos com type()

Às vezes você quer saber que tipo de dado uma variável contém. Para isso, existe a função type():

idade = 16
altura = 1.75
nome = "Clara"
eh_legal = True

print(type(idade))      # <class 'int'>
print(type(altura))     # <class 'float'>
print(type(nome))       # <class 'str'>
print(type(eh_legal))   # <class 'bool'>

Isso é super útil para debugar — quando algo dá errado, você descobre se a variável tem o tipo que você esperava.


3. Entrada de dados: input()

Até agora, todos os valores estavam "duros" no código — você digitava idade = 16 e pronto. Mas e se você quiser que o usuário digite um valor? Para isso, existe a função input().

Lendo texto do teclado

A função input() para o programa e espera o usuário digitar algo. Tudo que o usuário digita é guardado como uma string:

nome = input()
print("Você digitou:")
print(nome)

Quando você roda isso, o programa fica esperando você digitar. Se você digitar "Ana" e apertar Enter:

Ana
Você digitou:
Ana

Exibindo uma mensagem de prompt

Na maioria das vezes, você quer mostrar uma mensagem pedindo algo ao usuário. Você passa uma string para input():

nome = input("Qual é o seu nome? ")
print("Prazer em conhecer você,", nome)

Quando você roda:

Qual é o seu nome? Ana
Prazer em conhecer você, Ana

A mensagem dentro de input() é chamada de prompt. Ela é exibida, e o programa fica esperando a resposta.

Outro exemplo:

cidade = input("Qual cidade você mora? ")
print("Que legal! Você mora em", cidade)

Por que input() sempre retorna string

Aqui vem uma questão importante: tudo que input() lê é string. Mesmo que o usuário digite um número!

numero = input("Digite um número: ")
print(type(numero))  # <class 'str'>

Se o usuário digitar 42, numero vai ser "42" (uma string com dois caracteres), não o inteiro 42. Isso é importante porque afeta como você trabalha com o valor depois. Se você tentar fazer contas com uma string numérica, acontecem coisas estranhas:

numero = input("Digite um número: ")
# Usuário digita: 5

resultado = numero + 10  # Erro! Não dá para somar string com int

Python vai reclamar: TypeError: can only concatenate str (not "int") to str. Ou seja, você não pode somar uma string com um número.


4. Conversão de tipos (casting)

Para resolver o problema acima, você precisa converter a string para um número. Python tem funções para isso:

Exemplos de conversão

# Convertendo string para int
numero_texto = "42"
numero = int(numero_texto)
print(numero)          # 42
print(type(numero))    # <class 'int'>

# Agora você pode fazer contas
resultado = numero + 10
print(resultado)       # 52
# Convertendo string para float
altura_texto = "1.75"
altura = float(altura_texto)
print(altura)          # 1.75
print(type(altura))    # <class 'float'>
# Convertendo número para string
numero = 100
texto = str(numero)
print(texto)           # 100
print(type(texto))     # <class 'str'>

Convertendo direto do input()

Geralmente, você converte na mesma linha do input():

idade = int(input("Qual é a sua idade? "))
print("Você tem", idade, "anos")

altura = float(input("Qual é a sua altura em metros? "))
print("Sua altura é", altura, "metros")

Na primeira linha, o Python: 1. Executa input("Qual é a sua idade? ") → usuário digita "16" 2. Pega o resultado "16" (uma string) 3. Converte com int()16 (inteiro) 4. Atribui à variável idade

Muito mais simples!

Erros comuns: converter texto não numérico

Se o usuário digitar algo que não dá para converter, o Python dá um erro:

numero = int(input("Digite um número: "))
# Usuário digita: abc

# ValueError: invalid literal for int() with base 10: 'abc'

O Python não consegue converter "abc" para int. Esse erro se chama ValueError. Para evitá-lo no futuro, você vai aprender a tratar erros no capítulo 3 com if. Por enquanto, lembre-se: sempre peça ao usuário números quando sabe que ele vai digitar números.

Dica para o professor: No início, é bom avisar os alunos para sempre digitar números quando pedido, para não causar crashes. Mais adiante, vamos aprender a lidar com esses erros com graça (try/except).

Exemplo prático: programa que soma dois números

Vamos criar um programa que pede dois números ao usuário e mostra a soma:

numero1 = int(input("Digite o primeiro número: "))
numero2 = int(input("Digite o segundo número: "))

soma = numero1 + numero2

print("A soma de", numero1, "e", numero2, "é:", soma)

Teste:

Digite o primeiro número: 10
Digite o segundo número: 5
A soma de 10 e 5 é: 15

Vamos rastrear passo a passo:

Execução (com entrada 10 e 5):
→ numero1 = int("10") = 10
→ numero2 = int("5") = 5
→ soma = 10 + 5 = 15
→ print("A soma de", 10, "e", 5, "é:", 15)
→ Exibe: A soma de 10 e 5 é: 15

5. Operações com strings

Strings fazem mais do que você imagina!

Concatenação com +

Você já viu isso: juntar strings com +:

primeiro = "João"
segundo = "Silva"
nome_completo = primeiro + " " + segundo

print(nome_completo)  # João Silva

Repare que adicionamos " " (uma string com apenas um espaço) para separar os nomes.

Repetição com *

Você pode repetir uma string multiplicando:

risada = "ha" * 5
print(risada)  # hahahahaha

linha = "=" * 10
print(linha)   # ==========

Isso é útil para fazer bordas, linhas divisórias, efeitos visuais no terminal.

f-strings: inserindo variáveis dentro de texto

Até agora, para colocar um valor dentro de uma mensagem, você fazia assim:

nome = "Clara"
idade = 16
print("Meu nome é", nome, "e tenho", idade, "anos")

Funciona, mas fica meio bagunçado com tantas aspas. Python oferece uma forma muito mais elegante: as f-strings.

Uma f-string começa com f antes da aspas e coloca variáveis entre chaves {}:

nome = "Clara"
idade = 16
print(f"Meu nome é {nome} e tenho {idade} anos")

Resultado:

Meu nome é Clara e tenho 16 anos

Muito mais limpo! Você pode colocar qualquer valor dentro das chaves:

a = 5
b = 3
print(f"A soma de {a} e {b} é {a + b}")  # A soma de 5 e 3 é 8

Até contas você faz dentro das chaves!

Mais exemplos com f-strings

nome = "Ana"
nota = 9.5
print(f"A aluna {nome} tirou nota {nota}")

quantidade = 10
preco = 25.50
print(f"Você quer {quantidade} itens a R$ {preco} cada = R$ {quantidade * preco}")

cidade = "São Paulo"
populacao = 11_000_000
print(f"A cidade de {cidade} tem cerca de {populacao:,} habitantes")

(O :, no último exemplo formata o número com separadores de milhar — é um extra, não se preocupe agora.)

len() para contar caracteres

A função len() conta quantos caracteres tem uma string:

nome = "Clara"
print(len(nome))  # 5

frase = "Olá, mundo!"
print(len(frase))  # 12 (inclui espaço e pontuação)

Útil para validar entrada — por exemplo, um nome não pode ter 0 caracteres:

nome = input("Qual seu nome? ")
if len(nome) > 0:
    print(f"Bem-vindo, {nome}!")

(Você vai entender melhor if no capítulo 3, mas fica a dica.)


6. Prática com Turtle e variáveis

Agora vamos combinar o que aprendemos com a Turtle! O professor vai demonstrar.

6.1. Usuário digita o tamanho do lado → Turtle desenha quadrado

import turtle

tamanho = int(input("Qual o tamanho do lado do quadrado? "))

t = turtle.Turtle()
t.speed(3)

# Desenha quadrado com o tamanho escolhido
t.forward(tamanho)
t.left(90)
t.forward(tamanho)
t.left(90)
t.forward(tamanho)
t.left(90)
t.forward(tamanho)
t.left(90)

turtle.done()

Se o usuário digita 100:

Qual o tamanho do lado do quadrado? 100

A tartaruga desenha um quadrado de lado 100. Se digitar 50, desenha um quadrado menor. A variável controla o desenho!

6.2. Usuário escolhe a cor → Turtle muda a cor do traço

import turtle

cor = input("Escolha uma cor (vermelho / azul / verde): ").lower()

t = turtle.Turtle()
t.speed(3)

# Traduz o português para o inglês (que Turtle entende)
if cor == "vermelho":
    t.color("red")
elif cor == "azul":
    t.color("blue")
elif cor == "verde":
    t.color("green")
else:
    t.color("black")

# Desenha um quadrado
t.forward(100)
t.left(90)
t.forward(100)
t.left(90)
t.forward(100)
t.left(90)
t.forward(100)
t.left(90)

turtle.done()

Repare que usamos .lower() para converter a resposta para minúsculas — assim, "Vermelho", "VERMELHO" e "vermelho" funcionam tudo.

Atenção: Aqui usamos if e elif, que você vai aprender direito no capítulo 3. Mas a ideia é simples: se o usuário digitou "vermelho", muda a cor para "red" (que Turtle entende).

6.3. Usuário digita ângulo → Turtle gira e desenha

import turtle

angulo = int(input("Qual ângulo você quer (em graus)? "))
lado = int(input("Qual o tamanho do lado? "))

t = turtle.Turtle()
t.speed(5)

# Desenha um "zigzag" com o ângulo escolhido
for i in range(6):
    t.forward(lado)
    t.left(angulo)

turtle.done()

Aviso: Este exemplo usa for, que você aprende no capítulo 4. Mas funciona assim: repete 6 vezes o padrão de "anda para frente, depois vira o ângulo escolhido". Se o ângulo for 60 graus, forma um hexágono (6 × 60 = 360). Se for 90, forma um quadrado repetido.


7. Exercícios

Agora é sua vez! Resolva sozinho antes de pedir ajuda. Se travar, releia a seção correspondente.

a) Crie um programa que pede o nome do usuário, a idade e a cidade onde mora. Exiba tudo formatado com uma f-string. Exemplo de saída: "Meu nome é João, tenho 15 anos e moro em São Paulo."

b) Programa que pede dois números inteiros ao usuário e exibe a soma, subtração, multiplicação e divisão inteira. Dica: use print() e f-strings para deixar a saída clara.

c) Com o Turtle, peça a largura e altura de um retângulo ao usuário e desenhe o retângulo com esses tamanhos. Use as variáveis largura e altura.

d) Crie um programa que pede um nome e o repete 5 vezes na tela usando o operador *. Exemplo: se digitar "Ana", exiba "AnaAnaAnaAnaAna".

e) Escreva um programa que converte temperatura de Celsius para Fahrenheit. A fórmula é: F = (C × 9/5) + 32. Peça a temperatura em Celsius ao usuário e exiba o resultado em Fahrenheit com uma f-string. Teste com 0°C (deve dar 32°F) e 100°C (deve dar 212°F).

f) Programa que pede o preço unitário e a quantidade de um produto, depois calcula o total (preço × quantidade) e exibe formatado com f-string. Exemplo: "3 unidades de R$ 25.50 = R$ 76.50".

g) Com o Turtle, crie um programa que pede o tamanho do lado e a cor (vermelho, azul ou verde) e desenha um triângulo equilátero (3 lados iguais). O ângulo externo de um triângulo equilátero é 120°. Dica: use if e elif para traduzir a cor.

h) Escreva um programa que pede o nome completo do usuário e depois exibe: - O nome todo em MAIÚSCULAS (use .upper()) - O número de caracteres (use len()) - Apenas a primeira letra Exemplo: para "João Silva": "JOÃO SILVA", 11 caracteres, primeira letra "J".

i) Crie um programa que calcula a área de um círculo. Peça o raio ao usuário. Fórmula: Área = π × r². Use pi = 3.14159. Exiba o resultado com uma f-string. Teste com raio = 5 (deve dar aproximadamente 78.54).

j) Com o Turtle, crie um programa que desenha três formas geométricas diferentes: um quadrado (lado 50), um triângulo (lado 50) e um círculo (raio 25). Use cores diferentes para cada um. Dica: após desenhar cada forma, use penup() para levantar a caneta, goto(x, y) para se mover, e pendown() para desenhar de novo.


8. Desafio de capítulo: calculadora de média escolar

Crie um programa que calcula a média de três notas de um aluno. O programa deve:

  1. Pedir o nome do aluno
  2. Pedir três notas (podem ser decimais)
  3. Calcular a média aritmética (soma das três dividida por 3)
  4. Exibir um relatório formatado com f-string

Requisitos:

Exemplo de execução:

Qual é o nome do aluno? Clara
Qual foi a primeira nota? 7.5
Qual foi a segunda nota? 8.0
Qual foi a terceira nota? 9.5

========== RELATÓRIO ==========
Aluno: Clara
Nota 1: 7.5
Nota 2: 8.0
Nota 3: 9.5
Média: 8.33
===============================

Dica: Para formatar um número com poucas casas decimais, use .2f dentro das chaves da f-string:

media = 8.333333
print(f"Média: {media:.2f}")  # Exibe: Média: 8.33

Extra para quem quer ir além:


9. Dicas para entender bem o capítulo

  1. Variáveis são memória: Toda vez que você cria uma variável, o Python reserva um espaço na memória. O nome da variável é como um endereço para acessar aquele espaço.

  2. Tipos importam: Uma string "10" não é a mesma coisa que um inteiro 10. Se você tentar fazer contas com "10", vai dar erro. Sempre converta!

  3. input() sempre retorna string: Sempre. Mesmo que o usuário digite um número. Você precisa converter com int() ou float().

  4. F-strings são suas amigas: Em vez de print("A soma de", a, "e", b, "é", a+b), escreva print(f"A soma de {a} e {b} é {a+b}"). É mais legível e mais profissional.

  5. Nomes descritivos salvam vidas: Use idade, não x. Use nota_final, não n. Seus colegas e você mesmo vão agradecer.

Você acabou de aprender o fundamento de toda programação: guardar e manipular dados. No capítulo 3, você vai aprender a tomar decisões com if — e aí seus programas ganham inteligência de verdade.

Python