- Comentários
- Operadores
- Identificadores
- Tipos de Dados
- Coleções de Dados
- Conversão de dados
- Condicionais
- Laços de Repetição
- Funções
- Métodos
- Gráficos
Idealizada e desenvolvida por Guido Van Rossum, matemático holandês, no início dos anos 90, o Python foi criado com o objetivo de otimizar a leitura de códigos e estimular a produtividade de quem os cria, seja este um programador ou qualquer outro profissional - ou seja, focado na resolução de problemas. O grande trunfo do Python é a sua syntax simples e aliado ao fato de ser multiplataforma, sendo útil em diferentes contextos. Desde automações, desenvolvimento web, machine learning, IA, big data, análise e ciência de dados. Quando queremos escrever um programa, nós utilizamos um editor de texto para escrever as instruções em Python em um arquivo, isto é chamado de um script. Por convenção, scripts em Python possuem nomes que terminam com .py.
Termos comuns no desenvolvimento de sistemas entrada (input) Obter dados do “mundo externo”. Isso pode ser ler dados de um arquivo, ou até de algum tipo de sensor como um microfone ou GPS. Nos nossos programas iniciais, nossa entrada virá do usuário digitando dados em seu teclado.
saída (output) Mostrar resultados de um programa numa tela, ou guardá-los em um arquivo, ou talvez gravá-los em um dispositivo como um alto falante, para que ele toque música ou fale algum texto. execução sequencial Realizar instruções uma após a outra na ordem na qual são encontradas no script.
execução condicional Checar certas condições para que uma certa sequência de instruções seja executada ou ignorada. execução repetitiva:] Realizar algum conjunto de instruções repetidamente, geralmente com alguma variação.
reuso Escrever um conjunto de instruções atribuindo um nome a ele para que estas instruções sejam reutilizadas quando necessárias durante o programa. Neste curso o Python será usado na IDE Spyder integrada ao Anaconda Navigator, lá haverá integração ao ambiente de dados com Jupyter Notebook, Pandas, etc. O objetivo do uso destas ferramentas é transformar informações dentro de um contexto, em dados utilizaveis.
No Python existem consensos do uso de comentários nos códigos
# Comentário de linha única
# Coméntario de linha extensa
# Que recebe uma descrição um pouco maior
# Comentário de bloco que intercala blocos de códigos
user_name = "Nome"
user_age = 18
# Acompanhado de descrições para cada bloco de forma especifica
car_year = 2010
car_type = "SUV"
"""
Comentário de várias linhas delcarado com 3 aspas duplas
na abertura e no fechamento do comentário
"""
Assim como toda linguagem de programação, Python tem caracteres e palavras reservadas. Visto que o sinal de ‘#’ é reservado para comentários, existem várias palavras que terão o mesmo comportamento com usabilidades diferentes.
Operador | Significado | Exemplo | Resultado |
---|---|---|---|
+ | Adição | a = 3 + 2 | a = 5 |
- | Subtração | b = 7 - a | b = 2 |
* | Multiplicação | c = a * b | c = 10 |
/ | Divisão | d = 10/3 | d = 3.33 |
// | Quociente | e = 10//3 | e = 3 |
% | Resto | f = 10%3 | f = 1 |
** | Exponenciação | g = 2 ** 3 | g = 8 |
** | Radiciação (Raiz Quadrada) | h = 16 ** (1/2) | h = 4.0 |
** | Radiciação (Raiz Quadrada) | h2 = 16 ** (0.5) | h2 = 4.0 |
** | Raiz Cúbica | h3 = raiz ** (1/3) | h3 = 2.5 |
São as sequências de importância numa operação matemática, ou seja, aquela operação que será feita primeiro.
- Parênteses
- Potenciação
- Multiplicação e Divisão
- Soma e subtração
EXERCICIO Operação1: 2 + 3 * 4 \ 5 - 6 Resultado antes da conversão = -1.599
# Conversão para Python
(2 + 3) * 4 / (5 - 6)
Resultado -20.0
Operação2: Encontrar a raiz quadrada de 2+3²/4 2 - 3 = -1; -1² = 1 1 / 4 = 0.25 V0.25 = 0.5 R: 0.5
((2-3)**2/4)**(0.5)
Resultado 0.5
Mais em Type Coversion
Operador | Exemplo | Significado |
---|---|---|
= | a = 5 | Atribuição simples |
+= | a += 2 | a = a + 2 |
-= | a -= 2 | a = a - 2 |
*= | a *= 2 | a = a * 2 |
/= | a /= 2 | a = a / 2 |
//= | a //= 2 | a = a // 2 |
%= | a %= 2 | a = a % 2 |
**= | a **= 2 | a = a ** 2 |
Operador | Significado | Exemplo |
---|---|---|
== | Igualdade | a == b |
!= | DesiIgualdade | a != b |
> | Maior que | a > b |
< | Menor que | a < b |
>= | Maior ou igual | a >= b |
<= | Menor ou igual | a <= b |
Operador | Significado | Exemplo |
---|---|---|
and | E lógico | a == b and b == c |
or | OU lógico | a == b or b == c |
^ | OU exclusivo (XOR) | a == b ^ b == c |
not | Negação (inverte o resultado lógico) | not(a == b and b == c) |
Operador | Significado | Exemplo |
---|---|---|
is | Verifica se duas referências apontam para o mesmo objeto | a is b |
is not | Verifica se duas referências apontam para diferentes objetos | a is not b |
No Python esse é o nome dado para a declaração de Variáveis, Constantes e funções. O identificador deve começar com underscore ou uma letra, o sistema não é capaz de ler identificadores que iniciam com números.
BOA PRÁTICA A recomendação para declarar um identificador, é fazer o uso de todas as letras minúsculas e caso seja preciso escrever mais de uma palavra, usar o underscore. Ex:
client_id _client_id
Visto que, variáveis não recebem acentuação, caracteres especiais, espaços e nem podem iniciar com números Sendo assim, para declarar uma variável é necessário um identificador e uma expressão. A expressão poder ser um operador aritmético, uma função ou um tipo de dado.
PALAVRAS RESERVADAS São palavras que não podem ser atribuídas a nenhuma variável pois o sistema já entende que elas tem uma função atribuída, como: def, if, else, import, from, del, global, not, with, as, yield, assert, pass, break, except, raise, class, finally, is, continue, try, nonlocal, entre outras.
Existem dois métodos que nos retornam o tipo de dado que aquela variável armazenou, os métodos são:
type( ) - retorna qual é o tipo da dado isinstance( ) - recebe o dado e o um tipo, e retorna verdadeiro caso sejam valores condizentes ou falso caso os valores não tenham relação com o tipo. ex:
isstance(5, int) # true
isstance(5, str) # false
isstance('5', int) # false
isstance('5', str) # true
Classes e instâncias, basicamente são tudo aquilo que delcradaos. Sendo objetos as classes, e valores as instâncias. Exemplo: váriavel é uma classe, e seu valor uma instância.
imprimindo valores: print(nome_variável)
Os tipos de dados suportados pelo Python são divididos entre Dados Simples e Dados de Estruturas, os Simples são considerados os dados de informações únicas, como: Inteiro, Real, Boolean e String; pois cada informação será atribuída a um valor. Enquanto os de Estrutura são conjuntos de dados - como Arrays em JS - que irão receber vários valores diferentes, sendo essas estruturas o list, tuple, range, dict.
São informações numéricas inteiras, ou seja, números que não são quebrados.
- Ano de fabricação
- Quantidade de portas
- Assentos
- Comprimento e largura - com medidas contínuas, por exemplo milímetros
Informações numéricas quebradas, não inteiras - ex: 0,5
- Velocidade max
- Autonomia de gasolina
- Preço
Informações que são textos
- Descrição
- Marca
- Modelo
- Cor
- Tipo de combustível
Informações de Sim ou não, no caso true ou false
- Possui ABS?
- Possui Seguro?
- Cliente tem CNH?
Mesmo que valores como CPF/RG, data de nascimento, número de telefone; sejam números, eles entram como tipo de dado string, pois seu formato não é inteiro tem nem decimal, aliado ao fato de que podem receber caracteres especiais na sua formatação. Portanto não podem ser considerados com valores numéricos, e sim strings.
Tipo de dado esse que tem uma grande game de manipulações Como dito antes, strings são valores de texto que podem ser declarados com aspas duplas ou aspas simples, ambas fazem a mesma função, o que vai depender do seu uso é que as vezes haverão textos que contém palavras que também usam aspas - principalmente na lingua inglesa - e por conta disso deve haver um consenso de declaração para não confundir o sistema.
'Eu sou um professor' # String com aspas simples
"I'm a teacher" # String dupla agrupando uma frase que contém aspas simples
Um comportamento interessante, é que as strings recebem um identificador para cada caractere dentro dela, um index - que também são atribuídos as coleções de dados - sendo qualquer caractere mesmo, até a barra de espaço, que do inglês é blackspace, ou seja espaço vazio mas que precisa ser inserido e reconhecido ali para dividir as palavras.
frase = 'Eu sou um professor'
print(len(frase))
s = "Python"
# Acessando cada caractere armazenado no string s
print(s[0]) # P
print(s[1]) # y
print(s[2]) # t
print(s[3]) # h
print(s[4]) # o
print(s[5]) # n
A importância de entender sobre index é que o Python não nos limita a acessar apenas um elemento, mas definir o retorno de uma quantidade de caracteres baseado nos seus indices.
Slicing:
variavel[inicial:final]
=> Acessa os caracteres armazenados entre os índices ind_inicial e ind_final-1variavel[inicial:final:inc]
=> Acessa os caracteres armazenados entre os índices inicial e ind_final-1 com incremento inc - pulando a cada inc números
frase = 'Eu sou um professor'
print(frase[10:19])
# retornando assim apenas a palavra "professor", baseado no seu index
print(frase[10:19:2])
# Usando slicing com incremento para pular caracteres, o output é 'poesr'
Esse método também pode receber espaços em branco, sendo: variavel[ :10 ] indica que irá do inicio ao index 10, e o inverso significa do indice 10 até o indice final. Toda palavra também recebe valores de index negativo, sendo o primeiro o -1 e vai até o valor fina, do length.
TABELA DE OPERADORES APLICADOS A STRING
Operador | Significado | Exemplo |
---|---|---|
s[ind] | Acesso a uma posição | s[0] |
s[i:f] | Acesso a uma faixa de posições | s[1:3] |
s[i:f:inc] | Acesso a uma faixa de posições com incremento | s[0:15:3] |
s1 + s2 | Concatenação de strings | novastr = s1 + s2 |
s*n | Retorna um string contendo n repetições de s | s = 'ABC'*10 |
s1 in s2 | Retorna True se o substring s1 está contido em s2 | 'ABC' in 'ABCDEFGH' |
s1 not in s2 | Retorna True se o substring s1 não está contido em s2 | 'XYZ' not in 'ABCDEFGH' |
Método | Descrição | Exemplo |
---|---|---|
capitalize() | Retorna uma cópia da string com primeiro caractere maiúsculo e os caracteres restantes em minúsculo | s.capitalize() |
casefold() | Retorna uma cópia da string convertido para letras minúsculas | s.casefold() |
center() | Retorna uma cópia da string centralizada e preenchida com o caractere especificado (default = espaço em branco) | s.center(20) |
center() | Retorna uma cópia da string centralizada e preenchida com o caractere especificado (default = espaço em branco) | s.center(20, '*') |
count() | Retorna o número de ocorrências de um determinado substring | s.count('abc') |
encode() | Retorna uma cópia da string utilizando um determinando encoding (default = UTF-8) | s.encode() |
endswith() | Retorna True se uma string terminar com o sufixo especificado | s.endswith("python") |
expandtabs() | Retorna uma cópia da string no qual os caracteres de tabulação \t são substituídos por caracteres de espaço em branco | s.expandtabs(3) |
find() | Retorna o índice da primeira ocorrência da substring. Se não encontrado, retorna -1 | s.find('python') |
format() | Formata a string de entrada em uma string de saída | "{} é {}".format("Python", "demais!") |
index() | Retorna o índice da primeira ocorrência de uma substring dentro da string. Se a substring não for encontrada, levanta uma exceção | s.index('python') |
isalnum() | Retorna True se todos os caracteres na string forem alfanuméricos (letras ou números) | s.isalnum() |
isalpha() | Retorna True se a string tiver apenas letras | s.isalpha() |
isascii() | Retorna True se todos os caracteres na string forem ASCII | s.isascii() |
isdecimal() | Retorna True se todos os caracteres na string forem decimais (0 a 9) | s.isdecimal() |
isdigit() | Retorna True se todos os caracteres na string forem dígitos (ex: 3²) | s.isdigit() |
isidentifier() | Retorna True se a string for um identificador válido em Python | s.isidentifier() |
islower() | Retorna True se todos as letras da string forem letras minúsculas | s.islower() |
isnumeric() | Retorna True se todos os caracteres na string forem numéricos (ex: ½) | s.isnumeric() |
isprintable() | Retorna True se todos os caracteres da string podem ser impressos | s.isprintable() |
isspace() | Retorna True se houverem apenas espaços em branco na string | s.isspace() |
istitle() | Retorna True se a string estiver em formato de título, ou seja, se cada palavra da string começa com letra maiúscula e tem o restante das letras minúsculas | s.istitle() |
isupper() | Retorna True se todos as letras do string forem letras maiúsculas | s.isupper() |
ljust() | Retorna uma cópia da string justificada à esquerda | s.ljust(20) |
lower() | Retorna uma cópia da string com as letras maiúsculas convertidas em minúsculas | s.lower() |
lstrip() | Retorna uma cópia da string com os caracteres passados por parâmetro removidos do início da string | s.lstrip(' *@') |
partition() | Divide a string e retorna uma tupla contendo a parte antes do separador (primeira ocorrência), a string de argumento (separador) e a parte após o separador | s.partition('@') |
replace() | Retorna uma cópia da string onde todas as ocorrências de uma substring são substituídas por outra | s.partition('@',' at ') |
rfind() | Retorna o índice da última ocorrência da substring. Se não encontrado, retorna -1 | s.rfind('python') |
rindex() | Retorna o índice da última ocorrência da substring dentro da string. Se a substring não for encontrada, levanta uma exceção | s.rindex('python') |
rjust() | Retorna uma cópia da string justificada à direita | s.rjust(20) |
rpartition() | Divide a string e retorna uma tupla contendo a parte antes do separador (última ocorrência), a string de argumento (separador) e a parte após o separador | s.rpartition('@') |
rsplit() | Divide a string à partir da direita (última posição), usando um separador passado por parâmetro, e retorna uma lista de strings | s.rsplit(';') |
rstrip() | Retorna uma cópia da string com os caracteres passados por parâmetro removidos do final da string | s.rstrip('!?.') |
split() | Divide a string à partir da esquerda (primeira posição), usando um separador passado por parâmetro, e retorna uma lista de strings | s.split(';') |
splitlines() | Divide e retorna as linhas contidas em uma string | s.splitlines() |
starstwith() | Retorna True se uma string começar com o prefixo especificado | s.starstwith("Python") |
strip() | Retorna uma cópia da string com os caracteres passados por parâmetro removidos do início e do final da string | s.strip(' *@') |
swapcase() | Retorna uma cópia da string com letras minúsculas convertidas em maiúsculas e vice-versa | s.swapcase() |
title() | Retorna uma cópia da string com a primeira letra de cada palavra convertida para maiúscula | s.title() |
upper() | Retorna uma cópia da string com as letras minúsculas convertidas em maiúsculas | s.upper() |
zfill() | Retorna uma cópia da string preenchida com 0s (zeros) à esquerda | s.zfill(8) |
São agrupamentos de dados - como vetores em Java ou Arrays em Javascript - cada valor dentro dele recebe um index, começando pelo número zero. Ou seja o número do index não é o exato mesmo valor da quantidade de tens dentro dele. Ex
lista = [ a, b, c, d, e, f, g, h ] | Temos 8 valores
index [ 0, 1, 2, 4, 5, 6, 7 ] | Index terminando no número 7
O Python permite o acesso aos valores da lista de duas formas: através do número do index ou número final - número desejado, ex:
index 2 = c n-6 = c
A indexação no Python também pode ser acessada de forma crescente ou decrescente.
Existe duas maneiras de criar listas
- lista = list( ) - Função que cria uma lista vazia
- lista = [ ] - criar uma lista a partir de um colchete vazio ou inserindo qualquer tipo de dado
- lista_aninhada = [ [1, 2 ,3], [4, 5, 6] ] - Semelhante a objetos de arrays em javascript
Para acessar os dados dentro de cada lista é usado o identificador seguido do colchetes indicando o index desejado. Em caso de linha aninhada, cada conjunto de dados recebe um index único e são acessados através do index geral daquela lista.
lista = ["a", "b", "c", "d", "e", "f" ]
lista[3]
lista_aninhada = [["a", "b", "c"], ["d", "e", "f"]]
lista_aninhada[1][0]
# output = d
Atribuindo novos valores para index já existentes
lista = [77, 2, 80, 4, 15, 30, 12, 90, 99]
lista[8] = 100
lista[1] = lista[1] + lista[3]
# output [77, 6, 80, 15, 30, 12, 90, 100]
Método | Descrição | Exemplo |
---|---|---|
append | Adiciona um elemento no final da lista | lista.append(5) |
clear | Apaga todos os elementos de uma lista | lista.clear() |
copy | Retorna uma cópia dos elementos da lista | copia = lista.copy() |
count | Retorna a quantidade de ocorrências de um elemento na lista | qt = lista.count(5) |
extend | Adiciona os elementos de outra lista passada por parâmetro | lista.extend(outra_lista) |
index | Retorna o índice do elemento passado por parâmetro (primeira posição) | pos5 = lista.index(5) |
insert | Adiciona um elemento em uma posição passada por parâmetro (adiciona no final caso a posição não exista) | lista.insert(3, "João") |
pop | Remove o elemento na posição passada por parâmetro (provoca um erro caso a posição não exista) | elemento = lista.pop(3) |
remove | Remove o elemento passado por parâmetro (provoca um erro caso o elemento não exista) | lista.remove(5) |
reverse | Inverte a ordem dos elementos de uma lista | lista.reverse() |
sort | Ordena os objetos de uma lista | lista.sort() |
lista.sort(reverse=True) |
Tem a mesma estrutura de uma Lista, porém é do tipo constate, ou seja, quando o conteúdo da tupla é definido naada pode ser alterado, inserido e nem removido. DECLARAÇÃO DA TUPLA Assim como as listas, as tuplas podem receber qualquer tipo de dado dentro dele, até mesmo listas e outras tuplas. Importante lembrar que apesar da syntax da tuple ser diferente da List - ( ) para Tuple e [ ] para list - os index são acessados da mesma forma, através do colchetes.
# criando tuplas vazias
tupla_default = ()
tupla_function = tuple()
# tuplas com todo tipo de dado dentro
tupla_any_data = (1, "alpha", true, 1.5)
tupla_tupla = (1, 2, 3, (4, 5, 6))
tupla_list = (1, 2, 3, [4, 5, 6])
As listas dentro de tuplas tem seu comportamento padrão, possibilitando fazer alterações dentro dessa coleção
COUNT( ) - Retorna a quantidade de observações feitas desse elemento dentro da tupla
INDEX( ) - Retorna a posição de index do elemento requisitado { se houver mais de um, ele retorna o primeiro, assim como em list }.
Lembram os um array de objetos - ou JSON - onde cada campo recebe um nome para cada valor, esse é um comportamento importante já que em Dicionários não recebem index.
# Declaração Dicionarios vazios
dicionario = {}
dicionario_function = dict()
# Estrutura de dicionário
email_clients = {
"Cliente1" : "cliente1@gmail.com",
"Cliente2" : "cliente2@gmail.com",
"Cliente3" : "cliente3@gmail.com",
}
email = email_clients['Client2']
email
# Dicionário com outro dicionário
dic_notas_alunos_dicionario = {
"João": {"nota1": 30, "nota2": 12, "nota3": 21},
"Maria": {"nota1": 20, "nota2": 30, "nota3": 29},
"José": {"nota1": 20, "nota2": 23, "nota3": 19},
}
dic_notas_alunos_dicionario
# Dicionario com listas
dic_notas_alunos = {
"João":[30, 12, 21],
"Maria": [20, 30, 29],
"José": [20, 23, 19]
}
dic_notas_alunos["João"] # Para acessar o valor pela chave
nome_aluno = "Maria"
print("As notas de "+nome_aluno+" foram: "+str(dic_notas_alunos[nome_aluno])+".")
# variável que será responsável por fazer a busca da chave
# usando método string, pois caso contrário não é possível contatenar
# os valores dos chamados do dicionário
# dicionário com outros dicionários dentro
dic_notas_alunos2 = {
"João": {"nota1": 30, "nota2": 12, "nota3": 21},
"Maria": {"nota1": 20, "nota2": 30, "nota3": 29},
"José": {"nota1": 20, "nota2": 23, "nota3": 19},
}
dic_notas_alunos2
ALTERANDO DADOS DE UM DICIONÁRIO
dic_notas_alunos = {
"João": {"nota1": 30, "nota2": 12, "nota3": 21},
"Maria": {"nota1": 20, "nota2": 30, "nota3": 29},
"José": {"nota1": 20, "nota2": 23, "nota3": 19},
}
# Para alterar todos os valores deve-se passar um novo objeto inteiro
dic_notas_alunos['Maria'] = {"nota1": 20, "nota2": 30, "nota3": 30}
# Para alterar um único valor, é preciso especificar pela chave individual
dic_notas_alunos["José"]["nota3"] = 25
Método | Descrição | Exemplo |
---|---|---|
clear | Apaga todos os elementos de um dicionário | dic.clear() |
copy | Retorna uma cópia dos elementos de um dicionário | dic_copia = dic.copy() |
fromkeys | Retorna um dicionário a partir de uma sequência de chaves | exemplo = dic.fromkeys({"k1", "k4", "k5"}) |
get | Retorna o valor associado a uma chave | dic.get("k1") |
dic.get("k1", 0) | ||
items | Retorna uma visão dos pares chave/valor de um dicionário | dic.items() |
keys | Retorna uma visão das chaves de um dicionário | dic.keys() |
pop | Remove e retorna o elemento associado à chave passada por parâmetro (provoca erro se a chave não existir) | dic.pop(2) |
popitem | Remove e retorna o último elemento adicionado ao dicionário | dic.popitem() |
setdefault | Retorna o valor associado a uma chave (se a chave existir). Caso não exista, insere a chave com o valor (opcional) no dicionário | dic.setdefault(2, "dois") |
update | Adiciona ao dicionário os pares de chave/valor de outro dicionário passado por parâmetro | dic.update(dic2) |
values | Retorna uma visão dos valores de um dicionário | dic.values |
São coleções que recebem apenas elementos únicos, e armazena os elementos sem ordem específica e não recebe index nem key. Esse comportamento de valores únicos são em função dos métodos de teoria de conjuntos, onde pode ser feito a união, interseção ou a diferença entre dois conjuntos.
# Essa é a única maneira de se declarar um conjunto
# visto que os valores serão agrupados entre chaves '{ }'
# e esse caractere já é utilizado também pelos dicionários
conj = set()
conj = {1, 2, 3, 4, 5, 6, 7,}
for elem in conj:
print(elem)
Visto que, como em conjuntos não existem index nem key values, é necessário acessar os seus elementos através de uma função de loop
Método | Descrição | Exemplo |
---|---|---|
add | Adiciona um elemento ao conjunto | conj1.add(5) |
clear | Apaga todos os elementos de um conjunto | conj1.clear() |
copy | Retorna uma cópia dos elementos de um conjunto | conj_copia = conj1.copy() |
difference | Retorna o conjunto de elementos de conj1 que não pertencem a conj2 | conj1.difference(conj2) |
intersection | Retorna o conjunto de elementos presentes tanto em conj1 quanto em conj2 | conj1.intersection(conj2) |
isdisjoint | Retorna True se conj1 e conj2 forem disjuntos (ou seja, não possuem elementos em comum) | conj1.isdisjoint(conj2) |
issubset | Retorna True se conj1 for um subconjunto de conj2 (conj1 está contido em conj2) | conj1.issubset(conj2) |
issuperset | Retorna True se conj1 for um superconjunto de conj2 (conj1 contém conj2) | conj1.issuperset(conj2) |
remove e discard | Removem um elemento do conjunto | conj1.remove(5) ou conj1.discard(5) |
symmetric_difference | Retorna o conjunto de elementos que não são comuns aos dois conjuntos (o contrário da interseção) | conj1.symmetric_difference(conj2) |
union | Retorna a união entre 2 conjuntos | conj1.union(conj2) |
Atenção remove( ) e discard( ) tem funções semelhantes, porém com comportamentos diferentes. Ambos removem elementos, porém ao tentar remover um elemento inexistente o remove( ) retorna um erro, enquanto o discard( ) não
CONVERTENDO CONJUNTO PARA LISTA
lista = [1, 2, 4, 3, 2, 1, 5, 2, 3, 1, 6, 3, 4, 2]
conjunto = set(list)
conjunto
# output esperado: {1, 2, 3, 4, 5, 6}
Função | Descrição | Exemplo |
---|---|---|
len | Retorna a quantidade de elementos de uma lista | print(len(lista)) |
max | Retorna o maior elemento de uma lista | maior = max(lista) |
min | Retorna o menor elemento de uma lista | menor = min(lista) |
sum | Retorna o somatório dos elementos de uma lista | soma = sum(lista) |
Para retornar dados visualizáveis, é usada a função print( ) que pode receber textos, números e variáveis. E para uso mais avançado a concatenação de tipos de valores ou uso do formato em string literal. ex:
nome = 'João'
idade = 18
print(nome) # retorna o valor dentro da variável
print('Nome: '+nome) # concatena a string + valor de uma variável
print('Seu nome é {} e ele tem {} anos de idade'.format(nome, idade)) # cacatenação literal
print(f'Seu nome é {nome} e ele tem {idade} anos de idade') # shorthand com concatenação literal
É possível converter o tipo de dado a partir de métodos TypeCasting
string = srt(true) - retorna um texto “true” real = float(”3”) - retorna 3.0 inteiro = int(”2019”) - retorna a string para um valor numérico boolean = bool( “false”) - retorna valor true, visto que qualquer tipo de dado que não for 0 é considerado true
Em LIST são feitas as novas atribuições lista[index] = novo valor Em TUPLE não são permitidas alterações, Em casos de necessidade de alteração ou não alteração de coleções, podemos fazer a conversão de tuplas em lista pela função list( ), e de lista para tupla com tuple( ). Em DICT, é acessado através do valor, já que não há index dict[”key”] = novo valor
CÁLCULO DE ÁREA E PERIMETRO area = base x altura perímetro = 2 x (base + altura)
base = 7
altura = 8
area = base * altura
perimetro = 2 * (base + altura)
print(f'O valor da área é: {area}')
print(f'O valor do perímetro é: {perimetro}')
CÁLCULO DE ÁREA E COMPRIMENTO DA CIRCUNFERÊNCIA
área = pi X raio² comprimento = 2 x pi * raio
pi = 3.14159
raio = 2
area = pi * (raio**2)
comprimento = 2 * (pi * raio)
print(f'O valor da área é: {area}, e valor do comprimento é: {comprimento}')
CÁLCULO DA DISTÂNCIA EUCLIDIANA ENTRE 2 PONTOS CARTESIANO
distância = V_ ( X1 - X2)² + (Y1 - Y2)²
x1 = 3
x2 = 5
y1 = 4
y2 = 6
dist = ((x1 - x2)**2 + (y1 - y2)**2)**0.5
CÁLCULO DO DELTA E DAS RAÍZES DE UMA EQUAÇÃO DE SEGUNDO GRAU
delta = b² - 4ac
a = 1
b = -5
c = 6
delta = (b**2) - 4*a*c
x1 = (-b+delta**(0.5)) / (2*a)
x2 = (-b-delta**(0.5)) / (2*a)
CALCULO DO SETOR CIRCULAR - Fatia de pizza
Setor = Angulo . PI . Raio² | 360
a = 45
r = 15
pi = 3.14159
S = (a * pi * (r**2)) / 360
print(S)
São declarações de condições para enviar comandos ao sistema para que execute certa função apenas em contextos específicos. A syntax das condicionais são baseadas em identação, lendo os blocos de código que não estão juntos a linha inicial. ex:
x = 9
y = 15
if x > y:
print(f'o valor de x é {x}, portanto é maior')
elif x == y:
print(f'o valor de x e de y são iguais')
else :
print(f'o valor de y é {y}, portanto é maior')
O while é o comando utilizado para programar repetições no Python baseadas na avaliação de uma condição. Enquanto a condição for verdadeira, o bloco de comandos interno ao while é repetido. Quando a condição se torna falsa, o bloco de comandos deixa de repetir. while (cond): bloco de comandos
# Contador 1
count = 0
while (count < 11):
print(f'{count}')
count = count + 1
# Contador 2
soma = 0
loop = 0
den = 0
termo = 1
while (termo > 0.0001):
loop += 1
den = loop ** 2
termo = 1 / den
soma += termo
print(f"{loop}o termo {1}/{den} = {termo}")
print(soma)
A repetição FOR é feita baseada em um objeto, como uma coleção de dados, que ele irá receber uma variável baseada em cada posição referente a length.
lista = [1, 19, 17, 5, 2]
for num in lista:
print(num)
percebe-se que ao terminar o loop, a variável num mantém o valor da última posição
Função range( ) + For: Com essa condição é possível atribuir certas condições ao loop For
# contador até 9 - visto que o loop para antes de chegar no número final
for i in range(10):
print(i)
# contador 9 invertido - também poderia ser feito com reverse()
# nesse caso a função recebe range(valorInicial, valorFinal, loopStep)
# sendo o último o valor alterado a cada repetição
for i in range(9, -1, -1):
print(i)
# contador crescente com steps definidos para a multiplicos de 9
for i in range(0, 91, 9):
print(i)
Para criação de coleções de dados de maneira mais prática
# List escrita manualmente
lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
lista
# Usando métodos list() e range()
lista1 = list(range(1, 21))
lista1
# Comprehensions - para adicionar elementos com determinadas condições
# Nesse caso retornando valores até 50, mas apenas os numeros pares
lista2 = [num for num in range (1,51) if num % 2 == 0]
lista2
São blocos de código que armazenam determinadas ações, para serem executadas quando chamadas. Syntax, de uma função que recebe e imprime valores por argumento.
def func(a):
"""
Esta área se chama documentation string, são os comentários para funções.
Aqui é póssivel deixar descrições sobre a utilidade daquela função, que pode
ser lida por outras pessoas e até pelo Jypter Notebook
"""
print(a)
func(1)
FUNÇÕES LAMBDAS - Funções anônimas Apesar de sua escrita não ser declarada com nenhum nome, para reutilizar as funções lambdas o ideal é atribuir a uma variável para acessar o seu valor.
# Synax default
def petencia1(num, pot):
result = num ** pot
return result
a = potencia(3, 5)
print(a)
# função ternária
def potencia1(num, pot):
return num ** pot
b = potencia1(2, 5)
print(b)
# variavel recebendo função lambda e passando os argumentos na chamada
lambda_func = lambda num, pot: num ** pot
print(lambda_func(4, 5)
São funções do próprio sistema
Aplica uma função, para cada item de uma coleção de dados. Ou seja, assim como loop for, que percorre uma quantidade de dados e a cada repetição executa uma ação, o map( ) faz o mesmo, mas com uma syntax mais direta. Código manual - criando e inserindo numa nova lista os valores atualizados pelo loop do for
# FOR
valores = [1000, 1500, 1250, 2599]
def adicionar_imposto(valor):
return valor * 1.1
valor_atualizado = []
for valor in valores:
valor_atualizado.append(adicionar_imposto(valor))
print(valor_atualizado)
Código com map( ) - esse método recebe list( ) pois o map retorna um objeto e essa função o converte para lista, e então map(função que será executada, estrutura de base para a função executar baseada em seus elementos)
valores = [1000, 1500, 1250, 2599]
def adicionar_imposto(valor):
return valor * 1.1
valor_com_imposto = list(map(adicionar_imposto, valores))
print(valor_com_imposto)
importante não esquecer de passar um parâmetro na declaração da função
Executa uma função para cada valor da estrutura de dados, contando cada repetição de dois em dois, já que ele estará somando 2 valores de cada vez até gerar uma valor final; Recebe uma função e o iterável - variavel para receber o valor final Percebe-se que reduce era uma função nativa do Python, e hoje já não é mais, então é necessário fazer o import.
from functools import reduce
numeros = list(range(0, 11))
def soma(n1, n2):
return n1 + n2
result = reduce(soma, numeros)
print(result)
Aplica um filtro na estrutura de dados, retornando apenas os elementos que passaram por esse filtro. Recebe uma função para impor condições, e a variável iterável.
numeros = list(range(0, 11))
def impar(num):
if num % 2 != 0:
return True
else:
return False
result = list(filter(impar, numeros))
print(result)
Percebe-se que assim como o método Map( ), ele retorna um objeto que precisa ser convertido em estrutura de dados.
Faz a combinação de estruturas, combinado cada valor baseado na sua posição e cria uma tupla contendo uma lista para cada loop executado.
nomes = ["Raul", "Bia", "José"]
idades = [32, 25, 28]
cidades = ["Campinas", "BHte", "João Pessoa"]
dados = list(zip(nomes, idades, cidades))
print(dados)
# output: [('Raul', 32, 'Campinas'), ('Bia', 25, 'BHte'), ('José', 28, 'João Pessoa')]
Ao encontrar os valores, é importante se atentar a maneira que os dados serão exibidos. Para fazer isso existem diversas ferramentas, desde ggplot2 que é um framework de Python, até ferramentas mais completas como Tableu e Power BI. Aqui os exemplos serão baseados em Matplotlib, ferramenta nativa do Python.
Configurando o Matplotlib
python -m pip install matplotlib
from matplotlib import pyplot as plt
Um gráfico de barras é uma ótima maneira de exibir dados categóricos com diferentes abordagens.
Exemplo dos tipos de gráficos de barra:
Exemplo com um gráfico específico:
Convertido em código
from matplotlib import pyplot as plt
# Valores axis x e y
items = ['Femininas', 'Masculinas', 'Infantis', 'Cama, Mesa e Banho']
quantidade = [790, 500, 610, 410]
# Declaração de gráfico e labels
plt.bar(range(len(items)), quantidade)
plt.title('Número de vendas em uma loja')
plt.ylabel('Vendas em Janeiro')
plt.xticks(range(len(items)), items)
# linhas horizontais
ax = plt.gca()
ax.yaxis.grid()
O mais importante do gráfico de linha são as escalas, pois é usado para representar tendências. Porém é importante demonstrar a escala real.
Exemplo em código:
from matplotlib import pyplot as plt
# Conjuntos com os valores
years = [2015, 2016, 2017, 2018, 2019]
green = [18000, 13000, 14200, 11000, 15000]
# Criando a tabela
plt.plot(years, green, color='b', marker='o', linestyle='solid')
# Definindo os estilos
plt.title('Faturamento da Empresa')
plt.ylabel('Faturamento')
plt.xlabel('Ano')
plt.grid(color='black', linestyle='-', linewidth=0.5)
Os gráficos de dispersão são úteis para representar a relação entre duas variáveis distintas.
Exemplo em código:
friends = [70, 65, 72, 63, 71, 64, 60, 64, 67]
minutes = [175, 170, 205, 120, 220, 130, 105, 145, 190]
labels = ['Alpha', 'Beta', 'Charlie', 'Delta', 'Echo', 'Foxtrot', 'Goat', 'Heineken', 'Intel']
plt.scatter(friends, minutes)
for label, friend_count, minute_count in zip(labels, friends, minutes):
plt.annotate(label,
xy=(friend_count, minute_count),
xytext=(5, -5),
textcoords='offset points')
Um histograma é uma espécie de gráfico de barras que demonstra uma distribuição de frequências. No histograma, a base de cada uma das barras representa uma classe e a altura representa a quantidade ou frequência absoluta com que o valor de cada classe ocorre. Ao mesmo tempo, ele pode ser utilizado como um indicador de dispersão de processos.
Exemplo em código, representando a frequência que números aparecem de 0 a 10 a partir de uma criação aleatória:
import matplotlib.pyplot as plt
import random
# Criando números aleatórios
data = [random.randint(0, 10) for _ in range(20)]
# Crianndo o gráfico e definindo as escalas dos eixos
plt.hist(data, bins=10, range=(1, 10))
# Configurações de Labels
plt.title("Histogram of Random Data")
plt.xlabel("Escala")
plt.ylabel("Frequência")
plt.show()
Ao pegarmos um gráfico de barra, sabemos que o comparativo feito é entre a média de cada grupo de informações, com tamanhos diferentes baseados no desvio padrão. Já os gráficos Box Plot, os grupos são divididos entre Quartil 1, mediana e Quartil 3 - definidos dentro dos 100% de amplitude dos dados.
Exemplo em código:
import matplotlib.pyplot as plt
import random
# data to be plotted
data = [random.randint(0, 100) for _ in range(20)]
# create the boxplot
plt.boxplot(data)
# show the plot
plt.show()