APRESENTAÇÃO
QUEM SÃO VOCÊS?
ACORDOS DE TIME
Introdução aos conceitos de linguagem de programação
Python
Definição
Ranking de Linguagens de Programação.
Porque usar Python?
Quem usa Python?
Aplicabilidade da linguagem Python
Instalação e configuração do ambiente
Gerenciador de pacote PIP
Virtual Environment
Tipos Básicos, Operadores e Variáveis
Estrutura de controle de fluxo
Listas, Tuplas e Dicionários
AGENDA
Funções
Arquivos
Orientação a Objetos
Classes
Objetos
Atributos
Métodos
Herança
Módulos
Importações
Exceções
AGENDA
Outros Pacotes Python
AGENDA
Comando em Português para Python
# Mostre a mensagem "Olá, mundo!"
print("Olá, mundo!")Cite um comando em português.
# Guarde o nome "Ana" em uma variável
nome = "Ana"# Some 2 com 3 e guarde o resultado
resultado = 2 + 3# Se a idade for maior ou igual a 18, diga "Pode votar"
if idade >= 18:
print("Pode votar")# Repita de 0 até 4 e mostre o número
for i in range(5):
print(i)TIPOS DE LINGUAGEM
Definições
write()
exit()
data()
Linguagem de máquina
Linguagem de montagem
LINGUAGEM COMPILADA
LINGUAGEM COMPILADA X INTERPRETADA
package main
import "fmt"
func main() {
fmt.Println("Olá, mundo!")
}
go build main.go
./main
main.exe
print("Olá, mundo!")
python programa.py “Enquanto o Python precisa estar instalado em qualquer máquina que vá rodar seu script, com Go você pode compilar e enviar só o executável.”
LINGUAGEM COMPILADA X INTERPRETADA
| Característica | Compilada | Interpretada |
|---|---|---|
| Tradução | Todo o código de uma vez | Linha por linha |
| Velocidade de execução | Mais rápida | Pode ser mais lenta |
| Portabilidade | Menos portável | Mais portável |
| Detecção de erros | Antes da execução (em tempo de compilação) | Durante a execução (em tempo real) |
| Gera arquivo executável? | Sim | Não |
| Exemplo de linguagem | C, C++, Rust, GO | Python, JavaScript |
LINGUAGEM INTERPRETADA X COMPILADA - PARA FIXAR
RANKING DE LINGUAGENS DE PROGRAMAÇÃO
RANKING DE LINGUAGENS DE PROGRAMAÇÃO
|
Python |
|
RANKING DE LINGUAGENS DE PROGRAMAÇÃO
TypeScript
RANKING DE LINGUAGENS DE PROGRAMAÇÃO
C++
RANKING DE LINGUAGENS DE PROGRAMAÇÃO
Go
Dito isso iremos trabalhar com...
DEFINIÇÃO
DEFINIÇÃO
É reconhecida por ser muito versátil, com ênfase na legibilidade do código, e por ter uma abordagem que permite aos programadores desenvolverem algoritmos melhor estruturados. Ela é orientada por uma lista de 19 princípios chamada de “The Zen of Python”
DEFINIÇÃO
PORQUE USAR PYTHON?
QUEM USA PYTHON?
QUEM USA PYTHON?
APLICABILIDADE DA LINGUAGEM PYTHON
INSTALAÇÃO E CONFIGURAÇÃO DO AMBIENTE
INSTALAÇÃO E CONFIGURAÇÃO DO AMBIENTE
INSTALAÇÃO E CONFIGURAÇÃO DO AMBIENTE
INSTALAÇÃO E CONFIGURAÇÃO DO AMBIENTE
Clique na opção Configurações avançadas do sistema.
INSTALAÇÃO E CONFIGURAÇÃO DO AMBIENTE
Clique na opção Variáveis de Ambiente.
INSTALAÇÃO E CONFIGURAÇÃO DO AMBIENTE
Edite a variável Path
INSTALAÇÃO E CONFIGURAÇÃO DO AMBIENTE
Adicione os caminhos da instalação do Python.
Raiz e \Scripts
INSTALAÇÃO E CONFIGURAÇÃO DO AMBIENTE
Abra o prompt de comando para confirmar a instalação e configuração do Python.
INSTALAÇÃO E CONFIGURAÇÃO DO AMBIENTE
GERENCIADOR DE PACOTE PIP
GERENCIADOR DE PACOTE PIP
INSTALANDO UM PACOTE PIP
pip install ipythonVERIFICANDO PACOTES PIP INSTALADOS
pip listATUALIZANDO PIP
COMPARTILHANDO BIBLIOTECAS
INSTALANDO BIBLIOTECAS COM REQUIREMENTS
VIRTUAL ENVIRONMENT (AMBIENTE VIRTUAL)
Um ambiente virtual empacota todas as dependências que um projeto precisa e armazena em um diretório.
INSTALAÇÃO E CONFIGURAÇÃO DO AMBIENTE
CRIANDO VIRTUAL ENVIRONMENT - MANUALMENTE
Criando um ambiente virtual Python
Ativando um ambiente virtual Python
Saindo de um ambiente virtual Python
nome_do_ambiente
CRIANDO VIRTUAL ENVIRONMENT - IDE
Também podemos criar o ambiente virtual diretamente pelo PyCharm.
O ideal é que você escolha uma pasta em seu sistema operacional, onde você deseja criar os ambientes virtuais.
CRIANDO VIRTUAL ENVIRONMENT - IDE
Ao criar um projeto no PyCharm é possível que na mesma hora você já faça a criação do ambiente virtual.
TIPOS BÁSICOS
# Inteiro
numero = 10
print(numero, type(numero)) # Output: 10 <class 'int'>
# Float
pi = 3.14159
print(pi, type(pi)) # Output: 3.14159 <class 'float'>
# String
nome = "Python"
print(nome, type(nome)) # Output: Python <class 'str'>
# Booleano
verdadeiro = True
print(verdadeiro, type(verdadeiro)) # Output: <class 'bool'>TIPOS BÁSICOS - TYPE HINT
# Inteiro com type hint
numero: int = 10
print(numero, type(numero)) # Output: 10 <class 'int'>
# Float com type hint
pi: float = 3.14159
print(pi, type(pi)) # Output: 3.14159 <class 'float'>
# String com type hint
nome: str = "Python"
print(nome, type(nome)) # Output: Python <class 'str'>
# Booleano com type hint
verdadeiro: bool = True
print(verdadeiro, type(verdadeiro)) # Output: <class 'bool'>Os type hints, ou “dicas de tipo”, foram introduzidos em Python para permitir que os desenvolvedores indiquem explicitamente os tipos de dados das variáveis e dos retornos de funções.
COMANDOS EXTRAS PARA USO NOS EXERCÍCIO
# Sintaxe do input()
variavel = input("Mensagem ou prompt para o usuário: ")
# Exemplo Simples de Uso:
nome = input("Digite seu nome: ")
print("Olá, ", nome)O comando input() é utilizado em Python para capturar dados fornecidos pelo usuário durante a execução do programa. O valor retornado pelo input() é sempre uma string, independentemente do que o usuário digitar.
COMANDOS EXTRAS PARA USO NOS EXERCÍCIO
# Exemplo com conversão de tipo
idade = int(input("Digite sua idade: "))
print("Você tem, ", idade, "anos.")COMANDOS EXTRAS PARA USO NOS EXERCÍCIO
# Exemplo sintaxe print()
print(objeto1, objeto2, ..., sep=' ', end='/n')
# Exemplo com Vários objetos e parâmetros
nome = "Alice"
idade = 30
print("Nome:", nome, "Idade:", idade, sep=" ", end=".\n")COMANDOS EXTRAS PARA USO NOS EXERCÍCIO
# Exemplo usando F-strings (a partir do Python 3.6):
nome = "João"
idade = "34"
print(f"Meu Nome é {nome} e eu tenho {idade} anos.")Você pode usar a formatação de strings para criar saídas mais sofisticadas e legíveis.
COMANDOS EXTRAS PARA USO NOS EXERCÍCIO
# Exemplo usando F-strings (a partir do Python 3.6):
a=5
b=3
print(f"O resultado de {a} + {b} = {a + b}.")Qual o resultado aqui?
COMANDOS EXTRAS PARA USO NOS EXERCÍCIO
nome = input("Digite seu nome: ")
idade = int(input("Digite sua idade: "))
print(f"Meu Nome é {nome} e eu tenho {idade} anos.")Exemplo de entrada e saída
OPERADORES ARITMÉTICOS
# Definindo variáveis
a = 10
b = 5
# Adição
resultado_adicao = a + b
print("O resultado da adição é: ", resultado_adicao) # Output: Adição: 15
# Subtração
resultado_subtracao = a - b
print("O resultado da subtração é: ", resultado_subtracao) # Output: Subtração: 5
# Multiplicação
resultado_multiplicacao = a * b
print("O resultado da multiplicação é: ", resultado_multiplicacao) # Output: Multiplicação: 50
# Divisão
resultado_divisao = a / b
print("O resultado da divisão é: ", resultado_divisao) # Output: Divisão: 2.0
# Divisão Inteira
resultado_divisao_inteira = a // b
print("O resultado da divisão inteira é: ", resultado_divisao_inteira) # Output: Divisão inteira: 2
# Módulo (Resto divisão)
resultado_modulo = a % b
print("Módulo: ", resultado_modulo) # Output: Módulo: 0
# Exponenciação
resultado_exponenciacao = a ** b
print("Exponenciação: ", resultado_exponenciacao) # Output: Exponenciação: 100000OPERADORES RELACIONAIS
# Definindo variáveis
a = 10
b = 5
# Maior que
resultado_maior = a > b
print("Maior que: ", resultado_maior) # Output: Maior que: True
# Menor que
resultado_menor = a < b
print("Menor que: ", resultado_menor) # Output: Menor que: False
# Maior ou igual
resultado_maior_ou_igual = a >= b
print("Maior ou igual: ", resultado_maior_ou_igual) # Output: Maior ou igual: True
# Menor ou igual
resultado_menor_ou_igual = a <= b
print("Menor ou igual: ", resultado_menor_ou_igual) # Output: Menor ou igual: False
# Igual a
resultado_igual = a == b
print("Igual a: ", resultado_igual) # Output: Igual a: False
# Diferente de
resultado_diferente = a != b
print("Diferente de: ", resultado_diferente) # Output: Diferente de: TrueOPERADORES LÓGICOS
# Definindo variáveis
a = 10
b = 5
c = 7
# Exemplo sem parênteses usando 'and' e operadores relacionais
resultado = a > b and b < c
print("Resultado de a > b and b < c: ", resultado) # Output: True
# Exemplo sem parênteses usando 'or' e operadores relacionais
resultado = a < b or c >= b
print("Resultado de a < b or c >= b: ", resultado) # Output: True
# Exemplo sem parênteses usando 'not' para inverter o resultado
resultado = not a == b
print("Resultado de not a == b: ", resultado) # Output: TrueOPERADORES LÓGICOS
# Definindo variáveis
x = [1, 2, 3]
y = x # y e x referenciam o mesmo objeto
z = [1, 2, 3] # z é um objeto diferente, apesar de ter o mesmo conteúdo
# Comparação de identidade com o operados 'is'
resultado_is = x is y
print("Resultado de x is y: ", resultado_is) # Output: True
# Comparação de identidade com um objeto diferente
resultado_is_not = x is z
print("Resultado de x is z: ", resultado_is_not) # Output: False
# Usando 'is' com operadores lógicos
resultado_logico = x is y and z is not y
print("Resultado de x is y and z is not y: ", resultado_logico) # Output: True
# Verificando que as variáveis refenciam o mesmo objeto por meio do 'id'
print(id(x))
print(id(y))# Comprovando a referência
# das variáveis x e y
x.append(4)
print(x)
print(y)
print(id(x))
print(id(y))OPERADORES LÓGICOS
O operador is é pode ser utilizado para verificar se o valor está em uma lista mas, também é utilizado para verificarmos valores boleanos True ou False e valores vazios que em python é determinado por None.
x = True
y = None
print(x is not False)
print(y is None)ESTRUTURA DE DECISÃO
Estruturas de decisão (ou estruturas condicionais) são usadas para controlar o fluxo de execução de um programa com base em condições. Em Python, a principal estrutura de decisão é o bloco if, que pode ser complementado pelos blocos elif e else para verificar múltiplas condições e tomar diferentes decisões.
ESTRUTURA DE DECISÃO
if: Avalia uma condição e, se for verdadeira, executa o bloco de código associado.
elif: (abreviação de “else if”) Permite verificar outras condições se a condição if anterior for falsa.
else: Executa um bloco de código quando todas as condições anteriores são falsas.
if condicao:
# Código executado se a condição for verdadeira
elif outra_condicao:
# Código executado se a primeira condição for falsa e a outra_condicao for verdadeira
else:
# Executado se todas as outras condições forem falsasESTRUTURA DE DECISÃO
# Definindo a variável
idade = int(input("Qual sua idade: "))
# Estrutura de decisão básica
if 18 <= idade <= 150:
print("Você é maior de idade.")
elif idade > 200:
print("Você é Noé.")
elif 13 <= idade < 18:
print("Você é adolescente.")
else:
print("Você é menor de idade.")ESTRUTURA DE DECISÃO
# Exemplo com múltiplas condições e operadores lógicos
numero = int(input("Digite um número inteiro: "))
if numero > 0 and numero % 2 == 0:
print("O número digitado é par.")
elif numero > 0 and numero % 2 != 0:
print("O número digitado é impar.")
else:
print("O número digitado é zero ou negativo.")ESTRUTURA DE DECISÃO
# Exemplo de estrutura aninhada
idade = int(input("Qual sua idade: "))
possui_carteira = int(input("Digite 1 se possui carteira ou 0 senão possui:"))
tem_carteira = 1 == possui_carteira
if idade >= 18:
if tem_carteira:
print("Você pode dirigir")
else:
print("Você não pode dirigir sem carteira.")
else:
print("Você é menor de idade e não pode dirigir.")ESTRUTURA DE DECISÃO
match-case: é uma estrutura de decisão introduzida no Python 3.10 que funciona como o switch de outras linguagens, mas com mais poder. Ele permite comparar valores, padrões, tipos e estruturas complexas de forma clara e elegante.
match valor:
case padrão1:
# bloco de código
case padrão2:
# outro bloco
case _:
# caso padrão (equivalente ao 'else')
# O caractere _ é usado como caso coringa (default).ESTRUTURA DE DECISÃO
# Exemplo simples
comando = input("Digite um comando: ")
match comando:
case "iniciar":
print("Iniciando...")
case "parar":
print("Parando...")
case _:
print("Comando inválido.")ESTRUTURA DE DECISÃO
# Exemplo com padrão complexo
pessoa = ("João", 30)
match pessoa:
case (nome, idade) if idade >= 18:
print(f"{nome} é maior de idade.")
case (nome, idade):
print(f"{nome} é menor de idade.")Os padrões são avaliados sequencialmente, o primeiro que casar será executado.
ESTRUTURA DE REPETIÇÃO
O laço for em Python é utilizado para iterar sobre uma sequência (como uma lista, tupla, string, ou intervalo de números). Ele percorre os elementos da sequência um por um, executando o bloco de código para cada elemento.
ESTRUTURA DE REPETIÇÃO
# Sintaxe do for
for variavel in sequencia:
# Bloco de código a ser repetido # Exemplo com for
# Iterando sobre uma lista
frutas = ["maça", "pêra", "morango", "biribá"]
for fruta in frutas:
print(fruta)range(5) gera uma sequência de números de 0 a 4.
O laço for percorre essa sequência, atribuindo cada número à variável i e imprimindo a iteração atual.
# Exemplo com range():
for i in range(5):
print("Iteração:", i)ESTRUTURA DE REPETIÇÃO
1. Faça um Programa que pergunte quanto você ganha por hora e o número de horas trabalhadas no mês. Calcule e mostre o total do seu salário no referido mês.
2. Faça um Programa que peça a temperatura em graus Fahrenheit, transforme e mostre a temperatura em graus Celsius.
C = 5 * ((F-32) / 9).
3. Tendo como dado de entrada a altura (h) de uma pessoa, construa um algoritmo que calcule seu peso ideal, utilizando as seguintes fórmulas:
Para homens: (72.7*h) - 58
Para mulheres: (62.1*h) - 44.7
EXERCÍCIOS DE FIXAÇÃO
4. Faça um Programa que pergunte o Salário Bruto. Calcule e mostre o total do seu Salário Líquido no referido mês, sabendo-se que são descontados Imposto de Renda e INSS conforme tabelas abaixo, faça um programa que nos dê: salário bruto, quanto pagou ao IR e INSS e o salário líquido, exiba conforme a tabela de resultados abaixo:
+ Salário Bruto : R$
- INSS : R$
- IR: R$
= Salário Liquido : R$
EXERCÍCIOS DE FIXAÇÃO
Tabela INSS
| Base de Cálculo Mensal (R$) | Alíquota (%) | Parcela a Deduzir (R$) |
|---|---|---|
| Até 2.428,80 | 0% | 0,00 |
| De 2.428,81 até 2.826,65 | 7,5% | 182,16 |
| De 2.826,66 até 3.751,05 | 15% | 394,16 |
| De 3.751,06 até 4.664,68 | 22,5% | 675,49 |
| Acima de 4.664,68 | 27,5% | 908,73 |
Tabela IR
# Base cálculo IR
Base = Salário Bruto – INSS
# Exemplo
Base = R$ 20.200,00 – R$ 908,86 = R$ 19.291,14
IRRF = (Base × Aliquota%) – Parcela a deduzir| Faixa Salarial (R$) | Alíquota (%) | Parcela a Deduzir (R$) |
|---|---|---|
| Até 1.518,00 | 7,5% | 0,00 |
| De 1.518,01 até 2.793,88 | 9% | 22,77 |
| De 2.793,89 até 4.190,83 | 12% | 106,59 |
| De 4.190,84 até 8.157,41 | 14% | 190,40 |
| R$ Faixa Salarial (FS) | Alíquota (%) (ALI) | R$ Parcela a Deduzir (PD) | Total s/ Dedução (TSD) -> FS * ALI | R$ INSS Pago (TSD - PD) |
|---|---|---|---|---|
| 8.157,41 | 0,14 | 190,4 | 1142,0374 | 951,6374 |
Resultados
5. Desenvolva um gerador de tabuada, capaz de gerar a tabuada de qualquer número inteiro entre 1 a 10. O usuário deve informar de qual numero ele deseja ver a tabuada. A saída deve ser conforme o exemplo abaixo:
Tabuada de 5:
5 X 1 = 5
5 X 2 = 10
...
5 X 10 = 50
EXERCÍCIOS DE FIXAÇÃO
# Sintaxe Básica
for indice, valor in enumerate(sequencia, start=0):
# Bloco de código a ser executado
# sequencia: Sequência pela qual deseja iterar
# start (opcional): O valor inicial do contador. O padrão é 0.ESTRUTURA DE REPETIÇÃO
# Definindo array de frutas
frutas = ["maça", "pêra", "morango", "biribá"]
# Iterando com enumerate
for indice, fruta in enumerate(frutas, start=1):
print(f"Fruta {indice}: {fruta}")
# Saída esperada
Fruta 1: maça
Fruta 2: pêra
Fruta 3: morango
Fruta 4: biribáESTRUTURA DE REPETIÇÃO
# Sintaxe do while
while condicao:
# Bloco a ser repetidoESTRUTURA DE REPETIÇÃO
# Definindo variável
contador = 0
# Iterando enquanto respeitar a condição
while contador < 5:
print(f"Contador: {contador}")
contador += 1ESTRUTURA DE REPETIÇÃO
for i in range(10):
if i == 5:
break
print(i)ESTRUTURA DE REPETIÇÃO
for i in range(10):
if i == 2:
continue
print(i)ESTRUTURA DE REPETIÇÃO
while contador < 10:
contador += 1
if contador == 5:
continue # Pula impressão do 5
if contador == 8:
break # Interrompe o laço ao alcançar 8
print("Contador: ", contador)ESTRUTURA DE REPETIÇÃO
LISTAS, TUPLAS E DICIONÁRIOS
Listas são coleções ordenadas de elementos que são mutáveis (ou seja, podem ser alteradas). Uma lista pode conter elementos de tipos diferentes, incluindo outras listas.
# Criando uma lista de números
numeros = [1, 2, 3, 4, 5]
# Criando uma lista mista com diferentes tipos de dados
mista = [1, "Olá", 3.14, True]
LISTAS, TUPLAS E DICIONÁRIOS
# Criando uma lista vazia
lista_vazia = list()
print(lista_vazia) # Output: []
# Criando uma lista a partir de uma sequência
lista_numeros = list([1, 2, 3, 4, 5])
print(lista_numeros) # Output: [1, 2, 3, 4, 5]
# Criando uma lista a partir de uma string (a string será dividida em caracteres)
lista_caracteres = list("Python")
print(lista_caracteres) # Output: ['P', 'y', 't' , 'h', 'o', 'n']
# Criando uma lista a partir de um range
lista_range = list(range (5))
print(lista_range) # Output: [0, 1, 2, 3, 41LISTAS, TUPLAS E DICIONÁRIOS
numeros = [1, 2, 3, 4, 5]
print(numeros[0])
print(numeros[-2])LISTAS, TUPLAS E DICIONÁRIOS
numeros = [1, 2, 3, 4, 5]
print(numeros[0])
print(numeros[-1])
numeros.append(6)
print(numeros[-2])LISTAS, TUPLAS E DICIONÁRIOS
numeros = [1, 2, 3, 4, 5]
numeros.append(3)
numeros.remove(3)
print(numeros)LISTAS, TUPLAS E DICIONÁRIOS
numeros = [1, 2, 3, 4, 5]
ultimo = numeros.pop()
print(ultimo)
print(numeros)numeros = [1, 2, 3, 4, 5]
selecionado = numeros.pop(1)
print(selecionado)
print(numeros)LISTAS, TUPLAS E DICIONÁRIOS
numeros = [1, 2, 3, 4, 5]
posicao = numeros.index(4)
print(posicao)LISTAS, TUPLAS E DICIONÁRIOS
# Definido uma lista de frutas
frutas = ["maça", "pêra", "uva", "laranja", "biribá"]
# Obtendo o tamanho da lista com len()
tamanho = len(frutas)
# Exibindo o tamanho da lista
print("O tamanho da lista de frutas é: ", tamanho)LISTAS, TUPLAS E DICIONÁRIOS
LISTAS, TUPLAS E DICIONÁRIOS
# Tupla de números
tupla_numeros = (1, 2, 3, 4, 5)
# Tupla com tipos mistos
tupla_mista = (1, "Olá", 3.14, True)LISTAS, TUPLAS E DICIONÁRIOS
# Tupla de números
tupla_numeros = (1, 2, 3, 4, 5)
print(tupla_numeros[0]) # Acessa o primeiro elemento: 1
print(tupla_numeros[-1]) # Acessa o primeiro elemento: 5LISTAS, TUPLAS E DICIONÁRIOS
# count(): Retorna o número de ocorrências de um valor específico.
tupla_numeros = (1, 2, 3, 4, 5)
ocorrencias = tupla_numeros.count(3)
print(ocorrencias) # Output: 1
# index(): Retorna o índice da primeira ocorrência de um valor.
posicao = tupla_numeros.index(4)
print(posicao) # Output: 3LISTAS, TUPLAS E DICIONÁRIOS
LISTAS, TUPLAS E DICIONÁRIOS
# Dicionário com informações de uma pessoa
pessoa = {"nome": "Vanilton", "idade": 34, "cidade": "Manaus"}
# Acessando valores
print(pessoa["nome"]) # Output: VaniltonLISTAS, TUPLAS E DICIONÁRIOS
# Criando dicionário vazio
dicionario_vazio = dict()
print(dicionario_vazio) # Output: {}
# Criando um dicionário com pares chave-valor
dicionario_pessoa = dict(nome="Louie", idade=6, cidade="Manaus")
print(dicionario_pessoa) # Output: {'nome': 'Louie', 'idade': 6, 'cidade': 'Manaus'}LISTAS, TUPLAS E DICIONÁRIOS
# Definindo um dicionário de pessoa
pessoa = {"nome": "Vanilton", "idade": 34, "cidade": "Manaus"}
# # keys(): Retorna uma lista (ou view) das chaves no dicionário
chaves = pessoa.keys()
print(chaves) # Output: dict_keys(['nome', 'idade', 'cidade'])
# values(): Retorna uma lista (ou view) dos valores no dicionário.
valores = pessoa.values()
print(valores) # Output: dict_values(['Vanilton', 34, 'Manaus'])
# items(): Retorna uma lista (ou view) de pares chave-valor (tuplas).
itens = pessoa.items()
print(itens) # Output: dict_items([('nome', 'Vanilton'), ('idade', 34), ('cidade', 'Manaus')])LISTAS, TUPLAS E DICIONÁRIOS
# Definindo um dicionário de pessoa
pessoa = {"nome": "Vanilton", "idade": 34, "cidade": "Manaus"}
# Acessando uma chave existente
idade = pessoa.get("idade")
print(idade)
# Tentando acessar uma chave inexistente sem causar um erro
estado = pessoa.get("estado", "Desconhecido")
print(estado) # Output: DesconhecidoLISTAS, TUPLAS E DICIONÁRIOS
# Definindo um dicionário de pessoa
pessoa = {"nome": "Vanilton", "idade": 34, "cidade": "Manaus"}
print(pessoa)
# update(): Atualiza o dicionário com pares chave-valor de outro dicionário ou de um iterável de pares
pessoa.update({"idade": 34, "estado": "AM"})
print(pessoa)
# pop(): Remove a chave especificada e retorna o valor correspondente
idade_removida = pessoa.pop("idade")
print(idade_removida) # Output: 34
print(pessoa) # Output: {'nome': 'Vanilton', 'cidade': 'Manaus', 'estado': 'AM'}LISTAS, TUPLAS E DICIONÁRIOS
ITERANDO SOBRE LISTAS, TUPLAS E DICIONÁRIOS
# Definido uma lista de frutas
frutas = ["maça", "pêra", "uva", "laranja", "biribá"]
# Iterando sobre uma lista
for fruta in frutas:
print("Fruta:", fruta)
# Output:
Fruta: maça
Fruta: pêra
Fruta: uva
Fruta: laranja
Fruta: biribáITERANDO SOBRE LISTAS, TUPLAS E DICIONÁRIOS
# Definido uma tupla de números
numeros = [1, 2, 3, 4, 5]
# Iterando sobre uma tupla
for numero in numeros:
print("Número:", numero)
# Output:
Número: 1
Número: 2
Número: 3
Número: 4
Número: 5ITERANDO SOBRE LISTAS, TUPLAS E DICIONÁRIOS
# Definindo um dicionário com informações de uma pessoa
pessoa = dict(nome="Louie", idade=6, cidade="Manaus")
# Iterando sobre as chaves
for chave in pessoa:
print("Chave: ", chave)
# Output:
Chave: nome
Chave: idade
Chave: cidadeITERANDO SOBRE LISTAS, TUPLAS E DICIONÁRIOS
# Definindo um dicionário com informações de uma pessoa
pessoa = dict(nome="Louie", idade=6, cidade="Manaus")
# Iterando sobre os valores
for valor in pessoa.values():
print("Valor: ", valor)
# Output:
Valor: Louie
Valor: 6
Valor: ManausITERANDO SOBRE LISTAS, TUPLAS E DICIONÁRIOS
# Definindo um dicionário com informações de uma pessoa
pessoa = dict(nome="Louie", idade=6, cidade="Manaus")
# Iterando sobre os pares de Chave-Valor
for chave, valor in pessoa.items():
print(f"Chave: {chave}, Valor: {valor}")
# Output:
Chave: nome, Valor: Louie
Chave: idade, Valor: 6
Chave: cidade, Valor: ManausITERANDO SOBRE LISTAS, TUPLAS E DICIONÁRIOS X NAMEDTUPLE
from collections import namedtuple
Pessoa = namedtuple("Pessoa", ["nome", "idade", "cidade"])
ana = Pessoa("Ana", 30, "São Paulo")Namedtuple
Cria objetos com campos nomeados
Imutável como uma tuple, legível como uma class
ITERANDO SOBRE LISTAS, TUPLAS E DICIONÁRIOS X NAMEDTUPLE
from collections import namedtuple
Pessoa = namedtuple("Pessoa", ["nome", "idade", "cidade"])
ana = Pessoa("Ana", 30, "São Paulo")
print(ana.nome) # Ana
print(ana[1]) # 30Acessando dados de uma Namedtuple
✅ Acesso por índice ou nome
❌ Não é possível alterar os valores diretamente
ITERANDO SOBRE LISTAS, TUPLAS E DICIONÁRIOS X NAMEDTUPLE
Comparação entre dict e namedtuple
| Característica | dict | namedtuple |
|---|---|---|
| Mutável? | Sim | Não |
| Acesso por chave? | Sim (p["nome"]) | Sim (p.nome) |
| Ordem dos campos? | Não garantida (antes do Py 3.7) | Sim (ordem definida na criação) |
| Performance | Mais lento | Mais leve |
| Ideal para... | Dados dinâmicos | Registros fixos, estruturados |
ITERANDO SOBRE LISTAS, TUPLAS E DICIONÁRIOS X NAMEDTUPLE
from collections import namedtuple
# 1. Dado um dicionário
dados = {
"nome": "João",
"idade": 28,
"cidade": "Belo Horizonte"
}
# 2. Criar o namedtuple com os mesmos campos
Pessoa = namedtuple("Pessoa", dados.keys())
# 3. Converter usando o desempacotamento **
# Com ** → cada chave vira um argumento nomeado (nome="João", idade="28")
joao = Pessoa(**dados)
# 4. Acessar como atributos
print(joao.nome) # João
print(joao.idade) # 28Convertendo um dicionário para namedtuple
ITERANDO SOBRE LISTAS, TUPLAS E DICIONÁRIOS X NAMEDTUPLE
from collections import namedtuple
lista_dados = [
{"nome": "Ana", "idade": 30},
{"nome": "Carlos", "idade": 25}
]
Pessoa = namedtuple("Pessoa", ["nome", "idade"])
lista_namedtuples = [Pessoa(**d) for d in lista_dados]
print(lista_namedtuples[0].nome) Convertendo uma lista de dicionário para namedtuple
ITERANDO SOBRE LISTAS, TUPLAS E DICIONÁRIOS
# List comprehension (ou "compreensão de listas")
[nova_expressao for item in coleção if condição_opcional]
# Quadrado de 0 a 4
lista_numero_quadrado = [ x**2 for x in range(5) ]
print(lista_numero_quadrado) # Output: [0, 1, 4, 9, 16]
# Filtrar apenas números pares:
lista_pares = [ x for x in range(10) if x % 2 == 0 ]
print(lista_pares) # Output: [0, 2, 4, 6, 8]EXERCÍCIOS DE FIXAÇÃO - LISTAS E ESTRUTURA DE REPETIÇÃO
1. Dada uma lista de valores inteiros criar um programa para somar os valores pares e valores ímpares
2. Dada uma palavra criar um programa para retornar a quantidade de vogais e quantidade de consoantes
3. Criar um programa para adicionar funcionários. Os funcionários devem ter nome, sexo e salário o programa deve retornar a soma de salários dos homens e soma dos salários das mulheres
EXERCÍCIOS DE FIXAÇÃO - LISTAS E ESTRUTURA DE REPETIÇÃO
4. Monte um programa que permita ao usuário cadastrar produtos com nome e preço. Armazene os dados em um dicionário, onde o nome do produto é a chave e o preço é o valor. No final, exiba todos os produtos e o preço total.
5. Armazene em uma tupla as notas de 4 alunos. Calcule e mostre a média das notas e diga quais notas ficaram acima da média.
EXERCÍCIOS DE FIXAÇÃO - LISTAS E ESTRUTURA DE REPETIÇÃO
6. Crie um programa em Python que simule um jogo de adivinhação de um número inteiro.
O programa deve:
Peça para uma pessoa definir o valor a ser adivinhado.
Pedir ao jogador que tente adivinhar o número.
Informar se o chute está alto, baixo ou correto.
Dar 5 tentativas ou até que o jogador acerte.
Caso as tentativas se esgotem exiba uma mensagem de tente novamente e o número que deveria ter sido adivinhado, caso contrário exibe uma mensagem parabenizando o jogador.
FUNÇÕES
Funções em Python são blocos de código reutilizáveis que realizam uma tarefa específica. Elas ajudam a tornar o código mais modular, organizado e fácil de entender. Python possui várias funções integradas (como print() e len()), mas também permite que você defina suas próprias funções.
FUNÇÕES - CRIANDO
Para definir uma função em Python, você usa a palavra-chave def, seguida pelo nome da função, parênteses () que podem conter parâmetros, e dois pontos :. O código da função é então escrito em um bloco indentado.
def saudacao():
print("Olá bb")FUNÇÕES - EXECUTANDO
Uma função é executada quando você a chama pelo nome, seguido de parênteses.
def saudacao():
print("Olá bb")
# Chamando a função saudacao
saudacao() # Output: Olá bbFUNÇÕES - PARAMETRIZANDO
Você pode passar informações para uma função usando parâmetros. Esses parâmetros são especificados dentro dos parênteses na definição da função.
def saudacao(nome):
print(f"Olá, {nome}!")
# Chamando a função com Argumento
saudacao("Vavá") # Output: Olá, Vavá"FUNÇÕES - RETORNO
Uma função pode retornar um valor usando a palavra-chave return. Isso permite que a função envie um resultado de volta para o ponto onde foi chamada.
def soma(a, b):
return a + b;
# Chamando a função e Usando o valor Retornado
resultado = soma(3, 5)
print(resultado) # Output: 8FUNÇÕES - PARÂMETRO OPCIONAL
Você pode fornecer valores padrão para os parâmetros, tornando-os opcionais ao chamar a função.
def saudacao(nome="mundo"):
print(f"Olá, {nome}!")
# Chamando com ou sem Argumentos
saudacao() # Output: Olá, mundo
saudacao("José") # Output: 8lá, José! FUNÇÕES - PARÂMETRO OPCIONAL
Uma função pode retornar múltiplos valores usando uma tupla.
def dividir(a, b):
quociente = a // b
resto = a % b
return quociente, resto
# Usando os valores retornados:
q, r = dividir(10, 3)
print(f"Quociente: {q}, Resto: {r}")FUNÇÕES - PARÂMETROS DINÂMICOS
O Python também permite que usemos parâmetros dinâmicos. O que isso quer dizer? Imagine precisar criar uma função que some valores, porém, você pode passar dois parâmetros ou 3, ou 4 e assim por diante.
*args permite que você passe um número variável de argumentos posicionais para uma função. Dentro da função, args será tratado como uma tupla.
FUNÇÕES - PARÂMETROS DINÂMICOS
def soma(*args):
resultado = 0
for num in args:
resultado += num
return resultado
# Exemplo de uso
print(soma(2, 3, 4, 5)) # Output: 14
print(soma(2, 2, 4, 5)) # Output: 13FUNÇÕES - PARÂMETROS DINÂMICOS
É possível também que esses parâmetros dinâmicos sejam dicionários, isso basicamente quer dizer que podem ser enviados várias chaves e vários valores.
**kwargs permite que você passe um número variável de argumentos nomeados (ou seja, pares chave-valor) para uma função. Dentro da função, kwargs será tratado como um dicionário.
FUNÇÕES - PARÂMETROS DINÂMICOS
def exibir_informacoes(**kwargs):
for chave, valor in kwargs.items():
print(f"{chave}: {valor}")
# Exemplo de uso
exibir_informacoes(nome="Vanilton", idade=34, cidade="Manaus")
# Output:
# nome: Vanilton
# idade: 34
# cidade: ManausFUNÇÕES - MAIN
Utilizamos a função main para:
Para organizar melhor o código.
Deixa o programa mais fácil de ler e entender.
Permite rodar o código só se o arquivo for executado diretamente, não se for importado como módulo em outro projeto.
FUNÇÕES - MAIN
# arquivo.py
# Função principal do programa
def main():
# Códigos que serão executados ao chamar o arquivo.py
# Condição para rodar o programa
if __name__ == "__main__":
# Esta linha garante que a main() só será chamada se o arquivo
# for executado diretamente (não quando importado como módulo)
main()FUNÇÕES - MAIN
# Exemplo importando como módulo
# exemplo.py
print(f"O valor de __name__ é: {__name__}")
def saudacao():
print("Olá do exemplo.py!")
def main():
print("Executando a main() de exemplo.py")
saudacao()
if __name__ == "__main__":
main()
# teste_importação.py
import exemplo
print("Estamos dentro de teste_importacao.py")O valor de __name__ é: exemplo
Estamos dentro de teste_importacao.pyO valor de __name__ é: __main__
Executando a main() de exemplo.py
Olá do exemplo.py!FUNÇÕES DE STRING
Funções de string em Python são métodos que permitem manipular e operar em strings de forma eficiente. Python oferece uma ampla variedade de métodos embutidos para trabalhar com strings, facilitando tarefas comuns como formatação, substituição, busca, e modificação de texto.
FUNÇÕES DE STRING
len(): Retorna o comprimento da string (o número de carateres).
texto = "Louie"
print(len(texto)) # Output: 5str.upper(): Converte todos os caracteres da string para maiúsculas.
texto = "Louie"
print(texto.upper()) # Output: LOUIEstr.lower(): Converte todos os caracteres da string para minúsculas.
texto = "Louie"
print(texto.lower()) # Output: louieFUNÇÕES DE STRING
str.capitalize(): Converte o primeiro caractere da string para maiúsculo e o restante para minúsculo.
texto = "python programMing"
print(texto.capitalize()) # Output: python programmingstr.strip(): Remove espaços vazios do início e fim da string.
texto = " python programMing "
print(texto.strip()) # Output: "python programming"str.replace(): Substitui uma substring por outra, caso identifique o padrão de procura, do contrário mantêm a string do modo original.
texto = "Olá, Fulano"
print(texto.replace("Fulano", "Mario")) # Output: "Olá, Mário"FUNÇÕES DE STRING
str.find(): Retorna o índice da primeira ocorrência de uma substring. Retorna -1 se a substring não for encontrada.
texto = "Igarapé é frio"
print(texto.find("frio")) # Output: 10
print(texto.find("quente")) # Output: -1str.split(): Divide a string em uma lista de substrings com base em um delimitador.
texto = "Igarapé é frio"
print(texto.split()) # Output: ['Igarapé', 'é', 'frio']
print(texto.split(sep="/"))str.join(): Junta uma sequência de strings em uma única string, usando uma string como delimitador
palavras = ['Igarapé', 'é', 'frio']
print(" ".join(palavras)) # Output: "Igarapé é frio"FUNÇÕES DE STRING
str.startswith(): Verifica se a string começa com uma determinada substring.
texto = "Igarapé é frio"
print(texto.startswith("Iga")) # Output: Truestr.endswith(): Verifica se a string termina com uma determinada substring.
texto = "Igarapé é frio"
print(texto.endswith("io")) # Output: Truestr.isdigit(): Verifica se todos os caracteres na string são dígitos.
texto = "12345"
print(texto.isdigit()) # Output: TrueFUNÇÕES DE STRING
str.isalpha(): Verifica se todos caracteres na string são letras.
texto = "Igarapé é frio"
print(texto.isalpha()) # Output: Falsestr.count(): Conta o número de ocorrências de uma substring na string.
texto = "Igarapé é frio"
print(texto.count("a")) # Output: 2str.format(): Formata a string utilizando placeholders
nome = "Vanilton"
idade = 34
print("Meu nome é {} e eu tenho {} anos.".format(nome, idade))
# Output: Meu nome é Vanilton e eu tenho 34 anos.FUNÇÕES DE STRING
Encadeamento de métodos
texto = " python programMing "
print(texto.strip().capitalize().upper())Slicing (fatiamento)
texto = "python"
print(texto[:]) # Output: python (cópia igual)
print(texto[::1]) # Output: python (igual)
print(texto[::2]) # Output: pto (lê 1, pula 1)
print(texto[::-1]) # Output: nohtyp (invertido)
print(texto[1::3]) # Output: yo (Começa no índice 1 e vai pulando de 3 em 3)EXERCÍCIOS DE FIXAÇÃO
1. Crie um programa que leia o nome de 5 pessoas e armazene em uma lista. Em seguida, exiba apenas os nomes que começam com a letra "A".
2. Embaralha palavra. Construa uma função que receba uma string como parâmetro e devolva outra string com os carateres embaralhados. Por exemplo: se função receber a palavra python, pode retornar npthyo, ophtyn ou qualquer outra combinação possível, de forma aleatória. Padronize em sua função que todos os caracteres serão devolvidos em caixa alta ou caixa baixa, independentemente de como foram digitados.
EXERCÍCIOS DE FIXAÇÃO
3. Reverso do número. Faça uma função que retorne o reverso de um número inteiro informado. Por exemplo: 127 -> 721.
4. Faça um programa, com uma função que necessite de três argumentos, e que forneça a soma desses três argumentos.
5. Conta espaços e vogais. Dado uma string com uma frase informada pelo usuário (incluindo espaços em branco), conte:
EXERCÍCIOS DE FIXAÇÃO
6. Nome na vertical em escada. Faça um programa para mostrar o nome em formato de escada.
F
FU
FUL
FULA
FULAN
FULANO
FUNÇÕES BUILT-IN
As funções built-in (ou internas) em Python são funções que estão disponíveis automaticamente em qualquer programa Python, sem a necessidade de importar módulos ou bibliotecas adicionais. Elas são parte integrante da linguagem e oferecem uma ampla gama de funcionalidades úteis para manipulação de dados, conversão de tipos, operações matemáticas, controle de fluxo e muito mais.
print(): Exibe informações no console.
FUNÇÕES BUILT-IN
print("Olá, Universo!")len(): Retorna o número de itens em um objeto, como uma string, lista, tupla ou dicionário.
lista = [1, 2, 3, 4]
print(len(lista)) # Output: 4type(): Retorna o tipo do objeto passado como argumento.
print(type(10)) # Output: <class 'int'>
print(type("Python")) # Output: <class 'str'>input(): Lê uma entrada do usuário e a retorna como uma string.
FUNÇÕES BUILT-IN
nome = input("Digite seu nome: ")
print("Olá, ", nome)int(), float(), str(): Convertem valores conforme os seus tipos respectivamente.
numero_str = "123"
numero_int = int(numero_str)
numero_float = float(numero_str)
print(numero_int, numero_float)sum(): Retorna a soma dos elementos de um iterável, como uma lista ou tupla
numeros = [1, 2, 3, 4]
print(sum(numeros)) # Output: 10max() e min(): Retornam o maior e o menor valor de um iterável, respectivamente.
FUNÇÕES BUILT-IN
numeros = [1, 2, 3, 4]
print(max(numeros)) # Output: 4
print(min(numeros)) # Output: 1sorted(): Retorna uma nova lista ordenada a partir dos elementos de um iterável.
numeros = [3, 1, 4, 2]
print(sorted(numeros)) # Output: [1, 2, 3, 4]range(): Gera uma sequência de números, geralmente usada em loops.
for i in range(5):
print(i) # Output: 0 1 2 3 4enumerate(): Retorna um objeto enumerado, que contém pares de índice e valor.
FUNÇÕES BUILT-IN
lista = ["a", "b", "c"]
for indice, valor in enumerate(lista):
print(indice, valor)
# Output:
0 a
1 b
2 czip(): Combina dois ou mais iteráveis (como listas) em um único iterável de tuplas.
nomes = ["José", "Maria", "Pedro"]
idades = [23, 40, 35]
for nome, idade in zip(nomes, idades):
print(nome, idade)
# Output:
José 23
Maria 40
Pedro 35map(): Aplica um função a todos os itens de um iterável.
FUNÇÕES BUILT-IN
def quadrado(x):
return x ** 2
numeros = [1, 2, 3, 4]
print(list(map(quadrado, numeros))) # Output: [1, 4, 9, 16]
filter(): Filtra itens de um iterável com base em um função.
def par(x):
return x % 2 == 0
numeros = [1, 2, 3, 4]
print(list(filter(par, numeros))) # Output: [2, 4]
reduce(): Aplica repetidamente uma função aos itens de um iterável, reduzindo-os a um único valor, reduce está disponível no módulo functools.
FUNÇÕES BUILT-IN
from functools import reduce
def soma(x, y):
return x + y
numeros = [1, 2, 3, 4]
print(reduce(soma, numeros)) # Output: 10any() e all(): any() retorna True se algum item em um iterável for True. all() retorna True se todos os itens em um iterável forem True.
booleanos = [True, False, True]
print(any(booleanos)) # Output: True
print(all(booleanos)) # Output: Falsereversed(): Inverte a ordem de uma sequência str, lista ou tuplas para um iterável de lista. reversed() precisa de algo que tenha uma ordem. Por este motivo não funciona com Dicionários (dict) no Python dado que são coleções não indexadas de pares chave-valor.
FUNÇÕES BUILT-IN
print(list(reversed("jaca"))) # Output: ['a', 'c', 'a', 'j']
print(list(reversed([1, 2, 3, 4]))) # Output: [4, 3, 2, 1]
abs(): Retorna o valor absoluto.
print(abs(-7)) # Output: 7
print(abs(-7.3)) # Output: 7.3
print(abs(7)) # Output: 7
print(abs(0)) # Output: 0
FUNÇÕES BUILT-IN
abs(): Retorna o valor absoluto.
z = 3 + 4j # Número complexo
print(abs(z)) # Output: 5.0 (porque sqrt(3² + 4²) = 5)real
imaginário
FUNÇÕES BUILT-IN
complex(): Retorna a função do número complexo.
z = complex(3, 4)
print(z) # output: (3+4j)round(): Arredonda números
print(round(3.1415, 2)) # Output: 3.14breakpoint(): Utiliza Python Debugger pausando a execução deixando-se ver/interagir com o programa. Nas pausas digite c ou continue no console para seguir o programa.
a = 10
b = 20
breakpoint() # O código vai pausar aqui!
c = a + b
print(c)FUNÇÕES BUILT-IN
random: Gerar números aleatórios e fazer operações aleatórias com listas e sequências.
import random
# Gera Número inteiro randomicamente para um intervalo
print(random.randint(1, 10))
lista_caracteres = list("Vanilton")
# Altera uma lista diretamente
random.shuffle(lista_caracteres)
print(''.join(lista_caracteres))
print(random.shuffle(lista_caracteres))
nome = "Walkiria"
# Cria uma nova lista randomicamente
lista_randomica = random.sample(nome, len(nome))
print(lista_randomica)FUNÇÕES BUILT-IN
random: Gerar números aleatórios e fazer operações aleatórias com listas e sequências.
import random
# Retorna um número float aleatório entre 0.0 e 1.0
print(random.random())
# Retorna aleatoriamente um elemento da sequencia
print(random.choice(['a', 'b', 'c'])) # ex: 'b'
# Retorna um número aleatório para um intervalo float
print(random.uniform(10.0, 20.5))TRABALHANDO COM ARQUIVOS
Trabalhar com arquivos em Python é uma tarefa comum e bem suportada pela linguagem. Python oferece várias funções e métodos para abrir, ler, escrever e manipular arquivos de diferentes tipos, como arquivos de texto, binários, CSVs, entre outros.
TRABALHANDO COM ARQUIVOS
Para trabalhar com arquivos em Python, você primeiro precisa abri-los usando a função open(), que retorna um objeto de arquivo.
TRABALHANDO COM ARQUIVOS
Atenção: Você deve sempre fechar o arquivo após terminar de usá-lo para liberar recursos do sistema. Isso pode ser feito com o método close() ou, de forma mais segura, usando uma instrução with que garante que o arquivo seja fechado automaticamente.
TRABALHANDO COM ARQUIVOS
Exemplo básico
# Abrindo um arquivo para leitura
arquivo = open("exemplo.txt", "r")
# Trabalhando com o arquivo
conteudo = arquivo.read()
print(conteudo)
# Fechando o arquivo
arquivo.close()TRABALHANDO COM ARQUIVOS
Modos de abertura: A função open() aceita diferentes modos de abertura, que determinam como você pode interagir com o arquivo:
TRABALHANDO COM ARQUIVOS
Modos de abertura: A função open() aceita diferentes modos de abertura, que determinam como você pode interagir com o arquivo:
TRABALHANDO COM ARQUIVOS
Lendo arquivos: Python oferece várias maneiras de ler o conteúdo de um arquivo:
# Lendo o arquivo inteiro de uma vez:
with open("exemplo", "r") as arquivo:
conteudo = arquivo.read()
print(conteudo)
# Lendo o arquivo linha por linha:
with open("exemplo.txt", "r") as arquivo:
for indice, linha in enumerate(arquivo):
print(f"Linha: {indice} -> {linha.strip()}")
TRABALHANDO COM ARQUIVOS
Lendo arquivos: Python oferece várias maneiras de ler o conteúdo de um arquivo:
# Lendo um número específico de caracteres:
with open("exemplo.txt", "r") as arquivo:
print(arquivo.read(2)) # Lê os dois primeiros caracteres do arquivo
# Lendo todas as linhas em uma lista
with open("exemplo.txt", "r") as arquivo:
linhas = arquivo.readlines()
print(linhas)
print([linha.strip() for linha in linhas]) # Aqui estamos removendo as quebras de linhas (\n) do arquivoTRABALHANDO COM ARQUIVOS
Escrevendo arquivos: Para escrever em um arquivo, você pode usar os métodos write() ou writelines(). Lembre-se de que ao abrir um arquivo em modo de escrita ("w"), seu conteúdo será apagado antes da escrita, a menos que você use o modo de anexar ("a").
# Escrevendo uma string em um arquivo:
with open("saida.txt", "w") as arquivo:
print(arquivo.write("Olá, Meu Primeiro arquivo escrito com Python!\n"))
# Escrevendo várias linhas
linhas = ["Linha 1\n", "Linha 2\n", "Linha 3\n"]
with open("saida.txt", "w") as arquivo:
arquivo.writelines(linhas) # Qual o conteúdo do arquivo saída.txtTRABALHANDO COM ARQUIVOS
Arquivos JSON: JSON (JavaScript Object Notation) é um formato de dados leve e flexível, utilizado para representar informações de forma estruturada e legível para humanos e máquinas. É amplamente utilizado em aplicações web e mobile para a troca de dados entre sistemas, como em APIs.
import json
with open('pessoa.json', 'r') as arquivo:
data = json.load(arquivo)
for pessoa in data:
nome = pessoa["nome"]
idade = pessoa["idade"]
cidade = pessoa["cidade"]
print(f"Nome: {nome}, Idade: {idade}, Cidade: {cidade}")
TRABALHANDO COM ARQUIVOS
Lendo JSON: Abaixo um exemplo de json à direita e como realizar a leitura a esquerda. No exemplo abaixo estamos trabalhando com um JSON existindo uma lista de objetos que representam uma pessoa.
import json
with open('pessoa.json', 'r', encoding='utf-8') as arquivo:
data = json.load(arquivo)
for pessoa in data:
nome = pessoa["nome"]
idade = pessoa["idade"]
cidade = pessoa["cidade"]
print(f"Nome: {nome}, Idade: {idade}, Cidade: {cidade}")
[{
"nome": "Maria Adenilsa",
"idade": 30,
"cidade": "São Paulo"
},
{
"nome": "Mario Alberto",
"idade": 32,
"cidade": "Manaus"
}]TRABALHANDO COM ARQUIVOS
Escrevendo JSON:
# Adicionando uma nova pessoa
nova_pessoa = {
"nome": "Joana Silva",
"idade": 28,
"cidade": "Recife"
}
data.append(nova_pessoa)
# Salvando de volta no mesmo arquivo
with open('pessoa.json', 'w', encoding='utf-8') as arquivo:
json.dump(pessoas, arquivo, ensure_ascii=False, indent=4)EXERCÍCIO DE FIXAÇÃO
1. Dado o arquivo de usuarios.txt faça um programa que leia esse arquivo e mostre os dados formatados. Utilize funções de manipulação de strings e crie funções para manipular os dados do arquivo.
Ex. saída:
--------------------- Info Usuários--------------------
Nr: 1 | Usuário: Alexandre
Espaço Utilizado: 430MB | % de Uso: 85%
------------------------------------------------------------
Nr: 2 | Usuário: Raimundo
Espaço Utilizado: 430MB | % de Uso: 85%
------------------------------------------------------------
Alexandre 430 85
Raimundo 430 85
Maria 210 42
José 120 24EXERCÍCIO DE FIXAÇÃO
2. Leet spek generator. Leet é uma forma de se escrever o alfabeto latino usando outros símbolos em lugar das letras, como números por exemplo. A própria palavra leet admite muitas variações, como l33t ou 1337. O uso do leet reflete uma subcultura relacionada ao mundo dos jogos de computador e internet, sendo muito usada para confundir os iniciantes e afirmar-se como parte de um grupo. Pesquise sobre as principais formas de traduzir as letras. Depois, faça um programa que peça um texto e transforme-o para a grafia leet speak.
dict_leet = { 'a': '4', 'b': '8', 'c': '(', 'd': '|)', 'e': '3', 'f': '|=', 'g': '6', 'h': '#', 'i': '1', 'j': '_|', 'k': '|<', 'l': '1', 'm': '|v|', 'n': '|\|', 'o': '0', 'p': '|>', 'q': '0_', 'r': '|2', 's': '5', 't': '7', 'u': '|_|', 'v': '\/', 'w': '\/\/', 'x': '><', 'y': '`/', 'z': '2' }
ORIENTAÇÃO A OBJETOS
Orientação a Objetos (OO) é um paradigma de programação que organiza o software em torno de objetos, que são instâncias de classes. Esses objetos encapsulam dados (atributos) e comportamentos (métodos), permitindo a criação de programas que são mais modularizados, reutilizáveis e fáceis de manter.
ORIENTAÇÃO A OBJETOS
Python suporta completamente a programação orientada a objetos e oferece várias funcionalidades que tornam o desenvolvimento OO fácil e intuitivo.
ORIENTAÇÃO A OBJETOS - CONCEITOS FUNDAMENTAIS
Classes
Uma classe é um molde ou uma estrutura que define um tipo específico de objeto. Ela agrupa dados e métodos que operam sobre esses dados. Em Python, uma classe é definida usando a palavra-chave class.
class Pessoa:
passORIENTAÇÃO A OBJETOS - CONCEITOS FUNDAMENTAIS
class Pessoa:
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
def cumprimentar(self):
print(f"Olá, meu nome é {self.nome} e eu tenho {self.idade} anos.")__init__: É o método construtor da classe, que é chamado automaticamente quando uma nova instância da classe é criada. Ele inicializa os atributos do objeto.
self: É uma referência à instância atual da classe e é usada para acessar variáveis que pertencem à classe.
ORIENTAÇÃO A OBJETOS - CONCEITOS FUNDAMENTAIS
p1 = Pessoa("José", 34)
p2 = Pessoa("Hurikaua", 87)Objetos
Um objeto é uma instância de uma classe. Quando você cria um objeto, você cria uma “cópia” da classe com seus próprios valores de atributos.
ORIENTAÇÃO A OBJETOS - CONCEITOS FUNDAMENTAIS
Atributos
Atributos são as variáveis que pertencem a uma classe. Eles podem ser de instância (específicos para um objeto) ou de classe (compartilhados entre todas as instâncias da classe).
class Pessoa:
especie = "Humano"
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
ORIENTAÇÃO A OBJETOS - CONCEITOS FUNDAMENTAIS
Métodos
Métodos são funções definidas dentro de uma classe que descrevem os comportamentos de um objeto.
class Pessoa:
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
def cumprimentar(self):
print(f"Olá, meu nome é {self.nome} e eu tenho {self.idade} anos.")
def maior_de_idade(self):
return self.idade >= 18ORIENTAÇÃO A OBJETOS - CONCEITOS FUNDAMENTAIS
Métodos
Método de instância: Atua sobre o objeto criado (instância) e seu primeiro parâmetro é self.
class Pessoa:
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
def cumprimentar(self):
print(f"Olá, meu nome é {self.nome} e eu tenho {self.idade} anos.")
def maior_de_idade(self):
return self.idade >= 18ORIENTAÇÃO A OBJETOS - CONCEITOS FUNDAMENTAIS
Métodos
Método de classe: Referencia a própria classe, utilizando o decorador @classmethod e seu primeiro parâmetro é cls.
class Pessoa:
especie = "Humano"
@classmethod
def mostrar_especie(cls):
print(f"Espécie: {cls.especie}")
Pessoa.mostrar_especie() # Espécie: HumanoORIENTAÇÃO A OBJETOS - CONCEITOS FUNDAMENTAIS
Métodos
Método de estático: É uma função utilitária que não depende da instância ou da classe, utilizando o decorador @staticmethod não recebendo nem self nem cls.
class Pessoa:
@staticmethod
def eh_maior_de_idade(idade):
return idade >= 18
print(Pessoa.eh_maior_de_idade(20)) # TrueORIENTAÇÃO A OBJETOS - CONCEITOS FUNDAMENTAIS
Métodos
Resumindo tipos de métodos
| Tipo | Usa self? | Usa cls? | Acessa instância? | Acessa classe? |
|---|---|---|---|---|
| Método de instância | ✅ | ❌ | ✅ | ✅ |
| Método de classe | ❌ | ✅ | ❌ | ✅ |
| Método estático | ❌ | ❌ | ❌ | ❌ |
ORIENTAÇÃO A OBJETOS - CONCEITOS FUNDAMENTAIS
Herança
Herança é um mecanismo que permite que uma nova classe (subclasse) herde atributos e métodos de uma classe existente (superclasse). Isso promove o reuso de código e a criação de uma hierarquia de classes.
ORIENTAÇÃO A OBJETOS - CONCEITOS FUNDAMENTAIS
class Pessoa:
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
def apresentar(self):
print(f"Olá, meu nome é {self.nome} e tenho {self.idade} anos.")
# Classe com herança
class Aluno(Pessoa):
def __init__(self, nome, idade, matricula):
# Chama o construtor da superclasse
super().__init__(nome, idade)
self.matricula = matricula
def apresentar(self):
# Sobrescrevendo método da superclasse
print(f"Sou o aluno {self.nome}, tenho {self.idade} anos e matrícula {self.matricula}.")
ORIENTAÇÃO A OBJETOS - CONCEITOS FUNDAMENTAIS
class Pessoa:
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
def apresentar(self):
print(f"Olá, meu nome é {self.nome} e tenho {self.idade} anos.")
# Classe com herança
class Aluno(Pessoa):
def __init__(self, nome, idade, matricula):
# Chama o construtor da superclasse
super().__init__(nome, idade)
self.matricula = matricula
def apresentar(self):
# Sobrescrevendo método da superclasse
print(f"Sou o aluno {self.nome}, tenho {self.idade} anos e matrícula {self.matricula}.")
super(): É usado para chamar o construtor da superclasse ou outros métodos da superclasse.
ORIENTAÇÃO A OBJETOS - CONCEITOS FUNDAMENTAIS
Encapsulamento
Encapsulamento é o conceito de esconder os detalhes internos de um objeto e expor apenas o que é necessário. Em Python, isso é conseguido através de convenções como o uso de prefixos de sublinhado __ para indicar atributos e métodos privados.
ORIENTAÇÃO A OBJETOS - CONCEITOS FUNDAMENTAIS
class Pessoa:
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
self.__salario = salario # Atributo privado
def apresentar(self):
print(f"Olá, meu nome é {self.nome} e tenho {self.idade} anos.")
# Getter para o salário
def get_salario(self):
return self.__salario
# Setter para o salário, com verificação
def set_salario(self, novo_salario):
if novo_salario >= 0:
self.__salario = novo_salario
else:
print("Salário não pode ser negativo!")
# Método para exibir o salário formatado
def exibir_salario(self):
print(f"Salário atual de {self.nome}: R$ {self.__salario:.2f}")ORIENTAÇÃO A OBJETOS - CONCEITOS FUNDAMENTAIS
Vantagens da Orientação a objetos
MÓDULOS
No Python um arquivo com extensão py é um módulo então dentro de um módulo eu posso ter N classes, atributos e métodos.
MÓDULOS
Podemos ter um módulo só com métodos utils por exemplo.
# módulo utils.py
def formatar_data():
raise NotImplementedError("Aqui será formatada a data")
def add_mascara():
raise NotImplementedError("Aqui será adicionada a máscara")
def converter_para_decimal():
raise NotImplementedError("Aqui será convertido para decimal")MÓDULOS
Podemos também ter um módulo só com variáveis de configuração por exemplo.
# módulo settings.py
PATH_API = "http://127.0.0.1:9000/curso"
DEFAULT_USER_API = "admin"
DEFAULT_PASSWORD_API = "admin"
TIME_ZONE = "America/Manaus"MÓDULOS
Podemos também ter um módulo só com classes.
# módulo models.py
class Pessoa:
def __init__(self, nome = None, sexo = None):
self.nome = nome
self.sexo = sexo
class Usuario:
def __init__(self, login = None, senha = None):
self.login = login
self.senha = senhaMÓDULOS
Também podemos criar estrutura de pastas em nosso projeto com a ideia de organizar melhor os contextos.
MÓDULOS
Ao criarmos pastas na estrutura do projeto para que as mesmas possam ser importadas quando usadas, representando assim uma estrutura similar a um pacote devemos sempre adicionar um arquivo __init__.py, o mesmo pode estar com o conteúdo vazio, mas é necessário para inicialização da pasta como um módulo.
PACOTES
Com o __init__.py marcamos a pasta como um pacote Python.
Através do __init__.py podemos importar submódulos automaticamente ou definir o que é exposto no pacote com __all__.
meu_projeto/
│
├── main.py
└── utilidades/
├── __init__.py
├── calculadora.py
└── texto.pyPACOTES
meu_projeto/
│
├── main.py
└── utilidades/
├── __init__.py
├── calculadora.py
└── texto.py# main.py
from utilidades import somar, capitalizar
print(somar(2, 3)) # 5
print(capitalizar("python")) # Python# __init__.py
# Importa funções diretamente nos namespace do pacote
from .calculadora import somar, subtrair
from .texto import capitalizar
# Define o que será acessível com `from utilidades import *`
__all__ = ['somar', 'subtrair', 'capitalizar']# texto.py
def capitalizar(texto):
return texto.capitalize()# calculadora.py
def somar(a, b):
return a + b
def subtrair(a, b):
return a - bIMPORTAÇÕES
from padrao.models import Pessoa
p = Pessoa()
p.nome = "Lourenzo"
p.sexo = "Masculino"
print(p.nome)from padrao.models import Pessoa as MinhaPessoa
p = MinhaPessoa()
p.nome = "Lourenzo"
p.sexo = "Masculino"
print(p.nome)IMPORTAÇÕES
Podemos fazer a importação de várias maneiras diferentes.
Você pode também dar uma apelido para a importação e no contexto daquele módulo Python utilizar o apelido para fazer as chamadas.
IMPORTAÇÕES
from padrao import models
p = models.Pessoa()
p.nome = "Lourenzo"
p.sexo = "Masculino"
print(p.nome)from utils import add_mascara
print(add_mascara('campo'))EXCEÇÕES
Tratamento de exceções em Python é um mecanismo que permite ao desenvolvedor lidar com erros que podem ocorrer durante a execução de um programa. Em vez de o programa falhar abruptamente, o tratamento de exceções permite que o código capture e lide com esses erros de maneira controlada.
O que são exceções?
Exceções são eventos que ocorrem durante a execução de um programa que interrompem o fluxo normal do código. Elas podem ser causadas por uma variedade de problemas, como tentar acessar um índice inexistente em uma lista, dividir por zero, abrir um arquivo que não existe, entre outros.
EXCEÇÕES
Estrutura Básica de Tratamento de Exceções
Em Python, o tratamento de exceções é feito usando os blocos try, except, else e finally.
try: Contém o código que pode gerar uma exceção.
except: Contém o código que será executado se uma exceção ocorrer.
else: (Opcional) Contém o código que será executado se nenhuma exceção ocorrer.
EXCEÇÕES
finally: (Opcional) Contém o código que será executado sempre, independentemente de uma exceção ter ocorrido ou não.
EXCEÇÕES
EXCEÇÕES
# Exemplo simples
try:
print(x)
except:
print("Ocorreu uma exceção!")# Exemplo lidando com várias exceções
try:
print(5/0)
except ZeroDivisionError:
print("Valor dividido por zero.")
except:
print("Algo de errado aconteceu.")# Exemplo com carregamento de arquivo
try:
with open('dados.csv') as file:
read_data = file.read()
except FileNotFoundError as fnf_error:
print(fnf_error)
print("Nota: não foi possível carregar o arquivo 'dados.csv'")EXCEÇÕES
# Exemplo simples com else e capturando exceção
try:
result = 1/3
except ZeroDivisionError as err:
print(f"Ocorreu o erro: {err}" )
else:
print(f"O resultado é {result}")EXCEÇÕES
# Exemplo com finally
def divide(x,y):
try:
result = x/y
except ZeroDivisionError:
print("Altere o argumento 'y' para um valor diferente de 0")
except:
print("Algo de errado aconteceu.")
else:
print(f"O resultado é {result}")
finally:
print("\033[92m FPFtech Escola Tecnológica \033[00m")# Colorir saídas no terminal com cor
# Utilizando Códigos ANSI
print("\033[31mTexto em vermelho\033[0m")
print("\033[32mTexto em verde\033[0m")
print("\033[33mTexto em amarelo\033[0m")
print("\033[34mTexto em azul\033[0m")\033[ inicia o código de escape.
O número representa a cor:
31: vermelho
32: verde
33: amarelo
34: azul
0m: reseta para o padrãoNota:
EXCEÇÕES
# Exemplo lançando exceção (raise) e capturando
valor = 2_000
try:
if valor > 1_000:
# raise the ValueError
raise ValueError("Por favor adicionar um valor menor que 1,000")
else:
print("Parabéns! Você é o vencedor!!")
except ValueError as e:
print(e)EXCEÇÕES
# Exemplo exceção com match case
result = 1 / 0
except Exception as e:
match e:
case ZeroDivisionError():
print("Ocorreu uma divisão por 0.")
case NameError():
print("Variável não definida.")
case _:
print("um erro inesperado ocorreu.")EXCEÇÕES
# Exemplo Personalizando exceções
class IdadeInvalidaError(Exception):
def __init__(self, idade, mensagem="Idade inválida! Deve ser maior ou igual a 18."):
self.idade = idade
self.mensagem = mensagem
super().__init__(f"{mensagem} (Idade fornecida: {idade})")
# Usando a exceção personalizada
def verificar_idade(idade):
if idade < 18:
raise IdadeInvalidaError(idade)
print("Idade válida, acesso permitido!")
# Testando
try:
verificar_idade(16)
except IdadeInvalidaError as e:
print(f"Erro: {e}")OUTROS PACOTES
Vamos conhecer um pouco da biblioteca para trabalhar com aplicações desktop.
PyQT5 é um empacotador do QT para a linguagem python.
Suporta as plataformas UNIX, Linux, Windows e Mac OS
Para começarmos execute o comando pip install pyqt5 dentro da sua virtual env.
OUTROS PACOTES
OUTROS PACOTES
import sys
from PyQt5.QtCore import QLine
from PyQt5.QtWidgets import QApplication, QMainWindow
class MainForm(QMainWindow):
def __init__(self, parent = None):
super().__init__(parent=parent)
self.setWindowTitle('Minha primeiria tela')
self.setGeometry(20, 20, 800, 400)
app = QApplication(sys.argv)
main = MainForm()
main.show()
sys.exit(app.exec_())OUTROS PACOTES
Após executar o programa o resultado será o seguinte.
OUTROS PACOTES
Vamos adicionar com Label e o LineEdit
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit, QVBoxLayout, QWidget
class MainForm(QMainWindow):
def __init__(self, parent = None):
super().__init__(parent=parent)
self.label_nome = QLabel()
self.label_nome.setText('Nome')
self.edt_nome = QLineEdit()
vertical_layout = QVBoxLayout()
vertical_layout.addWidget(self.label_nome)
vertical_layout.addWidget(self.edt_nome)
self.componentes = QWidget()
self.componentes.setLayout(vertical_layout)
self.setCentralWidget(self.componentes)
self.setWindowTitle('Minha primeiria tela')
self.setGeometry(20, 20, 800, 400)OUTROS PACOTES
O resultado do campo nome inserido.
OUTROS PACOTES
Agora vamos criar um layout vertial para melhor agrupar os elementos.
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit, QVBoxLayout, QWidget, QSpacerItem
class MainForm(QMainWindow):
def __init__(self, parent = None):
super().__init__(parent=parent)
self.label_nome = QLabel()
self.label_nome.setText('Nome')
self.edt_nome = QLineEdit()
space = QSpacerItem(0, 0, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding)
vertical_layout = QVBoxLayout()
vertical_layout.addWidget(self.label_nome)
vertical_layout.addWidget(self.edt_nome)
vertical_layout.addItem(space)
self.componentes = QWidget()
self.componentes.setLayout(vertical_layout)
self.setCentralWidget(self.componentes)
self.setWindowTitle('Minha primeiria tela')
self.setGeometry(20, 20, 800, 400)OUTROS PACOTES
O resultado após definir os espaçamentos
OUTROS PACOTES
Agora vamos adicionar um botão e seu evento de clique, bem como, uma tabela para preenchimento de dados.
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit, QVBoxLayout, QWidget, QSpacerItem, QPushButton
class MainForm(QMainWindow):
def __init__(self, parent = None):
super().__init__(parent=parent)
self.label_nome = QLabel()
self.label_nome.setText('Nome')
self.edt_nome = QLineEdit()
self.button_adicionar = QPushButton('Adicionar')
space = QSpacerItem(0, 0, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding)
vertical_layout = QVBoxLayout()
vertical_layout.addWidget(self.label_nome)
vertical_layout.addWidget(self.edt_nome)
vertical_layout.addWidget(self.button_adicionar)
vertical_layout.addItem(space)
self.componentes = QWidget()
self.componentes.setLayout(vertical_layout)
self.setCentralWidget(self.componentes)
self.setWindowTitle('Minha primeiria tela')
self.setGeometry(20, 20, 800, 400)OUTROS PACOTES
OUTROS PACOTES
self.button_adicionar = QPushButton('Adicionar')
self.button_adicionar.clicked.connect(self.clicando)
# Função na classe MainForm
def clicando(self):
print('cliquei')
OUTROS PACOTES
self.table = QTableWidget()
self.table.setColumnCount(2)
self.table.setHorizontalHeaderLabels(['Nome','Sexo'])
self.table.setRowCount(0)
vertical_layout.addWidget(self.table)Dentro da função construtora __init__ adicione a tabela.
OUTROS PACOTES
def popularTabela(self):
self.table.setRowCount(len(self.FUNCIONARIOS))
for linha, funcionario in enumerate(self.FUNCIONARIOS):
nome = QTableWidgetItem(funcionario['nome'])
nome.setData(QtCore.Qt.UserRole, funcionario)
sexo = QTableWidgetItem(funcionario['sexo'])
self.table.setItem(linha, 0, nome)
self.table.setItem(linha, 1, sexo)Agora vamos criar uma função dentro da classe que representa o formulário para criarmos um lógica para preenchimento da tabela.
OUTROS PACOTES
...
self.table = QTableWidget()
self.table.setColumnCount(2)
self.table.setHorizontalHeaderLabels(['Nome', 'Sexo'])
self.table.setRowCount(0)
self.popularTabela()
...E por sim faça a chamada do método de preencher a tabela dentro do do método __init__.
OUTROS PACOTES
Atente que para inserir as pessoas é necessário ter implementado o dicionário que possui as chaves e valores do funcionário.
REFERÊNCIAS