Enviar um café pro programador

Mostrando postagens com marcador Código comentado. Mostrar todas as postagens
Mostrando postagens com marcador Código comentado. 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

Lista de Exercícios de Arquivos

Neste tutorial, vamos te propor duas questões bem interessantes de Python usando Arquivos.

Leia também:
Obter certificado do curso (para trabalhar como programador Python)
Obter apostila Python Progressivo (download do PDF)


Lista de Exercícios de Python

1. Faça um programa que leia um arquivo texto contendo uma lista de endereços IP e gere um outro arquivo, contendo um relatório dos endereços IP válidos e inválidos.

O arquivo de entrada possui o seguinte formato:
200.135.80.9
192.168.1.1
8.35.67.74
257.32.4.5
85.345.1.2
1.2.3.4
9.8.234.5
192.168.0.256

O arquivo de saída possui o seguinte formato:
[Endereços válidos:]
200.135.80.9
192.168.1.1
8.35.67.74
1.2.3.4

[Endereços inválidos:]
257.32.4.5
85.345.1.2
9.8.234.5
192.168.0.256




2. A ACME Inc., uma empresa de 500 funcionários, está tendo problemas de espaço em disco no seu servidor de arquivos. Para tentar resolver este problema, o Administrador de Rede precisa saber qual o espaço ocupado pelos usuários, e identificar os usuários com maior espaço ocupado. Através de um programa, baixado da Internet, ele conseguiu gerar o seguinte arquivo, chamado "usuarios.txt":

alexandre       456123789
anderson        1245698456
antonio         123456456
carlos          91257581
cesar           987458
rosemary        789456125

Neste arquivo, o nome do usuário possui 15 caracteres. A partir deste arquivo, você deve criar um programa que gere um relatório, chamado "relatório.txt", no seguinte formato:

ACME Inc.               Uso do espaço em disco pelos usuários
------------------------------------------------------------------------
Nr.  Usuário        Espaço utilizado     % do uso

1    alexandre       434,99 MB             16,85%
2    anderson       1187,99 MB             46,02%
3    antonio         117,73 MB              4,56%
4    carlos           87,03 MB              3,37%
5    cesar             0,94 MB              0,04%
6    rosemary        752,88 MB             29,16%

Espaço total ocupado: 2581,57 MB
Espaço médio ocupado: 430,26 MB

O arquivo de entrada deve ser lido uma única vez, e os dados armazenados em memória, caso sejam necessários, de forma a agilizar a execução do programa. A conversão da espaço ocupado em disco, de bytes para megabytes deverá ser feita através de uma função separada, que será chamada pelo programa principal. O cálculo do percentual de uso também deverá ser feito através de uma função, que será chamada pelo programa principal.


Exercícios de Sequências - Listas, Tuplas e Dicionários

Chegado o fim da nossa seção de Sequências em Python, vamos propor alguns exercícios.

Leia também:
Obter certificado do curso (para trabalhar como programador Python)
Obter apostila Python Progressivo (download do PDF)


Lista de Exercícios de Python


  1. Faça um Programa que leia um vetor de 5 números inteiros e mostre-os.
  2. Faça um Programa que leia um vetor de 10 números reais e mostre-os na ordem inversa.
  3. Faça um Programa que leia 4 notas, mostre as notas e a média na tela.
  4. Faça um Programa que leia um vetor de 10 caracteres, e diga quantas consoantes foram lidas. Imprima as consoantes.
  5. Faça um Programa que leia 20 números inteiros e armazene-os num vetor. Armazene os números pares no vetor PAR e os números IMPARES no vetor impar. Imprima os três vetores.
  6. Faça um Programa que peça as quatro notas de 10 alunos, calcule e armazene num vetor a média de cada aluno, imprima o número de alunos com média maior ou igual a 7.0.
  7. Faça um Programa que leia um vetor de 5 números inteiros, mostre a soma, a multiplicação e os números.
  8. Faça um Programa que peça a idade e a altura de 5 pessoas, armazene cada informação no seu respectivo vetor. Imprima a idade e a altura na ordem inversa a ordem lida.
  9. Faça um Programa que leia um vetor A com 10 números inteiros, calcule e mostre a soma dos quadrados dos elementos do vetor.
  10. Faça um Programa que leia dois vetores com 10 elementos cada. Gere um terceiro vetor de 20 elementos, cujos valores deverão ser compostos pelos elementos intercalados dos dois outros vetores.

  11. Altere o programa anterior, intercalando 3 vetores de 10 elementos cada.
  12. Foram anotadas as idades e alturas de 30 alunos. Faça um Programa que determine quantos alunos com mais de 13 anos possuem altura inferior à média de altura desses alunos.
  13. Faça um programa que receba a temperatura média de cada mês do ano e armazene-as em uma lista. Após isto, calcule a média anual das temperaturas e mostre todas as temperaturas acima da média anual, e em que mês elas ocorreram (mostrar o mês por extenso: 1 – Janeiro, 2 – Fevereiro, . . . ).
  14. Utilizando listas faça um programa que faça 5 perguntas para uma pessoa sobre um crime. As perguntas são:
    "Telefonou para a vítima?"
    "Esteve no local do crime?"
    "Mora perto da vítima?"
    "Devia para a vítima?"
    "Já trabalhou com a vítima?"
    O programa deve no final emitir uma classificação sobre a participação da pessoa no crime. Se a pessoa responder positivamente a 2 questões ela deve ser classificada como "Suspeita", entre 3 e 4 como "Cúmplice" e 5 como "Assassino". Caso contrário, ele será classificado como "Inocente".
  15. Faça um programa que leia um número indeterminado de valores, correspondentes a notas, encerrando a entrada de dados quando for informado um valor igual a -1 (que não deve ser armazenado). Após esta entrada de dados, faça:
    Mostre a quantidade de valores que foram lidos;
    Exiba todos os valores na ordem em que foram informados, um ao lado do outro;
    Exiba todos os valores na ordem inversa à que foram informados, um abaixo do outro;
    Calcule e mostre a soma dos valores;
    Calcule e mostre a média dos valores;
    Calcule e mostre a quantidade de valores acima da média calculada;
    Calcule e mostre a quantidade de valores abaixo de sete;
    Encerre o programa com uma mensagem;

  16. Utilize uma lista para resolver o problema a seguir. Uma empresa paga seus vendedores com base em comissões. O vendedor recebe $200 por semana mais 9 por cento de suas vendas brutas daquela semana. Por exemplo, um vendedor que teve vendas brutas de $3000 em uma semana recebe $200 mais 9 por cento de $3000, ou seja, um total de $470. Escreva um programa (usando um array de contadores) que determine quantos vendedores receberam salários nos seguintes intervalos de valores:
    $200 - $299
    $300 - $399
    $400 - $499
    $500 - $599
    $600 - $699
    $700 - $799
    $800 - $899
    $900 - $999
    $1000 em diante
    Desafio: Crie ma fórmula para chegar na posição da lista a partir do salário, sem fazer vários ifs aninhados.
  17. Em uma competição de salto em distância cada atleta tem direito a cinco saltos. O resultado do atleta será determinado pela média dos cinco valores restantes. Você deve fazer um programa que receba o nome e as cinco distâncias alcançadas pelo atleta em seus saltos e depois informe o nome, os saltos e a média dos saltos. O programa deve ser encerrado quando não for informado o nome do atleta. A saída do programa deve ser conforme o exemplo abaixo:
    Atleta: Rodrigo Curvêllo
    Primeiro Salto: 6.5 m
    Segundo Salto: 6.1 m
    Terceiro Salto: 6.2 m
    Quarto Salto: 5.4 m
    Quinto Salto: 5.3 m

    Resultado final:
    Atleta: Rodrigo Curvêllo
    Saltos: 6.5 - 6.1 - 6.2 - 5.4 - 5.3
    Média dos saltos: 5.9 m
  18. Uma grande emissora de televisão quer fazer uma enquete entre os seus telespectadores para saber qual o melhor jogador após cada jogo. Para isto, faz-se necessário o desenvolvimento de um programa, que será utilizado pelas telefonistas, para a computação dos votos. Sua equipe foi contratada para desenvolver este programa, utilizando a linguagem de programação C++. Para computar cada voto, a telefonista digitará um número, entre 1 e 23, correspondente ao número da camisa do jogador. Um número de jogador igual zero, indica que a votação foi encerrada. Se um número inválido for digitado, o programa deve ignorá-lo, mostrando uma breve mensagem de aviso, e voltando a pedir outro número. Após o final da votação, o programa deverá exibir:
    O total de votos computados;
    Os númeos e respectivos votos de todos os jogadores que receberam votos;
    O percentual de votos de cada um destes jogadores;
    O número do jogador escolhido como o melhor jogador da partida, juntamente com o número de votos e o percentual de votos dados a ele.
    Observe que os votos inválidos e o zero final não devem ser computados como votos. O resultado aparece ordenado pelo número do jogador. O programa deve fazer uso de arrays. O programa deverá executar o cálculo do percentual de cada jogador através de uma função. Esta função receberá dois parâmetros: o número de votos de um jogador e o total de votos. A função calculará o percentual e retornará o valor calculado. Abaixo segue uma tela de exemplo. O disposição das informações deve ser o mais próxima possível ao exemplo. Os dados são fictícios e podem mudar a cada execução do programa. Ao final, o programa deve ainda gravar os dados referentes ao resultado da votação em um arquivo texto no disco, obedecendo a mesma disposição apresentada na tela.
    Enquete: Quem foi o melhor jogador?

    Número do jogador (0=fim): 9
    Número do jogador (0=fim): 10
    Número do jogador (0=fim): 9
    Número do jogador (0=fim): 10
    Número do jogador (0=fim): 11
    Número do jogador (0=fim): 10
    Número do jogador (0=fim): 50
    Informe um valor entre 1 e 23 ou 0 para sair!
    Número do jogador (0=fim): 9
    Número do jogador (0=fim): 9
    Número do jogador (0=fim): 0

    Resultado da votação:
    Foram computados 8 votos.
    Jogador Votos           %
    9               4               50,0%
    10              3               37,5%
    11              1               12,5%
    O melhor jogador foi o número 9, com 4 votos, correspondendo a 50% do total de votos.
  19. Uma empresa de pesquisas precisa tabular os resultados da seguinte enquete feita a um grande quantidade de organizações:
    "Qual o melhor Sistema Operacional para uso em servidores?"

    As possíveis respostas são:
    1- Windows Server
    2- Unix
    3- Linux
    4- Netware
    5- Mac OS
    6- Outro
    Você foi contratado para desenvolver um programa que leia o resultado da enquete e informe ao final o resultado da mesma. O programa deverá ler os valores até ser informado o valor 0, que encerra a entrada dos dados. Não deverão ser aceitos valores além dos válidos para o programa (0 a 6). Os valores referentes a cada uma das opções devem ser armazenados num vetor. Após os dados terem sido completamente informados, o programa deverá calcular a percentual de cada um dos concorrentes e informar o vencedor da enquete. O formato da saída foi dado pela empresa, e é o seguinte:

    Sistema Operacional     Votos   %
    -------------------     -----   ---
    Windows Server           1500   17%
    Unix                     3500   40%
    Linux                    3000   34%
    Netware                   500    5%
    Mac OS                    150    2%
    Outro                     150    2%
    -------------------     -----
    Total                    8800

    O Sistema Operacional mais votado foi o Unix, com 3500 votos, correspondendo a 40% dos votos.
  20. As Organizações Tabajara resolveram dar um abono aos seus colaboradores em reconhecimento ao bom resultado alcançado durante o ano que passou. Para isto contratou você para desenvolver a aplicação que servirá como uma projeção de quanto será gasto com o pagamento deste abono.
    Após reuniões envolvendo a diretoria executiva, a diretoria financeira e os representantes do sindicato laboral, chegou-se a seguinte forma de cálculo:
    a.Cada funcionário receberá o equivalente a 20% do seu salário bruto de dezembro; a.O piso do abono será de 100 reais, isto é, aqueles funcionários cujo salário for muito baixo, recebem este valor mínimo; Neste momento, não se deve ter nenhuma preocupação com colaboradores com tempo menor de casa, descontos, impostos ou outras particularidades. Seu programa deverá permitir a digitação do salário de um número indefinido (desconhecido) de salários. Um valor de salário igual a 0 (zero) encerra a digitação. Após a entrada de todos os dados o programa deverá calcular o valor do abono concedido a cada colaborador, de acordo com a regra definida acima. Ao final, o programa deverá apresentar:
    O salário de cada funcionário, juntamente com o valor do abono;
    O número total de funcionário processados;
    O valor total a ser gasto com o pagamento do abono;
    O número de funcionário que receberá o valor mínimo de 100 reais;
    O maior valor pago como abono; A tela abaixo é um exemplo de execução do programa, apenas para fins ilustrativos. Os valores podem mudar a cada execução do programa.
    Projeção de Gastos com Abono
    ============================

    Salário: 1000
    Salário: 300
    Salário: 500
    Salário: 100
    Salário: 4500
    Salário: 0

    Salário    - Abono   
    R$ 1000.00 - R$  200.00
    R$  300.00 - R$  100.00
    R$  500.00 - R$  100.00
    R$  100.00 - R$  100.00
    R$ 4500.00 - R$  900.00

    Foram processados 5 colaboradores
    Total gasto com abonos: R$ 1400.00
    Valor mínimo pago a 3 colaboradores
    Maior valor de abono pago: R$ 900.00
  21. Faça um programa que carregue uma lista com os modelos de cinco carros (exemplo de modelos: FUSCA, GOL, VECTRA etc). Carregue uma outra lista com o consumo desses carros, isto é, quantos quilômetros cada um desses carros faz com um litro de combustível. Calcule e mostre:
    O modelo do carro mais econômico;
    Quantos litros de combustível cada um dos carros cadastrados consome para percorrer uma distância de 1000 quilômetros e quanto isto custará, considerando um que a gasolina custe R$ 2,25 o litro. Abaixo segue uma tela de exemplo. O disposição das informações deve ser o mais próxima possível ao exemplo. Os dados são fictícios e podem mudar a cada execução do programa.
    Comparativo de Consumo de Combustível

    Veículo 1
    Nome: fusca
    Km por litro: 7
    Veículo 2
    Nome: gol
    Km por litro: 10
    Veículo 3
    Nome: uno
    Km por litro: 12.5
    Veículo 4
    Nome: Vectra
    Km por litro: 9
    Veículo 5
    Nome: Peugeout
    Km por litro: 14.5

    Relatório Final
     1 - fusca           -    7.0 -  142.9 litros - R$ 321.43
     2 - gol             -   10.0 -  100.0 litros - R$ 225.00
     3 - uno             -   12.5 -   80.0 litros - R$ 180.00
     4 - vectra          -    9.0 -  111.1 litros - R$ 250.00
     5 - peugeout        -   14.5 -   69.0 litros - R$ 155.17
    O menor consumo é do peugeout.
  22. Sua organização acaba de contratar um estagiário para trabalhar no Suporte de Informática, com a intenção de fazer um levantamento nas sucatas encontradas nesta área. A primeira tarefa dele é testar todos os cerca de 200 mouses que se encontram lá, testando e anotando o estado de cada um deles, para verificar o que se pode aproveitar deles.
    Foi requisitado que você desenvolva um programa para registrar este levantamento. O programa deverá receber um número indeterminado de entradas, cada uma contendo: um número de identificação do mouse o tipo de defeito:
    necessita da esfera;
    necessita de limpeza; a.necessita troca do cabo ou conector; a.quebrado ou inutilizado Uma identificação igual a zero encerra o programa. Ao final o programa deverá emitir o seguinte relatório:
    Quantidade de mouses: 100

    Situação                        Quantidade              Percentual
    1- necessita da esfera                  40                     40%
    2- necessita de limpeza                 30                     30%
    3- necessita troca do cabo ou conector  15                     15%
    4- quebrado ou inutilizado              15                     15%
  23. A ACME Inc., uma empresa de 500 funcionários, está tendo problemas de espaço em disco no seu servidor de arquivos. Para tentar resolver este problema, o Administrador de Rede precisa saber qual o espaço ocupado pelos usuários, e identificar os usuários com maior espaço ocupado. Através de um programa, baixado da Internet, ele conseguiu gerar o seguinte arquivo, chamado "usuarios.txt":
    alexandre       456123789
    anderson        1245698456
    antonio         123456456
    carlos          91257581
    cesar           987458
    rosemary        789456125
    Neste arquivo, o nome do usuário possui 15 caracteres. A partir deste arquivo, você deve criar um programa que gere um relatório, chamado "relatório.txt", no seguinte formato:

    ACME Inc.               Uso do espaço em disco pelos usuários
    ------------------------------------------------------------------------
    Nr.  Usuário        Espaço utilizado     % do uso

    1    alexandre       434,99 MB             16,85%
    2    anderson       1187,99 MB             46,02%
    3    antonio         117,73 MB              4,56%
    4    carlos           87,03 MB              3,37%
    5    cesar             0,94 MB              0,04%
    6    rosemary        752,88 MB             29,16%

    Espaço total ocupado: 2581,57 MB
    Espaço médio ocupado: 430,26 MB
    O arquivo de entrada deve ser lido uma única vez, e os dados armazenados em memória, caso sejam necessários, de forma a agilizar a execução do programa. A conversão da espaço ocupado em disco, de bytes para megabytes deverá ser feita através de uma função separada, que será chamada pelo programa principal. O cálculo do percentual de uso também deverá ser feito através de uma função, que será chamada pelo programa principal.
  24. Faça um programa que simule um lançamento de dados. Lance o dado 100 vezes e armazene os resultados em um vetor . Depois, mostre quantas vezes cada valor foi conseguido. Dica: use um vetor de contadores(1-6) e uma função para gerar numeros aleatórios, simulando os lançamentos dos dados.

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()