📖 Glossário - Python Essencial

A

Argumentos: Valores passados para uma função quando ela é chamada.

Array: Estrutura de dados que armazena múltiplos valores em sequência (em Python, use listas).

Atribuição: Operação que define o valor de uma variável (ex: x = 10).

B

Booleano (bool): Tipo de dado que pode ser True ou False.

Break: Comando para interromper um loop prematuramente.

C

Class (Classe): Modelo para criar objetos com atributos e métodos específicos.

Comentário: Texto no código que não é executado, usado para explicações (inicia com #).

Comprehension: Sintaxe concisa para criar listas, dicionários ou conjuntos (ex: [x**2 for x in range(10)]).

Condição: Expressão que avalia para True ou False, usada em if/while.

Continue: Comando que pula para a próxima iteração de um loop.

D

def: Palavra-chave para definir uma função em Python.

Dicionário (dict): Estrutura de dados que mapeia chaves a valores (ex: {"nome": "Ana", "idade": 25}).

Docstring: String de documentação no início de funções/classes (entre """).

E

elif: Abreviação de "else if", usado para condições adicionais em estruturas if.

else: Cláusula executada quando condição if/elif é falsa.

Escopo: Região do código onde uma variável é acessível.

Exceção: Erro que ocorre durante a execução do programa.

F

f-string: Formatação de strings com variáveis embutidas (ex: f"Nome: {nome}").

False: Valor booleano que representa falso.

Float: Tipo de dado numérico com ponto decimal (números reais).

for: Loop que itera sobre uma sequência (lista, string, range, etc).

G

Global: Variável acessível em todo o programa, fora de funções.

I

if: Estrutura condicional que executa código apenas se condição for verdadeira.

import: Comando para carregar módulos/bibliotecas em seu programa.

in: Operador que verifica se elemento está em uma sequência.

Indentação: Espaços/tabs no início da linha que definem blocos de código em Python.

IndexError: Erro quando tenta acessar índice inexistente em lista.

int: Tipo de dado numérico inteiro (sem decimais).

is: Operador que verifica identidade de objetos (se são o mesmo objeto).

Iteração: Uma execução de um loop.

Iterável: Objeto que pode ser percorrido em loop (lista, tupla, string, etc).

K

KeyError: Erro quando tenta acessar chave inexistente em dicionário.

Keyword argument: Argumento de função especificado por nome (ex: func(nome="Ana")).

L

Lambda: Função anônima de uma linha (ex: lambda x: x**2).

len(): Função que retorna tamanho de sequência.

Lista (list): Sequência ordenada e mutável de elementos [1, 2, 3].

Local: Variável acessível apenas dentro da função onde foi criada.

M

Método: Função associada a um objeto.

Mutável: Objeto que pode ser modificado após criação (listas, dicionários).

N

None: Valor especial que representa ausência de valor.

not: Operador lógico de negação.

O

Objeto: Instância de uma classe com dados e métodos.

Operador: Símbolo para operações (+, -, *, /, ==, >, etc).

or: Operador lógico OU.

P

Parâmetro: Variável na definição de função que recebe argumentos.

pass: Comando que não faz nada, usado como placeholder.

print(): Função para exibir saída no console.

PEP 8: Guia de estilo oficial para código Python.

R

range(): Função que gera sequência de números.

return: Comando que retorna valor de uma função.

S

Set (conjunto): Coleção não ordenada de elementos únicos {1, 2, 3}.

Slice (fatia): Operação para obter subsequência lista[1:5].

str (string): Tipo de dado textual (sequência de caracteres).

SyntaxError: Erro de sintaxe, código escrito incorretamente.

T

True: Valor booleano que representa verdadeiro.

try/except: Estrutura para capturar e tratar exceções.

Tupla (tuple): Sequência ordenada e imutável (1, 2, 3).

type(): Função que retorna tipo de um objeto.

V

ValueError: Erro quando função recebe argumento de tipo correto mas valor inadequado.

Variável: Nome que armazena valor que pode mudar.

W

while: Loop que executa enquanto condição for verdadeira.

Exemplos Práticos

# Variáveis e tipos
nome = "Maria"  # string
idade = 25      # int
altura = 1.65   # float
ativo = True    # bool

# Lista (mutável)
frutas = ["maçã", "banana", "uva"]
frutas.append("laranja")

# Tupla (imutável)
coordenadas = (10, 20)

# Dicionário
pessoa = {
    "nome": "João",
    "idade": 30,
    "cidade": "Florianópolis"
}

# Função
def calcular_area(largura, altura):
    """Calcula área de retângulo"""
    return largura * altura

# Condicional
if idade >= 18:
    print("Maior de idade")
else:
    print("Menor de idade")

# Loop for
for fruta in frutas:
    print(fruta)

# Loop while
contador = 0
while contador < 5:
    print(contador)
    contador += 1

# Comprehension
quadrados = [x**2 for x in range(10)]

# Try/except
try:
    resultado = 10 / 0
except ZeroDivisionError:
    print("Divisão por zero!")

💡 Dica: Use help(função) no Python para ver documentação de qualquer função!

🐍 Sintaxe Básica de Python

O que é Sintaxe?

Sintaxe = as "regras de escrita" da linguagem.

Assim como português tem regras (acentuação, pontuação), Python também tem.


🎯 Seu Primeiro Programa

Executar o Básico

Abra VS Code, crie arquivo hello.py:

print("🎉 Olá, Mundo!")

Execute:

python hello.py

Resultado:

🎉 Olá, Mundo!

Parabéns! Você escreveu seu primeiro programa! 🚀


📝 Comentários (Notas no Código)

Comentários são anotações que não são executadas.

# Isto é um comentário de linha única
# Python ignora tudo depois de #

print("Isto executa")  # Comentário depois do código

# Comentário de múltiplas linhas
# Você pode escrever quantas linhas quiser
# Python ignora tudo

"""
Isto é um docstring (comentário de documentação)
Usado para descrever funções e módulos
Pode ter múltiplas linhas
"""

Boa prática: Escreva comentários explicando O QUE o código faz, não COMO.

# ❌ Ruim - explica óbvio
x = x + 1  # Adiciona 1 a x

# ✅ Bom - explica o contexto
profundidade_final = profundidade_inicial + incremento_coleta  # Soma profundidade de coleta

print() é a função mais básica. Mostra mensagens na tela.

# Texto simples
print("Olá, Oceanógrafo!")

# Múltiplos valores
print("Temperatura:", 22.5)

# Vários argumentos separados por vírgula
print("Data", "Espécie", "Profundidade")

# Sem quebra de linha
print("Python", end=" ")
print("Oceanografia")  # Resultado: "Python Oceanografia"

# Com separador customizado
print("Ulva", "Gracilaria", "Sargassum", sep=" | ")
# Resultado: Ulva | Gracilaria | Sargassum

📥 Input (Receber Informações)

input() pede informação do usuário.

# Solicitar nome
nome = input("Qual seu nome? ")
print(f"Bem-vindo, {nome}!")

# Solicitar número
# ⚠️ IMPORTANTE: input() sempre retorna TEXTO!
idade_texto = input("Qual sua idade? ")
idade = int(idade_texto)  # Converter para número

# Forma abreviada
idade = int(input("Qual sua idade? "))

Exemplo Completo:

Crie arquivo coleta_dados.py:

# Sistema de cadastro de amostra
print("=" * 50)
print("📝 CADASTRO DE AMOSTRA DE COLETA")
print("=" * 50)

especie = input("Espécie coletada: ")
profundidade = float(input("Profundidade (m): "))
temperatura = float(input("Temperatura (°C): "))

print("\n✅ Amostra cadastrada:")
print(f"   Espécie: {especie}")
print(f"   Profundidade: {profundidade}m")
print(f"   Temperatura: {temperatura}°C")

Execute:

python coleta_dados.py

Resultado:

==================================================
📝 CADASTRO DE AMOSTRA DE COLETA
==================================================
Espécie coletada: Ulva lactuca
Profundidade (m): 5.2
Temperatura (°C): 22.5

✅ Amostra cadastrada:
   Espécie: Ulva lactuca
   Profundidade: 5.2m
   Temperatura: 22.5°C

🔤 String (Texto) - Operações

Concatenação (Juntar Strings)

# Método 1: Usar + (mais antigo)
nome = "Caetano"
sobrenome = "Ronan"
completo = nome + " " + sobrenome
print(completo)  # Caetano Ronan

# Método 2: f-string (RECOMENDADO - Python 3.6+)
especie = "Ulva lactuca"
profundidade = 5.2
msg = f"Amostra de {especie} a {profundidade}m"
print(msg)  # Amostra de Ulva lactuca a 5.2m

# Dentro de f-string, você pode usar expressões!
temperatura = 22.5
print(f"Temperatura: {temperatura:.1f}°C")  # .1f = 1 casa decimal
print(f"Temperatura + 5: {temperatura + 5}°C")

Propriedades de String

texto = "Oceanografia"

# Tamanho
print(len(texto))  # 12

# Maiúsculas
print(texto.upper())  # OCEANOGRAFIA

# Minúsculas
print(texto.lower())  # oceanografia

# Primeira letra maiúscula
print(texto.capitalize())  # Oceanografia

# Substituir texto
print(texto.replace("Oceano", "Bio"))  # Biorafia

# Dividir em partes
frase = "Ulva,Gracilaria,Sargassum"
especies = frase.split(",")
print(especies)  # ['Ulva', 'Gracilaria', 'Sargassum']

# Verificar se contém
if "Ulva" in frase:
    print("✅ Ulva encontrada!")

🔢 Números - Operações

Inteiros (int)

a = 10
b = 3

print(a + b)    # 13
print(a - b)    # 7
print(a * b)    # 30
print(a / b)    # 3.333... (divisão com decimal)
print(a // b)   # 3 (divisão inteira)
print(a % b)    # 1 (resto da divisão)
print(a ** b)   # 1000 (10 elevado a 3)

# Operações com atribuição
numero = 5
numero += 3  # numero = numero + 3 → 8
numero -= 2  # numero = numero - 2 → 6
numero *= 2  # numero = numero * 2 → 12
numero //= 3 # numero = numero // 3 → 4

Decimais (float)

temperatura = 22.5
profundidade = 5.0
salinidade = 35.123456

# Arredondamento
print(round(salinidade, 2))  # 35.12 (2 casas decimais)
print(round(salinidade, 1))  # 35.1 (1 casa decimal)

# Função abs (valor absoluto)
print(abs(-5.2))  # 5.2

# Funções matemáticas
import math
print(math.sqrt(16))  # 4.0 (raiz quadrada)
print(math.pi)        # 3.14159...
print(math.ceil(5.2))  # 6 (arredonda para cima)
print(math.floor(5.8)) # 5 (arredonda para baixo)

✅ Booleanos (Verdadeiro/Falso)

# Valores booleanos
verdade = True
falsidade = False

# Comparações retornam booleanos
print(5 > 3)      # True
print(5 < 3)      # False
print(5 == 5)     # True (igual)
print(5 != 3)     # True (diferente)
print(5 >= 5)     # True (maior ou igual)

# Operadores lógicos
print(True and True)    # True
print(True and False)   # False
print(True or False)    # True
print(not True)         # False

# Exemplos práticos
temperatura = 22.5
profundidade = 5.2

# Verificar se coleta foi válida
valida = (temperatura > 20) and (profundidade < 10)
print(f"Coleta válida: {valida}")  # True

📋 Conversão de Tipos

Às vezes você precisa converter um tipo para outro.

# String para Número
texto_numero = "123"
numero = int(texto_numero)
print(tipo)  # <class 'int'>

# Número para String
numero = 42
texto = str(numero)
print(texto)  # "42"

# String para Decimal
texto_decimal = "3.14"
decimal = float(texto_decimal)
print(decimal)  # 3.14

# Número para Boolean
print(bool(0))     # False (0 é falso)
print(bool(1))     # True (número != 0 é verdadeiro)
print(bool(""))    # False (string vazia é falsa)
print(bool("Oi"))  # True (string não vazia é verdadeira)

🔍 Tipo de Dado (type)

Verificar que tipo é uma variável:

print(type(5))              # <class 'int'>
print(type(5.0))            # <class 'float'>
print(type("Olá"))          # <class 'str'>
print(type(True))           # <class 'bool'>
print(type([1, 2, 3]))      # <class 'list'>

# Usar em condição
valor = "123"
if type(valor) == str:
    print("É uma string!")

🎯 Exemplo Prático: Sistema de Coleta

Crie arquivo analise_coleta.py:

print("🌊 SISTEMA DE ANÁLISE DE COLETA")
print("-" * 50)

# Receber dados
especie = input("Espécie: ")
profundidade = float(input("Profundidade (m): "))
temperatura = float(input("Temperatura (°C): "))
salinidade = float(input("Salinidade (PSU): "))

# Validações
print("\n📊 ANÁLISE:")

# Verificar profundidade
if profundidade < 5:
    profundidade_status = "Rasa"
elif profundidade < 20:
    profundidade_status = "Intermediária"
else:
    profundidade_status = "Profunda"
print(f"Profundidade: {profundidade}m ({profundidade_status})")

# Verificar temperatura
if 20 <= temperatura <= 25:
    temp_status = "✅ Ideal"
else:
    temp_status = "⚠️ Fora do padrão"
print(f"Temperatura: {temperatura}°C {temp_status}")

# Verificar salinidade
salinidade_arredondada = round(salinidade, 1)
print(f"Salinidade: {salinidade_arredondada} PSU")

# Resumo
valida = (20 <= temperatura <= 25) and (profundidade < 50)
status_final = "✅ VÁLIDA" if valida else "❌ INVÁLIDA"
print(f"\nStatus da coleta: {status_final}")

Execute:

python analise_coleta.py

💾 Variáveis - Boas Práticas

Nomes de Variáveis em Python

# ✅ BOM - Descritivo, em inglês ou português claro
temperatura_media = 22.5
profundidade_coleta_m = 5.2
especie_coletada = "Ulva lactuca"
numero_amostras = 10

# ❌ RUIM - Genérico ou confuso
t = 22.5
x = 5.2
s = "Ulva lactuca"
n = 10

# ✅ BOM - Constantes em MAIÚSCULA
PI = 3.14159
PROFUNDIDADE_MAXIMA = 100
TEMPERATURA_IDEAL_MINIMA = 20
TEMPERATURA_IDEAL_MAXIMA = 25

# ❌ EVITAR
meu_valor_muito_longo_que_ninguem_entende = 42
_variavel = 10  # Convenção: começa com _ = privada

Escopo de Variáveis

# Variável global
mensagem_global = "Oceanografia UFSC"

if True:
    # Variável local
    mensagem_local = "LAFIC"
    print(mensagem_global)  # ✅ Funciona
    print(mensagem_local)   # ✅ Funciona

print(mensagem_global)  # ✅ Funciona
print(mensagem_local)   # ❌ ERRO - não existe fora do bloco

🎓 Exemplo Completo: Calculadora Oceanográfica

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
Calculadora Oceanográfica
Calcula propriedades de água marinha
"""

print("=" * 60)
print("🌊 CALCULADORA OCEANOGRÁFICA")
print("=" * 60)

# Constantes
SALINIDADE_PADRAO = 35.0
DENSIDADE_AGUA_DOCE = 1.0
DENSIDADE_AGUA_SALGADA_COEF = 0.8

# Entrada de dados
print("\n📥 Digite os parâmetros:")
profundidade = float(input("Profundidade (m): "))
temperatura = float(input("Temperatura (°C): "))
salinidade = float(input("Salinidade (PSU): "))

# Cálculos
print("\n📊 RESULTADOS:\n")

# Densidade aproximada
densidade = 1000 + (salinidade - SALINIDADE_PADRAO) * 0.78
print(f"Densidade da água: {densidade:.2f} kg/m³")

# Pressão aproximada (1 atm por 10m)
pressao_atm = 1 + (profundidade / 10)
print(f"Pressão: {pressao_atm:.2f} atm")

# Luz solar (50% em ~5m, ~1% em ~30m)
penetracao_luz = 100 * (0.7 ** (profundidade / 10))
print(f"Penetração de luz: {penetracao_luz:.1f}%")

# Status da coleta
print("\n✓ STATUS DA COLETA:")
if 20 <= temperatura <= 28:
    print("✅ Temperatura adequada")
else:
    print("⚠️ Temperatura fora do ideal")

if 34 <= salinidade <= 36:
    print("✅ Salinidade adequada")
else:
    print("⚠️ Salinidade fora do ideal")

if profundidade < 50:
    print("✅ Profundidade acessível")
else:
    print("⚠️ Profundidade muito grande")

print("\n" + "=" * 60)

🎓 Checklist desta Lição

  • [ ] Entendo o que é print() e input()
  • [ ] Consigo fazer concatenação de strings
  • [ ] Entendo operações com números
  • [ ] Sou capaz de converter tipos (int, float, str)
  • [ ] Testei pelo menos 3 exemplos
  • [ ] Sei o que são variáveis e boas práticas de nomes

Se marcou tudo, você está pronto para Estruturas de Dados! 🎉


➡️ Próximo Tópico

👉 02-Estruturas-Dados.html

Lá você aprenderá: - Listas (arrays) - Dicionários - Tuplas - Conjuntos - Operações com coleções


📝 Resumo de Funções Básicas

Função Uso Exemplo
print() Mostrar na tela print("Olá")
input() Receber do usuário nome = input("Nome: ")
int() Converter para inteiro int("5") → 5
float() Converter para decimal float("3.14") → 3.14
str() Converter para string str(42) → "42"
len() Tamanho len("Olá") → 3
type() Ver tipo type(5)<class 'int'>
round() Arredondar round(3.7) → 4

Você está progredindo rápido! 🚀 Próximo: Estruturas de Dados!

📊 Estruturas de Dados em Python

O que são Estruturas de Dados?

Estrutura de dados = forma de organizar múltiplos valores.

Analogia: - Uma variável = uma caixa com um item - Uma estrutura = uma caixa com vários itens organizados


📋 Listas (Arrays)

A estrutura mais usada em Python!

Criar uma Lista

# Lista vazia
lista_vazia = []

# Lista com valores
especies = ["Ulva", "Gracilaria", "Sargassum"]
temperaturas = [22.5, 23.1, 22.8, 23.4, 22.9]
dados_mistos = [1, "texto", 3.14, True, [1, 2, 3]]

# Usando list()
numeros = list(range(1, 6))  # [1, 2, 3, 4, 5]

Acessar Elementos

especies = ["Ulva", "Gracilaria", "Sargassum"]

# Índices começam em 0!
print(especies[0])   # "Ulva"
print(especies[1])   # "Gracilaria"
print(especies[2])   # "Sargassum"

# Índices negativos (do final para trás)
print(especies[-1])  # "Sargassum" (último)
print(especies[-2])  # "Gracilaria" (penúltimo)

Modificar Lista

especies = ["Ulva", "Gracilaria", "Sargassum"]

# Alterar elemento
especies[0] = "Ulva lactuca"

# Adicionar um elemento no final
especies.append("Laminaria")
print(especies)  # ["Ulva lactuca", "Gracilaria", "Sargassum", "Laminaria"]

# Inserir em posição específica
especies.insert(1, "Chondracanthus")
print(especies)  # ["Ulva lactuca", "Chondracanthus", ...]

# Remover elemento (por valor)
especies.remove("Sargassum")

# Remover elemento (por índice)
removida = especies.pop(0)  # Remove e retorna primeiro

# Remover tudo
especies.clear()

Operações com Listas

temperaturas = [22.5, 23.1, 22.8, 23.4, 22.9]

# Tamanho
print(len(temperaturas))  # 5

# Soma
print(sum(temperaturas))  # 114.7

# Máximo e mínimo
print(max(temperaturas))  # 23.4
print(min(temperaturas))  # 22.5

# Ordenar
ordenado = sorted(temperaturas)
print(ordenado)  # [22.5, 22.8, 22.9, 23.1, 23.4]

# Reverso
reverso = list(reversed(temperaturas))
print(reverso)  # [22.9, 23.4, 22.8, 23.1, 22.5]

# Verificar se contém
if 22.5 in temperaturas:
    print("✅ Encontrada")

# Contar ocorrências
amostras = ["Ulva", "Gracilaria", "Ulva", "Ulva", "Sargassum"]
print(amostras.count("Ulva"))  # 3

# Encontrar índice
print(amostras.index("Gracilaria"))  # 1

Fatiar Lista (Slicing)

especies = ["Ulva", "Gracilaria", "Sargassum", "Laminaria", "Chondracanthus"]

# [início:fim:passo] - fim é EXCLUSIVO!
print(especies[0:2])      # ["Ulva", "Gracilaria"]
print(especies[1:4])      # ["Gracilaria", "Sargassum", "Laminaria"]
print(especies[:3])       # ["Ulva", "Gracilaria", "Sargassum"] (começa do início)
print(especies[2:])       # ["Sargassum", "Laminaria", "Chondracanthus"] (até o fim)
print(especies[::2])      # ["Ulva", "Sargassum", "Chondracanthus"] (cada 2)
print(especies[::-1])     # Reverso! ["Chondracanthus", "Laminaria", ...]

Juntar e Dividir Listas

lista1 = [1, 2, 3]
lista2 = [4, 5, 6]

# Juntar
combinada = lista1 + lista2
print(combinada)  # [1, 2, 3, 4, 5, 6]

# Repetir
repetida = [1, 2] * 3
print(repetida)  # [1, 2, 1, 2, 1, 2]

# Dividir (string para lista)
texto = "Ulva,Gracilaria,Sargassum"
especies = texto.split(",")
print(especies)  # ["Ulva", "Gracilaria", "Sargassum"]

# Juntar (lista para string)
resultado = " | ".join(especies)
print(resultado)  # "Ulva | Gracilaria | Sargassum"

🔑 Dicionários (Dicts)

Dados com rótulo/chave.

Criar Dicionário

# Dicionário vazio
vazio = {}

# Com dados
amostra = {
    "id": 1,
    "especie": "Ulva lactuca",
    "profundidade": 5.2,
    "temperatura": 22.5,
    "valida": True
}

# Usando dict()
dados = dict(nome="Caetano", profissao="Oceanógrafo")

Acessar Valores

amostra = {
    "especie": "Ulva lactuca",
    "profundidade": 5.2,
    "temperatura": 22.5
}

# Acessar por chave
print(amostra["especie"])      # "Ulva lactuca"
print(amostra["profundidade"]) # 5.2

# Usando .get() (mais seguro)
print(amostra.get("especie"))        # "Ulva lactuca"
print(amostra.get("salario", "N/A")) # "N/A" (não existe)

Modificar Dicionário

amostra = {"especie": "Ulva", "profundidade": 5.2}

# Adicionar chave
amostra["temperatura"] = 22.5

# Modificar existente
amostra["profundidade"] = 6.0

# Remover chave
del amostra["temperatura"]

# Remover e retornar
valor = amostra.pop("profundidade")  # Remove e retorna 6.0

# Limpar tudo
amostra.clear()

Operações com Dicionários

amostra = {
    "especie": "Ulva",
    "profundidade": 5.2,
    "temperatura": 22.5,
    "valida": True
}

# Tamanho
print(len(amostra))  # 4

# Chaves
print(amostra.keys())  # dict_keys(['especie', 'profundidade', ...])

# Valores
print(amostra.values())  # dict_values(['Ulva', 5.2, 22.5, True])

# Pares chave-valor
print(amostra.items())  # dict_items([('especie', 'Ulva'), ...])

# Verificar se chave existe
if "especie" in amostra:
    print("✅ Existe")

# Atualizar múltiplas chaves
amostra.update({"profundidade": 7.0, "salinidade": 35.0})

Exemplo Prático: Registro de Amostra

# Criar vários registros
amostras = [
    {"id": 1, "especie": "Ulva", "prof_m": 5.2, "temp_c": 22.5},
    {"id": 2, "especie": "Gracilaria", "prof_m": 7.8, "temp_c": 23.1},
    {"id": 3, "especie": "Sargassum", "prof_m": 3.1, "temp_c": 22.8}
]

# Acessar
print(amostras[0]["especie"])  # "Ulva"
print(amostras[1]["temp_c"])   # 23.1

# Iterar
for amostra in amostras:
    print(f"ID {amostra['id']}: {amostra['especie']} a {amostra['prof_m']}m")

(Tuplas)

Listas imutáveis (não podem ser alteradas).

# Tupla (com parênteses)
coordenadas = (27.5, -48.5)  # latitude, longitude

# Acessar
print(coordenadas[0])  # 27.5
print(coordenadas[1])  # -48.5

# Tuplas são imutáveis
coordenadas[0] = 28.0  # ❌ ERRO!

# Mas podem ser reatribuídas
coordenadas = (28.0, -48.5)  # ✅ OK

# Desempacotamento
lat, lon = coordenadas
print(f"Latitude: {lat}, Longitude: {lon}")

# Múltiplos retornos de função
def get_localizacao():
    return (27.5, -48.5, 15)  # lat, lon, profundidade

lat, lon, prof = get_localizacao()

Quando usar: Quando você quer garantir que dados não sejam alterados.


⚙️ Conjuntos (Sets)

Coleções sem duplicatas.

# Criar conjunto
especies_unicas = {"Ulva", "Gracilaria", "Sargassum", "Ulva"}
print(especies_unicas)  # {'Ulva', 'Gracilaria', 'Sargassum'} - sem duplicata!

# Operações
especies_unicas.add("Laminaria")
especies_unicas.remove("Ulva")

# Interseção (elementos em comum)
grupo1 = {"Ulva", "Gracilaria", "Sargassum"}
grupo2 = {"Ulva", "Laminaria", "Codium"}
comuns = grupo1 & grupo2
print(comuns)  # {'Ulva'}

# União (tudo)
todos = grupo1 | grupo2
print(todos)  # {'Ulva', 'Gracilaria', 'Sargassum', 'Laminaria', 'Codium'}

# Diferença
so_em_grupo1 = grupo1 - grupo2

🔄 Loops com Estruturas

For Loop com Listas

especies = ["Ulva", "Gracilaria", "Sargassum"]

# Iterar valores
for especie in especies:
    print(f"Analisando: {especie}")

# Iterar com índice
for i, especie in enumerate(especies):
    print(f"{i}: {especie}")  # 0: Ulva, 1: Gracilaria, 2: Sargassum

# Iterar com range
for i in range(len(especies)):
    print(f"{i}: {especies[i]}")

For Loop com Dicionários

amostra = {"especie": "Ulva", "prof_m": 5.2, "temp_c": 22.5}

# Iterar chaves
for chave in amostra:
    print(chave)

# Iterar valores
for valor in amostra.values():
    print(valor)

# Iterar pares
for chave, valor in amostra.items():
    print(f"{chave}: {valor}")

While Loop

# Contar até 5
contador = 1
while contador <= 5:
    print(f"Contagem: {contador}")
    contador += 1

# Coletar dados até digitar "sair"
temperaturas = []
while True:
    temp = input("Digite temperatura (ou 'sair'): ")
    if temp.lower() == "sair":
        break
    temperaturas.append(float(temp))

print(f"Temperaturas coletadas: {temperaturas}")

💡 Compreensão de Listas (List Comprehension)

Forma elegante de criar listas:

# Forma tradicional
quadrados = []
for i in range(1, 6):
    quadrados.append(i ** 2)
print(quadrados)  # [1, 4, 9, 16, 25]

# Compreensão de lista (mais Pythônica)
quadrados = [i ** 2 for i in range(1, 6)]
print(quadrados)  # [1, 4, 9, 16, 25]

# Com condição
pares = [i for i in range(1, 11) if i % 2 == 0]
print(pares)  # [2, 4, 6, 8, 10]

# Exemplo oceanográfico
temperaturas_raw = [22.5, 23.1, 22.8, 23.4, 22.9]
# Arredondar todas para 1 casa decimal
temperaturas_limpas = [round(t, 1) for t in temperaturas_raw]
print(temperaturas_limpas)  # [22.5, 23.1, 22.8, 23.4, 22.9]

# Com transformação
especias_maiusculas = [sp.upper() for sp in ["Ulva", "Gracilaria"]]
print(especias_maiusculas)  # ['ULVA', 'GRACILARIA']

🎯 Exemplo Prático Completo

Crie arquivo analise_amostras.py:

"""
Sistema de análise de amostras de ficologia
"""

# Banco de dados de amostras
amostras = [
    {"id": 1, "especie": "Ulva lactuca", "prof_m": 5.2, "temp_c": 22.5, "sal_psu": 35.0},
    {"id": 2, "especie": "Gracilaria", "prof_m": 7.8, "temp_c": 23.1, "sal_psu": 34.8},
    {"id": 3, "especie": "Sargassum", "prof_m": 3.1, "temp_c": 22.8, "sal_psu": 35.1},
    {"id": 4, "especie": "Ulva lactuca", "prof_m": 6.5, "temp_c": 23.4, "sal_psu": 35.0},
]

print("=" * 60)
print("📊 ANÁLISE DE AMOSTRAS - LAFIC")
print("=" * 60)

# 1. Listar todas as amostras
print("\n📋 AMOSTRAS COLETADAS:")
for amostra in amostras:
    print(f"  #{amostra['id']}: {amostra['especie']} "
          f"({amostra['prof_m']}m, {amostra['temp_c']}°C)")

# 2. Encontrar espécie mais frequente
especies = [a["especie"] for a in amostras]
especie_freq = max(set(especies), key=especies.count)
print(f"\n🌿 Espécie mais frequente: {especie_freq}")

# 3. Média de profundidade
profundidades = [a["prof_m"] for a in amostras]
prof_media = sum(profundidades) / len(profundidades)
print(f"📏 Profundidade média: {prof_media:.1f}m")

# 4. Temperatura extrema
temp_minima = min(amostras, key=lambda x: x["temp_c"])
temp_maxima = max(amostras, key=lambda x: x["temp_c"])
print(f"🌡️ Temperatura: {temp_minima['temp_c']}°C (min) a {temp_maxima['temp_c']}°C (max)")

# 5. Filtrar amostras válidas
validas = [a for a in amostras if 20 <= a["temp_c"] <= 25]
print(f"\n✅ Amostras válidas: {len(validas)}/{len(amostras)}")

# 6. Relatório final
print("\n" + "=" * 60)
print("✓ Análise concluída com sucesso!")

Execute:

python analise_amostras.py

🎓 Checklist desta Lição

  • [ ] Entendo listas e operações básicas
  • [ ] Sei usar dicionários
  • [ ] Consigo usar loops com estruturas
  • [ ] Entendo fatiar listas (slicing)
  • [ ] Testei pelo menos 3 exemplos completos
  • [ ] Conheço list comprehension

Se marcou tudo, você está pronto para Funções! 🎉


➡️ Próximo Tópico

👉 03-Funcoes-Modulos.html

Lá você aprenderá: - Definir funções - Parâmetros e retornos - Escopo de variáveis - Importar módulos


📝 Resumo de Operações

Estrutura Exemplo Mutável?
Lista [1, 2, 3] ✅ Sim
Dicionário {"a": 1} ✅ Sim
Tupla (1, 2, 3) ❌ Não
Conjunto {1, 2, 3} ✅ Sim

Você está aprendendo rápido! Próximo: Funções! 🚀

🔧 Funções e Módulos

O que são Funções?

Função = bloco de código reutilizável.

Analogia

Sem funções: Copiar e colar o mesmo código 100 vezes
Com funções: Escrever uma vez, usar 100 vezes

📝 Definir uma Função

Sintaxe Básica

def nome_funcao():
    """Descrição da função (docstring)"""
    # código aqui
    pass

# Chamar função
nome_funcao()

Exemplo Simples

def saudar():
    """Sauda o usuário"""
    print("Olá, bem-vindo ao LAFIC!")

# Chamar
saudar()  # Printa: "Olá, bem-vindo ao LAFIC!"

📥 Parâmetros (Receber Dados)

Funções podem receber dados para processar.

Parâmetros Simples

def saudar(nome):
    """Sauda uma pessoa específica"""
    print(f"Olá, {nome}!")

# Chamar com argumento
saudar("Caetano")      # Printa: "Olá, Caetano!"
saudar("Mariana")      # Printa: "Olá, Mariana!"

# Múltiplos parâmetros
def calcular_imc(peso, altura):
    """Calcula IMC"""
    imc = peso / (altura ** 2)
    return imc

resultado = calcular_imc(70, 1.75)
print(f"IMC: {resultado:.1f}")

Parâmetros com Valores Padrão

def saudar(nome, idioma="português"):
    """Sauda em um idioma"""
    if idioma == "português":
        print(f"Olá, {nome}!")
    elif idioma == "inglês":
        print(f"Hello, {nome}!")

# Chamar
saudar("Caetano")                    # Usa padrão português
saudar("Caetano", idioma="inglês")   # Especifica inglês

📤 Return (Retornar Valores)

Funções podem retornar resultados.

Return Simples

def celsius_para_fahrenheit(celsius):
    """Converte Celsius para Fahrenheit"""
    fahrenheit = (celsius * 9/5) + 32
    return fahrenheit

# Usar retorno
temp_f = celsius_para_fahrenheit(22.5)
print(f"22.5°C = {temp_f:.1f}°F")  # 72.5°F

# Sem salvar
print(celsius_para_fahrenheit(25))  # 77.0

Múltiplos Retornos

def calcular_estatisticas(numeros):
    """Calcula média, mín e máx"""
    media = sum(numeros) / len(numeros)
    minimo = min(numeros)
    maximo = max(numeros)
    return media, minimo, maximo

# Desempacotar retorno
temps = [22.5, 23.1, 22.8, 23.4]
media, minima, maxima = calcular_estatisticas(temps)
print(f"Média: {media:.1f}, Min: {minima}, Max: {maxima}")
# Média: 23.0, Min: 22.5, Max: 23.4

Retornar Dicionário

def analisar_amostra(especie, prof_m, temp_c):
    """Analisa uma amostra e retorna resultado"""

    valida = 20 <= temp_c <= 25 and prof_m < 10

    resultado = {
        "especie": especie,
        "profundidade_m": prof_m,
        "temperatura_c": temp_c,
        "valida": valida,
        "status": "✅ VÁLIDA" if valida else "❌ INVÁLIDA"
    }

    return resultado

# Usar
analise = analisar_amostra("Ulva lactuca", 5.2, 22.5)
print(analise["status"])  # ✅ VÁLIDA

🔍 Documentação (Docstrings)

Docstrings explicam o que a função faz.

def processar_temperatura(celsius):
    """
    Converte temperatura de Celsius para Fahrenheit.

    Args:
        celsius (float): Temperatura em Celsius

    Returns:
        float: Temperatura em Fahrenheit

    Example:
        >>> processar_temperatura(0)
        32.0
        >>> processar_temperatura(100)
        212.0
    """
    return (celsius * 9/5) + 32

# Ver documentação
help(processar_temperatura)
# ou
print(processar_temperatura.__doc__)

⚙️ Exemplo: Sistema de Validação

def validar_amostra(especie, profundidade, temperatura, salinidade):
    """
    Valida uma amostra de coleta.

    Returns:
        dict: Resultado da validação com status e mensagens
    """

    erros = []
    avisos = []

    # Validação de espécie
    especies_validas = ["Ulva", "Gracilaria", "Sargassum", "Laminaria"]
    if especie not in especies_validas:
        erros.append(f"Espécie '{especie}' não reconhecida")

    # Validação de profundidade
    if profundidade < 0:
        erros.append("Profundidade não pode ser negativa")
    elif profundidade > 100:
        avisos.append("Profundidade muito grande (>100m)")

    # Validação de temperatura
    if not (15 <= temperatura <= 30):
        erros.append(f"Temperatura {temperatura}°C fora do intervalo (15-30°C)")
    if temperatura < 20 or temperatura > 25:
        avisos.append("Temperatura não ideal (ideal: 20-25°C)")

    # Validação de salinidade
    if not (30 <= salinidade <= 40):
        erros.append(f"Salinidade {salinidade} PSU fora do intervalo (30-40)")

    # Resultado
    valida = len(erros) == 0

    return {
        "valida": valida,
        "status": "✅ VÁLIDA" if valida else "❌ INVÁLIDA",
        "erros": erros,
        "avisos": avisos
    }

# Teste
resultado = validar_amostra("Ulva", 5.2, 22.5, 35.0)
print(resultado["status"])      # ✅ VÁLIDA
print(resultado["erros"])       # []

resultado2 = validar_amostra("Alga desconhecida", -5, 35, 50)
print(resultado2["status"])     # ❌ INVÁLIDA
print(resultado2["erros"])      # Lista de erros

🔄 Escopo de Variáveis

Onde uma variável pode ser usada.

# Variável global
mensagem_global = "LAFIC"

def mostrar_mensagem():
    # Pode acessar global
    print(mensagem_global)

    # Variável local
    mensagem_local = "Oceanografia"
    print(mensagem_local)

mostrar_mensagem()
# Printa:
# LAFIC
# Oceanografia

print(mensagem_global)  # ✅ Funciona
print(mensagem_local)   # ❌ ERRO - não existe fora da função

Modificar Global

contador = 0

def incrementar():
    global contador  # Autorizar modificação
    contador += 1

incrementar()
print(contador)  # 1

📚 Módulos (Reutilizar Código)

Módulos são arquivos Python com código reutilizável.

Criar um Módulo

Crie arquivo oceanografia.py:

"""
Módulo com funções oceanográficas
"""

def celsius_para_fahrenheit(celsius):
    """Converte Celsius para Fahrenheit"""
    return (celsius * 9/5) + 32

def calcular_densidade_agua(salinidade, temperatura):
    """Calcula densidade aproximada da água"""
    # Fórmula simplificada
    densidade = 1000 + (salinidade - 35) * 0.78 - (temperatura - 15) * 0.2
    return densidade

def validar_coleta(temperatura, profundidade):
    """Verifica se coleta foi válida"""
    return 20 <= temperatura <= 25 and profundidade < 50

Usar o Módulo

Crie arquivo usar_modulo.py:

# Importar tudo
import oceanografia

# Usar funções
temp_f = oceanografia.celsius_para_fahrenheit(22.5)
print(f"22.5°C = {temp_f:.1f}°F")

# Importar funções específicas
from oceanografia import celsius_para_fahrenheit, calcular_densidade_agua

temp_f = celsius_para_fahrenheit(25)
densidade = calcular_densidade_agua(35.0, 22.5)
print(f"Densidade: {densidade:.2f} kg/m³")

# Importar com apelido
from oceanografia import validar_coleta as validar

if validar(22.5, 5.2):
    print("✅ Coleta válida!")

📦 Bibliotecas Padrão Úteis

math (Matemática)

import math

print(math.pi)              # 3.14159...
print(math.sqrt(16))        # 4.0
print(math.ceil(5.2))       # 6 (arredonda para cima)
print(math.floor(5.8))      # 5 (arredonda para baixo)
print(math.sin(math.pi/2))  # 1.0

datetime (Data e Hora)

from datetime import datetime, timedelta

agora = datetime.now()
print(agora)  # 2025-01-06 14:30:45.123456

# Formatar
print(agora.strftime("%d/%m/%Y"))  # 06/01/2025

# Adicionar dias
amanha = agora + timedelta(days=1)
print(amanha)

random (Números Aleatórios)

import random

# Número aleatório
print(random.random())  # 0.123456... (0 a 1)

# Inteiro aleatório
print(random.randint(1, 10))  # Número de 1 a 10

# Escolher da lista
especies = ["Ulva", "Gracilaria", "Sargassum"]
escolhida = random.choice(especies)
print(escolhida)  # Aleatória

# Embaralhar
random.shuffle(especies)
print(especies)  # Embaralhada

🎯 Exemplo Completo: Processador de Dados

"""
Processador de dados de coleta oceanográfica
"""

def carregar_dados():
    """Simula carregamento de dados"""
    return [
        {"especie": "Ulva", "prof_m": 5.2, "temp_c": 22.5, "sal_psu": 35.0},
        {"especie": "Gracilaria", "prof_m": 7.8, "temp_c": 23.1, "sal_psu": 34.8},
        {"especie": "Sargassum", "prof_m": 3.1, "temp_c": 22.8, "sal_psu": 35.1},
    ]

def validar_dados(amostras):
    """Valida todas as amostras"""
    validas = 0
    invalidas = 0

    for amostra in amostras:
        if 20 <= amostra["temp_c"] <= 25 and amostra["prof_m"] < 10:
            validas += 1
        else:
            invalidas += 1

    return validas, invalidas

def calcular_medias(amostras):
    """Calcula médias dos parâmetros"""
    temps = [a["temp_c"] for a in amostras]
    profs = [a["prof_m"] for a in amostras]
    sals = [a["sal_psu"] for a in amostras]

    return {
        "temp_media_c": sum(temps) / len(temps),
        "prof_media_m": sum(profs) / len(profs),
        "sal_media_psu": sum(sals) / len(sals)
    }

def gerar_relatorio(amostras):
    """Gera relatório completo"""
    print("=" * 60)
    print("🌊 RELATÓRIO DE COLETA - LAFIC")
    print("=" * 60)

    # Total de amostras
    print(f"\n📊 Total de amostras: {len(amostras)}")

    # Validação
    validas, invalidas = validar_dados(amostras)
    print(f"✅ Válidas: {validas}")
    print(f"❌ Inválidas: {invalidas}")

    # Médias
    medias = calcular_medias(amostras)
    print(f"\n📈 Médias:")
    print(f"   Temperatura: {medias['temp_media_c']:.1f}°C")
    print(f"   Profundidade: {medias['prof_media_m']:.1f}m")
    print(f"   Salinidade: {medias['sal_media_psu']:.2f} PSU")

    # Espécies
    especies = [a["especie"] for a in amostras]
    print(f"\n🌿 Espécies coletadas: {', '.join(set(especies))}")

    print("\n" + "=" * 60)

# Executar
if __name__ == "__main__":
    dados = carregar_dados()
    gerar_relatorio(dados)

Execute:

python processador_dados.py

🎓 Boas Práticas

Faça: - Use nomes descritivos para funções - Escreva docstrings - Mantenha funções simples (uma coisa por função) - Use parâmetros em vez de variáveis globais

Evite: - Funções muito longas (>20 linhas) - Variáveis globais - Funções sem documentação - Modificar parâmetros sem aviso


🎓 Checklist desta Lição

  • [ ] Consigo definir uma função
  • [ ] Entendo parâmetros e retornos
  • [ ] Sei usar docstrings
  • [ ] Consigo criar módulos
  • [ ] Entendo escopo de variáveis
  • [ ] Testei pelo menos 3 exemplos completos

Se marcou tudo, você completou Python Essencial! 🎉


📝 Resumo de Conceitos

Conceito Descrição
Função Bloco de código reutilizável
Parâmetro Dados que função recebe
Return Valor que função retorna
Docstring Documentação da função
Escopo Onde uma variável existe
Módulo Arquivo com funções reutilizáveis

➡️ Próximos Passos

Parabéns! Você completou Python Essencial! 🚀

Próximos módulos: 1. 📚 Análise Geoespacial (GeoPandas, Folium) 2. 🗺️ Visualização Web (JavaScript, HTML) 3. 📊 Casos Práticos (Oceanografia real)


Você agora é um programador Python iniciante! 🐍 Vamos para análises geoespaciais? 🗺️