Enviar um café pro programador

Mostrando postagens com marcador Listas. Mostrar todas as postagens
Mostrando postagens com marcador Listas. Mostrar todas as postagens

A biblioteca NumPy – Arrays, Vetores, Arrays Multidimensionais e Matrizes

Neste tutorial, vamos conhecer um pouco mais sobre a biblioteca Numpy, a library mais fundamental do mundo da programação científica, computação numérica e até mesmo da análise de dados.

Vamos aprender o que são e para que servem os arrays, vetores, matrizes e arrays multidimensionais.


Sobre a as origens da biblioteca NumPy

Um dos maiores grupos de praticantes de programação, são as pessoas do meio científico.

Então, sempre que surge uma nova linguagem, uma nova ferramenta, um novo programa ou sistemas, não tenha dúvidas: vários físicos, matemáticos, químicos, engenheiros etc, vão dar uma olhada para ver se aquilo pode ser usado no mundo das ciências.

E não foi diferente com o Python. Aquela linguagem bonita, simples e bem direta, encantou os cientistas.

Em 1995, a comunidade já começou a lançar pacotes voltadas para cálculos numéricos, como o Numarray e o Numeric. Depois, esses dois pacotes e diversas outras funções foram agrupadas e em 2006 foi lançada a primeira versão da NumPy library.

Desde então, se tornou a biblioteca mais usada pela comunidade científica do mundo inteiro, para performar operações em arrays com uma eficiência e versatilidade incrível.

Se seus dados e informações podem ser colocados em um array, então você pode fazer tudo e mais um pouco com eles, usando o NumPy.

O core da biblioteca foi escrito em linguagem C, conhecida por ser extremamente robusta, rápida e poderosa.


Arrays e Vetores em Python

Antes de entrar em mais detalhes sobre a NumPy, vamos relembrar o que são arrays, vetores, matrizes...

O que é um Array

Inicialmente, no estudo da programação, vamos definindo variáveis. Por exemplo, uma variável para armazenar sua nota de Cálculo I. Depois, usamos outra variável para armazenar sua nota de Física I.

Veja que, com esses dois dados já podemos calcular a sua média. Mas, provavelmente você tem mais matérias. Então vamos definir mais variáveis para armazenar suas notas de Introdução a Química, Física Experimental, Programação...veja, já temos 5 variáveis, só para suas notas.

Agora imagina que você precise trabalhar com as notas de todas as pessoas da sua sala, uns 40 alunos. Iria precisar de 200 variáveis. E aí? Vai definir, inicializar e trabalhar com cada uma dessas variáveis, individualmente? Sem chance.

E aí que entram os arrays. Array é um tipo de estrutura de dados, é como se fosse um novo tipo de 'variável', que consegue armazenar, de maneira ordenada, diversas variáveis, do mesmo tipo, de uma vez só.

Imagine uma variável como um espaço na memória do seu computador. Um quadradinho. Um array, é um conjunto 'grudado' desses quadradinhos:

Vetor em Python
O array é essa fila de bloquinhos, onde cada bloco pode armazenar uma variável. Cada bloco é definido por um índice. O primeiro é sempre 0.
Na imagem acima, temos um array de 6 elementos: o elemento 0, o elemento 1, ...e o elemento 5.

Ou seja, em vez de criar 200 variáveis para armazenar notas (variável do tipo float - números decimais), apenas use um array do tipo float de tamanho 200.

Veja bem, uma variável comum armazena apenas um tipo de informação (um número inteiro, ou um decimal, ou uma string, ou um valor lógico etc). Sempre uma coisa apenas.

Então, um array é uma variável especial que pode armazenar várias informações de uma vez só.


O que é uma matriz ou array multidimensional

No exemplo anterior, das 5 notas dos 40 alunos, teríamos um array de 200 elementos. Ou seja, 1 linha e 200 colunas. É um array de apenas uma dimensão.

Agora imagina que o coordenador do seu curso tenha 4 turmas iguais a sua. Ele ia precisar de 200 variáveis para armazenar as notas da primeira turma, mais 200 para a da segunda turma, mais 200 para a terceira e para a quarta.

Em vez de um array com uma dimensão, de uma linha, seria interessante ele ter um array com 4 linhas. Assim, cada linha representaria uma turma.

Temos então um array multidimensional, do tipo 4 x 200, ou seja, 4 linhas e 200 colunas.

Matrizes em NumPy

Na imagem acima, temos um array multidimensional do tipo 3x3, 3 linhas e 3 colunas.
É um array 2D (duas dimensões), onde cada linha é um array 1D (de uma dimensão).

Isso te lembra algo, do ensino médio ou de álgebra linear? Sim, amigos. É uma matriz.


O que é um vetor

Ou seja, arrays podem armazenar diversas informações, e em vários formatos (shapes) e dimensões. Eles possuem no mínimo uma linha e uma coluna (array com um elemento só).

Mas podem ter diversas linhas e diversas colunas, como em uma matriz. Mas veja, uma matriz é um elemento bidimensional. Podemos ter arrays com mais dimensões, inclusive.
Array de Matrizes em NumPy

No exemplo acima, temos 3 matrizes. Cada matriz é do tipo 4x4, e cada elemento dessa matriz é uma lista. É um array multidimensional, de 3 dimensões, do tipo 3x4x4

Já um vetor (vector) é nada mais que um array, mas sempre de uma dimensão apenas. Que se assemelham muito com as listas do Python, que já estudamos vastamente aqui em nosso curso.


Diferença entre lista e vetor

As listas são estrutura de dados heterogêneas, ou seja, você pode criar uma lista com um número inteiro, seguido de um caractere, depois um float, um texto etc.
Você pode agrupar todo tipo de dado que quiser, em uma lista do Python.

Já os arrays, que estudaremos em Computação Científica e Data Science, devem sempre armazenar elementos do mesmo tipo. Ou seja, arrays são homogêneos.

Outra característica, é que os arrays tem tamanhos fixos, definidos no momento de sua criação. Se precisarmos mudar, vamos ter que criar outro array.

Já as listas são dinâmicas, você pode aumentar e reduzir seu tamanho sempre que desejar. São mais flexíveis, porém isso tem seu preço computacional, são mais lentas.

Por conta dessas características mais específicas, os arrays são bem mais rápidos e eficientes, consumindo menos memória e necessitando menos capacidade computacional. Portanto, não é de se estranhar terem sido escolhidos como a base da computação numérica no NumPy


O que é possível fazer com o NumPy

Agora que já entramos em detalhes mais específicos sobre arrays, vetores e matrizes, vamos ver o que é possível fazer com arrays.

Basicamente, vamos aprender a manipular e processar arrays.

Sabe nossa matriz, com as notas? Podemos descobrir a média de cada aluno, de cada turma. Ou podemos descobrir quais foram as médias dele em cada matéria.

Com base nisso, podemos dizer quem tirou acima de 7.0 e passou direto, quem tirou entre 4.0 e 7.0 e vai pra recuperação, e os que reprovaram direto.

E qual turma foi a melhor? Ora, manipulando os arrays para calcular a média de cada sala (lembra que cada linha representa uma turma? Ué, tira a média dos dados de cada linha da matriz).

Podemos 'quebrar' o array multidimensional em outros menores, somente com as notas de cada matéria ou de cada turma.

Podemos também adicionar mais uma linha nesse array, com os dados de uma nova turma. Mas, lembra que dissemos que os arrays tem tamanhos fixos? Como adicionar os dados de mais uma turma?

Nesse caso, criamos uma matriz 5x200, copiamos os dados da matriz antiga 4x200 para esta e em seguida inserimos as informações da quinta linha. Prontinho, um novo array multidimensional.

Isso são apenas algumas operações básicas. Podemos ir bem mais além, e fazer tudo de Álgebra Linear, e até cálculos da transformada de Fourier, em cima destes arrays.


ndarray - O coração da biblioteca NumPy

Em nossa apostila e livro de Programação Científica em Python, falamos sobre os objetos da classe ndarray da NumPy, que são a base de funcionamento dessa biblioteca, que possuem informações cruciais para podermos entender melhor como trabalhar com os arrays para propósitos científicos.

No próximo tutorial, vamos aprender como criar e inicializar arrays dos mais diversos tipos de dados.

Como gerar a Sequência de Fibonacci com listas e recursão

 Neste tutorial, vamos aprender como criar um algoritmo que gera uma lista, em Python, com os números da série de Fibonacci:

Exibir a sequência de Fibonacci

Código da Sequência de Fibonacci em Python

Sem mais delongas, vamos ao algoritmo:

  1. def fib(n):
  2.     f0, f1 = 0, 1
  3.     f = [1] * n
  4.     for i in range(1, n):
  5.         f[i] = f0 + f1
  6.         f0, f1 = f1, f[i]
  7.     return f
  8. num = int(input("Quantos termos gerar: "))
  9. print( fib(num) )

Diferente das outras vezes, que usamos o laço while e usando recursão com funções, dessa vez vamos usar listas.

Código comentado da Série de Fibonacci

Na linha 1, definimos a função fib(), que recebe um inteiro n, que é o número de termos que vamos gerar.

Os primeiros termos da série sempre são 0 e 1, armazenados nas variáveis f0 e f1.
E para os próximos termos? Bom, como teremos n termos, vamos criar uma lista f com n termos, isso foi feito na linha 3.

O próximo passo é aplicar nos próximos termos a regra da sequência de Fibonacci:
"Cada termo é a soma dos dois anteriores"

Como ja temos os termos f0 e f1, o próximo termo é a soma destes (linha 5).
Agora temos três termos: f0, f1 e f[i]

Na próxima iteração, o novo valor de f0 será o valor antigo de f1.
O novo valor de f1 será o valor anterior da lista f
E o novo valor da lista? É sempre a soma dos dois anteriores, que são f0 e f1.

  • Benchmarking do algoritmo

Vamos usar os comandos %timeit e %time para analisar o tempo e execução para achar uma lista com os 100 primeiros termos da Série de Fibonacci como nosso algoritmo:

Sequência de Fibonacci em Python

Veja que foram feitos 100.000 (cem mil!) loops, em poucos microssegundos! Ou seja, é um bom código.

Exercício:

Faça o mesmo benchmarking para o código usando apenas o laço while. E depois usando o código que usa apenas recursividade sem as listas.

E aí, qual deu melhor?

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.

Matriz em Python: Lista dentro de Lista

Neste tutorial de nosso Curso de Python, vamos aprender o que são matrizes, para que servem, porque usamos, como criar uma matriz, que são listas dentro de listas.

Leia também:
  1. Apostila Python Progressivo (PDF)
  2. Certificado do curso (trabalhar e ganhar dinheiro com Python)

Lista dentro de Lista

Até o momento, em nossas listas, colocamos dados como números inteiros, float e strings.
Porém, é possível colocar também uma lista, dentro de uma lista.

A lista:
  • notas = [10, 9, 8]

Possui apenas três elementos, três inteiros. Uma linha e 3 colunas, ok ?

Agora vamos supor que temos três alunos, onde cada aluno possui 3 notas.
Podemos inicializar uma lista com as notas desses três alunos da seguinte maneira:

notas= [ [10, 9, 8],
              [9, 8, 7],
              [8, 10, 5] ]

Ou seja, temos 3 listas dentro de uma lista.
Temos 3 linhas e 3 colunas (tente ver como uma matriz de elementos, uma tabela).


Como acessar elementos de uma Matriz

As notas do primeiro aluno estão na lista notas[0]
As notas do segundo aluno estão na lista notas[1]
As notas do terceiro aluno estão na lista notas[2]

Para acessar a primeira nota do primeiro aluno: notas[0][0]
Para acessar a segunda nota do primeiro aluno: notas[0][1]
Para acessar a terceira nota do primeiro aluno : notas[0][2]
Para acessar a primeira nota do segundo aluno: notas[1][0]
Para acessar a segunda nota do segundo aluno: notas[1][1]
Para acessar a terceira nota do segundo aluno : notas[1][0]
Para acessar a primeira nota do terceiro aluno : notas[2][0]
Para acessar a segunda nota do terceiro aluno : notas[2][1]
Para acessar a terceira nota do terceiro aluno  : notas[2][2]

Para calcular a média das notas do primeiro aluno
(notas[0][0] + notas[0][1] +notas[0][2]) / 3

Para calcular a média das notas do segundo aluno
(notas[1][0] + notas[1][1] +notas[1][2]) / 3

Para calcular a média das notas do terceiro aluno
(notas[2][0] + notas[2][1] +notas[2][2]) / 3



Exercício de Matriz em Python

Crie uma matriz 4 x 4 (ou seja, 4 linhas e 4 colunas, ou seja, 4 listas dentro de uma lista maior).
Popule essa lista com números de 0, 1, 2, 3 etc

Como inicializar uma matriz

Usamos um laço for para inicializar uma matriz.

Por exemplo, para inicializar uma lista de 4 elementos, todos 0, fazemos:
  • [0 for i in range(4)]

Para inicializar uma matriz 4x4 então, basta repetirmos o código anterior dentro de outro for:
  • matriz = [ [0 for i in range(4)] for j in range(4)]

Inicializamos uma variável com valor 4.
Para percorrermos uma matriz, temos que usar laços aninhados, ou seja, for dentro de for.
O primeiro for percorre as linhas, o de dentro percorre as colunas.

Para mudarmos cada valor da matriz, a partir de 0, fazemos:


Como exibir uma matriz

Você pode imprimir uma matriz de nome matrix simplesmente fazendo: print(matrix)

Porém, o Python vai imprimir tudo numa mesma linha, muito feio.
Para exibirmos linha por linha, vamos novamente usar o laço for aninhado de outro for.

O primeiro for, de cima, vai primeiro começar na primeira linha.
O laço for aninhado, vai imprimir cada coluna, ou seja, cada elemento da linha.

Após terminar de imprimir a linha, ou seja, quando o laço for de dentro termina, damos um print() para dar uma quebra de linha quando terminamos de imprimir a linha.

Nosso código, então, fica:

matriz = [ [0 for i in range(4)] for j in range(4)]
count=0

for linha in range(4):
    for coluna in range(4):
        matriz[linha][coluna] = count
        count += 1

for linha in range(4):
    for coluna in range(4):
        print("%4d" % matriz[linha][coluna], end='')
    print()

Jogo em Python

Crie um jogo da velha em Python, usando uma matriz 3x3.
Você, usuário, que vai jogar, com os dois jogadores.

Como Copiar uma Lista em Python

Neste tutorial de nosso Curso de Python, vamos aprender a maneira errada e a correta de se copiar uma lista.

Referenciando Listas - Copiando do jeito Errado

Vamos criar  a list1:
list1 = [1, 2, 3, 4]

O que acontece por trás dos planos é que existe um bloco de memória no seu computador, com a lista [1, 2, 3, 4] armazenado lá. A varável list1 tem um endereço que aponta para esse bloco de memória.

Agora vamos criar outra lista, a list2.
Fazendo uma cópia direta: list2 = list1

Agora faça um teste, mude um valor da list1, por exemplo:
list1[0] = 0

Agora a list1 será [0,2,3,4].
Porém, se você der um print em list2 vai ver que ela também é [0, 2, 3, 4]

Curso de Python online de graça.


Mas peraí Python!
Eu queria mudar só a list1! E não a list2.
Por que isso ocorre?

Simples, ao fazermos list2=list1, faremos com que list2 também aponte para aquele endereço de memória.

Então, se alterar o valor naquele bloco de memória, essa mudança vai ser visível para todas as variáveis que apontem para ĺa!


Copiando do Jeito Certo e Difícil

Uma solução para copiar corretamente é copiar item por item:

list2 = []
for item in list1:
    list2.append(item)

Copiando do Jeito Certo e Fácil

Ou uma solução ainda mais elegante:

list2 = [] + list1

O que fizemos foi concatenar a lista list1 com outra lista (vazia), e o resultado é uma cópia de list1, mas agora list2 não aponta para o mesmo bloco de memória.

Bacana copiar dessa maneira, não é?

Como Saber se um Item está ou não na Lista - Operadores IN e NOT IN

Neste tutorial de Python, vamos aprender como usar os operadores in e not in para saber se um item está dentro ou não de uma lista.

Operador in

Vamos pegar uma lista com os dias úteis da semana:
  • semana=['Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta' ]
Essa lista são os dias que você vai trabalhar.

Para saber se um determinado item faz parte da lista, você faz:
item in semana

Se estiver, ele retorna True.
Se não estiver, retorna False.

Rode o seguinte exemplo:

semana=['Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta' ]

if 'Sexta' in semana:
    print("Sim, ", 'Sexta'," está na lista")
else:
    print("Não está")


Operador not in

Agora se você quiser confirmar que um item não está na lista, faça o teste:
item not in semana

Se não estiver, retorna True.
Se estiver, retorna False

Veja:

semana=['Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta' ]

if 'Domingo' not in semana:
    print("Não, ", 'Domingo'," não está na lista")
else:
    print("Está")


Como Usar Listas em Pyhon - Adicionar, Mudar, Concatenar e Outras Operações

Neste tutorial de nosso curso de Python, vamos aprender como fazer várias operações com listas, como adicionar algum item, modificar, concatenar, ver tamanho de uma lista etc.

Adicionar Item em uma lista: append()


Vamos criar uma lista com nossas bandas favoritas.
Essa lista vai se chamar e vai ser inicialmente nula bandas = [] .

Para adicionar um item na lista, vamos usar o método append(), que funciona assim:
nomeDaLista.append(item a ser adicionado)

Então, se quisermos adicionar a banda Iron Maiden na lista bandas, fazemos:
bandas.append("Iron Maiden")

Dê um print na lista e veja como ela está:
print(bandas)

Como colocar um item numa Lista em Python

Exercício de Listas:

Crie um programa que pergunta se o usuário deseja adicionar uma nova banda na Lista ou exibir a lista.

Código:
bandas = []

while True:
    op =int(input("1. Adicionar banda\n"
                  "2. Exibir bandas favoritas\n"))

    if(op==1):
        banda=input("Digite nome da banda: ")
        bandas.append(banda)
    if(op==2):
        print(bandas)

Teste esse código.
Se escolher a opção 1, você digita uma nova banda e insere essa string na lista bandas usando o método append().



Tamanho de uma lista: len()


Para saber o tamanho de uma lista, basta passar ela como argumento para a função len().
Por exemplo, o tamanho da lista bandas é: len( bandas )

Pronto. Simplesmente isso!

Exercício de Lista em Python:

Coloque mais uma opção em seu programa, de modo a exibir o tamanho atual da lista.

Nosso código fica:
bandas = []

while True:
    op =int(input("1. Adicionar banda\n"
                  "2. Exibir bandas favoritas\n"
                  "3. Tamanho da lista\n"))

    if(op==1):
        banda=input("Digite nome da banda: ")
        bandas.append(banda)
    if(op==2):
        print(bandas)
    if(op==3):
        print("Tamanho da lista: ", len(bandas))

Teste !




Como Mudar Item em uma Lista

Vamos supor que temos uma lista com 3 bandas favoritas:
['Iron Maiden', 'Rush', 'Tiririca' ]

Você digitou Tiririca por engano, foi querer brincar e deu nisso: sua lista de bandas favoritas com Tiririca no meio.

Vamos mudar o valor de 'Tiririca' para Black Sabbath.
Para isso, o primeiro passo é saber o índice de 'Tiririca'.

Como estudamos no tutorial sobre Como acessar os items de uma lista, sabemos que os índices começam com contagem 0. Assim:
  • bandas[0] = 'Iron Maiden'
  • bandas[1] = 'Rush'
  • bandas[2] = 'Tiririca'


Ou seja, vamos alterar o índico de valor 2!
Basta fazer:
  • bandas[2] = 'Black Sabbath' e prontinho, mudou o valor de um item!

Só alterar ele diretamente e fazer a mudança no valor da variável.

Exercício de Lista em Python

Coloque uma opção para mudar o valor de um item. Você deve pedir a posição do índice (começando de 0) e o valor para mudar. Se o usuário escolher um valor superior ao existente, exibe uma mensagem de erro.

Nosso código agora fica:
bandas = []

while True:
    op =int(input("1. Adicionar banda\n"
                  "2. Exibir bandas favoritas\n"
                  "3. Tamanho da lista\n"
                  "4. Mudar valor de item\n"))

    if(op==1):
        banda=input("Digite nome da banda: ")
        bandas.append(banda)
    if(op==2):
        print(bandas)
    if(op==3):
        print("Tamanho da lista: ", len(bandas))
    if(op==4):
        index=int(input("Indice que vai alterar: "))
        if(index<len(bandas)):
            temp=input("Nome da banda: ")
            bandas[index] = temp
        else:
            print("Esse indice nao existe")
Teste também!


Como Deletar Item de uma Lista: del item

Uma maneira simplesmente de apagar um item, basta fazer:
del item

Por exemplo, se quer apagar a primeira banda da lista de favoritas:
del bandas[0]

E prontinho, a primeira banda some de sua lista!

Concatenar listas: +

Concatenar nada mais é que 'unir', grudar duas listas.

Vamos supor que temos a lista:
bandas1 = ['Iron Maiden', 'Rush']

E a lista:
bandas2=['Deep Purple', Led Zeppelin']

E quisermos unir as duas listas, em uma só, basta 'somar' elas:
bandas = bandas1 + bandas2

O Python é tão esperto que vai entender e o resultado vai ser:
bandas = ['Iron Maiden', 'Rush','Deep Purple', Led Zeppelin']

Ou seja, ele concatenou as duas listas!

Repetição de listas: *

O Python é tão esperto, mas tão esperto, que permite até você usar o símbolo de multiplicação com listas.

Se desejar repetir uma lista, basta multiplicar ela mesma por algum valor.
Vamos supor que você seja muito fã das bandas:
bandas1 = ['Iron Maiden', 'Rush']

Tão fã, que é fã 3x. Para repetir isso, basta fazer:
bandas = bandas * 3

O resultado é:
bandas = ['Iron Maiden', 'Rush', 'Iron Maiden', 'Rush', 'Iron Maiden', 'Rush']

Ou seja, repetiu ela mesma três vezes! Como se tivesse concatenado com ela mesma três vezes!

Operações com Listas:

Existem diversos outros métodos (funções embutidas) nas listas, que já vem por padrão no Python.

Aconselhamos uma boa, detalhada e despretensiosa lida na documentação:
https://docs.python.org/3/tutorial/datastructures.html

Onde vemos que é possível:
  • inserir item no índice x: lista.insert(x, item)
  • remover item: lista.remove(item) (ps: retira a primeira ocorrência)
  • inverter uma lista: reverse()
  • ordena a lista em ordem crescente ou alfabética: lista.sort()
  • apagar uma lista: clear()
  • copiar uma lista: copy()
  • contar quantas vezes um item aparece: count(x)
  • retirar um elemento específico da linha: pop(x)


E por ai vai!