Coletânea Python do ZERO às Redes Neurais Artificiais

Fernando Feltrin · Capítulo 286 de 287

Páginas do PDF

Coletânea Python do ZERO às Redes Neurais Artificiais

Bônus

Revisão e Exemplos

 

Tipos de Dados

# INT - Número real inteiro, sem casas decimais.

num1 = 12

num2 = int(15)

print(type(num1))

print(type(num2))

 

# FLOAT - Número de ponto flutuante / com casas decimais.

num3 = 12.8

num4 = float(19.0)

print(type(num3))

print(type(num4))

 

# BOOL - Booleano / Binário (0 ou 1)

condicao1 = 0

sensor01 = True

print(type(condicao1))

print(type(sensor01))

 

# STRING - Texto composto de qualquer caractere alfanumérico.

palavra1 = 'palavra'

palavra2 = "marca d'água"

frase1 = 'Uma frase qualquer'

frase3 = 'Ela tinha 8 anos'

frase3 = str('Outra frase qualquer')

print(type(palavra2))

print(type(frase3))

# LIST - Listas de qualquer tipo.

lista = [2, 'Pedro', 15.9]

lista2 = list([1, 'Maria', 19.99])

print(type(lista))

print(type(lista2))

 

# DICT - Dicionários.

dicionario = {'Nome':'Fernando', 'Idade':32}

print(type(dicionario))

 

Comentários

# Comentário simples de até uma linha

'''Comentário onde não há limite de linhas,

podendo ser usado para descrever blocos

de código mais detalhadamente'''

 

# Comentando uma variável para desabilitar a mesma

usuario1 = 'Fernando' #Legível pelo interpretador

#usuario1 = 'Fernando' #Ignorado pelo interpretador

 

Variáveis

# Sintaxe Básica

nome_da_variavel = dado/valor/atributo

variavel1 = 20

variavel2 = 'Veronica'

print(variavel1)

print(variavel2)

 

# Tipos de Variáveis

var_tipo_string = 'Conjunto de caracteres alfanuméricos' # Incluindo símbolos e caracteres especiais var_tipo_int = 12

# Número inteiro

var_tipo_float = 15.3

# Número com casas decimais

var_tipo_bool = 1

# Booleano / Binário (0 ou 1)

var_tipo_lista = [1, 2, 'Paulo', 'Maria', True]

# Lista de dados/valores

var_tipo_dicionario = {'nome':'Fernando', 'idade':31} # Conjunto de dados:valores

var_tipo_tupla = ('Ana', 'Fernando', 3)

# Lista de dados/valores porém imutável

var_tipo_comentario = """Um comentário atribuído a uma variável deixa de ser apenas um comentário, vira um texto que pode ser incorporado ao código..."""

 

# Declarando uma variável quanto ao seu tipo

numero2 = 1987

ano_nasc = '1987'

print(type(numero2))

print(type(ano_nasc))

 

# Declarando múltiplas variáveis

nome, idade, sexo = 'Maria', 32, 'F'

'''

Mesmo que:

nome = 'Maria'

idade = 32

sexo = 'F'

'''

print(nome)

print(idade)

print(sexo)

print(nome, idade, sexo)

 

# Declarando múltiplas variáveis de mesmo tipo e dado/valor

num2 = x = a1 = 10

'''

Mesmo que:

num2 = 10

x = 10

a1 = 10

'''

print(num2)

print(x)

print(a1)

 

# Operações entre variáveis

a = 10

b = 5.2

print(a + b) # Soma simples

 

# Interações entre variáveis

msg = 'Olá '

pessoa = 'Carlos'

print(msg + pessoa) # Concatenação

 

# Sintaxe não permitida / não recomendada

# Formas de declarar uma variável que podem gerar erros de interpretação

Nome Nome de variável iniciando em letra maiúscula NOME Nome de variável escrita totalmente em letras maiúsculas 8dados Nome de variável iniciando com números _numero Nome de variável iniciando com caractere especial minha variavel Nome de variável com espaços

número = 12345 Nome de variável contendo acentos (variavel2) Nome de variável encapsulado em chaves, parênteses ou colchetes

# Sintaxe usual permitida

nome

nome2

nome_de_variavel

 

# Palavras reservadas ao sistema

# Palavras que não podem ser usadas como nome de uma variável and del from not while

as elif global or with

assert else if pass yield

break except import print

class exec in raise

continue finally is return

def for lambda try

 

Funções Básicas de Entrada e de Saída

# Função de saída que exibe em tela ou em terminal algo para o usuário

print('Seja Bem-Vindo!!!')

 

# Exibindo em tela o conteúdo de uma variável

nome = 'Fernando'

print('Fernando')

print(nome)

 

# Realizando operações aritméticas dentro da função print( )

print(15 + 4)

print(15 - 4)

print(15 * 4)

print(15 / 4)

 

# Realizando operações entre dados/valores declarados e dados/valores atribuídos

numero3 = 30

print('O resultado da soma é: ', numero3 + 15)

 

# Realizando operações lógicas dentro da função print( )

numero = 9

print(numero > 3)

print(numero < 10)

print(numero == 11)

print(numero >= 12)

 

# Usando fStrings e máscaras de substituição dentro da função print( )

nome = 'Fernando'

print(f'Seja muito bem-vindo {nome}!!!')

 

# Usando operadores por meio de fStrings e suas máscaras de substituição

camisa = 19.90

calca = 39.90

print(f'A soma dos produtos do carrinho é: {camisa + calca}')

 

# Sintaxe antiga vs atual moderna

nome = 'Maria'

# Sintaxe funcional básica // Defasada

print('Bem-vindo', nome,'!!!')

# Sintaxe funcional // Defasada

print('Bem-vindo' + ' ' + nome + ' ' '!!!')

# Sintaxe antiga // Defasada

print('Bem-vindo %s !!!'%nome)

# Sintaxe usual // Defasada

print('Bem-vindo {} !!!'.format(nome))

# Sintaxe moderna atual

print(f'Bem-vindo {nome} !!!')

# Apesar da evolução da linguagem, é perfeitamente possível usar da sintaxe antiga # de acordo com sua preferência.

 

# Função de entrada, interage com o usuário fazendo com que o mesmo insira dados # Esta função por sua vez deve ser associada a uma variável

# A mesma só termina dua função no momento que o usuário aperta o botão ENTER

nome = input('Digite o seu nome: ')

print(nome)

 

nome = input('Digite o seu nome: ')

print(f'Bem-vindo {nome} !!!')

 

Operadores Aritméticos

# Soma

print(5 + 7)

 

# Subtração

print(12 - 3)

 

# Multiplicação

print(5 * 7)

 

# Divisão

print(120 / 6)

 

# Mais de uma operação simples

print(5 + 2 * 7)

 

# Operação composta

print((5 + 2) * 7)

# Primeiro será realizada a operação dentro dos parênteses, posteriormente o resto.

 

# Potenciação

print(3 ** 5) #3 elevado a 5ª potência

 

# Divisão exata

print(9.4 // 3)

 

# Módulo/Resto de uma divisão

print(10 % 3)

 

Operadores de Atribuição

# Atribuindo um dado ou valor a uma variável

nome = 'Fernando'

idade = 33

 

# Atribuição aditiva

valor = 4

valor = valor + 5

print(valor)

 

# Atribuição aditiva (método reduzido)

valor = 4

valor += 5

'''

Mesmo que:

valor = valor + 5

'''

print(valor)

 

# Atribuição subtrativa

valor = 4

valor -= 3

'''

Mesmo que:

valor = valor - 3

'''

print(valor)

 

# Atribuição multiplicativa

valor = 4

valor *= 3

'''

Mesmo que:

valor = valor * 3

'''

print(valor)

 

# Atribuição divisiva

valor = 12

valor /= 2

'''

Mesmo que:

valor = valor / 2

'''

print(valor)

 

# Módulo de (ou resto da divisão de)

valor = 12

valor %= 2

'''

Mesmo que:

valor = valor % 4

'''

print(valor)

 

# Divisão inteira

valor = 512

valor //= 256

'''

Mesmo que:

valor = valor // 256

'''

print(valor)

 

# Exponenciação

valor = 4

valor **= 8

'''

Mesmo que:

valor = valor ** 8

ou

valor = 4 * 4 * 4 * 4 * 4 * 4 * 4 * 4

'''

print(valor)

 

Operadores Lógicos

# Igualdade

print(5 == 6)

print(12 == 12)

 

# Diferença

print(7 != 3)

 

# Operadores lógicos compostos

# Todas as condições precisam ser verdadeiras para o retorno ser True

print(7 != 3 and 2 > 3)

 

# Outras expressões dependem de qual contexto serão aplicadas

num1 = 4

num2 = 9

num3 = 9

print(num1 == num2)

print(num1 is num2)

print(num2 is 9)

print(num2 is num3)

 

Operadores de Membro

# Verifica se um elemento é membro daquele tipo de dado

lista = [1, 2, 3, 'Ana', 'Maria']

print(2 in lista)

 

# Verifica se um elemento não faz parte daquele tipo de dado

lista = [1, 2, 3, 'Ana', 'Maria']

print('Maria' not in lista)

 

Operadores Relacionais

# Maior que

idade = 12

print(idade > 4)

# 3 é maior que 4?

 

# Igual ou maior que

num1 = 7

print(num1 >= 7)

# 7 é maior ou igual a 3?

 

# Operações entre valores atribuídos a variáveis

x = 2

z = 5

print(x > z)

# O valor de x é maior que o valor de z?

 

# Menor ou igual a

y = 7

z = 5

print(z <= y)

# O valor de z é igual ou menor que o valor de y?

 

# Duas condições lógicas

x = 2

y = 7

print(x is 2 and y != x)

# O valor de x é 2? E o valor de y é diferente do valor de x?

 

# Operadores em estruturas condicionais

idade = 21

if (idade > 18):

print('Idade adulta.')

 

num1 = 2

num2 = 1

if num1 > num2:

print('2 é maior que 1')

 

Operadores de Identidade

# O valor de uma variável é compatível com outra

aluguel = 250

energia = 250

agua = 65

print(aluguel is energia)

# O valor de aluguel é o mesmo valor de energia?

print(aluguel is agua)

# O valor de aluguel é o mesmo valor de agua?

 

Estruturas Condicionais

# if, elif, else

# Estrutura Condicional Simples

nome = input('Digite o seu nome:')

if nome == 'Fernando':

print('Bem vindo de volta Fernando!!!')

print(f'Você é novo(a) aqui, olá {nome}!!!')

# se a condição for atingida, o bloco dela é executado, caso contrario é simplesmente ignorado

 

# Estrutura Condicional com argumento lógico

num = 51

if num < 50:

print('Menor que 50')

else:

print('Maior que 50')

 

# Estrutura Condicional Composta

nome = input('Digite o seu nome:')

if nome == 'Fernando':

print('Bem vindo de volta Fernando!!!')

else:

print('Você não é Fernando...')

print(f'Você é novo(a) aqui, olá {nome}!!!')

 

# Estruturas Condicionais Aninhadas (quando se tem mais de duas possibilidades)

num1 = 12

if num1 <= 50:

print('Menor que 50')

elif num1 >= 50:

print('Maior que 50')

else:

print('Número Inválido')

# Se o valor de num1 for igual ou maior que 50, exibe a respectiva mensagem # Caso a primeira condição não for verdadeira, é verificado se o valor de num1 # é maior ou igual a 50. Caso nenhuma condição seja verdadeira, é exibida a # mensagem em else. Quando uma condição for verdadeira, nenhuma das seguintes # será executada.

 

# 1 condição sendo verdadeira já encerra o processo

nome1 = 'Fernando'

nome2 = 'Maria'

if nome1 == 'Fernando':

print('Bem-vindo Fernando!!!')

#if nome2 == 'Maria':

if nome2 == 'Maria':

print('Bem-vinda Maria!!!')

else:

print('Erro: Nome Desconhecido.')

# elif irá executar somente a primeira condição e encerrar o processo se ela # for verdadeira. elif irá imprimir somente o primeiro print() substituir elif # por if irá considerar mais de uma condição como verdadeira. if irá imprimir # o primeiro e o segundo print por ambos serem verdadeiros.

 

# 2 ou mais condições sendo verdadeiras

num1 = 12

num2 = 44

nome1 = 'Fernando'

nome2 = 'Maria'

if num1 >= 10 and nome1 == 'Fernando':

print('Número maior que 10 e o usuário é Fernando')

if num1 <= 10 and nome1 == 'Fernando':

print('Número menor que 10 e o usuário é Fernando')

if num1 == num2 and nome2 == 'Maria':

print('Número 1 e número 2 são iguais, assim como o usuário é Maria')

if num1 != num2 and nome2 == 'Maria':

print('Número 1 e número 2 são diferentes, assim como o usuário é Maria')

# Operador and exige que as duas condições sejam verdadeiras (uma condição e outra).

 

# Operações dentro de estruturas condicionais simples

num1 = 1

num2 = 15

if (num1 + num2) >= 20:

print('O resultado da soma é maior do que 20')

else:

print('O resultado da soma é menor do que 20')

 

# Estruturas condicionais com interpolação e máscaras de substituição

nomes = ['Fernando', 'Maria', 'Carlos']

login = input('Digite o seu nome: ')

if login in nomes:

print(f'Bem-vindo(a) {login}')

else:

print('Usuário não cadastrado.')

 

# Operações dentro de estruturas condicionais compostas

num1 = 15

num2 = 40

num3 = 2

soma = num1 + num2 + num3

if (num1 + num2) >= 0:

print('O número é positivo')

if (num1 + num2) > 50 and soma < 100:

print('O número é maior que 50 e menor que 100')

 

# Estruturas Condicionais com Validadores Simples (em string)

nome = input('Digite o seu nome: ')

if nome == 'Fernando':

print('Olá Fernando, você é o administraor do sistema!!!') elif nome in 'Ana Bárbara Carlos José Maria Paulo Tatiana':

print(f'Bem vindo(a) {nome}, você é um(a) usuário(a) registrado no sistema.')

else:

print('Olá, você não está logado no sistema, suas permissões são restritas.')

 

# Mesmo exemplo que o anterior, mas diferenciando gêneros

nome = input('Digite o seu nome: ')

if nome == 'Fernando':

print('Olá Fernando, você é o administraor do sistema!!!')

elif nome in 'Ana Bárbara Maria Tatiana':

print(f'Bem vinda {nome}, você é uma usuária registrada no sistema.')

elif nome in 'Carlos José Paulo':

print(f'Bem vindo {nome}, você é um usuário registrado no sistema')

else:

print('Olá, você não está logado no sistema, suas permissões são restritas.')

 

# Mesmo exemplo anterior, aprimorado

nome = input('Digite o seu nome: ')

funcionarios_homens = ['Carlos', 'José', 'Paulo'] funcionarias_mulheres = ['Ana', 'Bárbara', 'Maria', 'Tatiana']

if nome == 'Fernando':

print('Olá Fernando, você é o administrador do sistema!!!')

elif nome in funcionarias_mulheres:

print(f'Bem vinda {nome}, você é uma usuária registrada no sistema.')

elif nome in funcionarios_homens:

print(f'Bem vindo {nome}, você é um usuário registrado no sistema.')

else:

print('Olá, você não está logado no sistema, suas permissões são restritas.')

 

# Estrutura condicional composta com or (ou) e and (e)

veiculo1 = 'Gol'

veiculo2 = 'Corsa'

veiculo3 = 'Onibus'

cor1 = 'Branco'

cor2 = 'Vermelho'

if veiculo1 == 'Gol' or veiculo2 == 'Celta':

print('Carro')

if veiculo1 == 'Gol' and cor1 == 'Branco':

print('Gol Branco')

if veiculo1 == 'Onibus' and cor2 == 'Vermelho':

print('Onibus Vermelho')

# Condição em or apenas uma das condicionais precisa ser verdadeira # Condicão em and as duas condicionais precisam serem verdadeiras.

 

Estruturas de Repetição

# Enquanto determinada condição for verdadeira, o processo se repete

x = 0

while x <= 5:

print(x)

x = x + 1

 

# Enquanto o usuário não digitar a palavra específica o código não é executado

validador = input('Digite "Matrix" para continuar:')

while validador.strip() != 'Matrix':

print('Palavra-chave não confere, digite novamente:')

validador = input('Digite "Matrix" para continuar:')

 

# Estruturas condicionais dentro de laços de repetição

num = 0

total = 10

while num < 10:

print(num)

num += 1

if num == 5:

print('50% computado')

if num == 10:

print('100%, processo encerrado')

 

# Reescrevendo o exemplo de palavra-chave específica, aprimorado com while True

while True:

validador = input('Digite "Matrix" para continuar:')

if validador.strip() == 'Matrix':

break

else:

print('Palavra-chave não confere, digite novamente:')

 

# Laço de repetição simples

compras = ['Arroz', 'Feijão', 'Massa', 'Carne', 'Pão'] for i in compras:

print(i)

 

# Laço de repetição que percorre cada elemento de uma string

nome = 'Alberto'

for i in 'Alberto':

print(i)

 

# Laço de repetição dentro de um intervalo predefinido

for i in range(0, 10):

print(i)

 

# Laço de repetição que atualiza valor de variável

vendas = [1000, 459, 911, 200, 838, 50]

total = 0

for i in vendas:

total += i

print(total)

 

# Laço de repetição que separa elementos de uma lista

compras = [['Arroz', 'feijão'], ['Carne', 'Frango', 'Peixe'], ['Leite']]

for i in compras:

print(i)

 

# Laço de repetição que separa elementos de um dicionário

cores = {'verde': 'green', 'azul': 'blue', 'vermelho': 'red'}

for i in cores:

print(i, ':', cores[i])

 

# Laço for contando de 2 em 2 elementos

for i in range(0, 10, 2):

print(i)

 

# Contagem Regressiva via laço for

for i in range(10, 0,-1): #terceiro parâmetro estipula que o laço será feito do fim para o começo

print(i)

 

# Laço for que realiza contagem com base em número digitado pelo usuário

num = int(input('Digite o número limite: '))

for i in range(0, num+1):

print(i)

 

# Laço de repetição com múltiplos parâmetros de múltiplas variáveis

repetir = 's'

fatura = []

total = 0

while repetir == 's':

produto = input('Digite o nome do produto: ') preco = float(input('Digite o preço: '))

fatura.append([produto, preco])

total += preco

repetir = input('Cadastrar mais algum item? (S ou N)').lower()

for i in fatura:

print(i[0], ':', i[1])

print('O Total da fatura é: ', total)

 

# Usando de alternativas quando o laço for não for eficiente

# código convencional - percorrendo os elementos de uma string e exibindo-os junto ao seu índice nome = 'Fernando'

n_indice = 0

for n_indice in range(len(nome)):

print(n_indice, nome[n_indice])

# código otimizado via função enumerate( )

for n_indice, valor in enumerate(nome):

print(n_indice, valor)

 

Strings

# Sintaxe básica

nome = 'atributo em formato alfanumérico'

# Contar quantos caracteres compõe uma string

frase1 = 'Porto Alegre é uma cidade Brasileira.'

print(len(frase1))

 

# Substituindo elementos de uma string

frase1 = 'Porto Alegre é uma cidade Brasileira.' frase1 = frase1.replace('Porto Alegre', 'Curitiba')

print(frase1)

 

# Contando quantos de um tipo específico de caractere estão na string

frase1 = 'Porto Alegre é uma cidade Brasileira.'

print(frase1.count('a'))

 

# Exibindo a posição do índice de um determinado elemento da string

frase1 = 'Porto Alegre é uma cidade Brasileira.'

print(frase1.find('é'))

 

# Realizando a leitura de um caractere pelo seu índice

frase1 = 'Porto Alegre é uma cidade Brasileira.'

print(frase1[16])

 

# Desmembrando uma string, separando cada palavra da frase

frase1 = 'Porto Alegre é uma cidade Brasileira.'

print(frase1.split())

# split() sem parâmetros considerará os espaços entre as palavras, caso # queira um delimitador diferente é necessário definir via parâmetro, por exemplo # split(';'), dessa forma, apenas onde houver ; haverá a separação das strings.

 

# Pegando dados de uma string especificando um intervalo de seu índice

frase1 = 'Porto Alegre é uma cidade Brasileira.'

print(frase1[26:37]) # intervalo específico print(frase1[0:5]) # do início até uma posição i print(frase1[-9]) # de trás para frente

 

# Concatenando strings por meio de variáveis

mensagem = 'Seja bem-vinda '

usuario = 'Ana Clara'

base = mensagem + usuario

print(base)

 

# Concatenando diferentes tipos de dados em uma string

nome = 'Ana Clara'

idade = 12

print(f'{nome} tem {idade} anos')

aviso = 'Atenção, geradores entrarão em manutenção às: ' + str(22) + ' horas!'

print(aviso)

 

# Operadores lógicos em uma string

aviso = 'Não é permitida a entrada de menores de 18 anos'

print(aviso)

print('anos' in aviso)

print('gestante' not in aviso)

 

# Letras maiúsculas ou minúsculas em uma string

alerta = 'Risco de Morte'

print(alerta.upper())

print(alerta.lower())

 

# Convertendo outro tipo de dado para string

num1 = 5623

num2 = str(num1)

print(type(num1))

print(type(num2))

 

# Removendo espaços no início e no fim de uma string

frase1 = ' Olá, você é o visitante nº 1000 '

print(frase1)

print(frase1.strip())

 

# Convertendo todas iniciais das palavras para maiúsculo, como em um título

tema = 'O diagnóstico por imagem como ferramenta para detecção de câncer'

tema = tema.title()

print(tema)

 

# Verificando se uma string é composta por letras e números

print('aa44'.isalnum()) # Qualquer caractere alfanumérico

print('aa44'.isalpha()) # Apenas letras

print('aa44'.isdigit()) # Apenas números

 

# Adicionando espaços antes e depois de uma string

frase1 = 'Alerta, Risco de Morte!!!'

frase1 = frase1.ljust(50)

print(frase1)

frase2 = 'Alerta, Risco de Morte!!!'

frase2 = frase2.rjust(50)

print(frase2)

frase3 = 'Alerta, Risco de Morte!!!'

frase3 = frase3.center(50)

print(frase3)

 

Listas

# Criando uma lista simples

lista1 = ['Ana Clara', 'Carlos', 'Maria', 'Michele', 'Fernando', 1987]

print(lista1)

 

# Descobrindo o elemento de uma lista através de seu número de índice

lista1 = ['Ana Clara', 'Carlos', 'Maria', 'Michele', 'Fernando', 1987]

print(lista1[3])

 

# Descobrindo o número de índice de um determinado elemento

lista1 = ['Ana Clara', 'Carlos', 'Maria', 'Michele', 'Fernando', 1987]

print(lista1.index('Michele'))

 

# Descobrindo o número de elementos de uma lista

lista1 = ['Ana Clara', 'Carlos', 'Maria', 'Michele', 'Fernando', 1987]

print(len(lista1))

 

# Adicionando um novo elemento a lista

lista1 = ['Ana Clara', 'Carlos', 'Maria', 'Michele', 'Fernando', 1987]

lista1.append('Paulo')

print(lista1)

 

# Adicionando um novo elemento na lista em uma posição específica

lista1 = ['Ana Clara', 'Carlos', 'Maria', 'Michele', 'Fernando', 1987]

lista1[2] = 'José'

print(lista1)

 

# Removendo um elemento de uma lista pelo seu número de índice

lista1 = ['Ana Clara', 'Carlos', 'Maria', 'Michele', 'Fernando', 1987]

lista1.remove(lista1[5])

print(lista1)

 

# Listas dentro de listas

cadastro = [[1, 2, 3, 4], ['Ana', 'Maria', 'Paulo', 'Roberto']]

print(cadastro)

 

Conjuntos Numéricos

# Criando um conjunto numérico (set) em Python

conjunto1 = {5, 10, 15, 20}

print(type(conjunto1))

 

# Operações entre conjuntos

cj1 = {1, 2, 3, 4, 5}

cj2 = {1, 3, 5, 7, 9}

print(cj2 - cj1)

 

# União de conjuntos numéricos

conjunto1 = {5, 10, 15, 20, 25}

conjunto2 = {1, 2, 3, 4, 5}

uniao = conjunto1.union(conjunto2)

print(uniao)

# Os dados que forem comum aos dois conjuntos não serão duplicados.

 

# Interseção de dois conjuntos

conjunto1 = {5, 10, 15, 20, 25}

conjunto2 = {1, 2, 3, 4, 5}

uniao = conjunto1.intersection(conjunto2)

#uniao = conjunto1.update(conjunto2)

print(uniao)

 

# Operadores lógicos em conjuntos numéricos

conjunto1 = {5, 10, 15, 20, 25}

conjunto2 = {1, 2, 3, 4, 5}

uniao = conjunto1.union(conjunto2)

print(uniao == conjunto1)

print(uniao >= conjunto2)

 

# Diferença entre conjuntos

c1 = {1, 2, 3, 4, 5} - {1, 2}

print(c1)

 

# Diferença entre conjuntos associados a variáveis

c1 = {1, 2, 3, 4, 5, 6, 7, 8, 9}

c2 = {1, 3, 5, 7, 9}

print(c1 - c2)

 

Interpolação

# Uso de máscaras de substituição

nome = 'Maria'

exp = 33

print(f'Olá {nome}, queremos te parabenizar por seus {exp} anos em nossa empresa.')

 

# Operações dentro de máscaras de substituição

nome = 'Maria'

idade = 30

print(f'{nome} tem 3 vezes minha idade, ela tem {3 * idade} anos!!!')

 

Dicionários

# Sintaxe básica

dicionario = {'chave': 'valor'}

print(dicionario)

 

# Adicionando novos elementos ao dicionário

dicionario1 = {'Nome1':'Paulo'}

print(dicionario1)

dicionario1['Nome2'] = 'Veronica'

print(dicionario1)

 

# Alterando o valor de uma chave do dicionário

dicionario1 = {'Nome1': 'Ana',

'Nome2': 'Carla',

'Nome3': 'Maria'}

print(dicionario1)

dicionario1['Nome2'] = 'Bárbara'

print(dicionario1)

 

# Acessando um elemento do dicionário

dicionario1 = {'Nome':'Fernando',

'Idade':32,

'Sexo':'Masculino',

'Nacionalidade':'Brasileiro'}

print(dicionario1['Nome'])

print(dicionario1['Nacionalidade'])

 

# Usando o construtor de dicionários do Python

dicionario2 = dict(chave1 = 'valor da chave1',

chave2 = 'valor da chave 2')

print(dicionario2)

print(type(dicionario2))

 

# Consultando apenas as chaves de um dicionário

dicionario2 = dict(chave1 = 'valor da chave1',

chave2 = 'valor da chave 2')

dicionario2.keys()

 

# Consultando apenas os valores de um dicionário

dicionario2 = dict(chave1 = 'valor da chave1',

chave2 = 'valor da chave 2')

dicionario2.values()

# Verificando se uma chave ou valor consta em um dicionário

# Pesquisando pela chave, obtendo valor

d3 = {'1':'Ana', '2':'Maria', '3':'Paulo', '4':'Marcos'}

print(d3.get('5'))

print(d3.get('2'))

'''Mesmo que:

print('3' in d3)'''

# Pesquisando se o dado/valor consta em uma chave

print('2' in d3.keys())

# Pesquisando se o dado/valor consta em um valor

print('Ana' in d3.values())

# Pesquisando se o dado/valor de um valor de dicionário é o dado/valor que se espera ser print(d3['2'] == 'Maria') # o valor da chave '2' é 'Maria' ?

 

# Atualizando um elemento do dicionário

d4 = {'1':'A', '2':'B', '3':'C', '4':'D'}

print(d4)

d4.update({'2':'E'})

'''Mesmo que:

d4['3'] = 'F'

print(d4)'''

print(d4)

 

# Removendo um elemento do dicionário

d4 = {'1':'A', '2':'B', '3':'C', '4':'D'}

print(d4)

del d4['4']

print(d4)

 

# Pesquisando o tamanho de um dicionário / de quantos elementos ele é composto

d4 = {'1':'A', '2':'B', '3':'C', '4':'D', '5':'E', '6':'F'} print(len(d4))

 

# Imprimindo só chaves e só valores

d4 = {'1':'A', '2':'B', '3':'C', '4':'D', '5':'E', '6':'F'}

print(d4.keys())

print(d4.values())

 

# Lendo as chaves ou valores por meio do laço for

d4 = {'1':'A', '2':'B', '3':'C'}

for i in d4.keys(): # somente as chaves

print('Chaves:', i)

for j in d4.values(): # somente os valores

print('Valores:', j)

for l in d4.items(): # chaves e valores

print('Chaves : Valores =', l)

for m in d4.items():

print('Chaves:',m[0],' - ','Valores:',m[1])

for n, o in d4.items(): # 2 variáveis temporárias n e o, o mesmo que desempacotamento de elementos

print('Chaves:',n,' - ','Valores:',o)

print(f'Chaves: {n}, Valores: {o}') # trazendo para a sintaxe atual f'Strings

 

# Listas como valores de uma chave do dicionário

dict = {'almox':['Folha de Oficio', 'Caneta', 'Grampeador'],

'cozinha':['Café', 'Açúcar']}

print(dict['almox'][0])

print(dict['cozinha'][1])

 

# Transformando chaves ou valores de um dicionário em tupla para fácil indexação

dicionario1 = {'Nome':'Fernando', 'Idade':32, 'Sexo':'Masculino', 'Nacionalidade':'Brasileiro'}

print(dicionario1.keys())

dict_chaves = tuple(dicionario1.keys())

print(dict_chaves)

print(dict_chaves[3])

# Dicionários dentro de dicionários

usuarios = {'João':{'Identificador':'0001','Cargo':'Porteiro','Salario':'2000'},

'Maria':{'Identificador':'0003','Cargo':'Aux. Limpeza','Salario':'1900'},

'José':{'Identificador':'0002','Cargo':'Técnico','Salario':'2500'}}

for i, j in usuarios.items():

print(f'Funcionário: {i}')

for k, l in j.items():

print(f'\t {k} = {l}')

 

# Removendo elementos de um dicionário por meio da função pop( )

dicionario1 = {'Nome':'Fernando', 'Idade':32, 'Sexo':'Masculino', 'Nacionalidade':'Brasileiro'}

dicionario1.pop('Nacionalidade')

'''

Mesmo que:

del dicionário1['Nacionalidade']

porém del é uma palavra reservada ao sistema

'''

print(dicionario1)

 

# Usando do método get( ) para não gerar exceções quando um elemento não faz parte do dicionário

dict1 = {'1':'A', '2':'B', '3':'C'}

print(dict1['1']) # ok

#print(dict1['4']) # chave não existente, irá gerar um KeyError

dict1.get('4', 'nova chave') # '4' é um elemento não existe,te, será substituído por 'nova chave'

# caso instanciasse no primeiro parâmetro um elemento presente no # dicionário iria retornar o mesmo normalmente, caso for um elemento # faltante já irá tratar a exceção normalmente, inserindo o novo dado

 

Funções

# Sintaxe básica

def nome_da_funcao(parametros):

"corpo da função"

 

# Definindo uma função sem parâmetros

def mensagem():

print('Seja Bem-Vindo!!!')

# poderia ser, dependendo o contexto, return 'Seja Bem-Vindo!!!'

print(mensagem())

 

# Chamando a função

def mensagem():

print('Seja Bem Vindo!!!')

mensagem()

 

# Função associada a uma variável

def mensagem():

print('Seja Bem Vindo!!!')

mensagem1 = mensagem()

print(mensagem1)

 

# Criando uma função que temporariamente não faz nada

def funcao():

pass

var1 = funcao() # Não acontecerá absolutamente nada

print(type(var1)) # Retornará NoneType

 

# Função interagindo com variável que interage com o usuário

usuario3 = input('Digite o seu nome:')

def mensagem(nome):

print('Bem Vindo ' + nome + '!!!')

print(mensagem(usuario3))

 

# Passando o parâmetro ao chamar a função

def funcao(msg):

print(msg)

funcao('Bem Vindo!!!')

 

# Passando o parâmetro ao chamar a função = exemplo 2

def mensagem(nome):

print(f'Bem Vindo(a) {nome}!!!')

usuario1 = mensagem('Fernando')

print(mensagem)

 

# Passando mais de um parâmetro para uma função

def mensagem(nome, idade):

print(f'{nome} tem {idade} anos...')

usuario1 = mensagem('Fernando', 33) # respeitar a ordem dos parâmetros

print(usuario1)

 

# Definindo parâmetros "padrão", para caso o usuário não passe nenhum parâmetro.

def funcao(msg='Olá', nome='usuário'):

print(msg, nome)

funcao()

 

# Passando apenas um parâmetro e recebendo o resto padrão

def funcao(msg='Olá', nome='usuário', msg2='Seja Bem Vindo!!!'):

print(msg, nome, msg2)

funcao(nome='Fernando')

 

# Passando parâmetro e interagindo com o usuário

def funcao(mensagem, nome):

print(mensagem, nome)

funcao('Olá ', input('Digite o seu nome: '))

 

# Interagindo com o usuário #2

def funcao(msg='Ola', nome='usuário', msg2='Seja Bem Vindo!!!'): nome = input('Digite o seu nome: ')

print(msg, nome, msg2)

variavel1 = funcao()

# Interagindo com o usuário #3

def funcao(msg='Ola', nome='usuário', msg2='Seja Bem Vindo!!!'):

return f'{msg} {nome} {msg2}'

variavel1 = funcao(nome=input('Digite o seu nome: '))

print(variavel1)

 

# Passando um parâmetro manualmente e fora da ordem padrão do índice

def msg(nome = 'Ana', idade = 25, prof = 'Cozinheira'):

print(f'{nome}, {idade} anos, {prof}')

variavel5 = msg(prof = 'Costureira')

# assim não foi preciso declarar as prmeiras variáveis até chegar na prof

print(msg)

 

# Fazendo operações dentro de uma função

# o código:

n1 = int(input('Digite o Primeiro Número:'))

n2 = int(input('Digite o Segundo Número:'))

soma = n1 + n2

print(soma)

# Pode ser reescrito por:

def soma(n1, n2):

return n1 + n2

n1 = int(input('Digite o Primeiro Número:'))

n2 = int(input('Digite o Segundo Número:'))

print(soma(n1, n2))

 

# Fazendo operações dentro de uma função #2

def aumento_percentual(valor, percentual):

return(valor + (valor * percentual / 100))

num1 = int(input('Digite o valor: '))

num2 = int(input('Você deseja somar quantos % ? ')) calculo = aumento_percentual(num1, num2)

print('O valor será de: ',calculo,'%')

# Estruturas condicionais dentro de funções #1

def repetidor(msg):

contador = 0

while contador < 5:

print(msg)

contador += 1

print(repetidor(msg=input('Digite algo para ser repetido 5 vezes: ')))

 

# Estruturas condicionais dentro de funções #2

def divisao(n1, n2):

if n1 == 0 or n2 == 0:

return 'Operação Inválida'

return n1 / n2

num1 = int(input('Digite o Primeiro Número:')) num2 = int(input('Digite o Segundo Número:'))

print(divisao(num1, num2))

 

# Estruturas condicionais dentro de funções #3 - Exercício Fizz Buzz

def fizz_buzz(num):

if num % 3 == 0 and num % 5 == 0:

return f'FizzBuzz, {num} é divisível por 3 e por 5'

if num % 5 == 0:

return f'Buzz, {num} é divisível por 5'

if num % 3 == 0:

return f'Fizz, {num} é divisível por 3)'

return num

print(fizz_buzz(num=int(input('Digite um Número: '))))

 

# Função com argumentos externos

def funcao(*args):

for v in args:

print(v)

argumentos = (1, 2, 3, 'Paulo', 'Ana')

print(funcao(argumentos))

 

# Desempacotando uma lista para que os elementos dela virem argumentos da função

lista1 = ['nome', 'idade', 'sexo', 'nacionalidade']

def funcao(*args):

print('Informações Necessárias:')

print(args)

funcao(*lista1)

 

# Função com parâmetros baseados em *args e **kwargs

# Supondo que está cadastrando senhas e usuários em um sistema def funcao(*args, **kwargs):

print(args)

print(kwargs)

senhas_padrao = [12345, 11111, 54321]

funcao(*senhas_padrao, usuario='user', administrador='admin')

# senhas_padrao substituirá args e o parametro nomeado aqui usuario substituirá kwargs

 

# Função com parâmetros baseados em *args e **kwargs

# Buscando dados do modelo anterior

def funcao(*args, **kwargs):

nome = kwargs['usuario']

nome2 = kwargs['administrador']

senha1 = args[0]

senha2 = args[1]

print('O usuário comum é: ',nome)

print('O administrador do sistema é: ', nome2)

print('A senha padrão é: ', senha1)

print('A senha alternativa é: ', senha2)

senhas_padrao = [12345, 11111]

funcao(*senhas_padrao, usuario='user', administrador='admin')

# senhas_padrao substituirá args e o parametro nomeado aqui usuario substituirá kwargs

 

# Função que recebe outra função como parâmetro

def msg_boas_vindas():

return 'Seja Muito Bem Vindo!!!'

def mestre(funcao):

return funcao()

exec = mestre(msg_boas_vindas)

print(exec)

 

# Justaposição - ordenados sequencialmente

# 1º 2º 3º

def pessoa1(nome, idade, funcao):

print(f'{nome} tem {idade} anos, função: {funcao}')

p1 = pessoa1('Fernando', 32, funcao = 'gerente')

 

Expressões Lambda

variavel1 = lambda num1, num2: num1 * num2

num1 = int(input('Digite um número:'))

num2 = int(input('Digite outro número:'))

print(num1)

print(num2)

print(variavel1(num1,num2))

 

Escopo Global e Escopo Local

variavel1 = 'Paulo'

print('Exibindo direto da variável: ', variavel1)

def funcao1():

print('Print de dentro da função 1: ', variavel1)

funcao1()

def funcao2():

variavel1 = 'Paulo Silva'

print('Print da variável local / função 2: ', variavel1)

funcao2()

print('Printando a variável global novamente: ', variavel1)

# Não confundir o nome da variável, apesar de igual, a variável1 que consta na função 2 só funciona dentro dela a variável que consta na função 2 não altera/atualiza o valor da variável declarada inicialmente, ela só tem valor modificado dentro da função.

 

# Modificando uma variável global de dentro de uma função

num1 = 100

print('Variável com seu valor inicial: ', num1)

def modificador():

global num1

num1 = 200

print('Variável alterada dentro da função: ', num1)

modificador()

print('Variável atualizada pela função anterior: ',num1)

 

set1 = {1,2,3,4,5,6,7,8,9,0}

print(set1)

# A diferença de um set para um dicionário será que um set não tem aquele par de elementos chave:valor. Um set não tem índice e os elementos guardados dentro dele ficam em ordem aleatória.

 

# Criando um set via construtor

set1 = set()

set1.add('Ana')

set1.add(23)

print(set1)

set1.add(15.6)

set1.add('Maria')

set1.discard(23)

print(set1)

 

# Convertendo lista para set para que sejam removidos os elementos duplicados

lista1 = [1,1,2,3,4,4,4,4,4,5,6,7,8,9,'Luiz', 'Maria', 'Carlos', 'Luiz'] print(lista1)

lista1 = set(lista1) # Transformando em set

print(lista1)

lista1 = list(lista1) # Transformando em lista novamente print(lista1)

 

List Comprehension

# Fazendo operações com elementos de uma lista usando 'comprehension'

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

lista2 = [i * 2 for i in lista1]

# Variável temporária i que percorre cada elemento da lista1 e multiplica por 2

print(lista1)

print(lista2)

 

# Desmembrando uma string elemento por elemento

string = '12345678901234567890'

comprehension = [letra for letra in string]

print(comprehension)

 

# Pegando partes de uma string

string = '123456789012345678905925249529562956243482649287529843482548258922'

print(string[0:10])

print(string[10:20])

print(string[20:30])

 

# Trabalhando com partes de uma string

string = '01234567890123456789012345678901234567890123456789' n = 10

comp = [i for i in range(0, len(string), n)]

# Separando a string de 10 em 10 de acordo com a variável n

print(comp)

comp2 = [(i, i + n) for i in range(0, len(string), n)] # Verificando de quanto a quanto é esse intervalo

print(comp2)

comp3 = [string[i:i + n] for i in range(0, len(string), n)] # Realizando o fatiamento de nossa string

print(comp3)

lista = [string[i:i + n] for i in range(0, len(string), n)] retorno = '.'.join(lista)

# Caractere "." usado como separador. join( ) para juntar novamente os elementos da lista

print(retorno)

 

# Aprimorando um código mudando sua função por uma list comprehension

carrinho = []

carrinho.append(('Item 1', 30))

carrinho.append(('Item 2', 45))

carrinho.append(('Item 3', 22))

total = 0

for produto in carrinho:

total = total + produto[1]

print('Método tradicional', total)

# Mesmo que:

total2 = []

for produto in carrinho:

total2.append(produto[1])

print('Usando funções internas', sum(total2))

# Usando list comprehension

total3 = sum([y for x, y in carrinho])

print('Usando list comprehension', total3)

 

Dictionary Comprehension

# Basicamente a mesma lógica de list comprehension, mas quando tempos chave:valor podemos transormar em dicionário

lista = [('chave1','chave2'), ('chave2','valor2'),('chave3','valor3')]

dicionario = {x:y for x, y in lista}

# Mesmo que dicionario = dict(lista)

print(dicionario)

 

# Realizando operações dentro do dicionário via comprehension

produtos = [('Caneta',1.99), ('Lápis',1.49), ('Caderno',8.99)] produtos_com_imposto = {x:y * 1.6 for x, y in produtos}

print('Preços SEM Imposto: ', produtos)

print('Preços COM Imposto: ', produtos_com_imposto)

 

Geradores e Iteradores

# Um objeto iterável é aquele com que você consegue interagir com cada elemento de sua composição, ex cada letra de uma string

lista = [1,2,3,4]

nome = 'Fernando'

for i in lista:

print(i)

for j in nome:

print(j)

 

# Gerador gera valores onde não existem para poupar tempo e codificação

lista_0_a_100 = list(range(101))

print(lista_0_a_100)

 

# Porém dados gerados com muitos elementos tem impacto sobre a memória

import sys

lista100 = list(range(101))

listamilhao = list(range(1000001))

print('Tamanho em bytes:', sys.getsizeof(lista100)) print('Tamanho em bytes:', sys.getsizeof(listamilhao))

 

# Guardando valores em uma variável, de forma que a cada vez que eu chame ela ela me retorne um valor diferente

import sys

import time

def variavel_iterada():

variavel = 'Valor 1'

yield variavel

variavel = 'Valor 2'

yield variavel

variavel = 'Valor 3'

yield variavel

var1 = variavel_iterada()

print(next(var1))

print(next(var1))

print(next(var1))

 

Zip

# Zip para iterar e unir duas listas

cidades = ['Porto Alegre', 'Curitiba', 'Salvador', 'Belo Horizonte'] estados = ['RS', 'PR', 'BH', 'MG']

cidades_estados = zip(cidades, estados)

for i in cidades_estados:

print(i)

 

# Zip_longest para unir listas de diferentes tamanhos

from itertools import zip_longest

cidades = ['Porto Alegre', 'Curitiba', 'Salvador', 'Belo Horizonte', 'Rio de Janeiro', 'Goiânia'] estados = ['RS', 'PR', 'BH', 'MG']

cidades_estados = zip_longest(cidades, estados) cidades_estados2 = zip_longest(cidades, estados, fillvalue='Desconhecido')

for i in cidades_estados:

print(i)

for j in cidades_estados2:

print(j)

 

Count

# Usando o contador do sistema

from itertools import count

contador = count()

for numero in contador:

print(numero)

if numero >= 10:

break

 

# Contando dentro de um intervalo personalizado

from itertools import count

contador = count(start = 40)

for numero in contador:

print(numero)

if numero >= 50:

break

 

# Personalizando de quantos em quantos números o contador irá trabalhar

from itertools import count

contador = count(start = 0, step = 2)

for numero in contador:

print(numero)

if numero >= 20:

break

 

Map

# Map = função que serve para aplicar uma função em cada elemento ou linha por linha de uma lista/tupla/dicionario

produtos = [

{'nome': 'item 1', 'preco': 32},

{'nome': 'item 2', 'preco': 23},

{'nome': 'item 3', 'preco': 12},

{'nome': 'item 4', 'preco': 10},

{'nome': 'item 5', 'preco': 55},

]

lista = [1,2,3,4,5,6,7,8,9,10]

nova_lista = map(lambda x: x * 2, lista)

# Mesmo que:

nova_lista2 = [x * 2 for x in lista]

print(lista)

print(list(nova_lista))

print(nova_lista2)

 

# Usando map( ) para extrair dados de um dicionário

produtos = [

{'nome': 'item 1', 'preco': 32},

{'nome': 'item 2', 'preco': 23},

{'nome': 'item 3', 'preco': 12},

{'nome': 'item 4', 'preco': 10},

{'nome': 'item 5', 'preco': 55},

]

precos = map(lambda p: p['preco'], produtos)

for preco in precos:

print(preco)

 

# Usando uma função ativa no lugar da lambra (que é uma função vazia)

def aumenta_precos(p):

p['preco'] = p['preco'] * 1.05

return p

precos2 = map(aumenta_precos, produtos)

for produto in precos2:

print(produto)

 

Filter

# Mesma coisa que a map, só que trabalha com lógica condicional, servindo para aplicar funções ou extrair informação de um elemento desde que uma condição seja True

pessoas = [

{'nome': 'Ana', 'idade': 22},

{'nome': 'Maria', 'idade': 72},

{'nome': 'Paulo', 'idade': 55},

{'nome': 'Pedro', 'idade': 68},

{'nome': 'Rafael', 'idade': 99},

{'nome': 'Tania', 'idade': 18},

]

idosos = filter(lambda x: x['idade'] > 70, pessoas)

print(list(idosos))

 

produtos2 = [

{'nome': 'item 1', 'preco': 32},

{'nome': 'item 2', 'preco': 23},

{'nome': 'item 3', 'preco': 62},

{'nome': 'item 4', 'preco': 10},

{'nome': 'item 5', 'preco': 55},

]

def filtra(p):

if p['preco'] > 50:

return True

nova_lista3 = filter(filtra, produtos2)

for produtox in nova_lista3:

print(produtox)

 

Try, Except

# Tratando exceções para que não se interrompa a execução de um código

try:

print(a)

except:

pass

# Nesse caso nada acontecerá, mas também não acontecerá um erro ou interrupção em função de não conseguir imprimir o comando print(a).

 

# Exibindo que erro aconteceu

try:

print(a)

except NameError as erro:

print('Ocorreu um erro:',erro)

#Except genérico:

except Exception as erro:

print('Ocorreu um erro inesperado')

 

# Exibindo que erro específico aconteceu

try:

print(a)

except NameError as erro:

print('Ocorreu um erro:',erro)

 

def conversor_num(num):

try:

num = int(num) # tentará converter para int

return num

except ValueError:

try:

num = float(num) # tentará converter para float

return num

except ValueError:

pass # caso não consiga nenhuma opção anterior irá retornar None

num1 = conversor_num(input('Digite um número: '))

if num1 is not None:

print(num1 + 100)

else:

print('Operação inválida.')

 

# Raise

idade = int(input('Digite sua idade: '))

if idade <= 0:

raise Exception('Idade inválida!!!')

print(f'Você tem {idade} anos!!!')

# Será gerado um erro Exception: Idade inválida!!!

Bibliotecas, Módulos e Pacotes

# Função dir( ) exibe quais módulos/pacotes/funções foram carregadas por padrão

dir()

 

# Explorando tudo o que vem importado por padrão no Python

import builtins

dir(builtins)

 

# Importando módulos que por padrão não são carregados junto ao Python em sua inicialização

import random

dir()

# Agora random( ) está carregada na memória e pronta para uso

 

# Verificando o que existe dentro de um módulo/pacote externo

dir(random)

# Todas linhas após '__spec__' são os nomes das funções da biblioteca random disponíveis para serem usadas.

 

# Abreviando a nomenclatura de um módulo

import random as ra

for i in range(10):

print(ra.randint(1,10))

 

# Importando apenas uma função específica de um módulo

from random import randint

for i in range(10):

print(randint(0,10))

 

Criando Módulos Manualmente

# Arquivo soma.py

def soma(num1, num2):

s = int(num1) + int(num2)

return s

# Arquivo index.py

import soma

print(f'O resultado da soma é: {soma.soma(8,3)}')

 

Manipulando Arquivos

# Abrindo/criando um arquivo para leitura e escrita

arquivo = open('nomedoarquivo.txt', 'w+')

# w+ permite a leitura e escrita

arquivo.write('Prineira Linha \n')

arquivo.write('Segunda Linha \n')

arquivo.write('Terceira Linha \n')

arquivo.write('Quarta Linha \n')

arquivo.close()

arquivo.seek(0,0) # força a leitura do arquivo desde sua posição 0

print(arquivo.read())

# print(arquivo.readline()) linha por linha

arquivo.close()

 

# Apagando um arquivo via IDE

import os

os.remove('arquivo.txt')

 

Programação Orientada a Objetos

# Sintaxe básica

class Nome:

objetos

 

# Criando uma classe vazia

class Pessoa:

pass

 

# Criando objetos (atributos de classe) dentro de uma classe class Pessoa:

pass

pessoa1 = Pessoa()

pessoa1.nome = 'Fernando'

pessoa1.idade = 32

print(pessoa1.nome)

 

# Criando funções (métodos) dentro de uma classe

class Pessoa:

def acao1(self):

print('Ação 1 sendo executada...')

pessoa1 = Pessoa()

pessoa1.acao1()

 

# Criando uma classe com construtor e variáveis internas

class Pessoa:

def __init__(self, nome, idade, sexo, altura):

self.nome = nome

self.idade = idade

self.sexo = sexo

self.altura = altura

pessoa1 = Pessoa('Fernando', 32, 'M', 1.90)

print(pessoa1.nome, pessoa1.idade)

print(f'Bem vindo {pessoa1.nome}, parabéns pelos seus {pessoa1.idade} anos!!!')

 

# Mais de uma função dentro de uma classe

class Pessoa:

ano_atual = 2019

def __init__(self, nome, idade):

self.nome = nome

self.idade = idade

def ano_nascimento(self):

ano_nasc = self.ano_atual - self.idade

print(f'Seu ano de nascimento é {ano_nasc}')

pessoa1 = Pessoa('Fernando', 32)

print(pessoa1.ano_nascimento())

# Lembrando que nesse exemplo ano_atual é um atributo da classe, e está acessível a todas funções internas, já ano_nasc por exemplo é uma variável do escopo da função ano_nascimento(), e não está acessível fora dessa função. Funções dentro de classes podem receber a nomenclatura de "métodos" e seus atributos podem ser chamados de "instâncias".

 

# Métodos de classe

# Métodos que até interagem com funções internas, mas retorna dados para o escopo global da classe

class Pessoa:

ano_atual = 2019

def __init__(self, nome, idade):

self.nome = nome

self.idade = idade

@classmethod

def ano_nasc(cls, nome, ano_nascimento):

idade = cls.ano_atual - ano_nascimento

return cls(nome, idade)

pessoa2 = Pessoa.ano_nasc('Fernando', 1987)

print(pessoa2.idade)

 

# Métodos estáticos

# Aqueles que não possuem instâncias como atributos, funciona como uma função normal dentro da classe

from random import randint

class Pessoa:

@staticmethod

def gerador_id():

gerador = randint(100, 999)

return gerador

print(Pessoa.gerador_id())

 

# @property, Getters e Setters

class Produto:

def __init__(self, nome, preco):

self.nome = nome

self.preco = preco

def desconto(self, percentual):

self.preco = self.preco - (self.preco * (percentual / 100))

#Getter

@property

def preco(self):

return self._preco

#Setter

@preco.setter

def preco(self, valor):

if isinstance(valor, str):

valor = float(valor.replace('R$', ''))

self._preco = valor

produto1 = Produto('Camiseta', 99)

produto1.desconto(5)

print(produto1.preco)

# Supondo que o usuário passou um valor que não pode ser processado porque foi passado em tipo de dado incorreto # produto2 = Produto('Calça', 'R$59')

# produto2.desconto(15)

# print(produto2.preco)

# Irá gerar um erro pois R$59 não é um int, então é necessário criar uma estrutura de métodos que farão essa correção.

produto2 = Produto('Calça', 'R$59')

produto2.desconto(15)

print(f'Produto2 após aplicação do desconto terá valor de {produto2.preco}')

 

# Atributos de classe // Variáveis de classe vão ser as variáveis que estarão declaradas dentro de uma classe, e que serão atribuídas a toda variável externa que instanciar essa classe.

class Classe1:

var1 = 101001

variavel1 = Classe1()

print(Classe1.var1)

print(variavel1.var1)

 

# Mudando um atributo de classe

class Classe1:

var1 = 101001

variavel1 = Classe1()

Classe1.var1 = 111111

print(Classe1.var1)

 

Encapsulamento

# Serve para definir se alguma função de alguma classe será acessível ou não fora dela.

# Muito pareceido com o public ou private em outras linguagens de programação.

class BaseDeDados:

def __init__(self):

self.dados = {}

#self._dados = {} declarado como protegido (ainda acessível de fora da classe)

#self.__dados = {} declarado como privado (inacessível e imutável de fora da classe)

base = BaseDeDados()

print(base.dados)

 

Recursividade

def fatorial(num: int) -> int:

if num == 1:

return 1

return num * fatorial(num - 1)

fator = fatorial(5)

print(fator)

 

Expressões Regulares

import re

minha_string = 'Fernando chegará a meia noite.' print(re.findall(r'Fernand.', minha_string))

minha_string2 = 'Fernanda chegará a meia noite.' print(re.findall(r'Fernand.', minha_string2))

 

minha_string = 'Fernando chegará a meia noite.' print(re.findall(r'Fernando|Fernanda', minha_string))

 

import re

# r'Strings

# Meta caractere " . "

texto1 = '''No dia trinta de março de dois mil e vinte foi inaugurado o novo ginásio de esportes da escola

estatual Professor Annes Dias, na cidade de Cruz Alta,

no estado do Rio Grande do Sul. A obra inicialmente

orçada em um milhão de, reais acabou não utilizando de

todo o recurso, uma vez que dois grandes empresários da cidade, João Fagundes e Maria Terres doaram juntos em

torno de duzentos mil reais. João Fagundes se manifestou

dizendo que apoiou a obra pois acredita no desenvolvimento

da cidade, assim investe regularmente para hospitais e

escolas da mesma. maria Terres não quis se pronunciar

sobre o assunto.'''

print(re.findall(r'.oão', texto1))

print(re.findall(r'.oão|.aria', texto1))

 

# Meta caractere " | " significa "ou"

# | significa ou, e tem suporte a número de palavras ilimitadas

print(re.findall(r'.oão|.aria', texto1))

print(re.findall(r'.oão|.aria|mil', texto1))

 

# Meta caractere " [] " significa "conjunto de caracteres"

# Usado para definir quais possíveis caracteres estarão numa determinada posição da string.

print(re.findall(r'[Jj]oão|.aria', texto1))

# Suponto que toos os caracteres possíveis no início de João são J maiúsculo e j minúsculo nesse caso também sabemos que os possíveis caracteres são J ou j, mas em outras strings precisaremos ampliar a abordagem

 

# pode conter quantos possíveis caracteres forem necessarios

print(re.findall(r'[AaBbCcDdEeFfGgHhIiJj]oão', texto1))

# otimizado com um intervalo predefinido

print(re.findall(r'[a-z]oão|[A-Z]oão', texto1))

print(re.findall(r'[a-zA-Z]oão', texto1))

 

# Alterando o comportamento de uma expressão regular via flags

print(re.findall(r'jOãO|maRIA', texto1, flags = re.I)) # flags serve para passar uma instrução local, nesse caso, re.I significa ignore case (não diferenciar letras maiúsculas de minúsculas)

 

# Meta caracteres quantificadores

# * significa 0 ou ilimitado número de vezes

# + significa 1 ou ilimitado número de vezes

# ? significa 0 ou 1, apenas uma vez

# {} significa um número específico ou um intervalo específico de repetições {8} ou {0,15}

mensagem = 'Nãããããããããããooooooo esquecer de pagar a mensalidade, não deixar para depois'

print(re.findall(r'não', mensagem, flags = re.I))

print(re.findall(r'Nã+o', mensagem))

# o operador + ao lado de ã diz que esse caractere ali naquela posição pode se repetir uma ou mais vezes

print(re.findall(r'Nã+o+', mensagem))

print(re.findall(r'[Nn]ã+o+', mensagem))

print(re.findall(r'nã+o+', mensagem, flags = re.I))

 

# Meta caracteres aplicados a um intervalo de caracteres de uma expressão regular #[A-Za-z0-9]+ significa que vai permitir qualquer caractere, quantas vezes o mesmo estiver repetido

chamando_nome = 'Fernnnnnnnannnnndo'

print(re.findall(r'fer[a-z]+a[Nn]+do', chamando_nome, flags = re.I))

 

# substituindo um elemento de uma string via expressão regular

texto1 = '''No dia trinta de março de dois mil e vinte foi inaugurado o novo ginásio de esportes da escola

estatual Professor Annes Dias, na cidade de Cruz Alta,

no estado do Rio Grande do Sul. A obra inicialmente

orçada em um milhão de, reais acabou não utilizando de

todo o recurso, uma vez que dois grandes empresários da

cidade, João Fagundes e Maria Terres doaram juntos em

torno de duzentos mil reais. João Fagundes se manifestou

dizendo que apoiou a obra pois acredita no desenvolvimento

da cidade, assim investe regularmente para hospitais e

escolas da mesma. maria Terres não quis se pronunciar

sobre o assunto.'''

print(re.sub(r'jOãO', 'Carlos', texto1, flags = re.I))

 

minha_string = 'Fernando chegará a meia noite.'

print(re.match(r'Fernando', minha_string))

print(re.match(r'noite', minha_string))

 

minha_string2 = 'Fernando chegará, a meia noite.'

print(re.split(r',', minha_string2))

 

Expressões Ternárias

# Parecido com o "comprehension", mas iterando sobre estruturas condicionais e sobre expressões booleanas

num = 2

'Positivo' if num >= 0 else 'Negativo'

 

Map, Filter, Reduce + List Comprehension

estoque = [

{'Item01': 'Camisa Nike', 'Preco':39.90},

{'Item02': 'Camisa Adidas', 'Preco':37.90},

{'Item03': 'Moletom 00', 'Preco':79.90},

{'Item04': 'Calca Jeans', 'Preco': 69.90},

{'Item05': 'Tenis AllStar', 'Preco': 59.90}

]

# Método convencional para extrair dados

precos01 = []

for preco in estoque:

precos01.append(preco['Preco'])

print(f'Preços de estoque (normal) {precos01}')

 

# Extraindo dados via Map + Função Lambda

precos02 = list(map(lambda p: p['Preco'], estoque)) for preco in precos02:

print(preco)

print(f'Preços de estoque (Map + Lambda) {precos02}') #print(next(precos02)) retornaria apenas o primeiro valor, executando novamente apenas o segundo, e assim por diante

 

# Extraindo dados via List Comprehension

precos03 = [preco['Preco'] for preco in estoque]

print(f'Preços de estoque (List Comprehension) {precos03}')

 

# Extraindo dados via Filter

precos04 = list(filter(lambda p: p['Preco'] >= 60, estoque)) #precisa especificar um parâmetro a ser filtrado

print(f'Preços de estoque (Filter) {precos04}')

 

# Combinando Filter e List Comprehension

precos05 = [preco['Preco'] for preco in estoque if preco['Preco'] > 60] #filtrados somente precos maiores que 60

print(f'Preços de estoque (Filter + List Comprehension) {precos05}')

# Combinando Map e Filter para extrair um dado

precos06 = list(map(lambda p: p['Preco'],

filter(lambda p: p['Preco'], estoque)))

print(f'Preços de estoque (Map + Filter) {precos06}')

 

# Extraindo dados via Reduce

from functools import reduce

def func_reduce(soma, valores):

return soma + valores['Preco']

precos_total = reduce(func_reduce, estoque, 0)

print(f'Soma dos Preços (Reduce) {precos_total}')

 

# Extraindo dados via Reduce + List Comprehension

from functools import reduce

precos_total = reduce(lambda soma, valores: soma + valores['Preco'], estoque, 0)

print(f'Soma dos Preços (Reduce + List Comprehension) {precos_total}')

 

# Extraindo dados via Reduce (Método Otimizado)

from functools import reduce

precos_total = sum([preco['Preco'] for preco in estoque])

print(f'Soma dos Preços (Reduce Método Otimizado) {precos_total}')

 

Módulos Nativos

#import datetime

from datetime import datetime, date, time

data = datetime(2020, 6, 12, 15, 24, 59)

print(data.date())

print(data.time())

print(data.year)

print(data.month)

print(data.day)

print(data.hour)

print(data.minute)

print(data.second)

 

# uma datetime como string print(data.strftime('%m/%d/%Y %H:%M'))

'''

%Y - Ano com 4 dígitos

%y - Ano com 2 dígitos

%m - Mês com 2 dígitos

%d - Dia com 2 dígitos

%w - Dia da semana (entre 0 (domingo) e 6 (sábado))

%H - Hora com notação de 24 horas

%h - Hora com notação de 12 horas

%M - Minuto com 2 dígitos

%S - Segundos com 2 dígitos

%W - Semana do ano (entre 00 e 53)

%z - Fuso horário'''

 

# convertendo uma string em datetime

data2 = datetime.strptime('20200101', '%Y%m%d') print(data2)

 

# substituindo um valor de datetime

data3 = datetime(2020, 6, 12, 15, 24, 59)

#data3.year = 2001 retorna um erro porque o datetime inicial é imutavel data3 = data3.replace(year = 2001)

print(data3)

 

# Diferença entre dois datetimes

delta = data3 - data2

print(delta)

 

Tópicos Avançados em POO

# Métodos que até interagem com funções internas, mas retorna dados para o escopo global da classe

class Pessoa:

ano_atual = 2020

def __init__(self, nome, idade):

self.nome = nome

self.idade = idade

@classmethod

def ano_nasc(cls, nome, ano_nascimento):

idade = cls.ano_atual - ano_nascimento

return cls(nome, idade)

pessoa2 = Pessoa.ano_nasc('Fernando', 1987)

print(pessoa2.idade)

# Aqueles que não possuem instâncias como atributos, funciona como uma função normal dentro da classe

from random import randint

class Usuario:

@staticmethod

def gerador_id():

gerador = randint(100, 999)

return gerador

print(Usuario.gerador_id())

 

class Usuario:

# Método construtor

def __init__(self, nome, identificador):

self.nome = nome

self.identificador = identificador

@classmethod

def autenticador(cls, identificador):

@staticmethod

def gerador_cod_seguranca():

 

# Combinações

from itertools import combinations

lista10 = ['Ana', 'Bianca', 'Carla', 'Daniela', 'Franciele', 'Maria']

for combinacoes in combinations(lista10, 2):# possíveis combinações em grupos de 2

print(combinacoes)

# a ordem não importa e não haverão combinações repetidas entre os elementos

 

# Permutações

from itertools import permutations

lista10 = ['Ana', 'Bianca', 'Carla', 'Daniela', 'Franciele', 'Maria']

for combinacoes in permutations(lista10, 2): # possíveis combinações em grupos de 2

print(combinacoes)

# Neste caso, as combinações podem se repetir, alterando a ordem dos elementos # Ex: Ana e Bianca, Bianca e Ana...

# Product

from itertools import product

lista10 = ['Ana', 'Bianca', 'Carla', 'Daniela', 'Franciele', 'Maria']

for combinacoes in product(lista10, repeat = 2): # possíveis combinações em grupos de 2

print(combinacoes)

# Parecido com Permutations, mas aqui é permitido que um elemento se combine com ele mesmo

 

# Associação de Classes

class Usuario:

def __init__(self, nome):

self.__nome = nome

self.__logar = None

@property

def nome(self):

return self.__nome

@property

def logar(self):

return self.__logar

@logar.setter

def logar(self, logar):

self.__logar = logar

class Identificador:

def __init__(self, numero):

self.__numero = numero

@property

def numero(self):

return self.__numero

def logar(self):

print('Logando no sistema...')

usuario1 = Usuario('Fernando')

identificador1 = Identificador('0001')

usuario1.logar = identificador1

usuario1.logar.logar()

 

# Agregação e Composição de Classes

class Contato:

def __init__(self, residencial, celular):

self.residencial = residencial

self.celular = celular

class Cliente:

def __init__(self, nome, idade, fone=None):

self.nome = nome

self.idade = idade

self.fone = []

def addFone(self, residencial, celular):

self.fone.append(Contato(residencial, celular))

def listaFone(self):

for fone in self.fone:

print(fone.residencial, fone.celular)

cliente1 = Cliente('Fernando', 32)

cliente1.addFone(33221766, 991357258)

print(cliente1.nome)

print(cliente1.listaFone())

 

# Herança Simples

class Corsa:

def __init__(self, nome, ano):

self.nome = nome

self.ano = ano

class Gol:

def __init__(self, nome, ano):

self.nome = nome

self.ano = ano

class Carro:

def __init__(self, nome, ano):

self.nome = nome

self.ano = ano

class Corsa(Carro):

pass

class Gol(Carro):

pass

 

# Cadeia de Heranças

class Carro:

def __init__(self, nome, ano):

self.nome = nome

self.ano = ano

class Gasolina(Carro):

def __init__(self, tipogasolina=True, tipoalcool=False):

self.tipogasolina = tipogasolina

self.tipoalcool = tipoalcool

class Jeep(Gasolina):

pass

 

# Mesmo que

class Jeep:

def carro():

def __init__(self, nome, ano):

self.nome = nome

self.ano = ano

def gasolina(self, tipogasolina=True, tipoalcool=False):

self.tipogasolina = tipogasolina

self.tipoalcool = tipoalcool

jeep = Jeep()

 

# Código otimizado

class Carro:

def __init__(self, nome, ano):

self.nome = nome

self.ano = ano

class Gasolina(Carro):

def __init__(self, tipogasolina=True, tipoalcool=False):

self.tipogasolina = tipogasolina

self.tipoalcool = tipoalcool

class Jeep(Gasolina):

pass

carro1 = Jeep()

print(carro1.tipogasolina)

 

# Herança Múltipla

class Mercadoria:

def __init__(self, nome, preco):

self.nome = nome

self.preco = preco

class Carnes(Mercadoria):

def __init__(self, tipo, peso):

self.tipo = tipo

self.peso = peso

class Utensilios:

def __init__(self, espetos, carvao):

self.espetos = espetos

self.carvao = carvao

class KitChurrasco(Carnes, Utensilios):

pass

pacote1 = KitChurrasco('carne', 14.90)

pacote1.tipo = 'costela'

pacote1.peso = 1

pacote1.espetos = 1

pacote1.carvao = 1

 

# Sobreposição de Membros

class Pessoa:

def __init__(self, nome):

self.nome = nome

def Acao1(self):

print(f'{self.nome} está dormindo')

class Jogador1(Pessoa):

def Acao2(self):

print(f'{self.nome} está comendo')

class SaveJogador1(Jogador1):

pass

p1 = SaveJogador1('Fernando')

print(p1.nome)

p1.Acao1()

p1.Acao2()

 

class Pessoa:

def __init__(self, nome):

self.nome = nome

def Acao1(self):

print(f'{self.nome} está dormindo')

class Jogador1(Pessoa):

def Acao2(self):

print(f'{self.nome} está comendo')

class SaveJogador1(Jogador1):

def Acao1(self):

super().Acao1()

print(f'{self.nome} está acordado')

p1 = SaveJogador1('Fernando')

p1.Acao1()

p1.Acao2()

 

class SaveJogador1(Jogador1):

def Acao1(self):

super().Acao1()

print(f'{self.nome} está acordado')

 

class Pessoa:

def acao(self):

print('Inicializando o sistema')

class Acao1(Pessoa):

def acao(self):

print('Sistema pronto para uso')

class Acao2(Pessoa):

def acao(self):

print('Desligando o sistema')

class SaveJogador1(Acao2, Acao1):

pass

p1 = SaveJogador1()

p1.acao()

 

# Classes Abstratas

from abc import ABC, abstractclassmethod

class Pessoa(ABC):

@abstractclassmethod

def logar(self):

pass

class Usuario(Pessoa):

def logar(self):

print('Usuario logado no sistema')

#user1 = Pessoa()

#user1.logar()

user1 = Usuario()

user1.logar()

 

# Polimorfismo

from abc import ABC, abstractclassmethod

class Pessoa(ABC):

@abstractclassmethod

def logar(self, chaveseguranca):

pass

class Usuario(Pessoa):

def logar(self, chaveseguranca):

print('Usuario logado no sistema')

class Bot(Pessoa):

def logar(self, chaveseguranca):

print('Sistema rodando em segundo plano')

user1 = Usuario()

user1.logar('I5m8b4y9')

 

# Sobrecarga de Operadores

class Caixa:

def __init__(self, largura, altura):

self.largura = largura

self.altura = altura

caixa1 = Caixa(10,10)

caixa2 = Caixa(10,20)

print(caixa1 + caixa2)

 

class Caixa:

def __init__(self, largura, altura):

self.largura = largura

self.altura = altura

def __add__(self, other):

largura1 = self.largura + other.largura

altura1 = self.altura + other.altura

return Caixa(largura1, altura1)

def __repr__(self):

return f"<class 'Caixa({self.largura}, {self.altura})'>"

caixa1 = Caixa(10,10)

caixa2 = Caixa(10,20)

caixa3 = caixa1 + caixa2

print(caixa3)

 

# Gerenciamento de filas via Nodes

from typing import Any

EMPTY_NODE_VALUE = '__EMPTY_NODE_VALUE__'

class Erro(Exception):

...

class Node:

def __init__(self, value: Any) -> None:

self.value = value

self.next = Node

def __repr__(self) -> str:

return f'{self.value}'

def __bool__(self) -> bool:

return bool(self.value != EMPTY_NODE_VALUE)

class Queue:

def __init__(self) -> None:

self.first: Node = Node(EMPTY_NODE_VALUE)

self.last: Node = Node(EMPTY_NODE_VALUE)

self._count = 0

def enqueue(self, node_value: Any) -> None:

novo_node = Node(node_value)

if not self.first:

self.first = novo_node

if not self.last:

self.last = novo_node

else:

self.last.next = novo_node

self.last = novo_node

self._count += 1

def pop(self) -> Node:

if not self.first:

raise Erro('Sem elementos na fila')

first = self.first

if hasattr(self.first, 'next'):

self.first = self.first.next

else:

self.first = Node(EMPTY_NODE_VALUE)

self._count += 1

return first

def peek(self) -> Node:

return self.first

def __len__(self) -> int:

return - self._count

def __bool__(self) -> bool:

return bool(self._count)

def __iter__(self) -> Queue:

return self

def __next__(self) -> Any:

try:

next_value = self.pop()

return next_value

except Erro:

raise StopIteration

fila1 = Queue()

fila1.enqueue('Maria')

fila1.enqueue('Carlos')

fila1.pop()

 

# Gerenciamento de filas via Deque

from typing import Deque, Any

from collections import deque

fila2: Deque[Any] = deque()

fila2.append('Ana')

fila2.append('Carlos')

fila2.append('Fernando')

fila2.append('Maria')

for pessoas in fila2:

print(pessoas)

fila2.popleft()

for pessoas in fila2:

print(pessoas)

# Deque trabalha com índices, sendo assim, ao tentar remover um elemento que não consta no índice 0, será gerado um erro

 

PYTHON + NUMPY

 

Instalação das dependências

pip install numpy

 

Importando a biblioteca numpy

import numpy as np

 

Criando uma array numpy

data = np.array([2, 4, 6, 8, 10])

print(data)

print(type(data))

print(data.shape)

 

Criando automaticamente uma array numpy com dados ordenados.

data = np.arange(15)

print(data)

 

Criando automaticamente uma array numpy com dados aleatórios (float entre 0 e 1) data = np.random.rand(15)

print(data)

 

Criando uma array numpy com dados aleatórios (int entre 0 e o valor especificado). data = np.random.randint(10, size = 10)

# números de 0 a 10, size define quantos elementos serão gerados

print(data)

 

Criando uma array numpy com dados aleatórios (float entre 0 e 1) data = np.random.random((2, 2))

print(data)

 

Criando uma array numpy composta de zeros

data = np.zeros((3, 4))

# 3 linhas e 4 colunas

print(data)

 

Criando uma array numpy composta de números um

data = np.ones((3, 4))

# 3 linhas e 4 colunas

print(data)

 

Criando uma array numpy com valores vazios.

data = np.empty((3, 4))

# haverá um valor, representado em notação científica, algo muito próximo ao zero absoluto.

print(data)

 

Criando uma array numpy de números negativos.

data = np.arange(10) * -1

print(data)

 

Criando uma array numpy unidimensional

data = np.random.randint(5, size = 10)

# números de 0 a 5, size define quantos elementos serão gerados

print(data)

print(data.shape)

 

Criando uma array numpy bidimensional data2 = np.random.randint(5, size = (3, 4))

# números de 0 a 5, distribuidos em 3 linhas e 4 colunas

print(data2)

print(data2.shape)

 

Criando uma array numpy tridimensional

data3 = np.random.randint(5, size = (5, 3, 4))

# números de 0 a 5, 5 camadas cada uma com 3 linhas e 4 colunas

print(data3)

print(data3.shape)

 

Convertendo uma array multidimensional para unidimensional

data4 = np.array([(1,2,3,4),(3,1,4,2)])

print(data4)

data4_flat = data4.flatten()

print(data4_flat)

 

Criando uma array numpy a partir de elementos de uma lista

data4 = np.array([[1, 2, 3, 4], [1, 3, 5, 7]])

print(data4)

 

Verificando o tipo de dado de uma array

print(type(data3))

print(data3.dtype)

 

Verificando o tamanho de uma array

data3 = np.random.randint(5, size = (5, 3, 4))

print(data3.ndim)

# número de dimensões

print(data3.shape)

# formato de cada dimensão

print(data3.size)

# tamanho total da matriz

 

Verificando o tamanho em bytes de cada item e de toda uma array print(f'Cada elemento possui {data3.itemsize} bytes')

print(f'Toda a matriz possui {data3.nbytes} bytes')

 

Consultando o elemento de maior valor em uma array

data = np.arange(15)

print(data)

print(data.max())

 

Consultando um elemento através de seu índice (unidimensional)

data = np.arange(15)

print(data)

print(data[8])

 

data

print(data)

print(data[-5])

# 5º elemento a contar do fim para o começo

 

Consultando um elemento através de seu índice (multidimensional)

data2 = np.random.randint(5, size = (3, 4))

print(data2)

print(data2[0, 2])

# linha 0, coluna 2 (lembrando que o índice para coluna também começa em 0, 0-1-2-3)

 

Consultando um intervalo de elementos em uma array

data

print(data)

print(data[:5])

# apenas os 5 primeiros

print(data[3:])

# do terceiro elemento em diante (elemento, e não índice)

print(data[4:8])

# do quarto elemento até o oitavo (4º, 5º, 6º 7º e 8º elemento)

print(data[::2])

# de dois em dois elementos

print(data[3::])

# pula os 3 primeiros elementos e imprime o resto

 

Modificando dados/valores manualmente por meio de seu índice

data2

print(data2)

data2[0, 0] = 10

# elemento situado na posição 0x0 do índice passará a ter o valor atribuído 10

print(data2)

 

Inserindo elementos diferentes de int

data2

data2[1, 1] = 6.82945

# mesmo declarado como float será convertido em int

print(data2)

 

Definindo manualmente o tipo de dados de uma array

data2 = np.array([8,-3, 5, 9], dtype = 'float')

# todos elementos serão convertidos para float

print(data2)

print(type(data2[0]))

 

Criando uma array numpy de intervalos igualmente distribuídos

data = np.linspace(0, 1, 7)

# 7 números, gerados de 0 a 1, com intervalo igual entre cada número gerado

print(data)

Criando uma array numpy com formato definido manualmente data5 = np.arange(8)

print(data5)

data5 = data5.reshape(2, 4)

# a multiplicação dessas dimensões deve ser o número de elementos. ex 2 x 4 = 8

print(data5)

 

Criando uma array numpy com tamanho predefinido em variável tamanho = 10

data6 = np.random.permutation(tamanho)

# matriz de 10 elementos conforme variável tamanho define

print(data6)

 

Operadores lógicos em arrays numpy (todos elementos)

data7 = np.arange(10)

print(data7)

print(data7 > 3)

# irá verificar cada elemento da matriz, retornando true para os que forem maior que 3 e false para os que forem menor.

 

Operadores lógicos em arrays numpy (elemento específico)

data7 = np.arange(10)

print(data7)

print(data7[4] > 5)

# o elemento e é maior que 5?

 

Operadores aritméticos em arrays numpy

data8 = [1, 2, 3, 4, 5, 6, 7, 8]

print(data8)

 

data8 = np.array(data8)

# após convertido para array o operador + sempre fará a soma

print(data8 + 10)

 

Criando uma matriz diagonal

data9 = np.diag((1, 2, 3, 4, 5, 6, 7, 8))

# os elementos serão distribuídos em uma coluna diagonal

print(data9)

 

Criando padrões duplicados

data10 = np.tile(np.array([[9, 4], [3, 7]]), 4)

# 9, 4, elementos da primeira linha, 3, 7 da segunda, duplicados 4 vezes na mesma linha

print(data10)

 

data10 = np.tile(np.array([[9, 4], [3, 7]]), (2,2)) # mesmo exemplo que o anterior, mas duplicados linha e coluna

print(data10)

 

Somando um valor a cada elemento de uma array

data11 = np.arange(0, 15)

print(data11)

data11 = np.arange(0, 15) + 1

# irá somar 1 a cada elemento

print(data11)

 

data11 = np.arange(0, 30,3) + 3

# somando 3 ao valor de cada elemento, de 3 em 3 elementos

print(data11)

 

Realizando a soma de arrays

d1 = np.array([ 3, 6, 9, 12, 15])

d2 = np.array([ 1, 2, 3, 4, 5])

d3 = d1 + d2

print(d3)

 

Realizando a subtração de arrays

d1 = np.array([ 3, 6, 9, 12, 15])

d2 = np.array([ 1, 2, 3, 4, 5])

d3 = d1 - d2

print(d3)

 

Realizando a divisão de arrays

d1 = np.array([ 3, 6, 9, 12, 15])

d2 = np.array([ 1, 2, 3, 4, 5])

d3 = d1 / d2

print(d3)

 

Realizando a multiplicação de arrays

d1 = np.array([ 3, 6, 9, 12, 15, 18, 21, 24, 27, 30]) d2 = np.array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

d3 = d1 * d2

print(d3)

 

Operações lógicas entre arrays

d1 = np.array([ 3, 6, 9, 12, 15, 18, 21])

d2 = np.array([ 1, 2, 3, 4, 5, 20, 25])

d3 = d2 > d1

# os elementos de d2 são maiores do que os de d1?

print(d3)

 

Transposição de arrays

arr1 = np.array([[1, 2, 3], [4, 5, 6]])

print(arr1)

print(arr1.shape)

arr1_transposta = arr1.transpose()

# realizará a conversão de linhas para colunas e vice-versa

print(arr1_transposta)

print(arr1_transposta.shape)

 

Salvando uma array no disco local

data = np.array([ 3, 6, 9, 12, 15])

np.save('minha_array', data)

# irá gerar um arquivo com extensão .npy

 

Carregando uma array do disco local

np.load('minha_array.npy')