| Relacionados | 
|---|
| 2023-02-09 - 💭️ Melhorias para o jardim Modificado em: 11:50 AM - February 11, 2023 | Criado em: 9:56 PM - July 30, 2023  | 
| Python - avançando na linguagem Modificado em: 10:50 AM - February 08, 2023 | Criado em: 9:58 PM - July 30, 2023  | 
| Python - começando com a linguagem Modificado em: 6:36 PM - February 05, 2023 | Criado em: 9:58 PM - July 30, 2023  | 
| Python Collections parte 1 - listas e tuplas Modificado em: 3:59 PM - February 09, 2023 | Criado em: 9:58 PM - July 30, 2023  | 
Caderno de Python
Este caderno não pretende ser uma reprodução da documentação, mas sim anotações que me ajudem a construir, memorizar e melhorar na linguagem.
Provavelmente estará em constante construção.
- Caderno de Python
- Ferramentas
 - Cursos
 - Até agora, fiz isso usando python
 - A linguagem
 - Sintaxe
- Função print()
 - Tipos de dados e funções relacionadas
 - Input
 - If, else e elif
 - While e interpolação de strings
 - For e range
 - Controle de fluxo com break e continue
 - Round
 - Random
 - Definir funções e importar arquivos
 - Funções da string
 - Abrir, escrever e fechar arquivos
 - Terminando o codigo
 - Data Structures
 - class nome:
 - Array (evitaremos usar)
 - Numpy
 - Método Abstrato
 - Built in
 - attrgetter
 
 
 
Ferramentas
 ![]()
Cursos
 
 
Até agora, fiz isso usando python
A linguagem
Snake_Case em nomes de variáveis
idade_esposa = 32
perfil_vip = 'Fulano'
recibos_em_atraso = 20
”Python é uma linguagem interpretada, em oposição às compiladas, embora a distinção possa ficar desfocada devido à presença do compilador de bytecode. Python é uma linguagem interpretada, em oposição às compiladas, embora a distinção possa ficar desfocada devido à presença do compilador de bytecode.” Documentação
<- menor que>- maior que<=- menor ou igual a>=- maior ou igual a- == igual a
 !=- diferente de
15 < 32
>>> True
numeros (inteiros ou float)
nomes = ["Trator", "Meia", "Bagagem", "tosco"]
sorted(nomes)
>>> ['Bagagem', 'Meia', 'Trator', 'tosco']
Alfabética (maiusculas e minusculas)
Sintaxe
Função print()
print()

Tipos de dados e funções relacionadas
type() ➜ <class 'float/int/str/bool'>
pais = "Italia" # Declara variavel
quantidade = 4
quartil = 7.9
acertou = (chute == numero_secreto)
type(pais) # pergunta o tipo da variável
<class 'str'> # tipo string
type(quantidade)
<class 'int'> # tipo inteiro (numero)
type(quartil)
<class 'float'> # tipo decimal (numero)
type(acertou)
<class 'bool'> # tipo binário (true/false)
print(pais, "ganhou", quantidade, "titulos mundiais") # imprimir esse resultado na tela
Italia ganhou 4 titulos mundiais # resultado do codigo anterior
Bool
 Ele pode ter os valores True (Verdadeiro) e False (Falso).
 Atenção às maiusculas
palavra_secreta = "banana"
enforcou = False # definindo variaveis do tipo bool
acertou = False # ambas Falsas
while(not acertou and not enforcou): # usando condições booleanas na função while
    print("Jogando...")
variavel = []
<class 'list'>
Lista é uma sequencia de dados. Documentação
max(variavel)
Maior valor dentro da lista
min(variavel)
Menor valor dentro da lista
len(variavel)
Quantidade de itens na lista
del(variavel[0])
Deleta o item da posição 0
variavel.count()
Conta quantas ocorrencias de um determinado elemento
variavel.index()
Indice da primeira ocorrencia de um determinado elemento
variavel.append("valor a acrescentar")
Acrescenta um valor à lista
variavel.pop()
Remove o ultimo valor da lista ou string, não funciona em tuplas
>>> valores = [] # declarou variavel tipo lista
>>> type(valores)
<class 'list'> 
>>> valores = [0,1,2,3,4] # populou a lista com valores
>>> valores = [0,1,2,3,4]
>>> min(valores) # menor valor
0
>>> max(valores) # maior valor
4
>>> len(valores) # quantidade de itens na lista
5
>>> valores[2] # valor na posição 2
2
>>> 0 in valores # Existe este valor dentro da lista?
True # sim
>>> 8 in valores
False # nao
>>> valores = [ 0, 0, 0, 1, 2, 3, 4] 
>>> print(valores.count(0)) #numero de ocorrencias do elemento 0
3
>>>frutas = ['Banana', 'Morango', 'Maçã', 'Uva', 'Maçã', 'Uva']
>>>print(frutas.index('Uva')) #primeira ocorrencia do elemento uva
3 # o indice começa em 0
>>>print(frutas.index('Melancia')) #primeira ocorrencia do elemento melancia
ValueError: 'Melancia' is not in list
frutas = ['Banana', 'Morango', 'Maçã', 'Uva']
fruta_buscada = 'Melancia'
if fruta_buscada in frutas:
    print(frutas.index(fruta_buscada))
else:
    print('Desculpe, a {} não está na lista frutas'.format( fruta_buscada))
variavel = (x, y, z, w)
A tupla é um tipo de sequencia, porém imutável
Várias funções da lista se aplicam nela
variavel = {valor1, valor2, valor3,}
Um set é uma coleção não ordenada de elementos. Cada elemento é único, isso significa que não existem elementos duplicados dentro do set.
Não funciona como sequencia e não tem indice
variavel.add(valor4)
Adiciona elementos ao Set
variavel = {chave1 : valor1, chave2 : valor2}
print variavel['chave1']
imprime valor1
Se usa em par, temos no lado esquerdo a chave e no lado direito o valor. Isso é importante pois usamos a chave para recuperar um valor
variavel = [condição for alguma_coisa in algum_lugar]
permite utilizar condições para o preenchimento da lista
Input
input("Captura entrada do usuário")
If, else e elif
if (condição):
executa código caso a condição seja verdadeira
else:
executa código caso a condição seja falsa
elif(condição)
else com condição de entrada
if (numero_secreto == chute):
    print("Você acertou!")
else:
    if (chute > numero_secreto):
        print("Você errou! O seu chute foi maior que o número secreto.")
    elif (chute < numero_secreto):
        print("Você errou! O seu chute foi menor que o número secreto.")
Int
int(muda_tipo_da_variavel)
tipo numero inteiro
Exemplo
print("**********************************")  # Decorativo
print("Bem vindo ao jogo de adivinhação")  
print("**********************************")  
  
numero_secreto = 42  
chute_str = input("Digite seu chute ")  
  
print("Você digitou ", chute_str)  # Mostra ao usuario o input dele
  
chute = int(chute_str)  # Tranforma input em string para inteiro
  
if (numero_secreto == chute):  # Se (compara)
    print("Você acertou!")  
else:  
    print("Você errou :(")  
  
print ("Fim do jogo ...")
While e interpolação de strings
while(condição):
codigo a ser executado
"{} {}".format(var1, var2) 
interpolação de strings
usada para formatação de decimais e inteiros também
documentação
print("**********************************")  
print("Bem vindo ao jogo de adivinhação")  
print("**********************************")  
  
numero_secreto = 42  
tentativas = 3  
rodada = 1  
  
while(rodada <= tentativas):  
    print("Tentativa {} de {}".format(rodada, tentativas))  # interpolação de strings
    chute = int(input("Digite seu chute "))  
    acertou = chute == numero_secreto  
    chute_maior = chute > numero_secreto  
    chute_menor = chute < numero_secreto  
  
    print("Você digitou ", chute)  
  
    if (acertou):  
        print("***********************")  
        print("**** Você acertou! ****")  
        print("***********************")  
    else:  
        if(chute_maior):  
            print("****  Você errou :( ****\nSeu chute foi MAIOR que o numero secreto")  
        elif(chute_menor):  
            print("**** Você errou :( ****\nSeu chute foi MENOR que o numero secreto")  
    rodada = rodada + 1  
  
print("Fim do jogo ...") # unica coisa fora do laço while
if e while tem em comum?
Ambos, if e while, possuem uma condição de entrada. A diferença é que o if executa o bloco apenas uma vez, mas o while repete o bloco enquanto a condição for verdadeira.
For e range
for VARIAVEL in [1, 2, 3, 4, 5]:
para variavel nestes valores:  faça algo
for VARIAVEL in range(X,Y):
para variavel em série de valores:  faça algo
range(X, Y, Z)
pode ser definido um intervalo entre os elementos, um step
for não deve ter parênteses.
range não é inclusivo
range(1,3) irá gerar a série 1 e 2 somente.
range possui os seguintes parâmetros:
range(start, stop, [step])
Onde o step é opcional. Como queremos "pular" de 3 em 3, começando com 1 (start) até 10 (stop).
Controle de fluxo com break e continue
break
sai do bloco do laço abruptamente
continue
pula para próxima iteração
Apenas em for ou while
print("**********************************")  
print("Bem vindo ao jogo de adivinhação")  
print("**********************************")  
  
numero_secreto = 42  
tentativas = 3  
  
  
for rodada in range(1, tentativas + 1):  # começo do loop com for
    print("Tentativa {} de {}".format(rodada, tentativas)) 
    chute = int(input("Digite seu chute (1 a 100)"))  
    print("Você digitou ", chute)  
  
    if(chute < 1 or chute > 100):  # teste de numero valido
        print("Digite um numero válido")  
        continue  # conta como se tivesse dado a volta no loop
  
    acertou = chute == numero_secreto  
    chute_maior = chute > numero_secreto  
    chute_menor = chute < numero_secreto  
  
    if (acertou):  
        print("***********************")  
        print("**** Você acertou! ****")  
        print("***********************")  
        break  
    else:  
        if(chute_maior):  
            print("****  Você errou :( ****\nSeu chute foi MAIOR que o numero secreto")  
        elif(chute_menor):  
            print("**** Você errou :( ****\nSeu chute foi MENOR que o numero secreto")  
  
  
print("Fim do jogo ...")
Round
round()
arredonda o valor
Random
import random
no começo do código
random.random()
Gera um numero decimal entre 0 e 1 então precisa ser multiplicado dependendo do propósito
random.randrange(1,101)
gera um numero aleatório nesse range
import random  # importa a biblioteca
  
print("**********************************")  
print("Bem vindo ao jogo de adivinhação")  
print("**********************************")  
  
numero_secreto = random.randrange(1,101)  # gera numero aleatorio no range de 1 a 100
tentativas = 3  
  
  
  
  
for rodada in range(1, tentativas + 1):  
    print("Tentativa {} de {}".format(rodada, tentativas))  
    chute = int(input("Digite seu chute (1 a 100)"))  
    print("Você digitou ", chute)  
  
    if(chute < 1 or chute > 100):  
        print("Digite um numero válido")  
        continue  
  
    acertou = chute == numero_secreto  
    chute_maior = chute > numero_secreto  
    chute_menor = chute < numero_secreto  
  
    if (acertou):  
        print("***********************")  
        print("**** Você acertou! ****")  
        print("***********************")  
        break  
    else:  
        if(chute_maior):  
            print("****  Você errou :( ****\nSeu chute foi MAIOR que o numero secreto")  
        elif(chute_menor):  
            print("**** Você errou :( ****\nSeu chute foi MENOR que o numero secreto")  
  
  
print("Fim do jogo ...")
>>>  3 / 2
1.5
float division retorna números decimais
>>> 3 // 2
1
integer division retorna números inteiros
import random  # importa função random
  
  
print("**********************************")  
print("Bem vindo ao jogo de adivinhação")  
print("**********************************")  
  
numero_secreto = random.randrange(1,101)  
total_de_tentativas = 0  
pontos = 1000  # variavel pontos
  
print("Escolha um nivel de dificuldade")  # intro nivel
print("(1) Fácil | (2) Médio | (3) Difícil")  # legenda nivel
  
nivel = int(input("Digite o nivel"))  # input do nivel escolhido pelo usuario
  
if (nivel == 1):  # define total de tentativas para:
    total_de_tentativas = 20  # nivel 1 ou fácil
elif(nivel == 2):  # else com condição
    total_de_tentativas = 10  # nivel 2 ou médio
else:  # sem condição
    total_de_tentativas = 5  # 3 ou dificil
  
  
for rodada in range(1, total_de_tentativas + 1):  
    print("Tentativa {} de {}".format(rodada, total_de_tentativas))  
    chute = int(input("Digite seu chute (1 a 100)"))  
    print("Você digitou ", chute)  
  
    if(chute < 1 or chute > 100):  
        print("Digite um numero válido")  
        continue  
  
    acertou = chute == numero_secreto  
    chute_maior = chute > numero_secreto  
    chute_menor = chute < numero_secreto  
  
    if (acertou):  
        print("*********************************************")  
        print("***** Você acertou e fez {} pontos! *****".format(pontos))  # quantos pontos usuário fez ao ganhar
        print("*********************************************")  
        break  
    else:  
        if(chute_maior):  
            print("****  Você errou :( ****\nSeu chute foi MAIOR que o numero secreto")  
        elif(chute_menor):  
            print("**** Você errou :( ****\nSeu chute foi MENOR que o numero secreto")  
            pontos_perdidos = abs(numero_secreto - chute)  
            pontos = pontos - pontos_perdidos  
  
print("Fim do jogo ...")
Definir funções e importar arquivos
def nome_da_funcao():
todo o código identado faz parte da função, pode chamar outra função
nome_da_funcao()
chama a nossa função em qualquer lugar do arquivo
def soma(a, b):
 return a + b
A função também pode receber parâmetros e retornar valores
import nome_arquivo
importa igual uma biblioteca
nome_arquivo.nome_da_funcao()
Chama a função criada em outro arquivo
def jogar():  # declara a função jogar que contem todo o nosso código, precisa ser chamada para executar
    print("**********************************")  
    print("****Bem vindo ao jogo de forca****")  
    print("**********************************")  
  
  
    print("Fim do jogo ...")
import forca  # chama o arquivo forca
import adivinhacao  # chama o arquivo adivinhacao
  
  
print("**********************************")  
print("*********Escolha seu jogo*********")  
print("**********************************")  
  
print("(1) Forca | (2) Adivinhação")  # legenda de jogos
  
jogo = int(input("qual jogo?"))  # input do usuário
  
if (jogo == 1):  # teste de qual jogo rodar
    print("~~~Jogando Forca~~~")  
    forca.jogar()  # chama a função jogar definida no arquivo forca
elif(jogo == 2):  
    print("~~~Jogando Adivinhação~~~")  
    adivinhacao.jogar() # chama a função jogar dentro do arquivo adivinhacao
# adivinhacao.py
import random
def jogar():
    # código omitido
if (__name__ == "__main__"): # modulo se chama automáticamente
    jogar()
Funções da string
nome_da_variavel.find("")
encontra a primeira ocorrência do texto que estamos procurando e devolve o índice.
o índice começa com 0.
nome_da_variavel.find("", 1)
aceita um segundo parâmetro, que define a partir de qual posição gostaríamos de começar
nome_da_variavel.lower()
todas as letras da string em minusculo
nome_da_variavel.upper()
todas as letras da string em maiusculo
nome_da_variavel.casefold()
ignora capitalização na palavra
nome_da_variavel.strip()
remove todos os espaços
find, startswith ou endswith
verificam se há substrings
>>> palavra = "aluracursos"
>>> palavra.find("a",1) #procurando "a" a partir da segunda posição 
4 # resultado
Abrir, escrever e fechar arquivos
variavel = open(palavras.txt, "w/r/a")
abre o arquivo
variavel.write("Alguma coisa")
escreve no arquivo
variavel.read()
Retorna o arquivo inteiro em uma unica linha
variavel.readLine()
Lê linha por linha
variavel.close()
fecha o arquivo
w para write - sobrescreve o arquivo
r para read
a para append - adicionar conteúdo
b para binário
rb para imagens
Terminando o codigo
transformar código em funções com nomes descritivos para maior legibilidade
deixar as funções juntas no fim ou começo do arquivo
import random # importa a função random 
def jogar(): # define a função jogar
    imprime_mensagem_abertura() # chama a função que imprime a tela de inicio
    palavra_secreta = carrega_palavra_secreta() # variavel palavra_secreta chama a função que carrega uma palavra aleatoria 
    letras_acertadas = inicializa_letras_acertadas(palavra_secreta) # chama a função mas a alimenta com um paramentro
    print(letras_acertadas) 
    enforcou = False # comeca sem estar enforcado, nem ter acertado e 0 erros
    acertou = False
    erros = 0
    while(not enforcou and not acertou):
        
        chute = pede_chute() 
        
        if(chute in palavra_secreta):
            marca_chute_correto(chute, letras_acertadas, palavra_secreta) # outra função que dá parametros
        else:
            erros += 1 # incrementa em 1
            desenha_forca(erros)
        enforcou = erros == 7
        print("Você tem {} tentativas até ser enforcado".format(7 - erros))
        acertou = "_" not in letras_acertadas
        print(letras_acertadas)
    if(acertou):
        imprime_ganhador()
    else:
        imprime_perdedor(palavra_secreta)
def imprime_mensagem_abertura():
    print("**********************************")
    print("****Bem vindo ao jogo de forca****")
    print("**********************************")
def carrega_palavra_secreta():
    palavras = [] # cria uma lista para a palavra
    with open("palavras.txt") as arquivo: # abre o arquivo
        for linha in arquivo: # a cada linha do arquivo
            linha = linha.strip() # tira os espaços e os /n
            palavras.append(linha) # adiciona uma palavraa a linha
    numero = random.randrange(0, len(palavras)) # gera um numero aleatorio dentro da quantidade de palavras que estavam no arquivo
    palavra_secreta = palavras[numero].upper() # gera uma e a coloca em caps lock
    return palavra_secreta # retorna a palavra
    
def inicializa_letras_acertadas(palavra_secreta):
    return ["_" for letra in palavra_secreta] # gera "_" a cada letra para o usuario
def pede_chute():
    chute = input("Chute uma letra ").strip().upper() # tira espaços e deixa em caps lock
    return chute
def marca_chute_correto(chute, letras_acertadas, palavra_secreta):
    index = 0 # index define a posição 0
    for letra in palavra_secreta: # a cada letra da palavra
        if (chute == letra): # se usuario acertar
            letras_acertadas[index] = letra # substitui o "_" pela letra
        index += 1 # aumenta o index para que esse loop rode em todas as letras possiveis
def desenha_forca(erros): # imprime um pouquinho a cada erro
    print("  _______     ")
    print(" |/      |    ")
    if(erros == 1):
        print(" |      (_)   ")
        print(" |            ")
        print(" |            ")
        print(" |            ")
    if(erros == 2):
        print(" |      (_)   ")
        print(" |      \     ")
        print(" |            ")
        print(" |            ")
    if(erros == 3):
        print(" |      (_)   ")
        print(" |      \|    ")
        print(" |            ")
        print(" |            ")
    if(erros == 4):
        print(" |      (_)   ")
        print(" |      \|/   ")
        print(" |            ")
        print(" |            ")
    if(erros == 5):
        print(" |      (_)   ")
        print(" |      \|/   ")
        print(" |       |    ")
        print(" |            ")
    if(erros == 6):
        print(" |      (_)   ")
        print(" |      \|/   ")
        print(" |       |    ")
        print(" |      /     ")
    if (erros == 7):
        print(" |      (_)   ")
        print(" |      \|/   ")
        print(" |       |    ")
        print(" |      / \   ")
    print(" |            ")
    print("_|___         ")
    print()
def imprime_ganhador():
    print("Parabéns, você ganhou!")
    print("       ___________      ")
    print("      '._==_==_=_.'     ")
    print("      .-\\:      /-.    ")
    print("     | (|:.     |) |    ")
    print("      '-|:.     |-'     ")
    print("        \\::.    /      ")
    print("         '::. .'        ")
    print("           ) (          ")
    print("         _.' '._        ")
    print("        '-------'       ")
def imprime_perdedor(palavra_secreta):
    print("(Ops), você foi enforcado!")
    print("A palavra era {}".format(palavra_secreta))
    print("    _______________         ")
    print("   /               \       ")
    print("  /                 \      ")
    print("//                   \/\  ")
    print("\|   XXXX     XXXX   | /   ")
    print(" |   XXXX     XXXX   |/     ")
    print(" |   XXX       XXX   |      ")
    print(" |                   |      ")
    print(" \__      XXX      __/     ")
    print("   |\     XXX     /|       ")
    print("   | |           | |        ")
    print("   | I I I I I I I |        ")
    print("   |  I I I I I I  |        ")
    print("   \_             _/       ")
    print("     \_         _/         ")
    print("       \_______/           ")
if(__name__ == "__main__"): # função para abrir o jogo mesmo que diretamente
    jogar()
Data Structures
Listas
idade1 = 39
idade2 = 30   # Declaração de variaveis uma a uma
idade3 = 27
idade4 = 18
print(idade1, idade2, idade3, idade4)
idades = [39, 30, 27, 18] # Declaração de variaveis em lista
print(idades)
- Costuma ser trabalhada sem misturar tipos de valor
 - Mais orientada a objetos
 
type(var)
- Retorna o tipo da variável
 
len(var)
- Retorna a quantidade de valores na variável idades
 
.sort(*, key=None, reverse=False)
- Ordena a lista no local[1]
 
Posições na lista
idades[0] # qual a idade na posição 0?
idades
print(idades[0])
print(idades[1])
print(idades[2])
print(idades[3])  # Chamando as posições da nosssa lista individualmente
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
  
IndexError: list index out of range
- Erro de quando não existe nada na posição que a gente chama
 
list.append(x)
- Adicionar valor, fica no fundo da lista
 .append()acrescenta apenas mais 1 valor:
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
TypeError: append() takes exactly one argument (2 given)
- Se submetida uma lista de valores ele acrescenta uma lista dentro da lista
 
list.remove(x)
- O remove vai apagar a primeira aparição de certo elemento da lista
 - Quando o valor não está na lista dá erro:
 
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
ValueError: list.remove(x): x not in list
- Podemos perguntar se o valor está em idades antes de executar coisas para ele, dessa forma não dá erro
 
list.insert(i,x)
- insere o item 
xna posiçãoi 
idades.insert(0,20)
idades
idades = [20, 39, 18]
idades
list.extend([ ])
idades = [20, 39, 18]
idades.extend([27, 19])
idades
>[20, 39, 18, 27, 19]
- Estende a quantidade de valores
 - Lhe damos uma lista e a acrescenta a outra lista
 
List compreheension
Aplicando filtros e comparações
- Duas formas diferentes de aplicação de operação em uma mesma sequencia:
 
idades_no_ano_que_vem = [ ] 
for idade in idades:
  idades_no_ano_que_vem.append(idade+1)
idades_no_ano_que_vem
idades_no_ano_que_vem = [(idade+1)for idade in idades]
idades_no_ano_que_vem
Filtragens
for, in, if
>, < …
- Atenção com a legibilidade do código, por vezes é melhor escrever uma função para que fique mais legível seu funcionamento.
 
Mutabilidade das listas
- A mudança de código por diversos desenvolvedores
 - Usar listas mutáveis pode trazer resultados inesperados
 - Não é recomendável colocar uma lista como parâmetro 
default, e, sim,Nonee verificar se éNone, mas isso também se estende para outros objetos que você pode usar como parâmetro de valor opcional, que é mutável. Portanto, é sempre bom ter esse cuidado, listas e objetos que são mutáveis. 
Tuplas
- A tupla é imutável mas os objetos dentro dela não são
 - Lista de tuplas
 - Tuplas de listas
 - Desempacotar | Unpacking de tuplaslink:
 
idades = [15, 87, 32, 65, 56, 32, 49, 37]  
  
for i in range(len(idades)):  
  print(i, idades[i])  
  
enumerate(idades) # lazy  
  
list(range(len(idades))) # forçou a geração de valores  
  
list(enumerate(idades))  # Gerou tuplas pois a posição tem significado"""  
  
for indice, idade in enumerate(idades): # unpacking da nossa tupla  
  print(indice, "x", idade)  
  
usuarios =[  
    ("Marta", 29, 1993),  
    ("Eduardo", 33, 1989),  
    ("Trator", 6, 2016)  
]  
  
for nome, idade, nascimento in usuarios: # desempacotar - legivel, explicito  
  print(nome)  
  
for nome, _, _ in usuarios: # desempacotar ignorando o resto  
  print(nome)
class nome:
__eq__
class ContaSalario: 
  def __init__(self, codigo):
      self._codigo = codigo
      self._saldo = 0
  def __eq__(self, outro): # declara igualdade
    return self._codigo == outro._codigo
  def deposita(self, valor):
      self._saldo += valor
  def __str__(self):
      return "[>>Codigo {} Saldo {}<<]".format(self._codigo, self._saldo)
__lt__
class ContaSalario:
  def __init__(self, codigo):
    self._codigo = codigo
    self._saldo = 0
  def __eq__(self, outro):
    if type(outro) != ContaSalario:
      return False
  def __lt__(self, outro):
    return self._saldo < outro._saldo
  def deposita(self, valor): # assim não quebrou o enclapsulamento, lida com o saldo dentro da função conta
    self._saldo += valor
  def __str__(self):
    return "[>>Codigo {} Saldo {}<<]".format(self._codigo, self._saldo)
total ordering | functools
- Faz as outras operações a partir do que a gente declarou
 
from functools import total_ordering
@total_ordering # notação antes da area que usa total ordering
Array (evitaremos usar)
import array as array
arr.aray('d', [1, 3.5])
- Armazenar eficientemente valores do tipo declarado
 
Numpy
!pip install numpy
import numpy as np
numeros = np.array([1, 3.5])
- Precisa ser importado
 - Se chama por np para executar
 - Mais funções disponiveis para os arrays
 - Documentação
 
Método Abstrato
from abc import ABCMeta, abstractmethod
class Conta(metaclass=ABCMeta):
@abstractmethod
[02:56] Então, a sacada é: se você tem um método que você quer definir na sua classe mãe e que todo mundo seja forçado a implementar, coloque um @abstractmethod nela, defina ela como uma classe abstrata através da meta classe ABCmeta.
[03:12] Então dessa maneira, forçamos para que o erro apareça na hora que você tem que instanciar, que é muito mais cedo do que o momento que você tenta chamar o método, porque você instancia em algum momento e os métodos só são chamados bem depois, não sabemos quando.
[03:30] Agora, se o erro acontecendo logo que você tentou instanciar, você consegue pegar mais cedo esse erro. Essa é a vantagem, quando eu tente instanciar eu já descobri que a classe não está completa. Então, eu queria refinar esse ponto do nosso código.
Built in
isinstance(object, classinfo)
Return True if the object argument is an instance of the classinfo argument, or of a (direct, indirect, or virtual) subclass thereof. Documentação
enumerate(iterable, start=0)
- Retorna um objeto numerado
 - link
 
sorted(iterable, /, *, key=None, reverse=False)
attrgetter
from operator import attrgetter
  for conta in sorted(contas, key=attrgetter("_saldo")):
  print(conta)
- lida com varios atributos