Enviar um café pro programador

Mostrando postagens com marcador Exercício. Mostrar todas as postagens
Mostrando postagens com marcador Exercício. Mostrar todas as postagens

Exercícios de Arrays e Matrizes em Python

 Agora que já estudamos arrays, vamos praticar nossos conhecimentos na biblioteca numpy e praticar com exercícios. Estude antes:

E mais uma vez vamos reforçar: tente. Tente resolver as questões, sozinho, pense, quebre a cabeça...normal errar, não conseguir, faz parte. Mas tem que tentar, só assim você vai evoluir, tanto como programador Python tanto como cientista.

Questões de Array e Matriz

00. Qual a relação matemática entre len(arr), len(arr[0]) e  o atributo size?

01. Crie uma função sum() que recebe um array unidimensional e retorna a soma de seus elementos, usando apenas o atributo size do NumPy.

02. Crie uma função square_matrix(), que verifica se a matriz recebida é quadrada ou não. Matriz quadrada é aquela que o número de linhas é o mesmo do de colunas.

03. Crie uma função chamada trace() que recebe uma matriz quadrada e retorna o seu traço, ou seja, a soma dos elementos da diagonal principal. Lembrando que somente matrizes quadradas possuem traço.

04. Crie uma função sum_matrix() que recebe duas matrizes e retorne uma matriz com a soma destas duas matrizes anteriores. Lembre-se que só podemos somar matrizes que tenham mesmo número de linhas e colunas, seu script deve checar isso antes de somar.


Soluções e código comentado dos exercícios

  • Questão 00

O comando len(arr) vai mostrar quantos elementos tem o array. Se ele for um array unidimensional, ele vai mostrar quantos elementos tem naquele array. Se for uma matriz, ele vai mostrar o número de linhas na matriz, pois cada linha é um novo elemento (um novo array).

Por exemplo, o elemento arr[0] é a primeira linha da matriz arr, logo, o comando len(arr[0]) vai mostrar quantos elementos tem o array unidimensional arr[0], ou seja, quantas colunas esse array unidimensional tem. Mas, todas as linhas de uma matriz possuem o mesmo número de colunas. Logo, o comando len(arr[0]) exibe o número de colunas de uma matriz.

O atributo size dos arrays mostra o número TOTAL de elementos de uma matriz. Por exemplo, se tiver um array 5x6 de nome arr e usar o comando arr.size, vai ver que ele é um inteiro de valor 5*6=30

Ou seja, o size mostra o valor da multiplicação do número de linhas pelo número de colunas, então, para uma matriz: arr.size = len(arr) * len(arr[0])

  • Questão 01

O atributo size nos fornece a quantidade de elementos que existe em um array qualquer. Se esse valor é n e jogarmos esse valor dentro da função range(), ela vai iterar do elemento 0 até o elemento n-1 do array. Ou seja, vai percorrer todo o array:

import numpy as np def sum(arr): soma=0 for i in range(arr.size): soma += arr[i] return soma arr = np.array([1, 2, 3, 4, 5]) print("Soma dos elementos: ", sum(arr))

Ou seja, pegamos uma variável soma, inicializamos ela com o valor 0 e em seguida vamos adicionando elemento por elemento do array.

  • Questão 02

Vimos na questão 00 que o número de linhas do vetor arr é dado por len(arr) e o número de colunas é dado por len(arr[0]), então para saber se uma matriz é quadrada, basta verificar se esses dois valores são iguais:

import numpy as np def square_matrix(arr): if len(arr) == len(arr[0]): return True else: return False arr1 = np.array([ [1,2,3], [4,5,6], [7,8,9] ]) arr2 = np.array([ [1,2,3,4],[1,2,3,4] ]) print(square_matrix(arr1)) print(square_matrix(arr2))


  • Questão 03

Primeiro, antes de calcular o traço da matriz, precisamos saber se ela é quadrada, portanto vamos deixar o código da função square_matrix() da questão anterior neste caso. Então, a primeira coisa da função trace() é checar se a função é quadrada. Se for, calcula o traço no teste condicional if, se não for, retorna None no else.

Os elementos da diagonal principal de uma matriz arr são arr[0][0], arr[1][1], arr[2][2]...ou seja, todos os elementos do tipo arr[i][i], de mesmo índice de linha e coluna.

Então, o traço é dado pela soma: arr[0][0] + arr[1][1] + arr[2][2] + ... + arr[n-1][n-1] , onde n é a ordem da matriz, ou seja, o número de linhas ou colunas (já que ela é quadrada).

Para fazer esse cálculo no código Python, definimos uma variável de valor inicial 0 e vamos somando os elementos da diagonal inicial de índice 0 até n-1, através da range():

import numpy as np def square_matrix(arr): if len(arr) == len(arr[0]): return True else: return False def trace(arr): sum=0 if square_matrix(arr): for i in range(len(arr)): sum += arr[i][i] return sum else: return None arr1 = np.array([ [0,2,3], [4,5,6], [7,8,9] ]) arr2 = np.array([ [1,2,3,4], [1,2,3,4] ]) print(trace(arr1)) print(trace(arr2))


  • Questão 04

.A primeira coisa que a função deve fazer é testar se o número de linhas são iguais e o número de colunas também são iguais entre si. Somente assim podemos somar as duas matrizes.

Se ambas matrizes tiverem o mesmo número de linhas lin=len(arr) e o mesmo número de colunas col=len(arr[0]), então criamos uma matriz vazia (empty), com tal tamanho.

Agora, basta preencher os elementos da matriz. Para isso, usamos um laço for de 0 até lin-1 e outro laço aninhado, de 0 até col-1, então para cada elemento matrix[lin][col] colocamos a soma arr1[lin][col]+arr2[lin][col]

import numpy as np

def sum_matrix(arr1, arr2):
if len(arr1)==len(arr2) and len(arr1[0])==len(arr2[0]):
matrix = np.empty( (len(arr1), len(arr1[0])) )
else:
return None
for lin in range(len(arr1)):
for col in range(len(arr1[0])):
matrix[lin][col] = arr1[lin][col] + arr2[lin][col]
return matrix


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

arr2 = np.array([ [1,1,1],
[2,2,2],
[3,3,3],
[0,0,0]])

print(sum_matrix(arr1, arr2))

Gerar a Série de Fibonacci em Python (Recursividade)

Neste tutorial de nosso Curso de Python, vamos aprender como gerar a tão famosa sequência de Fibonacci, usando funções e recursão!

É um exercício resolvido de nossa lista de questões de funções.
Leia também:

Gerando a Sequência de Fibonacci em Python


A série de Fibonacci é uma sequência de números, cujos dois primeiros são 0 e 1. O termo seguinte da sequência é obtido somando os dois anteriores. Faça uma script em Python que solicite um inteiro positivo maior que 1 ao usuário, n. Então uma função exibe todos os termos da sequência até o n-ésimo termo. Use recursividade.

Vamos criar uma função chamada fibo( n ) que tem o parâmetro n.
O argumento que você deve passar para esta função é um inteiro positivo, maior ou igual a 2.

Como a série de Fibonacci é formada somando seus dois termos anteriores, sua fórmula geral é:
fibo(n) = fibo(n-1) + fibo(n-2)

Mas como toda boa função que usa recursividade, ele tem que ter um stop, pois uma hora ela vai ter que parar. Fazemos isso usando testes condicionais IF.

No nosso caso, vai ter dois stops.
Se o valor de n for igual 1, vamos retornar 0 (pois o primeiro termo é 0).
Se o valor de n for igual 2, vamos retornar 1 (pois o segundo termo é 1).

Pronto, para valores maiores que 2, basta somarmos os dois termos anteriores.

Agora vamos montar nossa função menu().
Ela pede o termo n ao usuário, que deve ser inteiro e maior que 2.

Agora ela deve imprimir na tela os valores de fibo(1), fibo(2), fibo(3)....até fibo(n).
Lembre-se, nossa função mostra o n-ésimo termo!

Então temos que imprimir todos, de 1 até n.

Fazemos isso usando um laço for, que vai de 1 até n (função range). 

E prontinho, vai exibir cada termo da sequência de Fibonacci, um por linha!

Danada essa função recursiva, não?



Código Python

Nosso código ficou assim:


def fibo(n):
    if n==1:
        return 0
    elif n==2:
        return 1
    else:
        return fibo(n-1) + fibo(n-2)
        
def menu():
    n = int(input('Exibir ate o termo (maior que 2): '))

    for val in range(1,n+1):
        print(fibo(val))
    
while True:
    menu()


Função chamando Função em Python

Neste tutorial de nossa apostila de Python, vamos resolver mais uma questão sobre funções em Python.

Leia também:


Função invocando Função em Python

O exercício abaixo faz parte da lista de questões de funções:
Faça um script Python com uma função que necessite de três argumentos, e que forneça a soma desses três argumentos através. Seu script também deve fornecer a média dos três números, através de uma segunda função que chama a primeira.

Vamos chamar de x, y e z os três números que o usuário vai fornecer e passar para a função soma().
Dentro dela, armazenamos o valor da soma na variável res (de resultado) e retornamos esse valor:

def soma(x,y,z):
    res = x + y + z
    return res

Agora, na função media(), também recebe estes três argumentos x, y e z.
Usamos a função soma() para calcular a soma deles, dentro da função media() mesmo, sem problemas, e armazenamos o valor da soma na variável som que então é dividida por 3 e armazenada na variável med (de média), e então retornamos essa variável:

def media(x,y,z):
    som = soma(x,y,z)
    med = som/3
    return med

Por fim, criamos uma função menu(), com que é invocada infinitamente, que fica pedindo os três números ao usuário, mostrando a soma e a média.

Nosso código completo fica:

def soma(x,y,z):
    res = x + y + z
    return res

def media(x,y,z):
    som = soma(x,y,z)
    med = som/3
    return med

def menu():
    x = int(input('Primeiro numero: '))
    y = int(input('Segundo numero : '))
    z = int(input('Terceiro numero: '))

    print('Soma: ', soma(x,y,z))
    print('Media:', media(x,y,z))

while True:
    menu()




Otimizando um código Python

O exemplo dado acima está bem didático, passo a passo, para melhor entendimento de vocês.
Porém, a medida que formos estudando, fazendo programas e scripts, podemos ir enxugando o código, ou seja, escrevendo cada vez menos, usando menos variáveis etc.

Ou seja, otimizando. Fazer a mesma coisa, mas gastando menos memória, menos processamento e menos linha, assim também economizamos tempo.

Na função soma, não precisamos criar a variável res. Podemos dar returno direto com o valor (x+y+z).

A função media, ao invés de receber três argumentos, pode diretamente receber só o valor da soma.

E o argumento que passamos pra ela, da soma? Ué, chamamos a função soma direto:
media ( soma(x,y,z)  )

E dentro dessa função media() não precisamos das variáveis som e med, podemos dar um returno direto.

Nosso código, mais limpo, fica assim:

def soma(x,y,z):
    return (x + y + z)

def media(num):
    return num/3

def menu():
    x = int(input('Primeiro numero: '))
    y = int(input('Segundo numero : '))
    z = int(input('Terceiro numero: '))

    print('Soma: ', soma(x,y,z))
    print('Media:', media( soma(x,y,z) ))

while True:
    menu()


Python - Programa que calcula salário e aumento em porcentagem

"
As Organizações Tabajara resolveram dar um aumento de salário aos seus colaboradores e lhe contrataram para desenvolver o programa que calculará os reajustes.


  • Faça um programa que recebe o salário de um colaborador e o reajuste segundo o seguinte critério, baseado no salário atual:
  • salários até R$ 280,00 (incluindo) : aumento de 20%
  • salários entre R$ 280,00 e R$ 700,00 : aumento de 15%
  • salários entre R$ 700,00 e R$ 1500,00 : aumento de 10%
  • salários de R$ 1500,00 em diante : aumento de 5% Após o aumento ser realizado, informe na tela:
  • o salário antes do reajuste;
  • o percentual de aumento aplicado;
  • o valor do aumento;
  • o novo salário, após o aumento."

Código comentado em Python

Vamos armazenar o salário na variável 'salario' (que original, hein?)
Teremos outras variáveis no decorrer do programa:
  • percentual - percentual de aumento aplicado
  • aumento - valor em R$ do aumento aplicado
  • salario_novo - novo valor do salário, reajustado pelo aumento
A única coisa que muda, de acordo com o salário fornecido pelo usuário, é o percentual do aumento.

Vamos fazer uma série de testes IF ELIF ELSE pra descobrir qual percentual correto aplicar.

Se for menor ou igual a R$ 280,00 , percentual será 20%
Se não for, vamos testar para ver se é menor ou igual a R$ 700,00 - se for, o percentual será de 15%.

Se também não for menor R$ 700,00, vamos testar para ver se é menor igual a R$ 1500,00 - se sim, 'percentual' recebe 10 (%). 

Se também não for menor que R$ 1500,00 é porque é maior então aplicamos 5%.

Para saber o valor do aumento em R$, primeiro pegamos a variável  'percentual' e dividimos por 100.0 (usamos decimal pra mostrar ao Python que essa variável deve ser tratada como um float):
percentual = percentual / 100.0

(essa linha quer dizer: o novo valor de 'percentual' é o valor antigo dela dividido por 100).

Agora multiplicamos 'percentual' por 'salario' e temos o aumento do salário em R$.

Basta somar esse valor ao salário original, que temos o novo salário:


    salario = float(input('Salário do colaborador: '))

    if (salario <= 280):
        percentual = 20
    elif (salario <= 700):
        percentual = 15
    elif (salario <= 1500):
        percentual = 10
    else:
        percentual = 5

    print('Salario original: R$ ', salario)
    print('Percentual: ',percentual,'%')

    percentual = percentual/100.0
    aumento = percentual * salario
    novo_salario = salario + aumento
    
    print('Aumento: R$ ',aumento)
    print('Novo salário: R$ ', novo_salario)
 



Python: Programa que diz se é vogal ou consoante

"Faça um Programa que verifique se uma letra digitada é vogal ou consoante."


Código comentado em Python

Primeiro, pedimos um caractere ao usuário e guardamos na variável 'caractere'.

O normal agora seria comparamos se é uma vogal 'a', 'e', 'i', 'o' ou 'u' ou não.
Nós vamos fazer isso sim, porém tem uma pegadinha aí.

Em programação, uma letra minúscula é diferente da sua maiúscula.
Logo, além das vogais que citamos, temos que comparar com 'A', 'E', 'I', 'O' e 'U' também.

Nosso código fica:

    char=input('Digite um caractere: ')

    if char=='a' or char=='e' or char=='i' or char=='o' or char=='u' or \
       char=='A' or char=='E' or char=='I' or char=='O' or char=='U':
           print('Vogal')
    else:
           print('Consoante')


Para um if não ficar muito grande, com muitas condições, quebramos ele em duas linhas. Para isso, basta usar uma barra \ , como fizemos no código.



Exercícios Resolvidos de IF e ELSE

Agora que você sabe usar o teste condicional IF, a estruturas de controle IF ELSE bem como aninhar IF e ELSE's, vamos resolver alguns exercícios de Python sobre o assunto, para consolidar melhor nossos conhecimentos, fazendo exercícios bem interessantes e realistas.


Exercícios de IF e ELSE em Python

Antes de mais nada, gostaríamos de frisar novamente a importância de você tentar resolver todos os exercícios por conta própria, sem consultar as respostas e soluções.

Mesmo que não consiga, saia feio, cheio de bugs ou muito grande, tente. É tentar que vai te transformar em uma excelente programador Python

  1. Faça um programa que peça dois números e imprima o maior deles.
  2. Faça um script que peça um valor e mostre na tela se o valor é positivo ou negativo.
  3. Crie um programa que verifique se uma letra digitada é "F" ou "M". Conforme a letra escrever: F - Feminino, M - Masculino, Sexo Inválido.


Código comentado dos exercícios

Exercício 01:

Pedimos o primeiro número ao usuário, e armazenamos na variável 'num1'.
Em seguida, pedimos o segundo e colocamos na variável 'num2'.

Agora vamos aos testes!
Primeiro, testamos se o primeiro é maior que o segundo:  num1 > num2 
Se for verdade, exibimos que num1 é o maior e pronto.

Se for falso, cai ELSE, então num2 é que deve ser maior, correto?
Errado!

Pode ser que sejam iguais!
Então, precisamos fazer outro teste IF dentro desse ELSE (estruturas aninhadas!) perguntando se são iguais.

Se forem, exibe a mensagem dizendo que são iguais.
Se não forem iguais, aí sim, é porque num2 é maior e caio no else.

Veja como ficou o código:

num1=int( input('Digite o primeiro numero: ') )
num2=int( input('Digite o segundo numero: ') )

if num1 > num2 :
    print('O primeiro, %d, é maior' %num1)
else:
    if num1 == num2 :
        print('Os números são iguais')
    else:
        print('O segundo, %d, é maior' %num2)


Exercício 02:
Vamos solicitar o número ao usuário e armazenar na variável 'num'.
Para saber se é positivo, basta fazer o seguinte teste condicional:
num > 0

Se o resultado for TRUE, entra no IF e dizemos que é positivo.
Se o resultado do teste for FALSE, vai pro else, então é negativo...errado!

Pode ser 0, que não é nem positivo nem negativo.
Então, dentro desse ELSE, vamos criar mais um bloco IF ELSE.

Dentro desse novo ELSE fazemos o teste para saber se é 0:
num == 0

Se for, entramos nesse novo IF e dizemos que o número é 0. 
Se não for 0, cai no ELSE aninhado, e aí sim, dizemos que é negativo:


num=int( input('Digite um numero: ') )

if num > 0 :
    print('Positivo')
else:
    if num == 0 :
        print('Nem positivo nem negativo, é 0')
    else:
        print('Negativo')

Exercício 03:

Até o momento, só fizemos comparações com números.
Nesse exercício, vamos trabalhar com letras, ou seja, strings.

E strings tem aquela regra: é sempre dentro de aspas. OK?

Então, iniciamos pedindo uma letra ao usuário e armazenamos na variável 'resposta', que vai ser uma string.

No primeiro IF, comparamos para saber se digitaram 'M'.
A comparação de strings é assim: resposta == 'M'
Ou seja, sempre entre aspas.

Se o IF for true, ok, dizemos que é masculina.
Se não for?

Ai cai no ELSE e vamos ver se foi digitado 'F'.
Se foi, cai no IF aninhado e dizemos ser feminina.

Se não for, cai no ELSE aninhado, então o maldito usuário não digitou nem M nem F.


resposta=input('M ou F: ')

if resposta == 'M':
    print('Masculina')
else:
    if resposta == 'F':
          print('Feminina')
    else:
        print('Você não digitou M ou F')

Exercícios de Juros Compostos no Python

Uma boa parte dos sistemas bancários foram programados há décadas.

O diretor de um grande banco decidiu que era hora de se modernizar, usando uma linguagem mais moderna, segura e poderosa.

Obviamente, escolheu o Python e contratou você para trabalhar no novo sistema.

Sua primeira tarefa é criar um programa envolvendo a poupança.
Você vai perguntar o valor inicial investido na poupança, a rentabilidade mensal, quantos meses o cliente deseja deixar o dinheiro investido e mostrar o valor final na conta do cliente do banco.


Exercício resolvido de juros compostos

A fórmula dos juros compostos é a seguinte:

Onde:
Vf - Valor final na poupança, ao término do tempo
Vi - Valor inicial que o cliente vai colocar na poupança
i - Rentabilidade mensal (em porcentagem)
m - Tanto de meses que o dinheiro do cliente vai ficar rendendo

O primeiro passo, é perguntar o montante inicial que vai ser investido.
Vamos armazenar esse número na variável 'vi'.

Em seguida, perguntamos a rentabilidade mensal, em porcentagem e armazenar na variável 'i'.
Como esse 'i' está em porcentagem, devemos dividir ele por 100 para aplicar na fórmula. Assim, se a rentabilidade for 0,5% , o valor de i será i=0,005

Para isso, basta fazer: i = i / 100

Por fim, pergunte o número de meses que a aplicação vai ficar rendando, e armazene na variável inteira 'm'.

Nossa fórmula, em código de programação Python, é:
vf = vi * (1+i)**m

Concorda ?

Nosso código fica assim:

# Valor inicial aplicado
vi = float( input('Valor inicial: ') )

# Rentabilidade mensagem, em %
i = float ( input('Rentabilidade mensal: ') )

# Transformando a porcentagem em valor numérico
i = i / 100

# Tempo de investimento
m = int( input('Meses que vai deixar rendendo: ') )

vf = vi * (1+i)**m

print('Valor apos ',m,' meses: R$ ',vf)

Vejamos uma simulação:

Bem simples, não é?



Exercício de juros compostos

Cliente é um bicho folgado. Vive inventando e pedindo coisas, e tudo acaba sobrando para o coitado do programador.

Um cliente pediu que o sistema do banco tivesse a seguinte função:
Dizer o valor inicial que ele deve investir, para ao final de 'm' meses ele tenha um valor 'vf', supondo que este dinheiro esteja rendendo uma rentabilidade 'i' mensal, em porcentagem esse 'i'.

Faça um programa que pede o valor final, o tanto de meses que vai ficar aplicado, a rentabilidade e o script mostre o valor inicial que ele deve investir para atingir tal objetivo.

Escreva nos comentários seu código.