Enviar um café pro programador

Mostrando postagens com marcador Exercício resolvido. Mostrar todas as postagens
Mostrando postagens com marcador Exercício resolvido. 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))

Ler e Escrever num mesmo arquivo em Python (Exercício resolvido)

Neste tutorial de nossa Apostila de Python, vamos te mostrar através de dois exercícios como ler e escrever, em um mesmo arquivo, ao mesmo tempo.

Quer trabalhar e ganhar dinheiro com Python? Obtenha seu certificado
Deseja acessar todo nosso conteúdo em um PDF? Apostila de Python

Exercício: Ler e Escrever num arquivo


"Crie um programa simples que pergunta se a pessoa deseja ler um arquivo ou escrever algo nele."

Nosso script vai funcionar assim:
Aparece um menu de opções (sair, ler ou escrever)
Se digitar ler, lê o conteúdo do arquivo
Se optar por escrever, escreve algo no arquivo

Isso em um looping indefinido, acaba quando o usuário quiser.

Primeiro de tudo, importamos o módulo os.path, isso vai ser necessário pois vamos usar a função isfile() para checar se o arquivo teste.exe existe

Se retornar false, é porque não existe, então cai dentro de um IF que vai criar esse arquivo (usando o modo de abertura de escrita w).

Agora que criamos, vamos abrir o arquivo no modo de leitura e escrita: r+

Arquivo aberto, perguntamos que opção ele deseja fazer.
Se for 0, op fica nulo e termina o laço WHILE.

Se for 1, o usuário quer ler o que tem no arquivo.
Para isto, basta usar a função read() dentro de um print.
Em seguida, fechamos o arquivo, já que terminamos de usar.

Se ele digitar 2, vai cair na opção de escrever.
Então pedimos um número, truncamos o arquivo (retiramos o que tem nele), escrevemos com o método write() e fechamos o arquivo!

E prontinho, é só isso, veja como ficou nosso código Python:

import os.path

op=1
while op:
    if os.path.isfile("teste.txt") is False:
        print("Arquivo teste.txt nao existe. Criando...")
        meuArquivo = open("teste.txt", "w")
    
    meuArquivo = open("teste.txt", "r+")

    op=int(input("0. Sair \n"
                 "1. Ler\n"
                 "2. Escrever\n"))

    if op==1:
        print( meuArquivo.read() )
        meuArquivo.close()
        
    if op==2:
        num = input("Numero:")
        meuArquivo.truncate()
        meuArquivo.write(num)
        meuArquivo.close()

meuArquivo.close()

Exercício de Arquivos em Python

"Ao escrever compare o número que o usuário digitou com o número que está lá armazenado. Só escreva no arquivo se o usuário digitar um número MAIOR do que aquele que está lá".

A única novidade, vai ser a variável num2, ela vai ler o que tem no arquivo, pelo método read().


Em seguida, vamos escrever no arquivo apenas em duas condições:

  1. Se o arquivo estiver vazio, ou seja, num2=''
  2. Se o número do usuário for maior que o armazenado: int(num) > int(num2)


Lembre-se de passar num e num2 para inteiro, pois em arquivos, elas são strings!

Se nenhuma dessas condições for atendida, nada escrevemos no arquivo e dizemos isso dentro de um print no ELSE.

Veja como ficou nosso código:

import os.path


op=1
while op:
    if os.path.isfile("teste.txt") is False:
        print("Arquivo teste.txt nao existe. Criando...")
        meuArquivo = open("teste.txt", "w")

    meuArquivo = open("teste.txt", "r+")

    op=int(input("0. Sair \n"
                 "1. Ler\n"
                 "2. Escrever\n"))

    if op==1:
        print( meuArquivo.read() )
        meuArquivo.close()
            
        
    if op==2:
        num = input("Numero:")
        num2 = meuArquivo.read()
        meuArquivo.seek(0)

        if (num2 is '') or (int(num)>int(num2)):
            meuArquivo.truncate()
            meuArquivo.write(num)
            meuArquivo.close()
        else:
            print(num," menor que ", num2)
meuArquivo.close()
        

Exercício Proposto

No artigo Como criar um jogo em Python, fizemos um game onde o computador sorteia um número de 1 até 100 e você deve adivinhar.

Implemente a função recorde nele.
Ou seja, num arquivo de no recorde.txt você deve armazenar o recorde do número mínimo de tentativas que alguém conseguiu acertar!

Fizemos essa implementação em nossa apostila de Python:
Apostila Python Progressivo

Como Usar um Dicionário em Python

Neste artigo, vamos resolver uma questão, comentar e mostrar seu código. Basicamente, vamos mostrar para você como usar um dicionário em Python, de tão 'completo' que é esse exercício.

Leia também:
  1. Apostila de Python em PDF
  2. Certificado do Curso de Python (para quem deseja trabalhar, ganhar dinheiro e viver de programação)

Exercício de Python


Uma escola te contratou para fazer um software em Python.
Eles querem que você crie um script que exiba o seguinte menu:

0. Sair
1. Exibir lista de alunos com suas notas (cada aluno tem uma nota)
2. Inserir aluno e nota
3. Alterar a nota de um aluno
4. Consultar nota de um aluno específico
5. Apagar um aluno da lista
6. Dar a média da turma

Onde a professora que vai fornecer o nome e nota dos alunos. Quantos ela quiser. Quantas vezes quiser.
Implemente esse script usando um dicionário.

Conhecimentos para resolver essa questão:
O que é ? Para que serve? Como e quando se usa ?
Como exibir items, valores e chaves de um dicionário
Como usar os métodos get() e setdefault()
Adicionar, Alterar e Remover items de um dicionário



Solução comentada

Primeiro, criamos um dicionário de nome alunos e depois chamamos a função que exibe o menu.

  • menu()

Bem, vamos lá.

Primeiro, temos que criar a lógica que vai ficar exibindo esse menu o tempo inteiro.
Ele é exibido enquanto o valor da variável continuar for diferente de 0.
Se for, encerra o menu() e acaba o laço e encerra o programa.

Se for outro valor diferente, vai cair em vários testes condicionais para saber que função correta deve ser chamada.


  • exibir()

Nessa função, vamos simplesmente exibir o dicionário, de maneira bonita e padronizada, os nomes e notas dos alunos.

Para isso, usamos uma variável temporária de nome nome, que vai receber cada uma das chaves (keys), do dicionário de alunos.

Então, imprime o nome e a nota de cada aluno.


  • inserir()

Antes de inserir, usamos o método get() para saber se já existe uma key com aquele nome que estamos querendo inserir.

Se tiver o aluno, o método retorna algum valor, cai no IF e avisamos que não pode inserir.
Se não estiver o aluno, cai no ELSE e criamos um novo item no nosso dicionário.


  • alterar()

Antes de alterar um determinado item, temos que nos certificar que ele existe no dicionário.
Para isso, usamos o operador in.

Se ele existir na lista de keys, faz a alteração.
Se não não faz nada, só exibe uma mensagem avisando isso.


  • consultar()

Idem a lógica anterior.

Se existir o item, exibe.
Senão, avisa.


  • apagar()

Idem.

Primeiro, verificamos se o item existe, consultando sua chave.
Se tiver, usamos o método pop() para retirar o item da lista.


  • media()

Pegamos uma variável e inicializamos com valor 0.
Depois, somamos todos os valores nessa variável e dividimos pelo tamanho do dicionário, através da função len().




Código Python



def menu():
    continuar=1

    while continuar:
        continuar = int(
            input("0. Sair\n"+
                  "1. Exibir lista de alunos com suas notas (cada aluno tem uma nota)\n"+
                  "2. Inserir aluno e nota\n"+
                  "3. Alterar a nota de um aluno\n"+
                  "4. Consultar nota de um aluno específico\n"+
                  "5. Apagar um aluno da lista\n"+
                  "6. Dar a média da turma\n"))
        if continuar==1:
            exibir()
        elif continuar == 2:
            inserir()
        elif continuar == 3:
            alterar()
        elif continuar == 4:
            consultar()
        elif continuar == 5:
            apagar()
        elif continuar == 6:
            media()
        elif continuar == 0:
            print("Encerrando programa")
        else:
            print("Opção inválida")
        
def exibir():
    for nome in alunos.keys():
        print("Nome: ", nome, " - Nota: ", alunos[nome])
        
def inserir():
    nome = input("Digite o nome do aluno: ")
    nota = float(input("Nota dele: "))

    if alunos.get(nome):
        print("Ja existe o aluno ",nome)
    else:
        alunos[nome] = nota
    
def alterar():
    nome = input("Aluno a mudar a nota: ")
    nota = float(input("Nova nota     : "))

    if nome in alunos.keys():
        alunos[nome] = nota
    else:
        print("Não existe esse aluno")
        
def consultar():
    nome = input("Digite o nome do aluno: ")

    if alunos.get(nome):
        print("Nota de ",nome, ": ", alunos[nome])
    else:
        print("Nao existe tal aluno")
    
def apagar():
    nome = input("Apagar que aluno: ")

    if alunos.get(nome):
        alunos.pop(nome)
    else:
        print("Não existe o aluno ",nome)
        
def media():
    soma = 0
    for count in alunos.values():
        soma += count
    print("Média dos alunos: %.2f" % (soma / len(alunos) ))

alunos = {}
menu()

Como Gerar Números Primos em Python

Neste tutorial de nosso Curso de Python, vamos te mostrar como gerar um número primo e vamos aprender como exibir todos os primos numa determinada faixa de valores.

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

Como Saber se um Número é Primo em Python


Primeiro, vamos criar uma função chamada primo( n ) que recebe um inteiro positivo n como parâmetro.

Devemos testar esse valor n para saber se ele é primo ou não.
Relembrando: número primo é aquele que é divisível somente por 1 e por ele mesmo (por -1 e -ele também).

Ou seja, o resto da divisão por 2, 3, 4..., até n-1 tem que ser diferente de 0.

Pois é, foi usado pra saber se um número é par ou não, agora vamos usar para detectar um número primo.

Dentro da primo() simplesmente saímos calculando o resto da divisão de n por 2, por 3, ...até n-1.

Se der 0, fazemos return False, pra dizer que o número não é primo.
Se após todos esses testes do laço for ele não der False, é porque é verdade esse bilete...digo, ele é primo e damos um return True.

  • Código dessa função:
def primo(n):
    for val in range(2,n):
        if n % val == 0:
            return False

    return True
        




Exibindo números primos em um intervalo

Ok, já sabemos testar se um número é primo ou não.
Agora precisamos exibir todos os primos de 1 até n.

Vamos fazer isso através da função exibe(), que vai pedir um inteiro positivo maior que 1 para o usuário.

A seguir, vamos criar um laço for que vai testar os números 2, 3, 4, ... até o n, pra saber se cada um desses valores é primo.

Se for, imprime ele. Fazemos isso usando a função range:


def exibe():
    n = int(input('Exibir primos até o número: '))
    for val in range(2,n+1):
        if(primo(val)):
            print(val)




Código Python

Nosso script que descobre e exibe os números primos é, portanto:

def primo(n):
    for val in range(2,n):
        if n % val == 0:
            return False

    return True
        
def exibe():
    n = int(input('Exibir primos até o número: '))
    for val in range(2,n+1):
        if(primo(val)):
            print(val)
    
while True:
    exibe()

  • Exercício proposto:
Otimize o código acima de duas maneiras:
  1. Faça a função primo() testar os valores até n/2 ao invés de n
  2. Faça a função primo() testar até a raiz quadrada de n

Descubra o motivo das otimizações acima.