Linguagem de

Programação Python

  • Vanilton da Thálita 💍
  • Pai do Louie 👦🏻 e Lourenzo 👶🏻
  • Cientista da Computação 🤓
  • 🎓 Especialista  em Engenharia de Software e Gestão de Pessoas
  • 👨🏻‍💻Pessoas e Processos na @fpf.tech 😃
  • 👨🏻‍🏫 Professor na @fpftech.educacional

APRESENTAÇÃO

QUEM SÃO VOCÊS?

  • Nome, profissão ou ocupação e sua expertise em informática.
  • Uma expectativa para disciplina

ACORDOS DE TIME

1

Introdução aos conceitos de linguagem de programação

2

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

 

3

Tipos Básicos, Operadores e Variáveis

4

Estrutura de controle de fluxo

5

Listas, Tuplas e Dicionários

AGENDA

6

Funções

7

Arquivos

8

Orientação a Objetos

Classes

Objetos

Atributos

Métodos

Herança

Módulos

9

Importações

10

Exceções

AGENDA

11

Outros Pacotes Python

AGENDA

O que é uma linguagem de programação?

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

  • O código-fonte é traduzido de uma só vez para linguagem de máquina por um compilador.
  • O resultado é um arquivo executável independente (.exe, .out, etc.).
  • Exemplos: C, C++, Go, Rust

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

"Linguagens compiladas são como traduzir um livro inteiro antes de ler. Já as interpretadas são como ter um tradutor lendo e traduzindo cada frase em tempo real."

RANKING DE LINGUAGENS DE PROGRAMAÇÃO

RANKING DE LINGUAGENS DE PROGRAMAÇÃO

Python

  • Domínio em IA e Ciência de Dados: Bibliotecas como TensorFlow e Pandas consolidam sua posição.

  • Sintaxe Amigável: Atraente para iniciantes e poderosa para tarefas complexas.

  • Apoio Corporativo: Empresas como Google e Amazon investem fortemente.

RANKING DE LINGUAGENS DE PROGRAMAÇÃO

TypeScript

  • Superset do JavaScript: Oferece tipagem estática, melhorando a qualidade e manutenção do código.
  • Adoção Empresarial: Utilizado por empresas como Microsoft e Slack.

RANKING DE LINGUAGENS DE PROGRAMAÇÃO

C++

  • Desempenho em Aplicações Críticas: Preferido para motores de jogos, sistemas operacionais e sistemas embarcados devido ao controle preciso dos recursos do sistema.

RANKING DE LINGUAGENS DE PROGRAMAÇÃO

Go

  • Em crescimento, especialmente em infraestrutura, back-end e cloud computing.
    Adotado por empresas como Google, Uber, Dropbox, Kubernetes e Docker.
  • Go tem como objetivo substituir linguagens como C/C++ em sistemas distribuídos e escaláveis com foco em simplicidade, desempenho e concorrência.

Dito isso iremos trabalhar com...

DEFINIÇÃO

  • Python é uma linguagem de programação de alto nível, interpretada de script, imperativa, orientada a objetos, funcional, de tipagem dinâmica e forte. Foi lançada por Guido van Rossum em 1991.  

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?

  • Facilidade
  • Aumento de produtividade
  • Comunidade ampla e popularidade
  • Utilização Versátil 
  • Inteligência Artificial 
  • Programação Web
  • Gerenciamento de Big Data
  • Computação Gráfica
  • Automação
  • Mercado Amplo 
  • Bons Salários

QUEM USA PYTHON?

  • Instagram: Utiliza Django como backend
  • Google: Grande parte do algoritmo de busca é escrito em python
  • Spotify: O Aplicativo é construído em Python
  • Netflix: Utiliza diversas bibliotecas em Python em serviços
  • Uber: Boa parte do aplicativo é feito com Python

QUEM USA PYTHON?

  • Dropbox: contratou o criador da linguagem Guido van Rossum
  • Pinterest: utiliza Python e Django
  • FPFtech: Em grande parte das aplicações web com o uso do framework Django e em alguns interfaces que rodam na linha de produção com uso do PyQT.

APLICABILIDADE DA LINGUAGEM PYTHON

  • Aplicações Web
  • Aplicações Desktop
  • Embarcado
  • Análise de Dados e Aprendizado de máquina

INSTALAÇÃO E CONFIGURAÇÃO DO AMBIENTE

INSTALAÇÃO E CONFIGURAÇÃO DO AMBIENTE

  • Instalação Python

INSTALAÇÃO E CONFIGURAÇÃO DO AMBIENTE

  • Esqueci de marcar a opção para adicionar a variável de ambiente no path. O que fazer?
  • Abra o Explorer do Windows clique o botão direito na opção Este Computador e siga pra Propriedades.

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

  • Pip é um sistema de gerenciamento de pacotes padrão usado para instalar e gerenciar pacotes de software escritos em Python.
    Muitos pacotes podem ser encontrados na fonte padrão para pacotes e suas dependências - Python Package Index.

GERENCIADOR DE PACOTE PIP

INSTALANDO UM PACOTE PIP

pip install ipython
  • A biblioteca IPython (Interactive Python) é uma ferramenta poderosa para desenvolvimento interativo, muito utilizada por quem trabalha com análise de dados, ciência, automação e ensino de programação.

VERIFICANDO PACOTES PIP INSTALADOS

pip list

ATUALIZANDO PIP

COMPARTILHANDO BIBLIOTECAS

  • Em um ambiente distribuído quando outros colegas precisarem instalar a mesma versão de bibliotecas precisamos compartilhar estas bibliotecas, e para isso criamos um arquivo que cria essas referências.

INSTALANDO BIBLIOTECAS COM REQUIREMENTS

  • Instalando biblioteca a partir de um arquivo que já contêm as bibliotecas com suas respectivas versões.

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: 100000

OPERADORES 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: True

OPERADORES 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: True

OPERADORES 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 falsas

ESTRUTURA 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

  • O enumerate() é uma função útil em Python que permite iterar sobre uma sequência, como uma lista ou uma string, ao mesmo tempo em que mantém um contador automático. Essa função retorna pares contendo o índice (ou contador) e o valor correspondente da sequência.
# 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

  • O laço while repete um bloco de código enquanto uma condição especificada é verdadeira. É útil quando você não sabe com antecedência quantas vezes o laço precisará ser executado.
# Sintaxe do while
 
while condicao:
	# Bloco a ser repetido

ESTRUTURA DE REPETIÇÃO

# Definindo variável
contador = 0

# Iterando enquanto respeitar a condição
while contador < 5:
    print(f"Contador: {contador}")
    contador += 1

ESTRUTURA DE REPETIÇÃO

  • O laço while continua a execução enquanto a condição contador < 5 for verdadeira.
  • O valor de contador é incrementado em 1 a cada iteração, e o laço termina quando contador atinge 5.
  • Interromper a iteração imediatamente "break".
for i in range(10):
    if i == 5:
        break
    print(i)

ESTRUTURA DE REPETIÇÃO

  • Pula a iteração imediatamente "continue".
for i in range(10):
    if i == 2:
        continue
    print(i)

ESTRUTURA DE REPETIÇÃO

  • Exemplo utilizando while, break e continue
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

  • Python possui várias estruturas de dados integradas que permitem armazenar e manipular coleções de dados. As mais comuns são listas, tuplas e dicionários. Cada uma dessas estruturas tem características específicas e métodos associados que são úteis para diferentes situações.

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

  • Declarando Listas com o list()
# 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, 41

LISTAS, TUPLAS E DICIONÁRIOS

  • Acessando elementos
numeros = [1, 2, 3, 4, 5]
print(numeros[0])
print(numeros[-2])
  • O que será impresso no output?

LISTAS, TUPLAS E DICIONÁRIOS

  • Adicionando elementos a lista com "append"
numeros = [1, 2, 3, 4, 5]
print(numeros[0]) 
print(numeros[-1])
numeros.append(6)
print(numeros[-2])
  • O que será impresso no output?

LISTAS, TUPLAS E DICIONÁRIOS

  • remove: Remove a primeira ocorrência de uma valor específico.
numeros = [1, 2, 3, 4, 5]
numeros.append(3)
numeros.remove(3)
print(numeros)
  • O que será impresso no output?

LISTAS, TUPLAS E DICIONÁRIOS

  • pop(): Remove e retorna o elemento em uma posição específica (ou último, se a posição não for especificada.
numeros = [1, 2, 3, 4, 5]
ultimo = numeros.pop()
print(ultimo)
print(numeros)
  • O que será impresso no output?
numeros = [1, 2, 3, 4, 5]
selecionado = numeros.pop(1)
print(selecionado)
print(numeros)

LISTAS, TUPLAS E DICIONÁRIOS

  • index(): Retorna o índice da primeira ocorrência de um valor.
numeros = [1, 2, 3, 4, 5]
posicao = numeros.index(4)
print(posicao)
  • O que será impresso no output?

LISTAS, TUPLAS E DICIONÁRIOS

  • Exemplos com len() para uma Lista
# 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)
  • O que será impresso no output?

LISTAS, TUPLAS E DICIONÁRIOS

LISTAS, TUPLAS E DICIONÁRIOS

  • Tuplas são coleções ordenadas de elementos que são imutáveis (ou seja, uma vez criadas, não podem ser alteradas). As tuplas são úteis quando você deseja que os dados sejam protegidos contra modificações acidentais.
  • Criando uma Tupla
# 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

  • Acessando Elementos
# 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: 5

LISTAS, TUPLAS E DICIONÁRIOS

  • Funções Importantes para Tuplas
# 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: 3

LISTAS, TUPLAS E DICIONÁRIOS

LISTAS, TUPLAS E DICIONÁRIOS

  • Dicionários são coleções desordenadas de pares chave-valor, onde cada chave é única. Eles são muito úteis para armazenar dados que precisam ser acessados por uma chave identificadora.
  • Criando e acessando um Dicionário
# Dicionário com informações de uma pessoa
pessoa = {"nome": "Vanilton", "idade": 34, "cidade": "Manaus"}

# Acessando valores
print(pessoa["nome"]) # Output: Vanilton

LISTAS, TUPLAS E DICIONÁRIOS

  • Criando e acessando um Dicionário com dict()
# 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

  • Funções Importantes para 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

  • get(): Retorna o valor associado a uma chave, mas evita um erro se a chave não existir,
    retornando um valor padrão (ou None).
# 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: Desconhecido

LISTAS, 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: 5

ITERANDO 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:  cidade
  • Há várias maneiras de iterar sobre dicionários, dependendo do que você deseja acessar (chaves, valores ou ambos).

ITERANDO 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:  Manaus

ITERANDO 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: Manaus

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")
  • 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])        # 30
  • Acessando 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)   # 28
  • Convertendo 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]
  • List Comprehension: É uma forma compacta de criar listas em uma única linha, usando uma sintaxe de for + expressão.

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á bb

FUNÇÕ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: 8

FUNÇÕ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: 13

FUNÇÕ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: Manaus

FUNÇÕ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.py
O 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: 5

str.upper(): Converte todos os caracteres da string para maiúsculas.

 

texto = "Louie"
print(texto.upper()) # Output: LOUIE

str.lower(): Converte todos os caracteres da string para minúsculas.

 

texto = "Louie"
print(texto.lower()) # Output: louie

FUNÇÕ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 programming

str.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: -1

str.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: True

str.endswith(): Verifica se a string termina com uma determinada substring.

texto = "Igarapé é frio"
print(texto.endswith("io")) # Output: True

str.isdigit(): Verifica se todos os caracteres na string são dígitos.

texto = "12345"
print(texto.isdigit()) # Output: True

FUNÇÕES DE STRING

str.isalpha(): Verifica se todos caracteres na string são letras.

texto = "Igarapé é frio"
print(texto.isalpha()) # Output: False

str.count(): Conta o número de ocorrências de uma substring na string.

texto = "Igarapé é frio"
print(texto.count("a")) # Output: 2

str.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:

  • quantos espaços em branco existem na frase.
  • quantas vezes aparecem as vogais a, e, i, o, u.

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: 4

type(): 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: 10

max() 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: 1

sorted(): 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 4

enumerate(): 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 c

zip(): 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 35

map(): 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: 10

any() 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: False

reversed(): 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)
3 + 4j = \sqrt{3^2 + 4^2} = \sqrt{9 + 16} = \sqrt{25} = 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.14

breakpoint(): 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:

  • r: Abre para leitura (modo padrão). O arquivo deve existir.
  • w: Abre para escrita. Cria um novo arquivo se não existir ou sobrescreve o arquivo existente.
  • a: Abre para escrita, mas no modo de anexar (adiciona no final do arquivo, sem sobrescrever).

TRABALHANDO COM ARQUIVOS

Modos de abertura: A função open() aceita diferentes modos de abertura, que determinam como você pode interagir com o arquivo:

  • b: Modo binário (por exemplo, "rb", "wb"), utilizado para arquivos que não são de texto (imagens, áudio, etc.).
  • x: Cria um novo arquivo, mas gera um erro se o arquivo já existir.

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 arquivo

TRABALHANDO 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.txt

TRABALHANDO 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 24

EXERCÍ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:
  pass

ORIENTAÇÃ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 >= 18

ORIENTAÇÃ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 >= 18

ORIENTAÇÃ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: Humano

ORIENTAÇÃ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))  # True

ORIENTAÇÃ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

  • Reuso de Código: Com herança e polimorfismo, você pode reutilizar código em várias partes do programa.​
  • Modularidade: Cada classe funciona como um módulo que pode ser desenvolvido e testado separadamente.
  • Facilidade de Manutenção: A estrutura clara e organizada facilita a identificação e correção de problemas.
  • Abstração: Permite focar em interfaces simples e abstrair os detalhes de implementação complexos. 

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 = senha

MÓ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.py

PACOTES

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 - b

IMPORTAÇÕ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.​

  1. Importando pelo nome do módulo.​
  2. Importando uma função específica que será usada.​
  3. Importando uma classe específica que será usada.​

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ão

Nota:

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

  1. Crie um projeto vazio
  2. Execute o comando pip install pyqt5 dentro da sua virtual env.
  3. Crie um arquivo main.py.

 

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

FPFtech Escola Tecnológica - Linguage de Programação - Python

By Vanilton Pinheiro

FPFtech Escola Tecnológica - Linguage de Programação - Python

Apresentar aos alunos os conceitos de linguagens de programação e seus ecossistemas, a aplicação de conceitos de lógica de programação em linguagens de programação, bem como mostrar no mínimo o funcionamento de 2 linguagens de programação para os discentes.

  • 476