Computadores e Programação Engª Biomédica Departamento de Física Faculdade de Ciências e Tecnologia da Universidade de Coimbra Ano Lectivo 2005/2006 FICHA 2 CONCEITOS BÁSICOS DE PROGRAMAÇÃO PYTHON 2.1. Objectivos Objectivos que o aluno deve atingir com esta ficha: - Compreender o conceito de variável; - Compreender os vários tipos de dados; - Operar e manipular diferentes tipos de dados. 2.2. Variáveis O conceito de variável existe em Python, como em todas as linguagens de programação. Por definição, uma variável representa uma relação unívoca entre um valor numérico e um nome, valor esse que poderá ser acedido e alterado a qualquer instante, dependendo da execução do programa. Em Python o nome de uma variável pode ser composto por letras maiúsculas, minúsculas, dígitos e pelo caracter “_”. 2.3 Tipos de dados A linguagem de programação Python suporta vários tipos de dados primitivos (iremos mais tarde estudar outros tipos de dados criados pelo próprio utilizador): - Números inteiros (em bases decimal, octal ou hexadecimal); - Números de vírgula flutuante (reais); - Números complexos; - Cadeias de caracteres (em inglês designadas por strings). Computadores e Programação – Engª Biomédica 2005/06 – Ficha 2 Página 1 de 9 Também suporta de raiz tipos de dados compostos (não primitivos), como é o caso de: - Listas; - Tuplas; - Dicionários. Um número decimal é representado por uma sequência de algarismos entre ‘0’ (zero) e ‘9’ (nove). Um número decimal não deverá começar nunca por ‘0’: >>> x = 40 >>> x 40 No caso de se pretender lidar com números octais (base 8), estes deverão ser representados por uma sequência de algarismos de ‘0’ (zero) a ‘7’ (sete) e ser sempre precedidos por ‘0’ (zero) para identificação da base, como se demonstra no exemplo seguinte, onde o número ‘010’ representado em base octal equivale a ‘8’ em base decimal: >>> y = 010 >>> y 8 Finalmente, e para o caso dos números hexadecimais (de base 16), temos sequências de ‘0’ (zero) até ‘9’, ‘A’, ‘B’, ‘C’, ’D’, ’E’ e ’F’. Devem ser precedidas pelo prefixo ‘0x’ ou ‘0X’ para que o intérprete as identifique na base correcta. >>> 0xf 15 >>> 0x10 16 Computadores e Programação – Engª Biomédica 2005/06 – Ficha 2 Página 2 de 9 2.3.1 Números inteiros Um número inteiro pode ser representado em qualquer uma das bases referidas anteriormente e, dependendo da arquitectura do computador e do sistema operativo, poderá tomar valores entre -231 e +231-1. 2.3.2 Números de vírgula flutuante Números de vírgula flutuante representam números reais e possuem, portanto, parte inteira e parte fraccionária. Podem ser representados na notação decimal normal ou em notação científica: >>> 0.002 0.002 >>> 2e-3 0.002 2.3.3 Números complexos Os números complexos são representados da forma x + yj, ou seja: >>> 3+7j (3+7j) >>> complex(3,7) (3+7j) Há em Python formas directas de extrair a parte real ou imaginária de um número complexo. Do mesmo modo, é possível obter directamente o seu valor absoluto através da função abs(): >>> z=4+3j >>> z.real 4.0 >>> z.imag 3.0 >>> abs(z) 5.0 Sempre que se pretender verificar o tipo de variável, pode-se usar o comando type() da forma que se descreve: Computadores e Programação – Engª Biomédica 2005/06 – Ficha 2 Página 3 de 9 >>> type(z) <type 'complex'> Obtém-se, portanto, a indicação de que se trata de um número complexo. 2.3.4 Cadeias de caracteres Cadeias de caracteres ou strings são sequências de zero ou mais caracteres. Em Python essas sequências são delimitadas por dois tipos possíveis de caracteres especiais: plicas (‘ ’) ou aspas (“ ”): >>> "ola" 'ola' >>> 'ola' 'ola' No caso de se pretender usar plicas (‘ ’) ou aspas (“ ”) dentro da própria string, deverá proceder-se da seguinte forma: se o caracter que pertence à string é diferente do caracter de delimitação, não é necessário fazer nada. Em caso contrário, esse caracter deverá ser precedido por uma barra (\). Veja-se o exemplo: >>> "bons dias" 'bons dias' >>> "bons d"ias" SyntaxError: invalid syntax >>> "bons d\"ias" 'bons d"ias' O caracter \n é interpretado como sendo um único caracter, e é usado para representar uma mudança de linha: >>> print "OlaJoao" OlaJoao >>> print "Ola\nJoao" Ola Joao Computadores e Programação – Engª Biomédica 2005/06 – Ficha 2 Página 4 de 9 É possível realizar diversas operações de manipulação de strings em Python. Uma dessas operações é a concatenação (que consiste em encadear strings, juntando sucessivamente umas no final de outras) que se realiza através da operação + >>> sequencia = "frase de teste" >>> print "Apresento uma "+sequencia+" concatenada!" Apresento uma frase de teste concatenada! >>> Outro tipo de operação realizável em strings consiste na sua repetição através do operador * >>> print "bla "*17 bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla >>> 2.3.5 Listas As listas definem uma estrutura de dados que agrupa um conjunto de elementos de qualquer tipo, podendo esses elementos, por sua vez, ser também listas: >>> List=[12.0, 3, 'Pascal', -7, 440, [23, 'bio', 'a']] >>> List [12.0, 3, 'Pascal', -7, 440, [23, 'bio', 'a']] A função len() permite obter o número total de elementos que formam uma lista: >>> len(List) 6 >>> É possível aplicar a listas, operações (concatenação, repetição, etc.) que também se aplicam a strings: >>> 2*List [12.0, 3, 'Pascal', -7, 440, [23, 'bio', 'a'], 12.0, 3, 'Pascal', -7, 440, [23, 'bio', 'a']] >>> Computadores e Programação – Engª Biomédica 2005/06 – Ficha 2 Página 5 de 9 Adicionalmente, a linguagem Python permite alterar elementos ou sub-blocos de uma determinada lista. Essa alteração faz-se acedendo ao item que corresponde ao elemento que se deseja alterar: >>> List[4:5]=['Lavoisier'] >>> List [12.0, 3, 'Pascal', -7, 'Lavoisier', [23, 'bio', 'a']] É possível remover um determinado elemento de uma lista (no caso de baixo elimina-se o primeiro elemento1) acedendo-se ao item correspondente através do comando del: >>> del List[0] >>> print List [3, 'Pascal', -7, 'Lavoisier', [23, 'bio', 'a']] Ou então remover um sub-bloco da lista (no exemplo seguinte elimina-se o segundo e terceiro elementos), através do mesmo comando del. Note-se que o limite superior do intervalo é não inclusivo: >>> del List[2:4] >>> print List [3, 'Pascal', [23, 'bio', 'a']] Para eliminar completamente a lista da memória usa-se: >>> del List >>> print List Traceback (most recent call last): File "<pyshell#227>", line 1, in -toplevelprint List NameError: name 'List' is not defined >>> 1 O primeiro elemento de uma lista é sempre representado pelo item ‘0’ (zero) Computadores e Programação – Engª Biomédica 2005/06 – Ficha 2 Página 6 de 9 2.3.6 Dicionários Da mesma forma que as listas, também os dicionários agrupam elementos de tipos diferentes. A grande diferença reside no facto de, nos dicionários, cada elemento vir associado a uma chave. Tal como num dicionário convencional, onde primeiro se procura uma palavra para depois encontrar o seu significado, em Python utiliza-se a chave para aceder ao elemento que lhe corresponde. A declaração de um dicionário assemelha-se à de uma lista. Difere apenas no uso de chavetas em vez de parêntesis rectos e na declaração de cada um dos seus elementos separados por vírgulas, no formato ‘chave:valor’. Quer a chave, quer o valor, podem ser de qualquer um dos tipos de dados estudados: >>> Dic={'vasco':22, 'ana':19, 'joana':18, 'francisco':20} >>> print Dic {'francisco': 20, 'joana': 18, 'vasco': 22, 'ana': 19} Para aceder a um valor de um dicionário usam-se parêntesis rectos: >>> Dic['vasco'] 22 Para adicionar novos valores à lista, usa-se notação idêntica: >>> Dic['rita']=21 >>> print Dic {'francisco': 20, 'joana': 18, 'vasco': 22, 'rita': 21, 'ana': 19} 2.3.7 Tuplas Vimos que strings e listas são dois tipos de dados sequenciais. Uma tupla (no inglês tuple) é apenas outro tipo de dados sequencial standard que consiste num conjunto de valores separados por vírgulas: >>> tup=1,2,3,'ola' >>> tup[0] 1 >>> tup[3] 'ola' Computadores e Programação – Engª Biomédica 2005/06 – Ficha 2 Página 7 de 9 Do mesmo modo que acontece com as strings, também as tuplas são imutáveis, isto é, não é possível atribuir um valor a um item individual de uma tupla. A declaração anterior é um exemplo de empacotamento de uma tupla. Os valores 1, 2, 3 e ‘ola’ foram empacotados juntamente numa tupla. A operação inversa também é possível e designa-se por desempacotamento sequencial: >>> x, y, w, z = tup >>> print x, y, w, z 1 2 3 ola Esta última operação requer que a lista de variáveis do lado esquerdo tenha o mesmo número de elementos que a sequência do lado direito. 2.4 Exercícios sugeridos 1. Implemente um programa que, a partir de uma lista de 5 elementos chamada ListaDeOrigem (inicializada com valores aleatórios pelo programador), crie uma nova lista designada por ListaAoCubo, do mesmo tamanho, cujos elementos representem os da primeira elevados ao cubo. Grave o programa no seu directório sob o nome de prob_3_1.py 2. Elabore um programa que peça ao utilizador o seu nome, dia, mês e ano de nascimento. De seguida, armazene cada um desses dados numa lista. Finalmente, imprima os dados da lista no ecran. Grave o programa no seu directório sob o nome de prob_3_2.py 3. Crie um programa que peça ao utilizador dois valores numéricos e calcule a sua soma, diferença, produto, divisão e expoente. Deverá guardar os resultados num dicionário chamado DicioCalculo, na forma: {‘soma’: 6, ‘subtraccao’: 2, .......}. Por fim, imprima os elementos do dicionário. Computadores e Programação – Engª Biomédica 2005/06 – Ficha 2 Página 8 de 9 4. Implemente um programa que, pedindo a um aluno o nome das disciplinas do 1º ano da licenciatura de Engª Biomédica e as respectivas notas obtidas, vá armazenando esses dados num dicionário chamado DicioNotas. No caso de o aluno ainda não ter obtido aproveitamento a uma determinada cadeira, deverá constar a nota ‘--’. 5. Escreva um programa que, em função de uma lista de números inteiros, desenhe o diagrama de barras horizontais correspondente. Siga o exemplo para a lista [3, 10, 7]: *** ********** ******* Computadores e Programação – Engª Biomédica 2005/06 – Ficha 2 Página 9 de 9