Ajuda Adessowiki | Introdução NumPy Adessowiki

Introdução ao Python no ambiente Adessowiki

Este texto foi adaptado das respostas entregue por alunos nos cursos oferecidos no Adessowiki.

Incluindo código Python no Adessowiki

Para incluir um trecho de programação Python em um documento Adessowiki, usa-se a meta instrução code da seguinte forma:

.. code:: python

   print 'hello world'

Veja o exemplo de incorporação deste trecho neste documento. Você poderá editar este documento para verificar como ele de fato é programado.

1 print 'hello world'
hello world

Note que é necessário deixar uma linha em branco após a instrução code e é necessário deixar um espaço em branco após o "::". Note também que o programa precisa estar identado em relação à instrução code. No documento Adessowiki o código fonte do programa poderá ou não ser mostrado dependendo do valor dos parâmetros show_code e show_output. Normalmente estes dois parâmetros estão habilitados, deixando os programas fontes visíveis e os resultados das saídas do print. É possível incluir quantos trechos de código como este numa data página e as variáveis definidas neles são persistentes, isto é, o código python será executado de forma concatenada com os diversos trechos de código de uma página.

Primeiros scripts em Python

O Python é uma linguagem de programação de alto nível, interpretada, imperativa, orientada a objetos, de tipagem dinâmica e forte, que possui ainda as seguintes características:

  • Não há pré-declaração de variáveis, e os tipos das variáveis são determinados dinamicamente.
  • O controle de bloco é feito apenas por indentação; não há delimitadores do tipo BEGIN e END ou { e }.
  • Oferece tipos de dados de alto nível: strings, listas, tuplas, dicionários, arquivos, classes.
  • É orientada a objetos.

É uma linguagem moderna e adaptada para o desenvolvimento tanto de aplicações genéricas como científicas. Para aplicações científicas, o Python possui um pacote muito importante e eficiente para o processamento de arrays multidimensionais: Numpy.

Em sua forma nativa, o Python suporta aos seguintes tipos de variáveis:

Tipo Variável Descrição Exemplo de sintaxe
int Variável inteira de precisão, prolongada automaticamente ao long a = 104843877
float Variável de ponto flutuante pi = 3.14159265
bool Variável booleana - True ou False a = False
complex Variável de número complexo c = 2+3j
str Variável para cadeia de caracteres ASCII a = "Exemplo"
list Lista heterogênea com permissão de alteração nos valores lista = [4, 'eu', 1]
tuple Tupla heterogênea sem permissão na alteração de valores tupla = (1, 'eu', 2)
dict Conjunto associativo de valores dic = {1:'eu', 2:'você'}

Tipos Númericos:

  • Declarando variáveis dos tipos inteiro, booleano, ponto flutuante e complexo e realizando algumas operações simples
 1 a = 3
 2 print type(a)
 3 b = 3.14
 4 print type(b)
 5 c = 3 + 4j
 6 print type(c)
 7 d = False
 8 print type(d)
 9 print a + b
10 print b * c
11 print c / a
<type 'int'>
<type 'float'>
<type 'complex'>
<type 'bool'>
6.14
(9.42+12.56j)
(1+1.33333333333j)

Observe que em operações envolvendo elementos de tipos diferentes a linguagem realiza a conversão dos elementos ao tipo adequado, conforme a seguinte hierarquia: complexo > ponto flutuante > inteiro

Tipos Sequenciais:

Python possui três tipos sequenciais principais: listas, tuplas e cadeia de caracteres (string).

Strings:

Pode-se declarar strings tanto usando aspas simples como duplas ou triplas. Strings são vetores imutáveis compostos de caracteres. Pode-se calcular o tamanho do string usando-se len.

1 nome1 = 'Faraday'
2 nome2 = "Maxwell"
3 print 'string do tipo:', type(nome1), 'nome1:', nome1, "comprimento:", len(nome1)
4 print 'concatenação de:', nome1, " e ", nome2, "resulta em:", nome1 + nome2
string do tipo: <type 'str'> nome1: Faraday comprimento: 7
concatenação de: Faraday  e  Maxwell resulta em: FaradayMaxwell

String é um vetor imutável de caracteres. É possível indexar um caractere único e é possível aplicar regras consistentes do Python no tratamento de sequências, tais como fatiamento (slicing) e formas de indexação. Em Python, o primeiro elemento é sempre indexado como zero, assim quando tenho um string de 5 caracteres, ele é indexado de 0 a 4. É possível também indexar os elementos da direita para a esquerda utilizando índices negativos. Assim, o último elemento do vetor pode ser indexado pelo índice -1.

1 print 'Primeiro caractere de ', nome1, ' é: ', nome1[0]
2 print 'Último caractere de ', nome1, ' é: ', nome1[-1]
3 print 'Repetindo-se strings 3 vezes', 3 * nome1
Primeiro caractere de  Faraday  é:  F
Último caractere de  Faraday  é:  y
Repetindo-se strings 3 vezes FaradayFaradayFaraday

Listas:

Lista é uma sequência de elementos de diferentes tipos que podem ser indexados, alterados e operados. Listas são definidas por elementos separados por vírgulas iniciado e terminado por colchetes.

1 lista1 = [1, 1.1, 'um'] # Listas podem conter elementos de diferentes tipos.
2 lista2 = [3+4j, lista1] # Inclusive uma lista pode conter outras listas como elementos!
3 print 'tipo da lista1=', type(lista1)
4 print 'lista2=', lista2
5 lista2[1] = 'Faraday' #Diferentemente das strings, pode-se atribuir novos valores a elementos da lista.
6 print 'lista2=', lista2
7 lista3 = lista1 + lista2 # Concatenando 2 listas
8 print 'lista3=',lista3
9 print 'concatenando 2 vezes:',2*lista3
tipo da lista1= <type 'list'>
lista2= [(3+4j), [1, 1.1, 'um']]
lista2= [(3+4j), 'Faraday']
lista3= [1, 1.1, 'um', (3+4j), 'Faraday']
concatenando 2 vezes: [1, 1.1, 'um', (3+4j), 'Faraday', 1, 1.1, 'um', (3+4j), 'Faraday']

Tuplas:

Tupla é similar a lista, porém seus valores são imutáveis. Tupla é uma sequência de objetos separados por vírgulas que podem, opcionalmente, serem iniciados e terminados por parênteses. Tupla contendo um único elemento precisa ser seguido de uma vírgula.

 1 #Declarando tuplas
 2 tupla1 = () # tupla vazia
 3 tupla2 = ('Gauss',)  # tupla com apenas um elemento. Note a vírgula.
 4 tupla3 = (1.1, 'Ohm', 3+4j)
 5 tupla4 = 3, 'aqui', True
 6 print 'tupla1=', tupla1
 7 print 'tupla2=', tupla2
 8 print 'tupla3=', tupla3
 9 print 'tupla4=', tupla4
10 print 'tipo da tupla3=', type(tupla3)
tupla1= ()
tupla2= ('Gauss',)
tupla3= (1.1, 'Ohm', (3+4j))
tupla4= (3, 'aqui', True)
tipo da tupla3= <type 'tuple'>

Slicing em tipos sequenciais

Tanto listas, tuplas como strings podem ser indexados individualmente de 0 a n-1, ou com índices negativos, quando indexado começando pelo último sendo -1, ou ainda como um subconjunto, definindo-se o início, o fim e o passo, no formato var[i:f:p], onde os três valores podem ser opcionais. O uso de slicing é muito poderoso no Python e iremos explorar muito isto em processamento de imagens nas estruturas de array multidimensionais.

Veja os exemplos abaixo de slicing aplicados a string, mas a mesma idéia pode ser aplicado a listas ou tuplas:

1 s = 'abcdefg'
2 print 's=',s
3 print 's[2:5]=',  s[2:5]
4 print 's[0:5:2]=',s[0:5:2]
5 print 's[::2]=',  s[::2]
6 print 's[:5]=',   s[:5]
7 print 's[3:]=',   s[3:]
8 print 's[::-1]=', s[::-1]
s= abcdefg
s[2:5]= cde
s[0:5:2]= ace
s[::2]= aceg
s[:5]= abcde
s[3:]= defg
s[::-1]= gfedcba

Atribuição em tipos sequenciais

Tanto strings, tuplas como listas podem ser desempacotados através de atribuição. O importante é que o mapeamento seja consistente. Lembrar que a única sequência que é mutável, isto é, pode ser modificada por atribuição é a lista. Procure estudar os exemplos abaixo:

1 s = "abc"
2 s1,s2,s3 = s
3 list = [1,2,3]
4 t = 8,9,True
5 print 'list=',list
6 list = t
7 (_,a,_) = t
8 print 'a=',a
list= [1, 2, 3]
a= 9

Formação de string para impressão

Um string pode ser formatado de modo parecido com a sintaxe do sprintf em C/C++ na forma: string % tupla. Iremos usar bastante este modelo para colocar legendas nas imagens. Exemplos:

1 s = 'formatação inteiro:%d, float:%f, string:%s' % (5, 3.2, 'alo')
2 print s
formatação inteiro:5, float:3.200000, string:alo

Conjuntos

Conjuntos são coleções de elementos que não possuem ordenação e também não apresentam elementos repetidos.

-Declarando conjuntos e realizando algumas operações simples

1 lista1 = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
2 lista2 = ['red', 'blue', 'green','red','red']
3 conjunto1 = set(lista1) # Definindo um conjunto
4 conjunto2 = set(lista2)
5 print(conjunto1) # Observe que os elementos repetidos são contados apenas uma vez
6 print(type(conjunto1))
7 print(conjunto1 | conjunto2) # União de 2 conjuntos
set(['orange', 'pear', 'apple', 'banana'])
<type 'set'>
set(['blue', 'green', 'apple', 'orange', 'pear', 'banana', 'red'])

Dicionários:

Dicionários podem ser definidos como sendo listas associativas que ao invés de associar os seus elementos a índices númericos, associa os seus elementos a palavras-chave.

-Declarando dicionários e realizando algumas operações simples

1 dict1 = {'blue':135,'green':12.34,'red':'ocean'} #definindo um dicionário
2 print(type(dict1))
3 print(dict1)
4 print(dict1['blue'])
5 print(dict1.keys()) # Mostra as chaves do dicionário
6 del dict1['blue'] # Deleta o elemento com  a chave 'blue'
7 print(dict1.keys()) # Mostra as chaves do dicionário após o elemento com a chave 'blue' ser apagado
<type 'dict'>
{'blue': 135, 'green': 12.34, 'red': 'ocean'}
135
['blue', 'green', 'red']
['green', 'red']

A importância da indentação na linguagem Python:

Diferentemente das outras linguagens que utilizam palavras-chave como begin e end ou chaves {, } para delimitar seus blocos (if, for, while, etc.), a linguagem Python utiliza a indentação do código para determinar quais comandos estão aninhados dentro de um bloco, portanto a indentação é de fundamental importância na linguagem Python.

-Exemplo da importância da indentação na linguagem Python

 1 #Ex1: O último comando print executa independentemente do valor de x
 2 x = -1
 3 if x<0:
 4    print('x é menor que zero!')
 5 elif x==0:
 6    print('x é igual a zero')
 7 else:
 8    print('x é maior que zero!')
 9 print('Esta frase é escrita independentemente do valor de x')
10 
11 #Ex2: Os dois últimos comandos print estão dentro do laço devido a
12 #indentação, portanto só executam se x for maior que zero
13 if x<0:
14    print('x é menor que zero!')
15 elif x==0:
16    print('x é igual a zero')
17 else:
18    print('x é maior que zero!')
19    print('Esta frase é escrita apenas para x maior que zero')
x é menor que zero!
Esta frase é escrita independentemente do valor de x
x é menor que zero!