sábado, 28 de março de 2020

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'])