terça-feira, 31 de março de 2020

Módulos em Python

Módulos em Python


Os módulos são blocos de códigos separados do programa principal em arquivos separados. Com módulos é possível dividir o programa em blocos (ou módulos). Os módulos são muito úteis para funções e classes que serão usadas em muitos programas diferentes. Assim não é preciso reescrever o mesmo código basta, simplesmente, adicionar o módulo ao seu programa.

Criando um módulo

Para criar um módulo é só criar um novo arquivo no editor texto de sua preferência e salvar com .py.
Exemplo
def show(string):
  print(string)
Salve o arquivo como modulo.py

Usando um módulo

ara usar um módulo primeiro precisamos avisar ao compilador python que vamos usar um. E isso é feito com a palavra reservada import. Com o nosso módulo pronto, e salvo na mesma pasta do nosso programa, é só chamar a função do módulo. Chamar uma função de um módulo é simples: nomedomódulo.função(). O nome do módulo é o mesmo do arquivo. No nosso exemplo anterior salvamos o arquivo com o nome de modulo.py.
Exemplo
import modulo
modulo.show('Meu módulo está funcionando')

Variáveis nos módulos

Além das classes e funções também é possível acessar variáveis declaradas dentro de um módulo.
Exemplo
lista = ['Arquivo não encontrado', 'Procurando', 'Erro fatal']
Exemplo
import modulo
print(modulo.lista[1])

Criando um alias de um módulo

Um alias é um apelido para o modulo. Às vezes e interessante mudar o nome do modulo para tornar o nome menor. Com um alias do módulo é só trocar o nome do módulo pelo alias.
Exemplo
import modulo as mdl
print(mdl.lista[1])

Importando partes de um módulo

Algumas vezes precisamos apenas de uma classe ou função de um módulo, utilizando import o módulo completo é carregado no nosso programa deixando ele “pesado”. Para contornar isso no python é possível importar apenas uma parte do módulo com a palavra reservada from.
Exemplo
# Salve em um arquivo diferente
carros = ['Fiat Toro', 'Toyota Hilux', 'Ford Fiesta']
motos = ['Honda CB1000R', 'Honda CRF', 'Yamaha Drag Star']

from modulo import carros
print(carros[0])
Note que importando apenas a lista termos acesso direto a ela, sem precisar dizer de que módulo essa lista pertence.

segunda-feira, 30 de março de 2020

Scope de uma variável em Python

Scope de uma variável em Python


Quando uma variável é criada dentro de uma função essa variável só pode ser acessada dentro dessa função. Para outras funções essa variável não existe.

Variável local

Uma variável criada dentro de uma função existe somente dentro dessa função. Isso quer dizer que para alterar o valor dessa variável o código deve pertencer a mesma função da variável.
Exemplo
def funcao():
  a = 42
  if 'a' in locals():
    print('A variável a existe!')

if 'a' in locals():
  print('A variável a existe!')
else:
  print('A variável a não existe')

funcao()
As funções dentro de funções podem acessar as variáveis da mesma função a qual a função pertence. Imagine que a função e a variável estão no mesmo nível. Por isso a função pode “ver” a variável. A variável está no seu scope.
Exemplo
def foo():
  a = 42
  def mostrar():
    print(a)
  mostrar()

foo()

Variável global

Uma variável global pode ser acessada em qualquer parte do programa. Elas podem ser acessadas dentro de funções e classes. As variáveis globais ao visíveis em qualquer parte do programa.
Exemplo
# scope global
answer = 42

def ask():
  # scopo local
  a = 'O significado da vida, do universo e tudo mais é '
  print(a + str(answer))

ask()

Palavra reservada global

Também é possível declarar uma variável dentro de uma função ou classe como uma variável global. Para isso é utilizada a palavra reservada global. Com essa declaração a variável passar ater um scope global, podendo ser acessada por todo o programa.
Exemplo
def foo():
  global a
  a = 42
  print(a)

foo()

# fora do sope da função foo
print(a)
Repare que nesse exemplo a função foo deve ser chamada antes de tentar acessar o valor de a. Enquanto a função foo não for executada a variável global a não existe. Somente a partir da execução da função é que a variável global passa a existir.

Variáveis com o mesmo nome

Normalmente não é permitido duas variáveis com o mesmo nome. Mais duas variáveis com o mesmo nome e com scope diferentes isso é possível. Como uma variável local não existe para um bloco de código diferente uma variável é independente da outra.
Exemplo
# scope global
a = 8
def foo():
  # scope local
  a = 80
  print(a)

foo()

print(a)
Quando a variável a é acessada dentro da função foo o seu valor será 80, pois a função procura a variável no scope local e só depois no scope global.

domingo, 29 de março de 2020

Iteradores em Python

Iteradores em Python


Os iteradores em python são objetos que contêm n elementos. Com objetos que podem ser iterados é possível acessar cada elemento, do primeiro ao ultimo. Temos como exemplo de objetos que podem ser iterados as listas, as tuplas, os sets, etc. Todos os objetos que podem ser iterados fazem uso de dois métodos: __iter__() e __next__().
Os objetos que podem ser iterados são contêineres que tem um numero para cada elemento no objeto. Com esse numero é possível saber a posição do elemento no objeto. A função iter retorna o iterador de um objeto e a função next coloca mais um na contagem. Assim obtendo o endereço do próximo elemento do objeto.
Exemplo
lista = ['Abacaxi', 'Banana', 'Manga']
iterador = iter(lista)

print(next(iterador))
print(next(iterador))
print(next(iterador))
As strings também são objetos iteráveis.
Exemplo
string = 'Melão'
iterador = iter(string)

print(next(iterador))
print(next(iterador))
print(next(iterador))
print(next(iterador))
print(next(iterador))

Loop for

O loop for como você já deve ter percebido, cria um objeto iterável e executa a função next.
Exemplo
string = 'Melão'
for i in string:
  print(i)

Criando uma classe/objeto iterável

Você também pode criar o seu objeto iterável. Para isso é preciso que essa nova classe tenha os métodos iter e next.
Exemplo
class ClassIterador:
  def __iter__(self):
    self.a = 1
    return self

  def __next__(self):
  b = self.a
  self.a += 1
  return b

itrd = ClassIterador()
iterador = iter(itrd)

print(next(iterador))
print(next(iterador))
print(next(iterador))
Nesse exemplo se usássemos um loop for nosso programa nunca teria fim. Para por um fim ao incremento podemos utilizar o StopIteration.
Exemplo
class ClassIterador:
  def __iter__(self):
    self.a = 1
    return self

  def __next__(self):
    if self.a <= 10:
      b = self.a
      self.a += 1
      return b
    else:
      raise StopIteration

itrd = ClassIterador()
for i in itrd:
  print(i)

Herança em Python

Herança em Python


A herança é utilizada na programação orientada a objetos para evitar códigos duplicados. Com a herança uma classe pode receber todos os métodos e propriedades de outra classe, evitando assim código duplicado. A classe que está sendo herdada é chamada de classe base ou pai. E a classe que recebe essa herança e chamada de classe filho.

Criando uma classe com herança

Toda classe pode receber outra classe como herança. Primeiro vamos criar a classe base e depois a classe que vai receber a herança da classe base.
Exemplo
class classeBase:
  def __init__(self, nome, u_nome):
    self.nome = nome
    self.u_nome = u_nome

  def shownome(self):
    print(self.nome)

pessoa = classeBase('Mickey', 'Mouse')
pessoa.shownome()
A classe que vai receber a classe base como herança recebe a classe base na sua definição, entre parênteses.
Exemplo
# Classe base
class classeBase:
  def __init__(self, nome, u_nome):
    self.nome = nome
    self.u_nome = u_nome

  def shownome(self):
    print(self.nome)

# Classe herdeira da classe base
class classeFilho(classeBase):
  pass

pessoa = classeFilho('Mickey', 'Mouse')
pessoa.shownome()
Note que não codificamos nada na classeFilho mais ela recebeu como herança a classeBase por isso ela tem todos os seu métodos e propriedades.
A palavra reservada pass serve para o compilador python não apresentar um erro. A nossa classe filho não faz nada, sem a palavra reservada pass o compilador iria esperar alguma coisa, como um atributo, um método etc. Com a palavra pass o compilador não espera nada, ele pula para a próxima linha de código.

Função init

Quando uma classe recebe a herança de outra classe a função init da classe filho é a mesma da classe base. Para mudar isso é só criar uma classe init na classe que recebeu a herança.
Exemplo
class classeBase:
  def __init__(self):
    print('Classe base iniciada...')

class classeFilho(classeBase):
  def __init__(self):
    print('Classe filho iniciada...')

pessoa = classeFilho()
Nesse exemplo, a função init da classe base foi subscrita. Para a função init, da classe base, ser executada a função precisa ser chamada da classe filho.
Exemplo
class classeBase:
  def __init__(self):
    print('Classe base iniciada...')

class classeFilho(classeBase):
  def __init__(self):
    classeBase.__init__(self)
    print('Classe filho iniciada...')

pessoa = classeFilho()

sábado, 28 de março de 2020

Classes e Objetos em Python

Classes e Objetos em Python


Python é uma linguagem de programação orientada a objetos. Isso quer dizer que quase tudo na linguagem tem métodos e propriedades.
A classe é como um molde onde vários objetos são criados, todos com as mesmas características. Um objeto sempre pertence a alguma classe.

Criando uma classe

Para criar uma classe em python é utilizada a palavra reservada class.
Exemplo
class Umaclasse:
  nome = 'Uchiha Itachi'
Nesse exemplo criamos uma classe com a propriedade nome.

Criando um objeto

Agora que já criamos uma classe podemos criar um objeto utilizando esse “molde”.
Exemplo
class Umaclasse:
  nome = 'Uchiha Itachi'

classe = Umaclasse()
print(classe.nome)

Função __init__()

Toda classe tem a função __init__(), até a nossa classe que acabamos de criar. Essa função é criada automaticamente quando criamos uma classe. Mesmo ela não aparecendo no nosso código ela está lá, e é executada toda fez que é criado um novo objeto pertencendo a nossa classe.
Mesmo essa função sendo adicionada no nosso código automaticamente, nos podemos modifica-la para fazer algo realmente útil. Essa função é utilizada para definir as propriedades dos nossos objetos.
Exemplo
class personagem:
  def __init__(self, nome, idade):
    self.nome = nome
    self.idade = idade

personagem01 = personagem('Itachi Uchiha', 21)
personagem02 = personagem('Kakashi Hatake', 31)

print(personagem01.nome)
print(personagem01.idade)

print(personagem02.nome)
print(personagem02.idade)
Repare que em nenhum momento chamamos a função __init__() e mesmo assim ela foi executada. Isso acontece porque quando um objeto é criado a função init é executada, sempre.
O parâmetro self é apenas para identificar o próprio objeto. Você pode ser a linha três (self.nome = nome) assim: a propriedade nome desse objeto será igual á nome (argumento recebido). O nome self pode ser trocado por outro, contanto que seja o primeiro argumento da função init.
Exemplo
class personagem:
  def __init__(primeiro_argumento, nome, idade):
    primeiro_argumento.nome = nome
    primeiro_argumento.idade = idade

personagem01 = personagem('Itachi Uchiha', 21)

print(personagem01.nome)
print(personagem01.idade)

Propriedades dos objetos

As propriedades são como as características de um objeto. Por exemplo, o personagem Kakashi Hatake tem o cabelo branco, um olho vermelho, é quase sem chakra, é humilde (copiou mais de mil justsus mais só usa alguns). Essas são as características do personagem. Podemos dizer que o objeto “Kakashi Hatake” é da classe pessoa, tem uma cabeça, dois braços, etc. Pertencer à mesma classe quer disser que os objetos dessa classe têm as mesmas características, mais com valores diferentes.
Exemplo
class pessoa:
  def __init__(self, nome, idade, cor_olho, cabelo = 'Preto'):
    self.nome = nome
    self.idade = idade
    self.cor_olho = cor_olho
    self.cabelo = cabelo

Kakashi_Hatake = pessoa('Kakashi Hatake', 31, 'Vermelho', 'Cinza')
Itachi_Uchiha = pessoa('Itachi Uchira', 21, 'Vermelho')
Sakura_Haruno = pessoa('Sakura Haruno', 17, 'Verde', 'Rosa')

print(Kakashi_Hatake.nome)
print(Kakashi_Hatake.idade)
print(Kakashi_Hatake.cor_olho)
print(Kakashi_Hatake.cabelo)

Métodos dos objetos

Os métodos são funções dentro de uma classe. Um objeto, além de ter características ele tem funções (métodos). Todo objeto tem suas características e suas funções. Um personagem no mundo de Naruto, por exemplo, pode andar, correr, lançar jutsus. Podemos codificar essas funções (métodos) no nosso código.
Exemplo
class pessoa:
  def __init__(self, nome, idade, cor_olho):
    self.nome = nome
    self.idade = idade
    self.cor_olho = cor_olho

  def lancarJutsu(self, jutsu):
    print('Lançando jutsu ' + jutsu)

  andando = False

Itachi_Uchiha = pessoa('Itachi Uchira', 21, 'Vermelho')

print(Itachi_Uchiha.nome)
Itachi_Uchiha.lancarJutsu('Tsukuyomi')
Itachi_Uchiha.andando = True
print(Itachi_Uchiha.andando)
Um dos objetivos da programação orientada a objetos é o encapsulamento. Com o encapsulamento as variáveis e funções ficam unidas, independentes do resto do programa. Assim podemos criar um programa em blocos e utilizar esses blocos em outros programas com pouca alteração, e às vezes nenhuma.

Matrizes em Python

Matrizes em Python


Matriz é uma variável com múltiplos valores do mesmo tipo. Pense em uma matriz como se fosse uma lista que só aceita valores do tipo da matriz. Por exemplo, uma matriz do tipo inteiro só eira receber valores do tipo inteiro. Python não tem suporte a matrizes, mais a lista pode ser usada no seu lugar. Utilizamos como exemplo o tipo inteiro mais é possível ter uma matriz do tipo string, de ponto flutuante, e até mesmo de matrizes.
Exemplo
matriz = ['Berlim', 'Tokyo', 'New York']
A matriz é utilizada para guardar vários dados na mesma variável. Esses dados devem ser relacionados, ou então não faria sentido utilizar uma matriz. Você não colocaria o valor gasto por um funcionário, em uma viagem, na mesma matriz onde está o valor do seu salário. Os valores de uma matriz devem ser relacionados para tornar o seu acesso mais rápido. É mais fácil lembrar-se de um nome de variável do que varias.
Um exemplo seria o de vários vendedores que têm despesas de viagem e ganhão por venda. É bem mais pratico armazenar esses dados em uma matriz do que criar uma variável para cada novo dado.
Exemplo
despesas_de_viagem = [86.8, 97.9, 123.2, 95.6, 76.7]
salario = [56.0, 67.6, 99.5, 68.9, 59.1]
for i in range(5):
  print('Colaborador ' + str(i) + '\n')
  print('Despesa de viagem: R$ ' + str(despesas_de_viagem[i]) + '\n')
  print('Salário do dia: R$ ' + str(salario[i]) + '\n')
  print('##################################')

sexta-feira, 27 de março de 2020

Funções lambda em Python

Funções lambda em Python


Toda função em python tem um nome, com exceção da lambda. As funções lambda são funções pequenas que não são nomeadas. As funções lambda podem ser vários argumentos mais apenas uma expressão.
Exemplo
z = lambda a : a + 10
print(z(5))
Uma função lambda sempre retorna o resultado da expressão.
As funções lambda são mais usadas dentro de outras funções, para não ter que criar outra função.
Exemplo
def dobro(n):
  return lambda a : a * n

# define o valor de a da função lambda
odobro = dobro(2)

# multiplica 10 pelo valor de a da função lambda
print(odobro(10))
Repare que o odobro se torna uma função lambda.

quarta-feira, 25 de março de 2020

Funções em Python

Funções em Python


As funções são blocos de códigos que podem ser reaproveitados no mesmo programa ou em outros. Um exemplo de função, que utilizamos muito, é a print e type. Uma função pode receber um valor, aplicar alguma operação nesse valor e retornar outro valor. A função também pode não receber valor nenhum, essa seria uma função sem parâmetros.

Criando uma função em python

As funções em python são declaradas com a palavra reservada def. Vamos criar uma função simples que imprime na tela “print dentro da função”.
Exemplo
def imprime():
  print('print dentro da função')

# chama a função print passando a string 'print fora da função' como parâmetro
print('print fora da função')
# chama nossa função sem parâmetros
imprime()
Se você retirar o ‘imprime()’ do código a função imprime() não será executada.

Parâmetros e argumentos

Parâmetros e argumentos são as mesmas coisas, o dado passado para a função. Esse dado pode ser uma string, uma matriz, um numero etc.

Passando parâmetros para uma função

Os parâmetros, passados para uma função, vão sempre entre os parênteses. A quantidade de parâmetros depende dos dados necessários para a função fazer o seu trabalho. Por exemplo: Uma função para imprimir um texto na tela. Essa função só vai precisar de um argumento: O texto que será impresso. Uma função para somar dois valores: Essa função vai precisar de dois valores. Os parâmetros são separados por vírgulas.
Exemplo
def imprime(a):
  # imprime o valor passado para a função imprime
  print(a)

def soma(a, b):
  return a + b # retorna a soma de a mais b

# chama a função imprime
imprime('Uma mensagem!!!')
# chama a função imprime passando
# o resultado da função soma
imprime(soma(2, 5))

Número de parâmetros indefinidos

Vamos imaginar que precisamos que uma função receba o nome de todos os filhos de uma pessoa. Você não conhece essa pessoa. Você não sabe quantos filhos ela tem. Como colocar o numero certo de parâmetros? Simples, é só colocar um * antes do parâmetro do nome do parâmetro. E desse modo só precisamos de um argumento. Esse parâmetro funcionara como uma lista de argumentos.
Exemplo
def imprimeFilhos(*filhos):
  for i in filhos:
    print(i)

imprimeFilhos('Ana', 'Paulo', 'Joana', 'Avril')

Ordem dos parâmetros

Vamos supor que, por algum motivo, você quer passar os argumentos de uma função de uma sequencia diferente da que a função está pedindo. Na nossa função de soma, primeiro passamos o valor de a e depois de b. E se quiséssemos passar primeiro o valor de b e depois o de a? É só na chamada da função especificar a qual parâmetro esse valor será atribuído.
Exemplo
def soma(a, b):
  return a + b

print(soma(b = 5, a = 8))

Dicionário na função

Podemos passar um dicionário para uma função apenas passando um dicionário como parâmetro. Mais existe outro jeito: definindo o dicionário na chamada da função.
Exemplo
def my_function(**nomes):
  print('Meu nome do meio é ' + nomes['n_meio'])

my_function(p_nome = 'Beatriz', u_nome = 'Alves', n_meio = 'Lima')

Valor padrão de um parâmetro

Um parâmetro pode ter um valor padrão. Esse valor padrão será usado se no parâmetro não for passado um valor.
Exemplo
def city(anos, cidade = 'São Paulo'):
  print('Eu tenho ' + str(anos)+ ' anos e moro em ' + cidade)

city(26, 'Tokyo')
city(12, 'New York')
city(23)
city(25, 'Moscou')

Retornando valores

As funções podem receber parâmetros e retornar um valor. Esse valor pode ser um numero, uma lista ou uma string.
Exemplo
def soma(a, b):
  return a + b

def cria_lista(*palavras):
  return list(palavras)

def city(anos, cidade):
  return 'Eu tenho ' + str(anos)+ ' anos e moro em ' + cidade

print(soma(3, 7))
print(cria_lista('praia', 'Sol', 'neve', 'outono'))
print(city(26, 'Tokyo'))

Função recursiva

Uma função recursiva é uma função que chama ela mesma.
Exemplo
def decrementa(a):
  a -= 1
  print(a)
  if a > 0:
    decrementa(a)

decrementa(50)
Obs:  Não se esqueça da indentação.

segunda-feira, 23 de março de 2020

Loop for em Python

Loop for em Python


O loop for percorre uma lista, uma tuple, uma string etc. Em outras linguagens de programação o laço for não percorre um objeto iterável. Ele é utilizado para repetir um bloco de código um numero n de vezes. E rotineiramente o loop for em outras linguagens de programação é utilizado para percorre uma string, uma matriz etc. Por isso o loop for no python é um grande avanço, já que a linguagem facilita esse trabalho, de percorrer um objeto iterável.
Exemplo
a = ['Abacaxi', 'Kiwi', 'Melão']
for x in a:
  print(x)

Loop através de uma string

Uma string é uma sequencia de caracteres, por isso é possível utilizar o loop for com uma string.
Exemplo
for x in 'Acervo Lima':
  print(x)

Parando o loop no antes do fim

É possível para o loop antes de chegar ao fim com a palavra reservada break.
Exemplo
a = ['Abacaxi', 'Banana', 'Maçã', 'Melão', 'Goiaba']
for i in a:
if i == 'Maçã':
  break
print(i)

Pulando uma execução

Uma execução do laço for pode ser suprimida com a palavra reservada continue.
Exemplo
a = ['Abacaxi', 'Banana', 'Maçã', 'Melão', 'Goiaba']
for i in a:
if i == 'Maçã':
  continue
print(i)

Função range()

A função range retorna um objeto da classe range. O numero de elementos retornados depende do parâmetro passado para a função. Para criar um objeto range com 10 elementos, passe o numero 10 como parâmetro.
Exemplo
for i in range(10):
  print(i)
O index do objeto range começa, por default, em 0. Para alterar esse valor podemos passar dois valores para a função range. O primeiro valor é o numero de onde o index deve começar e o segundo é o ultimo numero do index. A quantidade total de elementos de um range pode ser obtida com uma subtração simples: o segundo valor menos o primeiro.
Exemplo
for i in range(3, 10):
  print(i)
Por padrão a função range incrementa o valor do próximo elemento com mais um, podemos mudar esse valor adicionando mais um numero a lista de parâmetros.
Exemplo
for i in range(1, 20, 3):
  print(i)
Nesse exemplo, os elementos começam do numero 1 e vão aumentando de 3 em 3: 1+3=4; 4+3=7; 7+3=10 ... 16+3=19.

domingo, 22 de março de 2020

Loop while em Python

Loop while em Python


Os loops são usados para executar tarefas repetidas. Imagine que você precisa imprimir na tela do numero 1 até o 50, sem os loops seria necessário digitar muitos print, com os loops isso fica mais fácil.
Exemplo
i = 0
while i <= 50:
  print(i)
  i += 1
No exemplo acima a condição para o valor de i ser impresso na tela é que o valor de i seja menor ou igual a 50. Enquanto essa condição não for atendida o código dentro do bloco while será executado indefinidamente. Por essa razão incrementamos a variável de controle (i) dentro do bloco. Dessa forma a cada execução a condição de saída do loop (i menor ou igual a 50) se torna mais próxima.

Loop infinito

Em alguns casos não sabemos em quantas execuções do loop a condição será atendida. Por exemplo: você precisa que o usuário digite a tecla f. Em quantas vezes essa condição será atendida? Você não sabe. O usuário pode digitar um M em vez de f (nunca confie no usuário). Nesse caso podemos criar um loop infinito.
Exemplo
while True:
resposta = input('Digite a letra f: ')
if resposta == 'f':
  print('Fim do programa')
  break
else:
  print('Essa não é a letra f')
O loop é infinito porque True sempre será True.

Saindo do loop

É possível sair de um loop sem que sua condição seja atendida, como no caso anterior, com a palavra reservada break.
Exemplo
i = 0
# o programa deveria ser executado 10 vezes
while i < 10:
  print(i)
  if i == 5:
    break # mais ele para em 5
  i += 1

print('Fim do programa')

Pulando uma execução

Imagine que por algum motivo você não quer que o numero 7 apareça na tela, você quer que o loop while “pule” o numero sete. É só utilizar o continue.
Exemplo
i = 0
while i < 10:
i += 1
if i == 7:
  continue
print(i)

sábado, 21 de março de 2020

If... else em Python

If... else em Python


If else é uma estrutura de condição. Um programa eficiente precisa “saber” quando fazer uma coisa e fazer outra. Imagine a sequente condição: Se não chover iremos à praia amanhã, senão ficaremos em casa. Essa condição pode ser escrita em python desse modo:
Exemplo
naoestachovendo = True
if naoestachovendo:
  # Não está chovendo
  print('Iremos à praia')
else:
  # Está chovendo
  print('Não iremos à praia')
Nesse exemplo utilizamos uma variável do tipo boolean, mais na maioria dos casos onde o if é utilizado é feito o uso de operadores de comparação.
Exemplo
a = 3
b = 5
if a > b:
  print('a é maior que b')
else:
  print('b é maior que a')

Indentação

Como o compilador python sabe que uma linha de código pertence ao bloco de código do if? Pelos espaços em branco. Se mais linhas de código forem adicionadas, com a mesma quantidade de espaços em branco o compilador python saberá que essa linha também pertence ao bloco de código do if ou do else.
Exemplo
a = 3
b = 5
if a > b:
  print('a é maior que b')
  print('3 é maior que 5')
else:
  print('b é maior que a')
  print('5 é maior que 3')
print('Essa mansagem não pertence nem ao bloco if e nem do else')

Elif

Com if... else existem duas possibilidades: a condição é verdadeira ou a condição e falsa. E se quiséssemos fazer outra verificação? Nesse caso podemos utilizar o elif.
Exemplo
a = 3
b = 3
if b > a:
  print("a é maior que b")
elif a == b:
  print("a e b tem o mesmo valor")

If... elif... else

O else é a opção default. O bloco de código do else será executado apenas se todas as alternativas forem falsas. Mais o else não é necessário.
Exemplo
a = 3
b = 3
if b > a:
  print("a é maior que b")

If numa única linha

Exemplo
if 3 > 2: print('3 é maior que 2')

if... else numa única linha

Exemplo
print('3 é maior que 2') if 3 > 2 else print('2 é maior que 3')

And

Com o operador logico and o bloco de código será executado somente se as duas afirmações forem verdadeiras.
Exemplo
if 3 > 2 and 3 < 4:
  print('As duas condições são verdadeiras!')

Or

Com o operador logico or o bloco de código será executado se qualquer uma das duas afirmações for verdadeira, mesmo se uma for falsa.
Exemplo
if 3 > 2 or 3 < 1:
  print('Pelo menos uma condição é verdadeiras!')

Ifs aninhados

Os if podem estar dentro de outro if.
Exemplo
a = 8
b = 9
if a < b:
  if a == 8:
    print('o valor de a é 8')
Não se esqueça da indentação correta.

sexta-feira, 20 de março de 2020

Dicionários em Python

Dicionários em Python


O tipo de dado dicionário em python funciona de maneira parecida com um dicionário real, você entra com um valor (a palavra que você está procurando) e obtêm outro valor (o significado daquela palavra).
Exemplo
dicionario = {
  'home':'casa',
  'family':'família',
  'faith':'fé',
  'year':'ano'
}

print(dicionario['home'])

Acessando os elementos de um dicionário

Para acessar os itens de um dicionário podemos usar o nome da chave como index e podemos usar a mesma chave com o método get().
Exemplo
dicionario = {
  'home':'casa',
  'family':'família',
  'faith':'fé',
  'year':'ano'
}

# a chave como index
print(dicionario['home'])

# a chave como parametro do método get
print(dicionario.get('faith'))

Alterando os valores do dicionário

Para alterar o valor do dicionário precisamos passar a chave como index.
Exemplo
dicionario = {
  'home':'casa',
  'family':'família',
  'faith':'fé',
  'year':'ano'
}

print(dicionario['year'])

dicionario['year'] = 1924
print(dicionario['year'])

Loop for com dicionário

Também é possível utilizar o loop for com o tipo de dado dicionário. Mais utilizando o loop for do jeito que estamos acostumados com listas, tuplas e sets não terão o mesmo resultado. O valor apresentado é o valor da chave.
Exemplo
dicionario = {
  'home':'casa',
  'family':'família',
  'faith':'fé',
  'year':'ano'
}

for i in dicionario:
  print(i)
Para ler os valores das chaves podemos utilizar esse código:
Exemplo
dicionario = {
  'home':'casa',
  'family':'família',
  'faith':'fé',
  'year':'ano'
}

for i in dicionario:
  print(dicionario[i])
Se for preciso acessar a chave e o valor, podemos utilizar o método items().
Exemplo
dicionario = {
  'home':'casa',
  'family':'família',
  'faith':'fé',
  'year':'ano'
}

for i, o in dicionario.items():
  print('Chave: ' + i + ' Valor: ' + o)

Verificando se uma chave existe

Essa verificação é feita com o operador in.
Exemplo
dicionario = {
  'home':'casa',
  'family':'família',
  'faith':'fé',
  'year':'ano'
}

print('ano' in dicionario)

Verificando a quantidades de itens de um dicionário

A verificação de quantos itens (chave e valor) existem em um dicionário é feita através da função len().
Exemplo
dicionario = {
  'home':'casa',
  'family':'família',
  'faith':'fé',
  'year':'ano'
}

print('Numero de itens do dicionario (chave e valro): ' + str(len(dicionario)))

Adicionando novos elementos (chave e valor)

Para adicionar um novo elemento ao dicionário é só tentar adicionar um valor a uma chave. Se a chave não existir ela será criada.
Exemplo
dicionario = {
  'home':'casa',
  'family':'família',
  'faith':'fé'
}

dicionario['cor'] = 'Amarelo'
print(dicionario['cor'])

Removendo elementos

Podemos remover os elementos de um dicionário com o método pop(), popitem(), clear() e com a palavra reservada del. O método pop vai remover o elemento cuja chave for passada como parâmetro. O método popitem vai remover o último elemento de um dicionário. E a palavra reservada del remove apenas o elemento (chave e valor) especificado.
Exemplo
dicionario = {
  'home':'casa',
  'family':'família',
  'faith':'fé',
  'color':'cor'
}

print(dicionario)
dicionario.pop('home')
print(dicionario)
dicionario.popitem()
print(dicionario)
del dicionario['family']
print(dicionario)
dicionario.clear()
print(dicionario)

Copiando um dicionário

Para fazer uma copia de um dicionário utilize o método copy(). Se apenas uma atribuição for feita a outra variável, a nova variável vai apenas fazer referencia ao primeiro dicionário. E qualquer alteração afetará as duas variáveis.
Exemplo
dicionario = {
  'home':'casa',
  'family':'família',
  'faith':'fé',
  'color':'cor'
}

dicio = dicionario.copy()
print(dicio)

Aninhando dicionários

É possível fazer dicionários de dicionários.
Exemplo
dicio = {
  'Emily': {
    'Aniversário': '1 de Março',
    'Idade': 18
  },
  'Alice': {
    'Aniversário': '23 de Fevereiro',
    'Idade': 21
  },
  'Rem': {
    'Aniversário': '12 de Dezembro',
    'Idade': 17
  }
}

print(dicio)
# Acessando o dicionário Rem
print(dicio['Rem'])
# Acessando o valor 17 do dicionário Rem
print(dicio['Rem']['Idade'])