Resumo: Python
Guia essencial de Python em português para iniciantes. Conceitos fundamentais com exemplos práticos do dia a dia.
Python
Operadores e Tipos Básicos
# Comentários começam com #
# Operações com números
10 + 5 # => 15
20 - 8 # => 12
4 * 3 # => 12
15 / 3 # => 5.0
17 // 5 # => 3 (divisão inteira)
17 % 5 # => 2 (resto)
2 ** 8 # => 256 (potência)
# Booleanos
True # Verdadeiro
False # Falso
# Lógica
not True # => False
True and False # => False
True or False # => True
# Comparações
5 == 5 # => True
10 != 8 # => True
3 < 10 # => True
5 <= 5 # => True
2 < 3 < 4 # Encadeamento elegante
# Strings com aspas duplas ou simples
mensagem = "Olá, Python!"
outro = 'Bem-vindo'
# Concatenação
mensagem + " " + outro # => "Olá, Python! Bem-vindo"
# Comprimento
len(mensagem) # => 13
# Acessar caracteres
mensagem[0] # => 'O'
mensagem[-1] # => '!'
# F-strings (interpolação)
nome = "Python"
versao = 3.11
f"{nome} {versao}" # => "Python 3.11"
# None para valor ausente
valor = None
valor is None # => True
Variáveis e Saída
# Exibir na tela
print("Bem-vindo ao Python!")
print(25, "anos", 1.75, "metro")
# Receber entrada do usuário
nome = input("Qual seu nome? ")
idade = input("Quantos anos? ")
# Atribuição simples (sem tipos declarados)
quantidade = 10
taxa = 0.15
ativo = True
Coleções
# Listas - coleções ordenadas e mutáveis
frutos = ["maçã", "banana", "laranja"]
numeros = [1, 2, 3, 4, 5]
mistos = [10, "texto", 3.14, True]
# Adicionar e remover
frutos.append("uva") # ["maçã", "banana", "laranja", "uva"]
frutos.remove("banana") # Remove por valor
ultimo = frutos.pop() # Remove o último
# Acessar elementos
frutos[0] # "maçã" (primeiro)
frutos[-1] # "laranja" (último)
frutos[1:3] # Fatiamento
# Verificações
len(frutos) # 2
"maçã" in frutos # True
frutos.extend(["abacaxi", "manga"]) # Adiciona vários
# Tuplas - coleções imutáveis
coordenadas = (10, 20)
rgb = (255, 128, 0)
# Acesso e desempacotamento
x, y = coordenadas # x=10, y=20
r, g, b = rgb # Desempacota valores
# Não pode modificar: "rgb[0] = 200" gera erro
# Mas pode converter para lista se precisar
rgb_lista = list(rgb)
# Dicionários - pares chave-valor
pessoa = {"nome": "Ana", "idade": 28, "cidade": "São Paulo"}
preco_produtos = {"notebook": 3000, "mouse": 50, "teclado": 200}
# Acessar valores
pessoa["nome"] # "Ana"
pessoa.get("telefone") # None
pessoa.get("telefone", "N/A") # "N/A" (com padrão)
# Adicionar e modificar
pessoa["profissao"] = "Engenheira"
pessoa.update({"idade": 29}) # Atualiza
# Listar chaves e valores
list(preco_produtos.keys()) # ["notebook", "mouse", "teclado"]
list(preco_produtos.values()) # [3000, 50, 200]
# Remover
del preco_produtos["mouse"]
"nome" in pessoa # True
# Conjuntos - valores únicos, sem ordem
tags = {"python", "programacao", "iniciante"}
numeros_pares = {2, 4, 6, 8}
# Adicionar
tags.add("tutorial")
# Operações
grupo1 = {1, 2, 3, 4}
grupo2 = {3, 4, 5, 6}
grupo1 & grupo2 # Interseção: {3, 4}
grupo1 | grupo2 # União: {1, 2, 3, 4, 5, 6}
grupo1 - grupo2 # Diferença: {1, 2}
# Verificação
"python" in tags # True
len(tags) # 4
Controle de Fluxo
# Condicional if/elif/else
temperatura = 32
if temperatura > 35:
print("Muito quente!")
elif temperatura < 15:
print("Muito frio!")
else:
print("Temperatura agradável")
# Laço for
palavras = ["Python", "é", "incrível"]
for palavra in palavras:
print(palavra)
# Com range
for i in range(5): # 0, 1, 2, 3, 4
print(i * 2)
for i in range(1, 11, 2): # 1, 3, 5, 7, 9
print(i)
# Com índice usando enumerate
frutos = ["maçã", "banana", "cereja"]
for idx, fruto in enumerate(frutos):
print(f"{idx}: {fruto}")
# Laço while
contador = 0
while contador < 3:
print("Contando:", contador)
contador += 1
# Tratamento de exceções
try:
numero = int(input("Digite um número: "))
resultado = 10 / numero
print(f"Resultado: {resultado}")
except ValueError:
print("Entrada inválida!")
except ZeroDivisionError:
print("Não pode dividir por zero!")
# Trabalhar com arquivos
with open("dados.txt", "w") as arquivo:
arquivo.write("Primeira linha\n")
arquivo.write("Segunda linha")
with open("dados.txt", "r") as arquivo:
for linha in arquivo:
print(linha.strip())
Funções
# Definição básica
def saudacao(nome):
return f"Olá, {nome}!"
# Chamada
saudacao("Maria") # Retorna "Olá, Maria!"
# Argumentos com valores padrão
def criar_perfil(nome, idade=18):
return {"nome": nome, "idade": idade}
criar_perfil("João") # Usa idade padrão
criar_perfil("Ana", idade=25) # Sobrescreve padrão
# Argumentos variáveis
def somar_multiplos(*numeros):
total = 0
for num in numeros:
total += num
return total
somar_multiplos(1, 2, 3) # 6
somar_multiplos(10, 20, 30) # 60
# Argumentos nomeados variáveis
def filtrar(**opcoes):
return opcoes
filtrar(status="ativo", idade=25) # {"status": "ativo", "idade": 25}
# Retornar múltiplos valores
def obter_dados():
return "João", 30, "São Paulo"
nome, idade, cidade = obter_dados()
# Escopo de variáveis
contador_global = 0
def incrementar():
global contador_global
contador_global += 1
return contador_global
# Funções aninhadas (closures)
def multiplicador(fator):
def multiplica(numero):
return numero * fator
return multiplica
mult_3 = multiplicador(3)
mult_3(5) # 15
# Funções lambda (anônimas)
quadrado = lambda x: x ** 2
quadrado(4) # 16
# List comprehension
quadrados = [x**2 for x in range(5)] # [0, 1, 4, 9, 16]
pares = [x for x in range(10) if x % 2 == 0] # [0, 2, 4, 6, 8]
# Dict comprehension
indice = {x: x**2 for x in range(4)} # {0: 0, 1: 1, 2: 4, 3: 9}
Módulos
# Importar módulo inteiro
import math
math.sqrt(25) # 5.0
math.pi # 3.14159...
math.ceil(3.2) # 4
# Importar funções específicas
from datetime import datetime
from random import randint
agora = datetime.now()
numero = randint(1, 100)
# Importar com apelido
import json as j
dados = j.dumps({"nome": "Pedro"})
Classes
# Definição de uma classe
class Pessoa:
"""Representa uma pessoa com nome e idade"""
# Atributo de classe (compartilhado por todas as instâncias)
especie = "Homo sapiens"
# Inicializador
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
# Método de instância
def apresentar(self):
return f"Olá, meu nome é {self.nome}"
def fazer_aniversario(self):
self.idade += 1
return f"{self.nome} agora tem {self.idade} anos"
# Também pode retornar uma representação em string
def __str__(self):
return f"Pessoa({self.nome}, {self.idade} anos)"
# Uso da classe
if __name__ == "__main__":
# Criar instâncias
p1 = Pessoa("Carlos", 30)
p2 = Pessoa("Fernanda", 28)
print(p1.apresentar()) # "Olá, meu nome é Carlos"
print(p1.fazer_aniversario()) # "Carlos agora tem 31 anos"
print(str(p2)) # "Pessoa(Fernanda, 28 anos)"
# Herança
# Uma classe pode herdar de outra
class Veiculo:
"""Classe base para veículos"""
def __init__(self, marca, cor):
self.marca = marca
self.cor = cor
def info(self):
return f"{self.marca} {self.cor}"
class Carro(Veiculo):
"""Especialização de Veículo"""
def __init__(self, marca, cor, portas):
super().__init__(marca, cor) # Chama init da classe mãe
self.portas = portas
def info(self):
msg_base = super().info()
return f"{msg_base} - {self.portas} portas"
class Moto(Veiculo):
def __init__(self, marca, cor, cilindrada):
super().__init__(marca, cor)
self.cilindrada = cilindrada
if __name__ == "__main__":
carro = Carro("Toyota", "Preto", 4)
moto = Moto("Honda", "Vermelha", 500)
print(carro.info()) # "Toyota Preto - 4 portas"
print(isinstance(carro, Veiculo)) # True
# Herança Múltipla
# Uma classe pode herdar de múltiplas classes
class Animal:
def fazer_som(self):
return "Som genérico"
class Terrestre:
def caminhar(self):
return "Caminhando..."
class Cachorro(Animal, Terrestre):
"""Classe que herda de duas classes"""
def fazer_som(self):
return "Au au!"
def buscar(self):
return "Buscando a bolinha..."
if __name__ == "__main__":
dog = Cachorro()
print(dog.fazer_som()) # "Au au!"
print(dog.caminhar()) # "Caminhando..."
print(dog.buscar()) # "Buscando a bolinha..."
Conceitos Avançados
# Geradores - economia de memória
def contar_ate(n):
"""Gera números de 1 até n"""
i = 1
while i <= n:
yield i
i += 1
# Não carrega tudo na memória, apenas o próximo valor
for numero in contar_ate(5):
print(numero) # 1, 2, 3, 4, 5
# Generator comprehension
numeros_quadrados = (x**2 for x in range(5))
print(next(numeros_quadrados)) # 0
print(next(numeros_quadrados)) # 1
# Decoradores - modificam o comportamento de funções
def contar_chamadas(funcao):
"""Decorator que conta quantas vezes a função é chamada"""
contagem = 0
def wrapper(*args, **kwargs):
nonlocal contagem
contagem += 1
print(f"Função chamada {contagem} vez(es)")
return funcao(*args, **kwargs)
return wrapper
@contar_chamadas
def saudar(nome):
return f"Olá, {nome}!"
saudar("Pedro") # Função chamada 1 vez(es) => "Olá, Pedro!"
saudar("Ana") # Função chamada 2 vez(es) => "Olá, Ana!"
# Decorador com parâmetros
def repetir(vezes):
"""Executa função múltiplas vezes"""
def decorador(funcao):
def wrapper(*args, **kwargs):
resultados = []
for _ in range(vezes):
resultados.append(funcao(*args, **kwargs))
return resultados
return wrapper
return decorador
@repetir(3)
def cumprimentar():
return "Oi!"
cumprimentar() # ["Oi!", "Oi!", "Oi!"]