Programando em Python
|
|
|
- Amélia Lombardi Sequeira
- 10 Há anos
- Visualizações:
Transcrição
1 Programando em Python
2 Por que programar? É divertido Melhor que usar programas feitos por outros Fazer programas = resolver quebra-cabeças Programação como arte É útil Programação como ferramenta Pode ser aplicado a quase qualquer atividade Arte / Ciência / Filosofia / Entretenimento
3 Algoritmos e Programas Algoritmo = método para solucionar um problema Estruturas de dados = método para organizar informações Programa = algoritmos + estruturas de dados expressos de forma a ser entendidos pelo computador Programas tipicamente processam dados de entrada e produzem dados de saída Entrada Programa Saída
4 Linguagem de Programação Linguagem artificial com sintaxe e semântica bem definidos Usada para exprimir programas Mais técnica do que linguagens naturais Menos técnica do que a linguagem nativa ( máquina dos computadores (linguagem de
5 Compiladores Programas que traduzem programas escritos em linguagem de programação para programas equivalentes escritos em linguagem de máquina O primeiro é chamado de programa fonte, enquanto que o segundo é chamado de programa objeto Programa fonte Compilador Programa objeto
6 Link-Editores O programa-objeto nem sempre está pronto para ser executado Outros trechos de código precisam ser incluídos Bibliotecas Subprogramas Programa executável é montado por um programa chamado link-editor ou linking-loader Compilador normalmente chama o link-editor automaticamente
7 Link-Editores Prog objeto 1 Prog objeto N Link Editor Programa executável Biblioteca Biblioteca
8 Interpretadores Simulam uma máquina virtual Programa fonte é lido, entendido e as instruções são executadas imediatamente Entrada Interpretador Saída Programa fonte
9 Esquemas Híbridos Compilador gera código para uma máquina virtual ( pseudo-código ) Máquina virtual é executada separadamente lendo pseudo-código e interpretando-o Prog. Fonte Compilador Dados Entrada Prog objeto Interpretador Saída
10 Por que Python? Simples o suficiente para um curso introdutório Muitos recursos Orientação a Objetos ( exceções Escalável (módulos, classes, controle de Biblioteca embutida extensa e grande número de módulos fornecidos por terceiros Grande variedade de aplicações ( script ) Linguagem interpretada Multi-plataforma Gratuito Comunidade bastante desenvolvida
11 O que vamos precisar Uma implementação da linguagem ( windows ) Implementação pronta para baixar Linux normalmente já vem com python instalado Um editor de textos Qualquer editor serve Ambiente IDLE inclui um editor Incluído na distribuição windows
12 Python Interativo Rode o interpretador Digite comandos python Cada comando é executado imediatamente [cancer]~> python Python (#1, May , 15:19:29) [GCC (Red Hat )] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> print "alo!" alo! >>>
13 Executando um programa Python Escreva um programa python Invoque o interpretador para executá-lo [cancer]~> cat prog.py print "alo!" [cancer]~> python prog.py alo!
14 Executando um programa Python Interfaces gráficas normalmente já associam os sufixos.py e.pyc com o interpretador
15 Python: Tipos Básicos
16 Python como calculadora O Interpretador python pode ser usado como calculadora Por exemplo, as quatro operações aritméticas são denotadas pelos símbolos + adição - subtração * multiplicação / divisão
17 Python como calculadora >>> >>> # Um comentário é precedido do caracter "#"... # Comentários são ignorados pelo interpretador >>> # Comentários podem aparecer também após código -5 >>> 10*3 30 >>> 10/3 3 >>> 10/-3 # Divisão inteira retorna o piso -4 >>> 10%3 # Resto de divisão inteira simbolizado por % 1
18 Tipos de dados São categorias de valores que são processados de forma semelhante Por exemplo, números inteiros são processados de forma diferente dos números de ponto flutuante (decimais) e dos números complexos Tipos primitivos: são aqueles já embutidos no núcleo da linguagem Simples: numéricos (int, long, float, complex) e cadeias de ( strings ) caracteres Compostos: listas, dicionários, tuplas e conjuntos Tipos definidos pelo usuário: são correspondentes a classes ( objeto (orientação
19 Variáveis São áreas de memória reservadas para armazenamentos de dados Os nomes de variáveis são identificadores: Nomes podem ser compostos de algarismos (0-9), letras (a-z ou A-Z) ou sublinhado ( _ ) O primeiro caractere não pode ser um algarismo Não Palavras reservadas (if, while, etc) são proibidas Servem para: Guardar valores intermediários Construir estruturas de dados Uma variável é modificada usando o comando de atribuição: Var = expressão É possível também atribuir a várias variáveis simultaneamente: var1,var2,...,varn = expr1,expr2,...,exprn
20 Variáveis >>> a=1 >>> a 1 >>> a=2*a >>> a 2 >>> a,b=3*a,a >>> a,b ( 2,6) >>> a,b=b,a >>> a,b ( 6,2)
21 Variáveis Variáveis são criadas dinamicamente e destruídas quando não mais necessárias, por exemplo, quando saem fora de ( tarde escopo (veremos isso mais O tipo de uma variável muda conforme o valor atribuído, i.e., int, float, string, etc. Não confundir com linguagens sem tipo >>> a ="1" >>> b = 1 >>> a+b Traceback (most recent call last): File "<stdin>", line 1, in? TypeError: cannot concatenate 'str' and 'int' objects
22 Números Há vários tipos numéricos que se pode usar em python Int: números inteiros de precisão fixa 1, 2, 15, -19 Long: números inteiros de precisão arbitrária 1L, 10000L, L Floats: números racionais de precisão variável 1.0, 10.5, , 15e-5 Complex: números complexos 1+1j, 20j, J
23 Números inteiros Os ints têm precisão fixa ocupando tipicamente uma palavra de memória Em PC's são tipicamente representados com 32 bits (de a 2 32 ) Os números inteiros de precisão arbitrária (longs) são armazenados em tantas palavras quanto necessário Constantes do tipo long têm o sufixo L ou l Longs são manipulados bem mais lentamente que ints Quando necessário, cálculos usando ints são convertidos para longs
24 Números inteiros >>> a=2**30 # Potenciação >>> a >>> b=a*1000 >>> b L >>> b/ L
25 Números inteiros Constantes podem ser escritas com notação idêntica à usada em C Hexadecimal: preceder dígitos de 0x Octal: preceder dígitos de 0 Ex.: >>> >>> 0x10 16 >>> 0x1f 31
26 Números de ponto flutuante São implementados como os double's da linguagem C tipicamente usam 2 palavras Constantes têm que possuir um ponto decimal ou serem escritas em notação científica com a letra e (ou E ) precedendo a potência de 10 Ex: >>> 10 # inteiro 10 >>> 10.0 # ponto flutuante 10.0 >>> 99e >>> 99e
27 Números complexos Representados com dois números de ponto flutuante: um para a parte real e outro para a parte imaginária Constantes são escritas como uma soma sendo que a parte imaginária tem o sufixo j ou J Ex.: >>> 1+2j ( 1+2j ) >>> 1+2j*3 ( 1+6j ) >>> (1+2j)*3 ( 3+6j ) >>> (1+2j)*3j ( 6+3j -)
28 Strings São cadeias de caracteres Constituem outro tipo fundamental do python Constantes string são escritas usando aspas simples ou duplas Ex.: "a" ou 'a' O operador + pode ser usado para concatenar strings Ex.: "a"+"b" é o mesmo que "ab" O operador * pode ser usado para repetir strings Ex.: "a"*10 é o mesmo que "aaaaaaaaaa"
29 Strings Python usa a tabela de caracteres default do S.O. Ex.: ASCII, UTF-8 Caracteres não imprimíveis podem ser expressos usando notação (\) barra-invertida \n é o mesmo que new line \r é o mesmo que carriage return \t é o mesmo que tab \b é o mesmo que backspace \\ é o mesmo que \ \x41 é o mesmo que o caractere cujo código hexadecimal é 41 ( maiúsculo A )
30 Strings >>> "ab\rd" 'ab\rd' >>> print "ab\rd" # print exibe chars não imprimíveis db >>> print "abc\td" abc d >>> print "abc\nd" abc d >>> print "abc\\nd" abc\nd >>> print "ab\bc" ac >>> print "\x41\xa1" Aí
31 Strings A notação barra-invertida (\) pode ser desabilitada desde que a constante string seja precedida por um r (erre ( minúsculo ( cruas ) São chamadas strings raw Ex.: >>> print "abc\ncd\tef" abc cd ef >>> print r"abc\ncd\tef" abc\ncd\tef
32 Strings Constantes string podem ser escritas com várias linhas desde que as aspas não sejam fechadas e que cada linha termine com uma barra invertida Ex.: >>> print "abcd\n\... efgh\n\... ijk" abcd efgh ijk >>> print "abcd\... efgh\... ijk" abcdefghijk >>>
33 Strings Também é possível escrever constantes string em várias linhas incluindo as quebras de linha usando três aspas como delimitadores Ex.: >>> print """ Um tigre dois tigres três tigres""" Um tigre dois tigres três tigres >>> print '''abcd efgh''' abcd efgh
34 Strings Índices Endereçam caracteres individuais de uma string Notação: string[índice] O primeiro caractere tem índice 0 O último caractere tem índice -1 Ex.: >>> a = "abcde" >>> a[0] 'a' >>> a[-1] 'e'
35 ( slices ) Strings Fatias Notação para separar trechos de uma string Notação: string[índice1:índice2] Retorna os caracteres desde o de índice1 (inclusive) até o de ( exclusive ) índice2 Se o primeiro índice é omitido, é assumido 0 Se o último índice é omitido, é assumido o fim da string
36 ( slices ) Strings Fatias >>> a 'abcde' >>> a[0:2] 'ab' >>> a [2:] 'cde' >>> a[:] 'abcde' >>> a[-1:] 'e' >>> a[:-1] 'abcd'
37 Expressões booleanas Também chamadas expressões lógicas ( False ) Resultam em verdadeiro (True) ou falso São usadas em comandos condicionais e de repetição Servem para analisar o estado de uma computação e permitir escolher o próximo passo Operadores mais usados Relacionais: >, <, ==,!=, >=, <= Booleanos: and, or, not Avaliação feita em Curto-circuito Expressão avaliada da esquerda para a direita Se o resultado (verdadeiro ou falso) puder ser determinado sem avaliar o restante, este é retornado imediatamente
38 >>> 1==1 True >>> 1==2 False >>> 1==1 or 1==2 True >>> 1==1 and 1==2 False >>> 1<2 and 2<3 True >>> not 1<2 False >>> not 1<2 or 2<3 True ( 2<3 >>> not (1<2 or False >>> "alo" and 1 1 >>> "alo" or 1 'alo' Expressões booleanas
39 Expressões booleanas As constantes True e False são apenas símbolos convenientes Qualquer valor não nulo é visto como verdadeiro enquanto que 0 (ou False) é visto como falso O operador or retorna o primeiro operando se for vista como verdadeiro, caso contrário retorna o segundo O operador and retorna o primeiro operando se for vista como falso, caso contrário retorna o segundo Operadores relacionais são avaliados antes de not, que é avaliado antes de and, que é avaliado antes de or
40 >>> 0 or >>> False or >>> "abc" or 1 'abc' >>> 1 and 2 2 >>> 0 and 3 0 >>> False and 3 False >>> 1 and 2 or 3 2 >>> 0 or 2 and 3 3 >>> 1 and not 0 True Expressões booleanas
41 Funções Embutidas Além dos operadores, é possível usar funções para computar valores As funções podem ser definidas: Ex.: Pelo programador Em módulos da biblioteca padrão ( built-in ) Por default: são as funções embutidas Na verdade, fazem parte do módulo builtins, que é sempre importado em toda aplicação abs(x) retorna o valor absoluto do número x chr(x) retorna uma string com um único caractere cujo código ASCII é x ord(s) retorna o código ASCII do caractere s
42 ( 10 ) >>> abs 10 ( 19 -) >>> abs 19 ( 95 ) >>> chr '_' ( 99 ) >>> chr 'c' (' a ') >>> ord 97 Funções Embutidas
43 Importando módulos Muitas funções importantes são disponibilizadas em módulos da biblioteca padrão Ex.: o módulo math tem funções como sin, cos, exp e outras Um módulo pode conter não só funções mas também variáveis ou classes Por exemplo, o módulo math define a constante pi Para usar os elementos de um módulo, pode-se usar o comando import Formatos: import modulo from modulo import nome,...,nome from modulo import *
44 Importando módulos Por exemplo: from math import * # importa todos os elementos do módulo math from math import sin # importa apenas a função sin import math # importa o módulo math como um todo # (todos os elementos têm que ser citados (. math # precedidos por
45 Importando módulos >>> import math ( sin(30 >>> a = Traceback (most recent call last): File "<stdin>", line 1, in? NameError: name 'sin' is not defined ( math.sin(30 >>> a = >>> from math import sin ( sin(30 >>> a = >>> print a (( sin(radians(30 >>> a = Traceback (most recent call last): File "<stdin>", line 1, in? NameError: name 'radians' is not defined >>> from math import * (( sin(radians(30 >>> a = >>> a
46 Explorando Módulos >>> import math ( help(math.cos <<< Help on built-in function cos in module math: (...) cos ( cos(x Return the cosine of x (measured in radians). ( END ) Pressiona-se q para retornar ao interpretador.
47 Python: Comandos Básicos
48 Primeiros passos em programação Até agora só vimos como computar algumas expressões simples Expressões são escritas e computadas imediatamente Variáveis podem ser usadas para valores temporários Um programa típico entretanto usa vários tipos de construções tais como: Comandos condicionais Comandos de repetição ( subprogramas ) Definição e uso de procedimentos ( OO Definição e uso de classes e objetos (programação
49 Primeiros passos em programação >>> # Série de Fibonacci... a,b=0,1 >>> while b < 10:... print b... a,b=b,a+b... 1 Identação Resultado Comentário Atribuição dupla Comando de repetição Expressão booleana Bloco do comando de repetição
50 Programas armazenados À medida que os programas vão se tornando mais complicados, é mais interessante guardá-los em arquivos e executá-los quando necessário Arquivo fibo.py (use um editor de textos como o do IDLE): # Série de Fibonacci: a, b = 0, 1 while b < 10: print b a, b = b, a+b
51 Formas de Executar um Programa Digite python fibo.py no seu shell, ou Clique no ícone do arquivo, ou De dentro do editor IDLE, selecione Run Module (F5), ou De dentro do interpretador python: (" fibo.py ") >>> execfile Entre com um numero >>>
52 print Forma geral: print expr,expr,... Os valores das expressões são escritos um após o outro sem pular de linha: >>> print "1.001 ao quadrado é ",1.001** ao quadrado é Se o comando terminar com vírgula, o próximo print escreverá na mesma linha. Por exemplo: >>> a, b = 0, 1 >>> while b < 1000:... print b,... a, b = b, a+b
53 input O programa que computa elementos da série de Fibonacci termina quando atinge um elemento com valor superior a uma constante Podemos tornar o programa mais flexível se ao usuário for permitido estipular o valor máximo O comando input permite perguntar ao usuário um valor ( variável (normalmente é atribuído a uma ( input(pergunta Formato: onde pergunta é uma string opcional que será exibida para indicar ( prompt o valor que se espera (i.e., Exemplo: (" numero: >>> a = input("entre com um Entre com um numero: 19 >>> print a 19 Usuário digita o número
54 Input O comando input espera que se digite algo que faça sentido do lado direito de um sinal de atribuição. Ex: >>> print a 19 () input >>> b = a >>> b 19 (" caracteres: >>> c = input("entre com uma cadeia de entre com uma cadeia de caracteres: abc Traceback (most recent call last): File "<stdin>", line 1, in? File "<string>", line 0, in? NameError: name 'abc' is not defined (" caracteres: >>> c = input("entre com uma cadeia de entre com uma cadeia de caracteres: "abc" >>> c 'abc'
55 raw_input É semelhante ao input, mas não tenta interpretar o que foi digitado como uma expressão O resultado é simplesmente uma string com o texto digitado Ex.: (" nome: >>> nome = raw_input ("Entre seu Entre seu nome: Maria da Graça >>> print nome Maria da Graça >>> nome Maria da Gra\xe7a'
56 while Repete uma seqüência de comandos enquanto uma dada expressão booleana é avaliada como verdadeira Formato: while expressão: comando... comando Exemplo: >>> a = 10 >>> while a>8:... print a,... a = a
57 Laços Infinitos Como em todo comando de repetição, é importante evitar os chamados laços infinitos Ex.: >>> a = 10 >>> while a>8:... print a,... a = a
58 if É o comando condicional por excelência Formatos: if expressao: comandos if expressao: comandos1 else: comandos2 if expressao1: comandos1 elif expressao2: comandos2 else: ( comandos(n Executa comandos apenas se expressão for verdadeira Executa seq de comandos 1 caso expressão seja verdadeira. Caso contrário, executa seq de comandos 2 Executa seq de comandos 1 caso expressão1 seja verdadeira. Caso contrário, testa expressao2 e executa seq de comandos 2 se verdadeira Caso contrário, executa seq de comandos N
59 Exemplo 1 if a = input("entre com um numero:") if a < 0: print a," é negativo" print "Obrigado!" Execução 1: Entre com um numero:2 Obrigado! Execução 2: Entre com um numero:-2-2 é negativo Obrigado!
60 Exemplo 2 if a = input("entre com um numero:") if a < 0: print a," é negativo" else: print a," é zero ou positivo" print "Obrigado!" Execução 1: Entre com um numero:2 2 é zero ou positivo Obrigado! Execução 2: Entre com um numero:-2-2 é negativo Obrigado!
61 Exemplo 3 if a = input("entre com um numero:") if a < 0: print a," é negativo" elsif a==0: print a," é zero" else: print a," é positivo" print "Obrigado!" Execução 1: Entre com um numero:0 0 é zero Obrigado! Execução 2: Entre com um numero:2 2 é positivo Obrigado!
62 Exercício: algarismos romanos Fazer um programa que escreva a representação em algarismos romanos de um número inteiro positivo ( input ) O usuário deve entrar com um número ( print ) O resultado deve ser impresso no console Exemplo de execução: Entre com um numero positivo: 1985 Em algarismos romanos: MCMLXXXV
63 Exercício: números primos Fazer um programa que decida se um número positivo dado é primo ou não Entrada: número inteiro positivo Saída: diagnóstico de primalidade do número Exemplos de execução: Entre com um número inteiro positivo: é múltiplo de 13 Entre com um número inteiro positivo: é primo
64 Exercício: números primos Um número natural é primo se é divisível apenas por si mesmo ou pela unidade Isto sugere o seguinte algoritmo: Se o número é 1, então não é primo Se o número é 2, então é primo Caso contrário, Seja d um possível divisor, cujo valor é inicialmente 2 Repetir Se o resto da divisão do número por d é zero, então o número não é primo Caso contrário, incrementar d Se d é igual ou maior que o número, então terminar repetição diagnosticando o número como primo
65 Exercício: algarismos romanos Algoritmo A representação em romanos é uma string à qual é acrescentada uma letra por vez Inicialmente, uma string vazia Examinar as sucessivas potências de 10 Por exemplo, a letra 'M' corresponde à casa dos milhares Se o número é 2200, sabemos que teremos dois M's na representação em romanos Sabemos que há M's se o número é maior ou igual a 1000 Sempre que um milhar for computado, subtrair 1000 do número Um processamento semelhante é feito para outros algarismos romanos, por exemplo: Se o número é maior ou igual que 500, acrescentar 'D' Se o número é maior que 900, acrescentar 'CM'
66 Exercício: algarismos romanos DICA: processando um número entre 1 e 9 if num >= 9: romano = romano + "IX" num = num-9 if num >= 5: romano = romano + "V" num = num-5 if num >= 4: romano = romano + "IV" num = num - 4 while num >= 1: romano = romano + "I" num = num - 1
67 Python: Listas
68 Estruturas de dados Maneira de organizar dados de maneira a facilitar seu acesso Algumas formas são clássicas: Listas ( matrizes Arrays (vetores e ( registros ) Tuplas Árvores Linguagens freqüentemente possuem primitivas para construção dessas E.D. Estruturas de dados embutidas Outras E.D. mais complexas podem ser construídas combinando as E.D. clássicas
69 Estrutura de dados abstrata É uma especificação matemática que define uma coleção de dados e uma série de operações sobre ela É abstrata porque não especifica como as operações são feitas mas somente os dados de entrada e o resultado Numa linguagem de programação, essa coleção de operações é chamada de interface ou API (Application ( Interface Programming Usuários da e.d.a devem se preocupar com a interface e não com a implementação, que pode mudar com o tempo A implementação de uma e.d.a. requer cuidados quanto à correção e a eficiência da mesma
70 Listas São arranjos seqüenciais de informações mais simples Caracterizam-se por permitir o acesso eficiente aos seus elementos em ordem seqüencial A definição clássica de uma lista como estrutura de dados abstrata compreende: Operação de construção de uma lista vazia Operação que testa se uma dada lista é vazia Operação para obter o primeiro elemento de uma lista Uma operação para adicionar um novo elemento no início de uma lista Operação para retirar o elemento inicial de uma lista
71 Listas em Python A estrutura conhecida como lista (list, em inglês) em Python é bastante mais geral do que e.d.a. lista clássica Na verdade, pode ser vista como uma implementação tanto de listas como de arrays Além de acesso seqüencial, suportam também acesso direto através de índices Listas são variedades de seqüências assim como strings e portanto têm APIs semelhantes Podem ser indexadas e fatiadas Podem ser concatenadas (+) e repetidas
72 Listas em Python Entretanto, há diferenças importantes entre listas e strings Seqüência genérica X de seqüência de caracteres Elementos de listas podem ser alterados individualmente mas os de strings, não Listas constituem o tipo de agregação de dados mais versátil e comum da linguagem Python Podem ser usadas para implementar estruturas de dados mais complexas como matrizes e árvores, por exemplo
73 Listas: constantes e índices Uma constante do tipo lista é escrita entre colchetes com os elementos separados por vírgula: [] # lista vazia [1,2] # lista com 2 elementos Os elementos de uma lista podem ser de qualquer tipo, inclusive listas. Ex.: lista = [1, 'a', 2+3j, ['ab', 'CD']] Os elementos de uma lista podem ser acessados por índices como strings O primeiro elemento tem índice 0 O último elemento tem índice -1
74 Listas: constantes e índices >>> lista = [1, 'a', 2+3j, ['ab', 'CD']] >>> lista [0] 1 >>> lista [2] ( 2+3j ) >>> lista [3] ['ab', 'CD'] >>> lista [-1] ['ab', 'CD'] >>> lista [0] = 2 >>> lista [2, 'a', (2+3j), ['ab', 'CD']]
75 Listas: Concatenação e Repetição O operador + pode ser usado para concatenação e o operador * para repetição >>> lista = [0]*4 >>> lista [0, 0, 0, 0] >>> lista = lista + [1]*3 >>> lista [0, 0, 0, 0, 1, 1, 1]
76 Deletando elementos O operador del pode ser usado para remover elementos de uma lista Ex.: >>> lista [1, 2, 3, ['ab', 'CD']] >>> del lista [2] >>> lista [1, 2, ['ab', 'CD']] >>> del lista [2][1] >>> lista [1, 2, ['ab']]
77 Listas: fatias ( slices ) A notação de fatias também pode ser usada, inclusive para atribuição: >>> lista = [1, 'a', 2+3j, ['ab', 'CD']] >>> lista [1:] ['a', (2+3j), ['ab', 'CD']] >>> lista [:1] [1] >>> lista [1:2] ['a'] >>> lista [0:-1] [1, 'a', (2+3j)]
78 Listas: atribuição a fatias A atribuição a uma fatia requer que o valor atribuído seja uma seqüência ( exemplo (uma lista ou uma string, por A atribuição substitui os elementos da fatia pelos da seqüência >>> lista = [1, 'y', ['ab', 'CD']] >>> lista [1:1] = ['z'] >>> lista [1, 'z', 'y', ['ab', 'CD']] >>> lista [1:3] = [['x']] >>> lista [1, ['x'], ['ab', 'CD']] >>> lista [1:-1]= [2,3,4] >>> lista [1, 2, 3, 4, ['ab', 'CD']] >>> lista [:2] = 'xyz' >>> lista ['x', 'y', 'z', 3, 4, ['ab', 'CD']]
79 Incrementos em Fatias É possível usar um terceiro número na notação de fatias designando o incremento Default é 1, ou seja, toma os elementos de um em um do menor para o maior índice Pode-se usar qualquer número inteiro diferente de 0 a[0:10:2] retorna uma lista com os 10 primeiros elementos ( máximo de a tomados de 2 em 2 (5 elementos, no a[5:0:-1] retorna uma lista com os 5 primeiros elementos de a tomados da esquerda para a direita Obs.: Esta notação só existe nas versões de Python a partir da 2.3
80 Incrementos em Fatias Exemplo >>> a = ['a', 2, 3, 'd', 'x'] >>> a [:3:2] ['a', 3] >>> a [::-1] ['x', 'd', 3, 2, 'a']
81 Incrementos em Fatias Se um incremento de fatia é diferente de 1, uma atribuição à fatia deve ter o mesmo número de elementos: >>> l = [1,2,3,4,5] >>> l [0::2] = ['x','y','z'] >>> l ['x', 2, 'y', 4, 'z'] >>> l [0::2] = [6,7] Traceback (most recent call last): File "<pyshell#17>", line 1, in -toplevell [0::2] = [6,7] ValueError: attempt to assign sequence of size 2 to extended slice of size 3
82 Operador in Permite saber se um elemento pertence a uma lista Serve também para strings Ex.: >>> lista = [1, 'a', 'bc'] >>> 1 in lista True >>> 2 in lista False >>> 'b' in lista False >>> 'b' in lista[2] True >>> 'bc' in 'abcd' True
83 Inicializando listas Não é possível atribuir a uma posição inexistente de uma lista >>> vetor = [] >>> vetor [0] = 1 Traceback (most recent call last): File "<pyshell#21>", line 1, in -toplevelvetor [0] = 1 IndexError: list assignment index out of range Se uma lista vai ser usada como um array, isto é, vai conter um número predeterminado de elementos, é conveniente iniciá-la >>> vetor = [0]*10 >>> vetor [0] = 3 >>> vetor [3, 0, 0, 0, 0, 0, 0, 0, 0, 0]
84 Usando None No uso de estruturas de dados, às vezes é importante preencher uma posição com um valor não válido A melhor opção para esse uso é empregar o valor especial None Não faz parte de tipo nenhum É melhor que usar 0, [] ou uma string vazia Útil para criar uma lista vazia mas com um número conhecido de posições. Ex.: >>> lista = [None]*5 >>> lista [None, None, None, None, None]
85 Len, min e max len (lista) retorna o número de elementos de lista min (lista) e max (lista) retornam o menor/maior elemento de lista Ex.: >>> lista = [1, 2, 9, 3, 4] ( lista ) >>> min 1 ( lista ) >>> len 5 ( lista ) >>> max 9 ([' c ' >>> max (['a', 'b', 'c'
86 min e max Na verdade, min e max podem ser usados também com vários argumentos ao invés de uma lista Ex.: ( 1,2,3,4 ) >>> min 1 ( 3,4,5 ) >>> max 5 ([' 1],['a ],[]) >>> max ['a']
87 A função list Pode ser usada para converter uma string numa lista É útil pois uma lista pode ser modificada, mas uma string, não Para fazer a transformação inversa, pode-se usar o método ( tarde join (veremos métodos mais Ex.: (' list('alo >>> lista = >>> lista ['a', 'l', 'o'] >>> lista[1]='xx' >>> lista ['a', 'xx', 'o'] ( join(lista.'' >>> 'axxo'
88 A função range Retorna uma progressão aritmética de inteiros numa lista ( incremento Forma geral: range (início, parada, ( 0 (default: início (opcional) é o primeiro valor a ser gerado parada é o limite da progressão: a progressão termina no último valor antes de parada ( default:1 ) incremento (opcional) é o passo da progressão Ex.: ( range(3 <<< [0, 1, 2] ( range(2,5,2 <<< [2, 4] ( range(5,2,-2 <<< [5, 3]
89 Comando for Permite iterar sobre os elementos de uma lista Forma geral: for var in lista : comandos Os comandos são repetidos para cada valor de lista Durante a repetição, var possui o valor corrente da lista Uma grande utilidade da função range é construir a lista de iteração Ex.: >>>for i in range(1,7): print i,
90 Comparando listas Listas são comparadas lexicograficamente Se duas listas são iguais até os k-ésimos elementos, o resultado da comparação depende da comparação entre os (k+1)-ésimos elementos Se alguma das listas tem somente k elementos, então esta é a menor Duas listas são iguais se e somente se têm o mesmo comprimento e todos os elementos de mesma posição são iguais Uma lista é maior que um número, mas menor que uma string Não me pergunte por quê!
91 Comparando listas >>> [1,2] < [2, 3] True >>> [1,2] < [1, 2, 3] True >>> [1,2]!= [1,2] False ([[],[ min([[1],[2,3],[3,4 <<< [] ([[],[ max([[1],[2,3],[3,4 <<< [3, 4] ("",[], min(0 <<< 0 ("",[], max(0 <<< ''
92 Variáveis do tipo list Uma variável do tipo lista na verdade contém uma referência para um valor do tipo lista Atribuir uma variável a outra, cria uma nova referência mas não uma nova lista Para se criar um novo valor, pode-se usar uma expressão que retorne o valor desejado Para saber se duas variáveis se referem ao mesmo valor pode-se usar o operador is
93 Variáveis do tipo list >>> a = b = [1,2,3] >>> c = a >>> d = c[:] >>> a is b True >>> c is b True >>> d is c False >>> a [1]=5 >>> b [1, 5, 3] >>> d [1, 2, 3]
94 A Classe list Uma lista é na verdade um objeto de uma classe chamada list Não vimos ainda programação OO, mas alguns pontos devem ser enfatizados Listas possuem métodos que podem ser aplicados a elas Um método é semelhante a uma função, mas são ( objeto.método(args invocados de forma diferente: Ex.: lista.reverse() inverte a ordem dos elementos da lista Para saber todos os métodos de listas, escreva ( help(list
95 Alguns métodos m da classe list ( append(elemento Acrescenta o elemento no fim da lista Observe que a operação altera a lista, e não simplesmente retorna uma lista modificada Ex.: >>> lista = [1,2] <<< ( lista.append(3 >>> lista [1, 2, 3] <<< ([ lista.append([4,5 >>> lista [1, 2, 3, [4, 5]]
96 Alguns métodos m da classe list ( count(elemento Retorna quantas vezes o elemento aparece na lista Ex.: <<< ( 1,2,3,1,2,3,4].count(1 ] 2 ( extend(lista2 Acrescenta os elementos de lista2 ao final da lista OBS.: Altera a lista ao invés de retornar a lista alterada Ex.: >>> lista=[1,2] <<< ([ lista.extend([3,4 >>> lista [1, 2, 3, 4]
97 Alguns métodos m da classe list ( count(elemento Retorna quantas vezes o elemento aparece na lista Ex.: <<< ( 1,2,3,1,2,3,4].count(1 ] 2 ( extend(lista2 Acrescenta os elementos de lista2 ao final da lista OBS.: Altera a lista ao invés de retornar a lista alterada Ex.: >>> lista=[1,2] <<< ([ lista.extend([3,4 >>> lista [1, 2, 3, 4]
98 Alguns métodos m da classe list ( index(elemento Retorna o índice da primeira ocorrência de elemento na lista Um erro ocorre se elemento não consta da lista Ex.: >>> lista = [9,8,33,12] <<< ( lista.index(33 2 <<< ( lista.index(7 Traceback (most recent call last): File "<pyshell#3>", line 1, in -toplevel( lista.index(7 ValueError: list.index(x): x not in list
99 Alguns métodos m da classe list ( elemento insert(indice, insere elemento na lista na posição indicada por índice Ex.: >>> lista = [0,1,2,3] (' lista.insert(1,'dois <<< >>> lista [0, 'dois', 1, 2, 3] Como o extend, altera a lista ao invés de retornar a lista O valor retornado é None! Atribuições a fatias servem para a mesma finalidade mas são menos legíveis >>> lista = [0,1,2,3] >>> lista [1:1] = ['dois'] >>> lista [0, 'dois', 1, 2, 3]
100 Alguns métodos m da classe list ( pop(índice Remove da lista o elemento na posição índice e o retorna Se índice não for mencionado, é assumido o último Ex.: >>> lista = [1,2,3,4] <<< () lista.pop 4 >>> lista [1, 2, 3] <<< ( lista.pop(1 2 >>> lista [1, 3]
101 Alguns métodos m da classe list ( remove(elemento Remove da lista o primeiro elemento igual a elemento Se não existe tal elemento, um erro é gerado Ex.: >>> lista = ['oi', 'alo', 'ola'] <<< (' lista.remove('alo >>> lista ['oi', 'ola'] <<< (' lista.remove('oba Traceback (most recent call last): File "<pyshell#24>", line 1, in -toplevel(' lista.remove('oba ValueError: list.remove(x): x not in list
102 Alguns métodos m da classe list () reverse Inverte a ordem dos elementos da lista Ex.: >>> lista=[1,2,3] <<< () lista.reverse >>> lista [3, 2, 1]
103 Alguns métodos m da classe list ( reverse=false sort(cmp=none, key=none, Ordena a lista Os argumentos são opcionais. Por default, a lista é ordenada crescentemente Ex.: >>> lista = [9,8,7,1,4,2] () lista.sort <<< >>> lista [1, 2, 4, 7, 8, 9]
104 Alguns métodos m da classe list ( reverse=false sort(cmp=none, key=none, É possível obter a ordem inversa, passando True para o argumento reverse Ex.: >>> lista = [9,8,7,1,4,2] ( lista.sort(reverse=true <<< >>> lista [9, 8, 7, 4, 2, 1] OBS.: A notação acima permite passar um argumento sem especificar os anteriores, mas poderíamos ter escrito: >>> lista = [9,8,7,1,4,2] ( lista.sort(none,none,true <<< >>> lista [9, 8, 7, 4, 2, 1]
105 Alguns métodos m da classe list ( reverse=false sort(cmp=none, key=none, O argumento cmp especifica uma função de comparação É uma função que o sort chama para definir se um elemento é anterior ou posterior a outro A função a ser passada tem a forma comp(elem1,elem2) e deve retornar um inteiro negativo caso elem1 seja anterior a elem2, positivo caso elem2 seja anterior a elem1 e zero se tanto faz Ex.: >>> def compara(elem1,elem2): return elem1%10 - elem2%10 ( compara(100,22 <<< -2 >>> lista=[100,22,303,104] ( lista.sort(compara <<< >>> lista [100, 22, 303, 104]
106 Alguns métodos m da classe list ( reverse=false sort(cmp=none, key=none, O argumento key especifica uma função aplicada a cada elemento Se for passada uma função f, em vez de ordenar os elementos ( f(v baseado em seus valores v, ordena baseado em Ex.: >>> lista = ['abc','de','fghi'] ( lista.sort(key=len <<< >>> lista ['de', 'abc', 'fghi']
107 Matrizes Listas podem ser usadas para guardar matrizes Por exemplo, podemos criar uma matriz-identidade de 3x3 com o código: m = [] for i in range(3): ( m.append([0]*3 m[i][i]=1 Obs.: Não é boa idéia iniciar uma matriz assim: m = [[0]*3]*3 for i in range(3): m[i][i]=1 print m Resultado:[[1, 1, 1], [1, 1, 1], [1, 1, 1]] ( referências Por quê? (Na realidade foram criadas
108 Exercícios cios Escreva um programa que intercale os elementos de duas listas l1 e l2 Exemplo: para l1 = [1,2,3] e l2 = ['a','b','c','d','e'], o programa deve computar a lista [1,'a',2,'b',3,'c','d','e'] Escreva um programa para computar o produto de duas matrizes m1 e m2
109 Exercícios cios Escreva um programa para computar o triângulo de Pascal até a linha n, onde n é um valor inteiro positivo lido da linha de comando Lembre-se que o elemento na i-ésima linha e j-ésima coluna do triângulo de Pascal contém o número de combinações de i elementos j a j O triângulo deve ser posto numa lista onde o i-ésimo elemento é uma lista com a i-ésima linha do triângulo Ex: Quantas linhas? 7 [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1], [1, 6, 15, 20, 15, 6, 1]]
110 Python: Tuplas e Strings
111 Tuplas São estruturas de dados parecidas com listas, mas com a particularidade de serem imutáveis Tuplas são seqüências e, assim como listas, podem ser indexadas e fatiadas, mas não é possível modificá-las Um valor do tipo tupla é uma série de valores separados por vírgulas e entre parênteses ( 1,2,3 ) = x >>> >>> x ( 3 (1, 2, >>> x [0] 1 >>> x [0]=1... TypeError: object does not support item assignment
112 Uma tupla vazia se escreve () Tuplas Os parênteses são opcionais se não provocarem ambigüidade Uma tupla contendo apenas um elemento deve ser escrita com uma vírgula ao final Um valor entre parênteses sem vírgula no final é meramente uma expressão: ( 10 ) <<< 10 >>> 10, (, 10 ) (, 10 ) <<< (, 10 ) ( 3*(10+3 <<< 39 (, 3*(10+3 <<< ( 13 (13, 13,
113 A função tuple Assim como a função list constrói uma lista a partir de uma seqüência qualquer, a função tuple constrói uma tupla a partir de uma seqüência qualquer (" list("abcd <<< ['a', 'b', 'c', 'd'] (" tuple("abcd <<< (' d ' ('a', 'b', 'c', ([ tuple([1,2,3 <<< ( 3 (1, 2, (( list((1,2,3 <<< [1, 2, 3]
114 Quando usar tuplas Em geral, tuplas podem ser substituídas com vantagem por listas Entretanto, algumas construções em Python requerem tuplas ou seqüências imutáveis, por exemplo: Tuplas (ao contrário de listas) podem ser usadas como chaves de dicionários Funções com número variável de argumentos acessam os argumentos por meio de tuplas O operador de formatação aceita tuplas, mas não listas
115 O operador de formatação Strings suportam o operador % que, dada uma string especial (template) e um valor, produz uma string formatada O formato geral é template % valor O template é uma string entremeada por códigos de formatação Um código de formatação é em geral composto do caracter % seguido de uma letra descritiva do tipo do valor a ( etc formatar (s para string, f para float, d para inteiro, Exemplo: >>> '====%d====' % 100 '====100====' >>> '====%f====' % 1 '==== ===='
116 Formatando tuplas Um template pode ser aplicado aos diversos valores de uma tupla para construir uma string formatada Ex.: >>> template = "%s tem %d anos" ( 10 ('Pedro', >>> tupla = >>> template % tupla 'Pedro tem 10 anos' Obs: mais tarde veremos que o operador de formatação também pode ser aplicado a dicionários
117 Anatomia das especificações de formato Caracter % Flags de conversão (opcionais): - indica alinhamento à esquerda + indica que um sinal deve preceder o valor convertido (um branco) indica que um espaço deve preceder números positivos 0 indica preenchimento à esquerda com zeros ( opcional ) Comprimento mínimo do campo O valor formatado terá este comprimento no mínimo Se igual a * (asterisco), o comprimento será lido da tupla ( opcional ) Um. (ponto) seguido pela precisão Usado para converter as casas decimais de floats Se aplicado para strings, indica o comprimento máximo Se igual a *, o valor será lido da tupla Caracter indicador do tipo de formato
118 Tipos de formato d, i Número inteiro escrito em decimal o Número inteiro sem sinal escrito em octal u Número inteiro sem sinal escrito em decimal ( minúsculas ) x Número inteiro sem sinal escrito em hexadecimal ( maiúsculas ) X Número inteiro sem sinal escrito em hexadecimal ( minúsculo e Número de ponto flutuante escrito em notação científica ('e' ( maiúsculo E Número de ponto flutuante escrito em notação científica ('E' f, F Número de ponto flutuante escrito em notação convencional g Mesmo que e se expoente é maior que -4. Caso contrario, igual a f G Mesmo que E se expoente é maior que -4. Caso contrario, igual a F ( 1 c Caractere único (usado com inteiro ou string de tamanho r String (entrada é qualquer objeto Python que é convertido usando a ( repr função
119 Exemplos >>> "Numero inteiro: %d" % 55 'Numero inteiro: 55' >>> "Numero inteiro com 3 casas: %3d" % 55 'Numero inteiro com 3 casas: 55' >>> "Inteiro com 3 casas e zeros a esquerda: %03d" % 55 'Inteiro com 3 casas e zeros a esquerda: 055' >>> "Inteiro escrito em hexadecimal: %x" % 55 'Inteiro escrito em hexadecimal: 37' >>> from math import pi >>> "Ponto flutuante: %f" % pi 'Ponto flutuante: ' >>> "Ponto flutuante com 12 decimais: %.12f" % pi 'Ponto flutuante com 12 decimais: ' >>> "Ponto flutuante com 10 caracteres: %10f" % pi 'Ponto flutuante com 10 caracteres: ' >>> "Ponto flutuante em notacao cientifica: %10e" % pi 'Ponto flutuante em notacao cientifica: e+00' >>> "String com tamanho maximo definido: %.3s" % "Pedro" 'String com tamanho maximo definido: Ped'
120 Exemplo: Imprimindo uma tabela itens = ["Abacate", "Limão", "Tangerina", "Melancia", "Laranja da China"] precos = [2.13, 0.19, 1.95, 0.87, 12.00] len_precos = 10 # Coluna de precos tem 10 caracteres # Achar a largura da coluna de itens ([ len(itens[0 len_itens = (( max(len_itens,len(it for it in itens : len_itens = # Imprimir tabela de precos ( len_itens+len_precos )*"-" print print "%-*s%*s" % (len_itens, "Item", len_precos, (" Preço " ( len_itens+len_precos )*"-" print for i in range(len(itens)): print "%-*s%*.2f" % (len_itens, itens[i], ([ precos[i len_precos,
121 Exemplo: resultados Item Preço Abacate 2.13 Limão 0.19 Tangerina 1.95 Melancia 0.87 Laranja da China 12.00
122 O Módulo M String Manipulação de strings é uma atividade freqüente em programas Python Existe um módulo chamado string que contém uma grande quantidade de funcionalidades para trabalhar com strings Para usá-las: from string import * Entretanto, strings pertencem à classe str e a maior parte do que existe no módulo string aparece como métodos da classe str
123 Strings: método m find find (substring, inicio, fim) Retorna o índice da primeira ocorrência de substring inicio e fim são opcionais e indicam os intervalos de índices onde a busca será efetuada Os defaults são 0 e o comprimento da string, respectivamente Caso substring não apareça na string, é retornado -1 Observe que o operador in pode ser usado para dizer se uma substring aparece numa string
124 Strings: método m find ( exemplo ) >>> s = "quem parte e reparte, fica com a maior parte" <<< (" s.find("parte 5 <<< (" s.find("reparte 13 <<< (" s.find("parcela -1 >>> "parte" in s True <<< ( s.find("parte",6 15 <<< ( s.find("parte",6,12-1
125 ( join(seqüência Strings: método m join Retorna uma string com todos os elementos da seqüência concatenados Obs: Os elementos da seqüência têm que ser strings A string objeto é usada como separador entre os elementos Ex.: <<< ((" join(("usr","bin","python."/" 'usr/bin/python' <<< (( Q".join((1,2,3,4,5 "... TypeError: sequence item 0: expected string, int found <<< ((' Q".join(('1','2','3','4','5 " '1Q2Q3Q4Q5'
126 Strings: métodos m lower e upper () lower Retorna a string com todos os caracteres maiúsculos convertidos para minúsculos () upper Retorna a string com todos os caracteres minúsculos convertidos para maiúsculos Ex.: >>> print () Esperança".upper " ESPERANÇA >>> print "Pé de Laranja () Lima".lower pé de laranja lima
127 Strings: método m replace ( replace(velho,novo,n Substitui as instâncias da substring velho por novo Se n for especificado, apenas n instâncias são trocadas Caso contrário, todas as instâncias são trocadas Ex.: >>> s = "quem parte e reparte, fica com a maior parte" <<< (" s.replace("parte","parcela 'quem parcela e reparcela, fica com a maior parcela' <<< ( s.replace("parte","parcela",2 'quem parcela e reparcela, fica com a maior parte'
128 ( split(separador Strings: método m split Retorna uma lista com as substrings presentes entre cópias da string separador Faz o contrário do método join Se separador não for especificado, é assumido seqüências de caracteres em branco, tabs ou newlines Ex.: >>> s = "xxx yyy zzz xxx yyy zzz" <<< () s.split ['xxx', 'yyy', 'zzz', 'xxx', 'yyy', 'zzz'] <<< (' s.split('xxx ['', ' yyy zzz ', ' yyy zzz']
129 ( strip(ch Strings: método m strip Retorna a string sem caracteres iniciais ou finais que estejam na string ch Se ch não for especificada, retira caracteres em branco Pode-se também usar rstrip() para retirar caracteres à direita (final) ou lstrip() para retirar caracteres à esquerda ( início ) Ex.: >>> " xxx afdsfa () strip." 'xxx afdsfa' >>> "xxx yyy zzz xxx".strip("xy (" 'zzz' >>> " xxx () rstrip." ' xxx'
130 Strings: método m translate ( translate(trans Retorna uma cópia da string onde os caracteres são substituídos de acordo com a tabela de tradução trans trans é uma string com 256 caracteres, um para cada possível código de oito bits Ex.: se trans tem 'X' na posição 65 (correspondente ao caractere ASCII 'A'), então, na string retornada, todos os caracteres 'A' terão sido substituídos por 'X' Na verdade, as tabelas de tradução são normalmente construídas com a função maketrans do módulo string
131 Função string.maketrans ( novo maketrans (velho, retorna uma tabela de tradução onde os caracteres em velho são substituídos pelos caracteres em novo Ex.: >>> from string import maketrans (' kz ' >>> trans = maketrans('qs', >>> s = "que surpresa: quebrei a cara" ( s.translate(trans <<< 'kue zurpreza: kuebrei a cara'
132 Python: Dicionários
133 Dicionários São estruturas de dados que implementam mapeamentos Um mapeamento é uma coleção de associações entre pares de valores O primeiro elemento do par é chamado de chave e o outro de conteúdo De certa forma, um mapeamento é uma generalização da idéia de acessar dados por índices, exceto que num mapeamento os índices (ou chaves) podem ser de qualquer tipo imutável
134 Chaves vs. Índices Considere que queiramos representar um caderno de telefones Uma solução é ter uma lista de nomes e outra de telefones Telefone de nome[i] armazenado em telefone[i] Acrescentar Joao com telefone : nome+= Joao telefone+= Para encontrar o telefone de Joao : Tel = telefone[nome.index[ Joao ]] Dicionários tornam isso mais fácil e eficiente telefone[ Joao ] = Tel = telefone[ Joao ]
135 Criando dicionários Uma constante do tipo dicionário é escrita { chave1:conteúdo1,... chaven:conteúdon} Uma variável do tipo dicionário pode ser indexada da maneira habitual, isto é, usando colchetes O conteúdo associado a uma chave pode ser alterado atribuindo-se àquela posição do dicionário Novos valores podem ser acrescentados a um dicionário fazendo atribuição a uma chave ainda não definida Não há ordem definida entre os pares chave/conteúdo de um dicionário
136 Exemplo >>> dic = {"joao":100,"maria":150} >>> dic["joao"] 100 >>> dic["maria"] 150 >>> dic["pedro"] = 10 >>> dic {'pedro': 10, 'joao': 100, 'maria': 150} >>> dic = {'joao': 100, 'maria': 150, 'pedro': 10} >>> dic {'pedro': 10, 'joao': 100, 'maria': 150}
137 Dicionários não têm ordem As chaves dos dicionários não são armazenadas em qualquer ordem específica Na verdade, dicionários são implementados por tabelas de ( Tables espalhamento (Hash A falta de ordem é proposital Diferentemente de listas, atribuir a um elemento de um dicionário não requer que a posição exista previamente X = [] X [10] = 5 # ERRO!... Y = {} Y [10] = 5 # OK!
138 A função dict A função dict é usada para construir dicionários e requer como parâmetros: Uma lista de tuplas, cada uma com um par chave/conteúdo, ou Uma seqüência de itens no formato chave=valor Nesse caso, as chaves têm que ser strings, mas são escritas sem aspas
139 Exemplo ([(' dict([(1,2),('chave','conteudo >>> d = >>> d[1] 2 >>> d['chave'] 'conteudo' ( dict(x=1,y=2 >>> d = >>> d['x'] 1 ( dict(1=2,3=4 >>> d = SyntaxError: keyword can't be an expression
140 Formatando com Dicionários O operador de formatação quando aplicado a dicionários requer que os valores das chaves apareçam entre parênteses antes do código de formatação O conteúdo armazenado no dicionário sob aquela chave é substituído na string de formatação Ex: >>> dic = { "Joao":"a", "Maria":"b" } >>> s = "%(Joao)s e %(Maria)s" >>> s % dic 'a e b'
141 () clear Método clear Remove todos os elementos do dicionário Ex.: >>> x = { "Joao":"a", "Maria":"b" } >>> y = x <<< () x.clear >>> print x,y {} {} Diferente de atribuir {} à variável: >>> x = { "Joao":"a", "Maria":"b" } >>> y = x >>> x = {} >>> print x,y {} {'Joao': 'a', 'Maria': 'b'}
142 () copy Método copy Retorna um outro dicionário com os mesmos pares chave/conteúdo Observe que os conteúdos não são cópias, mas apenas referências para os mesmos valores >>> x = {"Joao":[1,2], "Maria":[3,4]} >>> y = () x.copy >>> y ["Pedro"]=[5,6] >>> x ["Joao"] += [3] >>> print x {'Joao': [1, 2, 3], 'Maria': [3, 4]} >>> print y {'Pedro': [5, 6], 'Joao': [1, 2, 3], 'Maria': [3, 4]}
143 Método fromkeys ( fromkeys(lista,valor Retorna um novo dicionário cujas chaves são os elementos de lista e cujos valores são todos iguais a valor Se valor não for especificado, o default é None <<< ([ fromkeys([2,3.{} {2: None, 3: None} # Podemos usar o nome da classe ao invés # de um objeto: <<< ( dict.fromkeys(["joao","maria"],0 {'Joao': 0, 'Maria': 0}
144 ( get(chave,valor Método get Obtém o conteúdo de chave Não causa erro caso chave não exista: retorna valor Se valor não for especificado chaves inexistentes retornam None Ex.: >>> dic = { "Joao":"a", "Maria":"b" } <<< (" dic.get("pedro >>> print (" dic.get("pedro None >>> print (" dic.get("joao a >>> print (" dic.get("carlos","n/a N/A
145 ( has_key(chave Método has_key dic.has_key(chave) é o mesmo que chave in dic Ex.: >>> dic = { "Joao":"a", "Maria":"b" } <<< (" dic.has_key("joao True <<< (" dic.has_key("pedro False
146 Métodos items, keys e values items() retorna uma lista com todos os pares chave/conteúdo do dicionário keys() retorna uma lista com todas as chaves do dicionário values() retorna uma lista com todos os valores do dicionário Ex.: () dic.items <<< [('Joao', 'a'), ('Maria', 'b')] () dic.keys <<< ['Joao', 'Maria'] () dic.values <<< ['a', 'b']
147 ( chave ) pop Método pop Obtém o valor correspondente a chave e remove o par chave/valor do dicionário Ex.: >>> d = {'x': 1, 'y': 2} (' d.pop('x <<< 1 >>> d {'y': 2}
148 () popitem Método popitem Retorna e remove um par chave/valor aleatório do dicionário Pode ser usado para iterar sobre todos os elementos do dicionário Ex: >>> d {'url': ' 'spam': 0, 'title': 'Python Web Site'} <<< () d.popitem ('url', (' ' >>> d {'spam': 0, 'title': 'Python Web Site'}
149 ( update(dic Método update Atualiza um dicionário com os elementos de outro Os itens em dic são adicionados um a um ao dicionário original É possível usar a mesma sintaxe da função dict para especificar dic Ex.: >>> x = {"a":1,"b":2,"c":3} >>> y = {"z":9,"b":7} <<< ( x.update(y >>> x {'a': 1, 'c': 3, 'b': 7, 'z': 9} <<< (" x.update(a=7,c="xxx >>> x {'a': 7, 'c': 'xxx', 'b': 7, 'z': 9}
150 Python: Funções
151 Abstração É uma técnica de programação que nos permite pensar num problema em diversos níveis A idéia é que quando estamos pensando num problema macroscopicamente, não estamos preocupado com minúcias Dividir para conquistar: Um problema é dividido em diversos sub-problemas As soluções dos sub-problemas são combinadas numa solução do problema maior
152 Programação Estruturada É uma disciplina de programação que incorpora o princípio de Dividir para Conquistar (... outra (Programação Orientada a Objetos é Programas são divididos em sub-programas Cada sub-programa é invocado por meio de um identificador e uma lista de entradas Permite especificar como um problema pode ser resolvido em geral O mesmo sub-programa pode ser invocado para resolver diversos problemas de mesma natureza mas com valores específicos diferentes Os resultados computados por um sub-programa podem ser combinados com os de outros sub-programas
153 Definindo funções Em Python, sub-programas têm o nome de funções Formato geral: def nome (arg, arg,... arg): comando... comando Onde: nome é o nome da função args são especificações de argumentos da função Uma função pode ter 0, 1 ou mais argumentos comandos contêm as instruções a ser executadas quando a função é invocada
154 Resultado de funções Uma função tipicamente computa um ou mais valores Para indicar o valor a ser devolvido como o resultado da função, usa-se o comando return, que tem o formato return expressão onde a expressão é opcional e designa o valor a ser retornado Ao encontrar o comando return, a função termina imediatamente e o controle do programa volta ao ponto onde a função foi chamada Se uma função chega a seu fim sem nenhum valor de retorno ter sido especificado, o valor de retorno é None
155 Exemplo >>> def f(): return () f >>> print None >>> def f(): return "Oi" () f >>> print Oi >>> def f(nome): return "Oi, "+nome+"!" (" f("joao >>> print Oi, Joao!
156 Variáveis locais e globais Variáveis definidas em funções são locais, isto é, só podem ser usadas nas funções em que foram definidas Variáveis definidas fora de funções são conhecidas como variáveis globais É possível no código de uma função ler o conteúdo de uma variável global Para alterar uma variável global, ela precisa ser declarada no corpo da função usando o comando global
157 Exemplo >>> def f(): print a >>> a = 1 () f <<< 1 >>> def f(): a = 5 () f <<< >>> print a 1 >>> def f(): global a a = 5 () f <<< >>> print a 5
158 Argumentos de funções Argumentos (ou parâmetros) são como variáveis que recebem seus valores iniciais do chamador Essas variáveis, assim como outras definidas dentro da função são ditas locais, isto é, só existem no lugar onde foram definidas Ao retornar ao ponto de chamada, as variáveis locais são descartadas Se uma função define n argumentos, a sua chamada deve incluir valores para todos eles Exceção: argumentos com valores default
159 >>> def f(x): return x*x Exemplo ( f(10 >>> print 100 >>> print x... NameError: name 'x' is not defined () f >>> print... TypeError: f() takes exactly 1 argument (0 ( given
160 Argumentos default É possível dar valores default a argumentos Se o chamador não especificar valores para esses argumentos, os defaults são usados Formato: ( argn=defaultn def nome (arg1=default1,..., Se apenas alguns argumentos têm default, esses devem ser os últimos Se não fosse assim, haveria ambigüidade na passagem de argumentos
161 Exemplo >>> def f(nome,saudacao="oi",pontuacao="!!"): return saudacao+","+nome+pontuacao (" f("joao >>> print Oi,Joao!! (" f("joao","parabens >>> print Parabens,Joao!! ("..."," f("joao","ah >>> print Ah,Joao...
162 Passando argumentos com nomes É possível passar os argumentos sem empregar a ordem de definição desde que se nomeie cada valor passado com o nome do argumento correspondente Ex.: >>> def f(nome,saudacao="oi",pontuacao="!!"): return saudacao+","+nome+pontuacao (" f(saudacao="valeu",nome="joao >>> print Valeu,Joao!!
163 Alterando parâmetros É possível alterar parâmetros? Sim e não Como o parâmetro é uma variável local, ele pode ser alterado sem problemas Entretanto, se um parâmetro recebe um valor que vem de uma variável global, esta não é alterada Ex.: >>> def f(x): x = 5 >>> a = 1 ( a ) >>> f >>> print a 1
164 Alterando parâmetros Note que quando passamos uma variável do tipo lista como parâmetro, estamos passando uma referência para um valor do tipo lista Nesse caso, alterar o parâmetro pode influenciar no valor da variável global Na verdade, o valor da variável do tipo lista é uma referência que não muda Este caso é idêntico a termos duas variáveis se referindo ao mesmo valor
165 Exemplo >>> def f(x): x[:] = [5] >>> a = [1] ( f(a <<< >>> a [5] >>> b = a >>> b[:] = [7] >>> a [7]
166 Documentando Funções Ao invés de usar comentários para descrever o que uma função, é mais vantajoso usar docstrings Uma constante string escrita logo após o cabeçalho da função ( def (comando Permite o acesso à documentação a partir do interpretador, usando a notação função. doc >>> def fat(n):... "Retorna o fatorial de n."... for i in range(n-1,1,-1): n*=i... return n... ( fat(4 <<< 24 >>> print fat. doc Retorna o fatorial de n.
167 Lista de parâmetros variável vel Se o último argumento de uma definição de função começa com *, os todos os valores passados a partir daquele são postos numa tupla Ex.: >>> def imprime(nome,*atributos):... print nome,atributos... (' a',1,2,'b ') >>> imprime (' b ' a (1, 2, >>> def media(*valores):... total= for x in valores: total+=x ( total/len(valores... return... ( media(1,2,3,4 <<< 2.5
168 Lista de parâmetros variável vel ( 2 ) Se o último argumento de uma definição de função começa com **, os todos os valores passados usando chaves a partir daquele são postos num dicionário Ex.: >>> def f(a,b,**c): print a, b, c <<< ( f(1,2,3... TypeError: f() takes exactly 2 arguments (3 ( given <<< ( f(1,2,x=3 1 2 {'x': 3}
169 Lista de parâmetros variável vel ( 3 ) É possível passar os valores de uma tupla para preencher parâmetros posicionais de uma função bastando para isso precedê-la de * Um dicionário podem ser usado para preencher parâmetros por chave bastando para isso precedê-lo de ** É preciso tomar cuidado para não abusar! Ex.: >>> def f(a,b,*c,**d): print a,b,c,d <<< ([ f(*[1,2,3,4,5 1 2 (3, 4, 5) {} <<< ({ f(**{"a":1,"b":2,"c":3,"d":4 1 2 () {'c': 3, 'd': 4} <<< ({ f(1,2,3,**{"d":1 1 2 (3,) {'d': 1} <<< ({ f(1,2,3,**{"a":1... TypeError: f() got multiple values for keyword argument 'a'
170 Passando funções Nomes de funções podem ser manipulados como variáveis e mesmo como argumentos de funções Para saber se um nome se refere a uma função, use o () callable predicado Ex.: >>> def f(g): return g(5) >>> def h(x): return x*x ( f(h <<< 25 >>> m = h ( callable(m <<< True ( f(m <<< 25
171 Escopo Escopo é o nome que se dá ao conjunto de nomes acessíveis de um determinado ponto de um programa Também é chamado de espaço de nomes ou namespace Um programa começa em um escopo (chamado escopo global) enquanto que cada função acrescenta um escopo ( local ) próprio Módulos e classes também definem escopos Ao se fazer acesso a um nome, todos os escopos, do mais interno para o mais externo, são consultados. Isto explica por que definir uma variável numa função pode fazer com que uma variável global deixe de ser acessível
172 Função vars() () O dicionário obtido com a função vars() pode ser usado para ter acesso a todas as variáveis definidas num escopo. Ex.: () vars <<< {' builtins ': <module ' builtin ' (built-in)>, ' name ': ' main ', ' doc ': None} >>> def f(): x = 1 () vars print () vars <<< {'f': <function f at 0xb6e7f56c>, ' builtins ': <module ' builtin ' (built-in)>, ' name ': ' main ', ' doc ': None} () f <<< {'x': 1}
173 Funções definidas em funções Funções podem ser definidas dentro de funções Se uma função g é definida dentro de uma função f, ela tem acesso ao seu próprio escopo (em primeiro lugar) e também ao escopo de f Ex.: >>> def f(x): def g(y): return x*y ( g(2 return ( f(4 >>> print 8
174 Funções definidas em funções ( 2 ) Observe que, se uma função g foi definida dentro de outra função f, então, se g é armazenada numa variável ou transmitida para outra função ela carrega com si os valores do escopo de f (mas não o escopo global). Ex: >>> x = 2 >>> def f(y): def g(z): return x*y*z return g >>> h = ( f(3 >>> print ( h(1 6 >>> x = 3 >>> print ( h(1 9
175 Python: Recursão
176 Recursão É um princípio muito poderoso para construção de algoritmos A solução de um problema é dividido em Casos simples: São aqueles que podem ser resolvidos trivialmente Casos gerais: São aqueles que podem ser resolvidos compondo soluções de casos mais simples Semelhante à prova de teoremas por indução Casos simples: O teorema é verdadeiro trivialmente Casos genéricos: são provados assumindo-se que todos os casos mais simples também são verdadeiros
177 Função recursiva Implementa um algoritmos recursivo onde a solução dos casos genéricos requerem chamadas à própria função Uma função recursiva é a maneira mais direta (mas não necessariamente a melhor) de se resolver problemas de natureza recursiva ou para implementar estruturas de dados recursivas Considere, por exemplo, a definição da seqüência de Fibonacci: O primeiro e o segundo termo valem 0 e 1, respectivamente O i-ésimo termo é a soma do (i-1)-ésimo e o (i-2)-ésimo termo >>> def fib(i): if i==1: return 0 elif i==2: return 1 ( fib(i-1)+fib(i-2 else: return >>> for i in range(1,11): print fib(i),
178 Exemplo: Busca binária Um exemplo clássico de recursão é o algoritmo conhecido como busca binária que é usado para pesquisar um valor em uma lista ordenada Chamemos de imin e imax os índices mínimo e máximo da lista onde a busca será feita Inicialmente, imin = 0 e imax = len(lista)-1 O caso base corresponde a imin == imax Então, ou o valor é igual a lista [imin] ou não está na lista Senão, podemos dividir o intervalo de busca em dois Seja meio = (imin+imax)/2 Se o valor é maior que lista [meio], então ele se encontra em algum dos índices entre meio+1 e imax Caso contrário, deve se encontrar em algum dos índices entre imin e meio
179 Busca binária: implementação def testa(lista,valor): def busca_binaria(imin,imax): if imin==imax: return imin else: meio=(imax+imin)/2 if valor>lista[meio]: ( busca_binaria(meio+1,imax return else: ( busca_binaria(imin,meio return ( busca_binaria(0,len(lista)-1 i = if lista[i]==valor: print valor,"encontrado na posicao",i else: print valor,"nao encontrado" ( testa([1,2,5,6,9,12],3 <<< 3 nao encontrado ( testa([1,2,5,6,9,12],5 <<< 5 encontrado na posicao 2
180 Recursão infinita Assim como nos casos dos laços de repetição, é preciso cuidado para não escrever funções infinitamente recursivas Ex.: def recursiva(x): if f(x): return True ( recursiva(x else: return Uma função recursiva tem que Tratar todos os casos básicos Usar recursão apenas para tratar casos garantidamente mais simples do que o caso corrente Ex.: def recursiva(x): if f(x): return True elif x==0: return False ( recursiva(x-1 else: return
181 Eficiência de funções recursivas Quando uma função é chamada, um pouco de memória é usado para guardar o ponto de retorno, os argumentos e variáveis locais Assim, soluções iterativas são normalmente mais eficientes do que soluções recursivas equivalentes Isto não quer dizer que soluções iterativas sempre sejam preferíveis a soluções recursivas Se o problema é recursivo por natureza, uma solução recursiva é mais clara, mais fácil de programar e, freqüentemente, mais eficiente
182 Pensando recursivamente Ao invés de pensar construtivamente para para obter uma solução, às vezes é mais simples pensar em termos de uma prova indutiva Considere o problema de testar se uma lista a é uma permutação da lista b Caso básico: a é uma lista vazia Então a é permutação de b se b também é uma lista vazia Caso básico: a[0] não aparece em b Então a não é uma permutação de b Caso genérico: a[0] aparece em b na posição i Então a é permutação de b se a[1:] é uma permutação de b do qual foi removido o elemento na posição i
183 Exemplo: Testa permutações def e_permutacao(a,b): """ Retorna True sse a lista a é uma permutação da lista b """ if len(a) == 0 : return len(b)==0 if a[0] in b: ([ b.index(a[0 i = ([: e_permutacao(a[1:],b[0:i]+b[i+1 return return False ([ e_permutacao([1,2,3],[3,2,1 <<< True ([ e_permutacao([1,2,3],[3,3,1 <<< False ([ e_permutacao([1,2,3],[1,1,2,3 <<< False ([ e_permutacao([1,1,2,3],[1,2,3 <<< False
184 Estruturas de dados recursivas Há estruturas de dados que são inerentemente recursivas, já que sua própria definição é recursiva Por exemplo, uma lista pode ser definida recursivamente: ( vazia ) [] é uma lista Se A é uma lista e x é um valor, então A+[x] é uma lista com x como seu último elemento Esta é uma definição construtiva, que pode ser usada para escrever funções que criam listas Uma outra definição que pode ser usada para analisar listas é: Se L é uma lista, então: L == [], ou seja, L é uma lista vazia, ou x = L.pop() torna L uma lista sem seu último elemento x Esta definição não é tão útil em Python já que o comando for permite iterar facilmente sobre os elementos da lista
185 Exemplo: Subseqüência def e_subseq(a,b): """ Retorna True sse a é subseqüência de b, isto é, se todos os elementos a[0..n-1] de a aparecem em b[j(0)], b[j(1)]... b[j(n-1)] onde j(i)<j(i+1) """ if a == []: # Lista vazia é subseqüência de qq lista return True if a[0] not in b: return False ([: b[b.index(a[0])+1 return e_subseq (a[1:],
186 Encontrando a recorrência Alguns problemas não se apresentam naturalmente como recursivos, mas pensar recursivamente provê a solução Tome o problema de computar todas as permutações de uma lista Assumamos que sabemos computar todas as permutações de uma lista sem seu primeiro elemento x Seja perm uma dessas permutações Então, a solução do global contém todas as listas obtidas inserindo x em todas as possíveis posições de perm
187 Exemplo: computar todas as permutações de uma lista def permutacoes(lista): """ Dada uma lista, retorna uma lista de listas, onde cada elemento é uma permutação da lista original """ if len(lista) == 1: # Caso base return [lista] primeiro = lista[0] resto = lista [1:] resultado = [] for perm in permutacoes(resto): for i in range(len(perm)+1): resultado += \ [perm[:i]+[primeiro]+perm[i:]] return resultado
188 Torres de Hanói Jogo que é um exemplo clássico de problema recursivo Consiste de um tabuleiro com 3 pinos no qual são encaixados discos de tamanho decrescente A idéia é mover os discos de um pino para outro sendo que: Só um disco é movimentado por vez Um disco maior nunca pode ser posto sobre um menor
189 Torres de Hanói: Algoritmo A solução é simples se supusermos existir um algoritmo capaz de mover todos os discos menos um do pino de origem para o pino sobressalente O algoritmo completo para mover n discos do pino de origem A para o pino de destino B usando o pino sobressalente C é Se n é 1, então a solução é trivial Caso contrário, Usa-se o algoritmo para mover n-1 discos de A para C usando B como sobressalente Move-se o disco restante de A para B Usa-se o algoritmo para mover n-1 discos de C para B usando A como sobressalente
190 Torres de Hanói: Implementação def hanoi(n,origem,destino,temp): ( hanoi(n-1,origem,temp,destino if n>1: ( mover(origem,destino ( hanoi(n-1,temp,destino,origem if n>1: def mover(origem,destino): print Mover de, origem, para,\ destino Com um pouco mais de trabalho, podemos redefinir a função mover para que ela nos dê uma representação gráfica do movimento dos discos
191 Torres de Hanói: Exemplo * *** ***** ======================= *** ***** * ======================= ***** * *** ======================= * ***** *** ======================= * ***** *** ======================= * ***** *** ======================= *** * ***** ======================= * *** ***** =======================
192 Python: Classes
193 Orientação a Objetos É uma disciplina de programação assim como a Programação Estruturada Tenta unificar as idéias de algoritmos e estruturas de dados através do conceito de Objeto Um objeto é uma unidade de software que encapsula algoritmos e os dados sobre o qual os algoritmos atuam Os seguintes conceitos são importantes quando falamos de orientação a objetos: Polimorfismo Abstração Herança
194 Polimorfismo É o que permite que dois objetos diferentes possam ser usados de forma semelhante Por exemplo, tanto listas quanto tuplas ou strings podem ser indexadas por um número entre colchetes e suportam o método len Assim, se escrevemos... for i in range(len(x)): print i, X[i]...não é possível saber de antemão se X é uma tupla, uma lista ou uma string Desta forma, se escrevemos um algoritmo para ser aplicado um objeto X, então também pode ser aplicado a um objeto Y desde que Y seja suficientemente polimórfico a X
195 Abstração (ou ( encapsulamento É o que permite que um objeto seja utilizado sabendo-se sobre ele apenas a sua interface Em particular, não precisamos conhecer a implementação dos seus métodos Em OO a abstração tem mais alcance pois um objeto encapsula tanto dados como algoritmos Assim, podemos atribuir objetos ou passar objetos como argumentos, sem necessariamente saber como o objeto está implementado
196 Herança É o que permite construir objetos que são especializações de outro objeto Isso permite o reuso de software já que objetos especializados herdam dos objetos genéricos uma série de atributos comuns Por exemplo, considere um objeto que representa uma forma geométrica. Então, ele pode ter características tais como área, perímetro, centróide, etc. Um polígono é uma forma geométrica, Portanto, herda todas as características de formas geométricas Deve suportar também características específicas como número de lados e comprimento de arestas
197 Objetos em Python Python suporta OO através de classes Uma classe pode ser entendida como uma fábrica de objetos, todos com as mesmas características Diz-se que objeto fabricado por uma classe é uma instância da classe A rigor, uma classe é também um objeto Encapsula dados e algoritmos Entretanto, não é normalmente um objeto fabricado por uma classe, mas um objeto criado pela construção class Um objeto encapsula dados e algoritmos sob a forma de variáveis e métodos É comum chamar esses elementos constituintes dos objetos de atributos
198 Declaração de uma classe A maneira mais simples é: class nome: var = valor... var = valor def metodo (self,... arg):... def metodo (self,... arg):... As variáveis e os métodos são escritos precedidos pelo (.) nome da classe e por um ponto Assim, uma variavel v definida numa classe c é escrita c.v Os métodos sempre têm self como primeiro argumento self se refere a uma instância da classe () Uma nova instância da classe é criada usando nome
199 Exemplo >>> class C: a = 2 b = 3 def f(self,x): return C.a*x+C.b >>> C.a = 9 9 >>> C.b 3 () obj=c <<< ( obj.f(7 <<< 17
200 Atributos de instâncias No exemplo anterior, a e b eram atributos da classe C e portanto usáveis por qualquer instância de C Mais freqüentemente, precisamos de atributos associados a instâncias individuais Um atributo attr associado a uma instância obj tem nome obj.attr Se queremos nos referir a um atributo attr de um objeto dentro de algum de seus métodos, usamos o nome self.attr
201 Exemplo >>> class C: def init(self,a=2,b=3): self.a = a self.b = b def f(self,x): return self.a*x+self.b () C >>> obj1 = ( obj1.init(2,3 <<< () C >>> obj2 = ( obj2.init(8,1 <<< ( obj1.f(7 <<< 17 ( obj2.f(7 <<< 57
202 Atributos herdados da classe Se uma classe define atributos de classe, as instâncias herdam esses atributos da classe como atributos de instância Ex.: >>> class C: a = 1 def f(self,x): self.a += x () C >>> c = ( c.f(2 <<< >>> c.a 3 >>> C.a 1
203 Construtores Um método como init do exemplo anterior é bastante útil para inicializar atributos da instância e é conhecido como construtor da classe Na verdade, Python suporta construtores que podem ser chamados automaticamente na criação de instâncias Basta definir na classe um método chamado init Este método é chamado automaticamente durante a criação de um nova instância da classe, sendo que os argumentos são passados entre parênteses após o nome da classe Obs.: o método init é apenas um exemplo de método mágico que é invocado de maneira não padrão ( adiante (veremos outros
204 Exemplo >>> class C: def init (self,a=2,b=3): self.a = a self.b = b def f(self,x): return self.a*x+self.b () C >>> obj1 = ( C(8,1 >>> obj2 = ( obj1.f(7 <<< 17 ( obj2.f(7 <<< 57
205 Especialização de classes Para fazer uma classe C herdar de outra B, basta declarar C como: class C(B):... Diz-se que C é sub-classe (ou derivada) de B ou que B é super-classe (ou base) de C C herda todos os atributos de B A especialização de C se dá acrescentando-se novos atributos (variáveis e métodos) ou alterando-se métodos Se, um método de C, precisa invocar um método m de B, pode-se utilizar a notação B.m para diferenciar do m de C, referido como C.m
206 Exemplo >>> class B: n = 2 def f(self,x): return B.n*x >>> class C(B): def f(self,x): return B.f(self,x)**2 def g(self,x): return self.f(x)+1 () B >>> b = () C >>> c = ( b.f(3 <<< 6 ( c.f(3 <<< 36 ( c.g(3 <<< 37 >>> B.n = 5 ( c.f(3 <<< 225
207 Unbound Method O parâmetro self não pode ser removido da chamada da função f de B, na classe C, do exemplo anterior: >>> class C(B): def f(self,x): return B.f(x)**2 def g(self,x): return self.f(x)+1 >>> c=c() >>> print c.f(3) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 2, in f TypeError: unbound method f() must be called with B instance as first argument (got int instance instead)
208 Construtores de classes derivadas O construtor de uma classe D derivada de C precisa chamar o construtor de C A chamada do construtor de C não é feita por default Permite inicializar os elementos de C que não são específicos de D (... C. init (self, Usa-se a notação
209 Construtores de classes derivadas Exemplo: >>> class C:... def init (self):... print "Construtor de C"... self.x = 1... >>> class D(C):... def init (self):... print "Construtor de D" ( C. init (self self.y = 2... () d=d <<< Construtor de D Construtor de C >>> d.x 1 >>> d.y 2
210 Classes no novo estilo A partir do Python 2.2, classes podem também ser declaradas no chamado novo estilo : Se uma classe não é derivada de nenhuma outra, ela deve ser declarada como derivada da classe especial chamada object. Ex.: class C(object): Há várias diferenças entre o comportamento das classes no novo estilo e as do velho estilo Permite derivar tipos primitivos Descritores para propriedades, métodos estáticos, métodos de classe, etc Essas diferenças são pouco significativas para o iniciante
211 Herança a múltiplam É possível construir uma classe que herda de duas ou mais outras. Ex.: class C(A,B):... Nesse caso, a classe derivada herda todos os atributos de ambas as classes-base Se ambas as classes base possuem um atributo com mesmo nome, aquela citada primeiro prevalece No exemplo acima, se A e B possuem um atributo x, então C.x se refere ao que foi herdado de A
212 Exemplo >>> class C: def init (self,a,b): self.a, self.b = a,b def f(self,x): return self.a*x+self.b >>> class D: def init (self,legenda): self.legenda = legenda def escreve(self,valor): print self.legenda,'=',valor >>> class E(C,D): def init (self,legenda,a,b): ( C. init (self,a,b ( D. init (self,legenda def escreve(self,x): (( D.escreve(self,self.f(x ( E("f",10,3 >>> e = ( e.escreve(4 <<< f = 43
213 Atributos privados Em princípio, todos os atributos de um objeto podem ser acessados tanto dentro de métodos da classe como de fora Quando um determinado atributo deve ser acessado apenas para implementação da classe, ele não deveria ser acessível de fora Em princípio tais atributos não fazem parte da interface pública da classe Atributos assim são ditos privados Em Python, atributos privados têm nomes iniciados por dois caracteres traço-embaixo, isto é,
214 Exemplo >>> class C: def init (self,x): self. x = x def incr(self): self. x += 1 def x(self): return self. x ( C(5 >>> a = () a.x <<< 5 () a.incr <<< () a.x <<< 6 >>> a. x Traceback (most recent call last): File "<pyshell#13>", line 1, in -toplevela. x AttributeError: C instance has no attribute ' x'
215 Métodos mágicosm São métodos que são invocados usando operadores sobre o objeto ao invés de por nome Já vimos um método desses: o construtor init Alguns outros são: Adição: add Chamado usando '+' Subtração: sub Chamado usando '-' Representação: repr Chamado quando objeto é impresso Conversão para string: str Chamado quando o objeto é argumento do construtor da classe str Se não especificado, a função repr é usada
216 >>> class vetor: Exemplo def init (self,x,y): self.x, self.y = x,y def add (self,v): ( self.y+v.y return vetor(self.x+v.x, def sub (self,v): ( self.y-v.y return vetor(self.x-v.x, def repr (self): return "vetor("+str(self.x)+","+str(self.y)+")" ( a=vetor(1,2 <<< ( vetor(3,5 >>> a += ( a-vetor(2,2 <<< ( vetor(2,5 >>> print a ( vetor(4,7
217 Protocolos Diferentemente de outras linguagens, não há necessidade de classes serem relacionadas para haver polimorfismo entre elas, basta que implementem métodos semelhantes Um protocolo é uma especificação de polimorfismo informal Por exemplo, listas, strings e tuplas possuem em comum o fato de poderem iterar sobre uma coleção de elementos Todas implementam o protocolo para seqüências Métodos mágicos para indexar, alterar, etc.
218 Protocolo para seqüências len (self) retorna o comprimento da seqüência Chamada: ( len(objeto getitem (self,key) retorna o elemento na posição key da seqüência Chamada: objeto[key] Deve-se implementar também chaves negativas! ( setitem (self,key,value Chamada: objeto[key]=value Apenas para seqüências mutáveis ( del (self,key Chamada por del objeto[key] Apenas para (algumas) seqüências mutáveis
219 Exemplo >>> class ProgressaoAritmetica: def init (self,a1,incr): self.a1,self.incr=a1,incr def getitem (self,key): if not isinstance(key,(int,long)): raise TypeError if key<=0: raise IndexError return self.a1+(key-1)*self.incr def soma(self,n): return (self[1]+self[n])*n/2 ( ProgressaoAritmetica(1,2 >>> pa = >>> pa[1] 1 >>> pa[10] 19 ( pa.soma(100 <<< 10000
220 Atributos, Getters e Setters Muitas vezes queremos que determinados atributos possam ser acessados de forma controlada, isto é, vigiados por métodos Os métodos que controlam o acesso a tais atributos são conhecidos como getters e setters, referindo-se a métodos de leitura e escrita, respectivamente Os atributos controlados são chamados de propriedades Na verdade, podemos ter propriedades abstratas que não correspondem 1 para 1 com atributos da classe
221 Exemplo >>> class Retangulo: def init (self,tamanho): ( self.settamanho(tamanho def settamanho(self,tamanho): if min(tamanho)<0: raise ValueError self. tamx,self. tamy = tamanho def gettamanho(self): ( self. tamx,self. tamy ) return (( Retangulo((20,30 >>> r = () r.gettamanho <<< ( 30,20) (( r.settamanho((-1,0 <<< Traceback (most recent call last):... ValueError
222 A função property A função property pode ser usada para consubstanciar uma propriedade implementada por métodos de tal maneira que ela pareça um atributo da classe Ela é usada no corpo de uma declaração de classe com a forma: ( doc atributo = property(fget, fset, fdel,...onde fget, fset, fdel são métodos para ler, escrever e remover o atributo doc é uma docstring para o atributo
223 >>> class Retangulo: Exemplo def init (self,tamanho): ( self.settamanho(tamanho def settamanho(self,tamanho): if min(tamanho)<0: raise ValueError self. tamx,self. tamy = tamanho def gettamanho(self): ( self. tamx,self. tamy ) return ( property(gettamanho,settamanho tamanho = (( Retangulo((20,30 >>> r = >>> r.tamanho ( 30,20) ( 30,30 ) = r.tamanho >>> >>> r.tamanho ( 30,30)
224 Dicas para uso de OO Agrupe funções e dados que se referem a um mesmo problema Por exemplo, se uma função manipula uma variável global, é melhor que ambas sejam definidas numa classe como atributo e método Não permita promiscuidade entre classes e instâncias de classe Por exemplo, se há necessidade de um objeto manipular um atributo de outro, escreva um método com essa manipulação e chame-o Não escreva métodos extensos Em geral, um método deve ser o mais simples possível
225 Python: Exceções, Iteradores e Geradores
226 Exceções Quando um programa encontra dificuldades não previstas, diz-se que uma condição excepcional ou uma exceção ocorreu Um erro é uma exceção mas nem toda exceção é um erro Para poder representar tais eventos, Python define os ( objects chamados objetos de exceção (exception Se a condição excepcional não é prevista (e tratada), o programa termina com uma mensagem de rastreamento: >>> 1/0 Traceback (most recent call last): File "<pyshell#0>", line 1, in -toplevel- 1/0 ZeroDivisionError: integer division or modulo by zero
227 Objetos de Exceção Cada exceção individual corresponde a um objeto de exceção, que por sua vez é uma instância de alguma classe de exceção No exemplo anterior, tal objeto é instância da classe ZeroDivisionError Diz-se que o programa gerou ou levantou (raised, em inglês) uma condição de exceção na forma de um objeto Um programa bem elaborado precisa capturar (catch, em inglês) tais objetos e tratá-los para que a execução não seja abortada
228 Avisos Existem condições excepcionais menos sérias que não provocam o levantamento de um objeto de exceção, mas apenas são exibidas sob a forma de um aviso Por exemplo, >>> import regex Warning (from warnings module): File " main ", line 1 DeprecationWarning: the regex module is deprecated; please use the re module Neste caso, o intepretador nos sinaliza que o módulo regex é antigo e que foi substituido por outro mais atualizado chamado re O programa não falha, mas o programador fica ciente que provamelmente deve reescrever seu programa usando o módulo re para evitar obsolecência
229 O comando raise Para sinalizar a ocorrência de uma condição excepcional, pode-se usar o comando raise que tem uma das formas: raise classe raise classe, mensagem ( mensagem ) raise classe Onde classe é uma das classes de exceção definidas pelo Python Para saber todos os tipos de exceção consulte o manual Se quiser uma classe genérica use a classe Exception Uma listagem pode ser obtida escrevendo >>> import exceptions ( dir(exceptions <<< ['ArithmeticError', 'AssertionError', 'AttributeError',...
230 Exemplo >>> raise Exception Traceback (most recent call last): File "<pyshell#3>", line 1, in -toplevelraise Exception Exception >>> raise Exception,"Deu bode" Traceback (most recent call last): File "<pyshell#5>", line 1, in -toplevelraise Exception,"Deu bode" Exception: Deu bode (" Bode >>> raise Exception("Deu Traceback (most recent call last): File "<pyshell#7>", line 1, in -toplevel- (" Bode raise Exception("Deu Exception: Deu Bode
231 Algumas Classes de Exceção Cla sse Except ion At t ribut eerror IOError Index Error KeyError Nam eerror Synt axerror TypeError ValueError ZeroDivisionError Descr içã o Classe base para t odas as exceções Falha no acesso ou at ribuição a at ribut o de classe Falha no acesso a arquivo inexist ent e ou out ros de E/S Índice inexist ent e de seqüência Chave inexist ent e de dicionário Variável inexist ent e Erro de sint axe (código errado) Operador embut ido aplicado a objet o de t ipo errado Operador embut ido aplicado a objet o de t ipo cert o m as valor inapr opr iado Divisão ou m ódulo por zero
232 Criando uma Classe de Exceção Basta criar uma classe da forma habitual derivando-a da classe Exception Não é preciso redefinir qualquer método Ex.: >>> class MinhaExcecao(Exception): pass ("! bode >>> raise MinhaExcecao("Deu Traceback (most recent call last): File "<pyshell#11>", line 1, in -toplevel- ("! bode raise MinhaExcecao("Deu MinhaExcecao: Deu bode!
233 Capturando Exceções Para capturar uma exceção possivelmente levantada por um trecho de código, pode-se usar a construção try/except: try: Código except Exceções: Código de tratamento da exceção Sendo que Exceções pode ser: Classe Classe,var ( Classe1,...,ClasseN ) (Classe1,...,ClasseN),var Onde: Classe, Classe1 e ClasseN são nomes de classes de exceção Var é uma variável à qual é atribuída um objeto de exceção
234 Exemplo 1 >>> try: (" a = input("entre com um numero (" b = input("entre com outro numero print a, "/", b, "=", a/b except ZeroDivisionError: print "Ooops, segundo numero não pode ser\ zero!" Entre com um numero 1 Entre com outro numero 0 1 / 0 = Ooops, segundo numero não pode ser zero!
235 Exemplo 2 >>> try: (" a = input("entre com um numero (" b = input("entre com outro numero print a, "/", b, "=", a/b except (ZeroDivisionError,TypeError): print "Ooops, tente novamente!" Entre com um numero 1 Entre com outro numero "a" 1 / a = Ooops, tente novamente!
236 Exemplo 3 >>> try: (" a = input("entre com um numero (" b = input("entre com outro numero print a, "/", b, "=", a/b except (ZeroDivisionError,TypeError),e: print "Ooops, deu erro:",e Entre com um numero 1 Entre com outro numero "z" 1 / z = Ooops, deu erro: unsupported operand type(s) for /: 'int' and 'str'
237 Mais except É possível tratar diferentemente as diversas exceções usando duas ou mais cláusulas except Se quisermos nos prevenir contra qualquer tipo de erro, podemos usar uma cláusula except sem nome de classe Outra opção é usar a classe Exception, que é base para todas as exceções e portanto casa com qualquer exceção Se não quisermos tratar um erro em uma cláusula except, podemos passá-la adiante usando o comando raise Nesse caso, podemos usar um raise sem argumentos ou passar explicitamente um objeto de exceção
238 Exemplo 4 >>> try: (" a = input("entre com um numero (" b = input("entre com outro numero print a, "/", b, "=", a/b except ZeroDivisionError: print "Ooops, divisão por zero" except TypeError: print "Ooops, você não deu um número" except: print "Deu um bode qualquer" Entre com um numero 2 Entre com outro numero fads2312 Deu um bode qualquer
239 Exemplo 5 >>> try: (" a = input("entre com um numero (" b = input("entre com outro numero print a, "/", b, "=", a/b except (ZeroDivisionError,TypeError),e: print "Ooops, deu erro:",e except Exception,e: print "Deu bode não previsto:",e raise Entre com um numero a Entre com outro numero Deu bode não previsto: EOF when reading a line Traceback (most recent call last): File "<pyshell#52>", line 3, in -toplevel- (" b = input("entre com outro numero EOFError: EOF when reading a line
240 A cláusula else É possível completar um comando try com uma cláusula else que introduz um trecho de código que só é executado quando nenhuma exceção ocorre: try: Código except Exceções: Código de tratamento da exceção else: Código executado se não ocorrem exceções
241 >>> while True: Exemplo 6 try: (" a = input("entre com um numero (" b = input("entre com outro numero print a, "/", b, "=", a/b except Exception,e: print "Deu bode:",e print "Tente novamente" else: break Entre com um numero 1 Entre com outro numero xxx Deu bode: name 'xxx' is not defined Tente novamente Entre com um numero 1 Entre com outro numero 2 1 / 2 = 0
242 A cláusula finally A cláusula finally pode ser usada para se assegurar que mesmo que ocorra algum erro, uma determinada seqüência de comandos vai ser executada Pode ser usada para restabelecer alguma variável para um valor default, por exemplo A cláusula finally e cláusulas except são mutuamente exclusivas Exceções nesse caso não são tratadas É possível combinar ambas usando comandos try aninhados, mas normalmente não há muito uso para isso
243 Exemplo 7 >>> try: try: (" número x = input("entre com um finally: print "restabelecendo um valor para x" x = None except: print "Deu bode" Entre com um número 2xx restabelecendo um valor para x Deu bode
244 Iteradores São maneiras genéricas de implementar iterações com classes Permite o uso do comando for É geralmente mais econômico do que usar uma lista pois não é preciso armazenar todos os valores, mas apenas computar um por vez Um iterador é uma classe que implementa o método mágico iter É um método que, por sua vez, retorna um objeto que implementa um método chamado next O método next deve retornar o próximo valor a ser iterado Se não há próximo valor, next deve levantar a exceção StopIteration
245 Exemplo >>> class MeuIterador: a = 0 def iter (self): return self def next(self): if self.a>10: raise StopIteration self.a += 1 return self.a () MeuIterador >>> iter = >>> for i in iter: print i,
246 Geradores Geradores são funções especiais que retornam iteradores Em resumo, uma função geradora é uma que contém o comando yield valor Uma função geradora normalmente é chamada para obter o iterador para um comando for O comando for automaticamente iterará sobre todos os valores que yield retorna Observe que o iterador produzido pela função geradora é tal que o código que gera os valores e o código dentro do for se sucedem alternadamente Geradores são especialmente úteis em códigos recursivos
247 >>> def gerador(): for i in range(10): print "i = ", i yield i Exemplo >>> for j in gerador(): i = 0 j = 0 i = 1 j = 1... i = 9 j = 9 print "j = ",j
248 Python: Conjuntos
249 Conjuntos Um conjunto é uma coleção de valores distintos Pode-se implementar conjuntos de diversas formas Uma lista de valores Têm-se que tomar o cuidado de evitar valores duplicados Um dicionário As chaves de um dicionário são necessariamente únicas O valor associado a cada chave pode ser qualquer um Python suporta um tipo primitivo chamado set que implementa conjuntos Mais apropriado do que o uso de listas ou dicionários
250 O tipo set Pode-se construir um set usando a construção ( set(sequência Onde sequência é uma sequência qualquer, como uma lista, uma tupla ou uma string Caso use-se uma lista, os elementos devem ser imutáveis Exemplos: (( set((1,2,3 <<< ([ 3 set([1, 2, (" xxabc ") >>> set ([' b ' set(['a', 'x', 'c', ([ 1,(1,2),3,1 ]) >>> set ([ 3 2), 1, set([(1, ([ 1,[1,2],3,1 ]) >>> set ERROR...
251 Trabalhando com sets x in s True se o elemento x pertence a s s.add(x) Inclui o elemento x em s s.copy() Retorna uma cópia de s s.union(r) Retorna a união entre s e r s.intersection(r) Retorna a interseção entre s e r s.difference(r) Retorna a diferença entre s e r list(s) Retorna os elementos de s numa lista tuple(s) Retorna os elementos de s numa tupla
252 ([ set([1,2,3 >>> s = ([ set([2,5,9,1 >>> r = >>> 1 in s True >>> 1 in r True ( s.union(r <<< ([ 9 set([1, 2, 3, 5, ( s.intersection(r <<< ([ 2 set([1, ( s.difference(r <<< ([ set([3 ( r.difference(s <<< ([ 5 set([9, ( s.add(5 <<< ( s.intersection(r <<< ([ 5 set([1, 2, Exemplos
253 Iterando sobre sets Pode-se também usar o comando for com sets Observe-se que a iteração não necessariamente visita os elementos na mesma ordem em que eles foram inseridos no conjunto Exemplo: ([" set([1,2,9,100,"a >>> s = >>> for x in s: print x, a
254 Outros métodosm ( existir s.discard(x) Exclui o elemento x de s (se s.issubset(r) True sse s contido em r s.issuperset(r) True sse s contém r s.symmetric_difference(r) Retorna a diferença simétrica entre s e r, isto é, a união entre s e r menos a interseção de s e r ( s.union(r s.update(r) mesmo que s = s.intersection_update(r) mesmo que ( s.intersection(r s = s.difference_update(r) mesmo que ( s.difference(r s =
255 Exemplos ([ set([1,2,3 >>> s = ([ set([2,5,9 >>> r = ( s.update(r <<< >>> s ([ 9 set([1, 2, 3, 5, ( s.issuperset(r <<< True ( r.issubset(s <<< True ( s.discard(5 <<< >>> s ([ 9 set([1, 2, 3, ( s.symmetric_difference(r <<< ([ 1 set([3, 5,
256 Python: Módulos
257 Módulos Módulos são programas feitos para serem reaproveitados em outros programas Eles tipicamente contêm funções, variáveis, classes e objetos que provêm alguma funcionalidade comum Por exemplo, já vimos que o módulo math contém funções matemáticas como sin, exp, etc, além da constante pi Toda a biblioteca padrão do Python é dividida em ( tarde módulos e pacotes (veremos mais Alguns dos mais comuns são: sys, os, time, random, re, shelve
258 Escrevendo módulosm Na verdade, qualquer programa que você escreva e salve num arquivo pode ser importado como um módulo Por exemplo, se você salva um programa com o nome prog.py, ele pode ser importado usando o comando import prog Entretanto, a importação só ocorre uma vez Python assume que variáveis e funções não são mudados e que o código do módulo serve meramente para inicializar esses elementos
259 Escrevendo módulosm Após a importação de um módulo, este é compilado, gerando um arquivo.pyc correspondente No exemplo, um arquivo prog.pyc será criado Python só recompila um programa se o arquivo.py for mais recente que o arquivo.pyc
260 $ cat teste.py def f(): print "alo" () f $ python... >>> import teste alo >>> import teste <<< () teste.f alo >>> $ dir teste* teste.py teste.pyc Exemplo (em ( Unix
261 Tornando módulos m disponíveis Em que diretório os módulos são buscados durante a importação? No diretório corrente Nos diretórios da lista sys.path Se for desejável especificar o local onde os módulos residem, há essencialmente duas opções Alterar diretamente a variável sys.path Alterar a variável de ambiente PYTHONPATH É o método recomendável pois não requer que o programa que importará o módulo seja alterado
262 Exemplo $ mkdir python $ mv teste.py python/ $ cat python/teste.py def f(): print "alo" () f $ export PYTHONPATH=~/python $ python ( 21:19:01 Python (#2, Sep ,... >>> import teste alo
263 A variável vel name Se um programa pode ser executado por si só ou importado dentro de outro, como distinguir as duas situações? A variável name é definida para cada programa: Se é um módulo, retorna o nome do módulo Se é um programa sendo executado, retorna ' main ' Para saber se o código está sendo executado como módulo, basta testar: If name == ' main ': código Isto é útil em diversas circunstâncias Por exemplo, para colocar código de teste, código para instalação do módulo ou exemplos de utilização
264 Exemplo $ cat teste.py def f(): print "alo" if name == ' main ': () f $ python teste.py alo $ python ( 21:19:01 Python (#2, Sep ,... >>> import teste >>> print name main >>> print teste. name teste
265 São hierarquias de módulos Pacotes Um pacote é um diretório que contém um arquivo chamado init.py O pacote deve estar em um dos diretórios nos quais o Python busca por módulos Para importar o pacote, use o nome do diretório O programa correspondente ao pacote é init.py
266 Pacotes Os demais arquivos e diretórios dentro do pacote são encarados recursivamente como módulos Por exemplo, se um pacote se chama p e contém um arquivo chamado m.py, então podemos importar p (arquivo p/ init.py) ( p/m.py p.m (arquivo Semelhantemente, p poderia ter um outro pacote sob a forma de outro diretório contendo um arquivo init.py
267 Exemplo $ dir python/ pacote teste.py $ dir python/pacote/ init.py teste2.py $ cat python/teste.py print "teste" $ cat python/pacote/ init.py print "pacote" $ cat python/pacote/teste2.py print "teste2" $ python... >>> import teste teste >>> import pacote pacote >>> import pacote.teste2 teste2
268 Python: Entrada e Saída
269 Arquivos Entrada e saída são operações de comunicação de um programa com o mundo externo Essa comunicação se dá usualmente através de arquivos Arquivos estão associados a dispositivos Por exemplo, disco, impressora, teclado Em Python, um arquivo pode ser lido/escrito através de um objeto da classe file
270 Arquivos default Já usamos, sem saber, três arquivos default Sempre que um comando print é executado, o resultado vai para um arquivo chamado sys.stdout Sempre que lemos um dado através do comando input ou raw_input, na verdade estamos lendo de um arquivo chamado sys.stdin Mensagens de erro ou de rastreamento de exceções são enviadas para um arquivo chamado sys.stderr
271 Exemplo >>> import sys (" sys.stdout.write("alo <<< alo >>> print "alo" alo () sys.stdin.readline <<< sfadfas 'sfadfas\n' () raw_input <<< fasdfadsf 'fasdfadsf'
272 Redirecionamento Os arquivos sys.stdin, sys.stdout e sys.stderr normalmente estão associados ao teclado e ao display do terminal sendo usado, mas podem ser reassociados a outros dispositivos Em Unix/Linux e Windows: programa > arquivo Executa programa redirecionando stdout para arquivo programa < arquivo Executa programa redirecionando stdin de arquivo programa1 programa2 Executa programa1 e programa2 sendo que a saída de programa1 é redirecionanda para a entrada de programa2
273 Redirecionamento Em Linux com shell bash programa 2> arquivo Executa programa redirecionando stderr para arquivo
274 Abrindo arquivos ( buffering open (name, mode, name : nome do arquivo a abrir mode : (opcional) modo de abertura string contendo ( default ) r : leitura w : escrita b : binário a : escrita a partir do final + : (usado com r) indica leitura e escrita
275 Abrindo arquivos buffering : (opcional) indica se memória (buffers) é usada para acelerar operações de entrada e saída 0 : buffers não são usados 1 (ou qq número negativo): um buffer de tamanho padrão ( default ) 2 ou maior: tamanho do buffer em bytes
276 O objeto file O comando open retorna um objeto do tipo file ( arquivo ) Na verdade, em Python 2.4 em diante, open é o mesmo que file, e portanto o comando é um construtor O objeto retornado é usado subseqüentemente para realizar operações de entrada e saída: (" w " >>> arq = open ("teste", (" Oi ") >>> arq.write () >>> arq.close (" teste ") >>> arq = open () arq.read >>> x = >>> x 'Oi'
277 Métodos Read, Write e Close ( read(num Lê num bytes do arquivo e os retorna numa string Se num não é especificado, todos os bytes desde o ponto atual até o fim do arquivo são rretornados ( write(string Escreve string no arquivo Devido ao uso de buffers, a escrita pode não ser feita imediatamente Use o método flush() ou close() para assegurar a escrita física () close Termina o uso do arquivo para operações de leitura e escrita
278 Convenção de fim de linha Arquivos de texto são divididos em linhas usando caracteres especiais Linux/Unix: \n Windows: \r\n Mac: \r Python usa sempre \n para separar linhas Ao se ler/escrever um arquivo aberto em modo texto (não binário) faz traduções de \n para se adequar ao sistema operacional Em modo binário, entretanto, a conversão não é feita
279 Interação com o Sistema Operacional Operações de entrada e saída são na verdade realizadas pelo sistema operacional O módulo os possui diversas variáveis e funções que ajudam um programa Python a se adequar ao sistema operacional, por exemplo: os.getcwd() retorna o diretório corrente os.chdir(dir) muda o diretório corrente para dir os.sep é uma string com o caractere que separa componentes de um caminho ('/' para Unix, '\\' para ( Windows os.path.exists(path) diz se path se refere ao nome de um arquivo existente
280 Lendo e escrevendo linhas ( readline(n Se n não é especificado, retorna exatamente uma linha lida do arquivo Caso contrário, lê uma linha, mas busca no máximo n caracteres pelo final de linha ( readlines(n Se n não é especificado, retorna o restante do conteúdo do arquivo em uma lista de strings Caso n seja especificado, a leitura é limitada a n caracteres no máximo
281 Lendo e escrevendo linhas ( writelines(seqüência Escreve a lista (ou qualquer seqüência) de strings, uma por uma no arquivo Caracteres terminadores de linha não são acrescentados
282 Acesso direto É possível ler e escrever não seqüencialmente em alguns tipos de arquivo Devem estar associados a dispositivos que permitem acesso direto, como discos, por exemplo ( seek(offset,whence offset indica o número do byte a ser lido e escrito pela próxima operação de entrada e saída whence indica a partir de onde offset será contado 0 (default) : do início 1 : do ponto corrente 2 : do final
283 () tell Acesso direto Indica a posição corrente (número de bytes a partir do início do ( arquivo
Python: Comandos Básicos. Claudio Esperança
Python: Comandos Básicos Claudio Esperança Primeiros passos em programação Até agora só vimos como computar algumas expressões simples Expressões são escritas e computadas imediatamente Variáveis podem
Danilo Borges da Silva [email protected]
Danilo Borges da Silva [email protected] Simples o suficiente para um curso introdutório Muitos recursos Orientação a Objetos Escalável (módulos, classes, controle de exceções) Biblioteca embutida
Tuplas e Dicionários. Vanessa Braganholo [email protected]
Tuplas e Dicionários Vanessa Braganholo [email protected] 2 Tuplas Tuplas } Tuplas são sequências de valores, da mesma forma que listas } Mas, existem diferenças... } Os valores de uma tupla, ao contrário
Introdução à Linguagem
Introdução à Linguagem Curso de Nivelamento do PPGMNE Janeiro / 2011 Juliano J. Scremin [email protected] Um pouco de história Um pouco de história: Nascimento do Python Um pouco de história:
Python: Listas. Claudio Esperança
Python: Listas Claudio Esperança Estruturas de dados Maneira de organizar dados de maneira a facilitar seu acesso Algumas formas são clássicas: Listas Arrays (vetores e matrizes) Tuplas (registros) Árvores
Python: Funções. Claudio Esperança
Python: Funções Claudio Esperança Abstração É uma técnica de programação que nos permite pensar num problema em diversos níveis A idéia é que quando estamos pensando num problema macroscopicamente, não
Organização de programas em Python. Vanessa Braganholo [email protected]
Organização de programas em Python Vanessa Braganholo [email protected] Vamos programar em Python! Mas... } Como um programa é organizado? } Quais são os tipos de dados disponíveis? } Como variáveis podem
e à Linguagem de Programação Python
Introdução a Algoritmos, Computação Algébrica e à Linguagem de Programação Python Curso de Números Inteiros e Criptografia Prof. Luis Menasché Schechter Departamento de Ciência da Computação UFRJ Agosto
PYTHON LISTAS. Introdução à Programação SI2
PYTHON LISTAS Introdução à Programação SI2 3 Sequências Sequências! Podem ser indexados por algum valor ordinal posicional Algumas operações são aplicadas a todos os tipos de sequências. Listas li = [1,2,3,
Python: Tuplas e Strings. Claudio Esperança
Python: Tuplas e Strings Claudio Esperança Tuplas São estruturas de dados parecidas com listas, mas com a particularidade de serem imutáveis Tuplas são seqüências e, assim como listas, podem ser indexadas
2. OPERADORES... 6 3. ALGORITMOS, FLUXOGRAMAS E PROGRAMAS... 8 4. FUNÇÕES... 10
1. TIPOS DE DADOS... 3 1.1 DEFINIÇÃO DE DADOS... 3 1.2 - DEFINIÇÃO DE VARIÁVEIS... 3 1.3 - VARIÁVEIS EM C... 3 1.3.1. NOME DAS VARIÁVEIS... 3 1.3.2 - TIPOS BÁSICOS... 3 1.3.3 DECLARAÇÃO DE VARIÁVEIS...
Programação de Computadores
Programação de Computadores INTRODUÇÃO AOS ALGORITMOS E À PROGRAMAÇÃO DE COMPUTADORES PARTE 2 Renato Dourado Maia Instituto de Ciências Agrárias Universidade Federal de Minas Gerais Exemplo Inicial Uma
Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira
Algoritmos e Estrutura de Dados Aula 1 Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira Linguagem a ser Utilizada? Nossa disciplina é de Algoritmos e Estrutura de Dados, e não de linguagem
Python Funções. Introdução à Programação SI1
Python Funções Introdução à Programação SI1 Conteúdo Funções Conceitos Objetivos Modularização Exemplos Exercícios 2 Funções O que são? Qual a função de uma função? 3 Imagine o código 4 Imagine o código
Introdução aos cálculos de datas
Page 1 of 7 Windows SharePoint Services Introdução aos cálculos de datas Aplica-se a: Microsoft Office SharePoint Server 2007 Ocultar tudo Você pode usar fórmulas e funções em listas ou bibliotecas para
Algoritmos com VisuAlg
Algoritmos com VisuAlg Prof Gerson Volney Lagemann Depto Eng de Produção e Sistemas UDESC - CCT Algoritmos com VisuAlg Introdução A linguagem VisuAlg é simples, seu objetivo é disponibilizar um ambiente
AMBIENTE DE PROGRAMAÇÃO PYTHON
Computadores e Programação Engª Biomédica Departamento de Física Faculdade de Ciências e Tecnologia da Universidade de Coimbra Ano Lectivo 2003/2004 FICHA 1 AMBIENTE DE PROGRAMAÇÃO PYTHON 1.1. Objectivos
MC102 Algoritmos e programação de computadores Aula 3: Variáveis
MC102 Algoritmos e programação de computadores Aula 3: Variáveis Variáveis Variáveis são locais onde armazenamos valores na memória. Toda variável é caracterizada por um nome, que a identifica em um programa,
Algoritmos e Programação Estruturada
Algoritmos e Programação Estruturada Virgínia M. Cardoso Linguagem C Criada por Dennis M. Ritchie e Ken Thompson no Laboratório Bell em 1972. A Linguagem C foi baseada na Linguagem B criada por Thompson.
Minicurso de Python Aula 1. Raphael Lupchinski Marcelo Millani
Minicurso de Python Aula 1 Raphael Lupchinski Marcelo Millani Introdução Python é uma linguagem de programação poderosa e fácil de aprender Possui estruturas de dados eficientes e de alto nível, além de
Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões
Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões Professor: Max Pereira http://paginas.unisul.br/max.pereira Ciência da Computação Primeiro Programa em Java public class OlaPessoal
Componentes da linguagem C++
Componentes da linguagem C++ C++ é uma linguagem de programação orientada a objetos (OO) que oferece suporte às características OO, além de permitir você realizar outras tarefas, similarmente a outras
Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura
UFPI CCN DIE Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura O projeto Desenvolver um compilador de um subconjunto básico da linguagem PORTUGOL.
Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza. [email protected]
Fundamentos de Programação Turma CI-240-EST Josiney de Souza [email protected] Agenda do Dia Aula 2 (07/08/15) Introdução ao Python História Características Estrutura dos código-fonte Primeiros elementos
O código JavaScript deve ser colocado entre tags de comentário para ficar escondido no caso de navegadores antigos que não reconhecem a linguagem.
1 - O que é JAVASCRIPT? É uma linguagem de script orientada a objetos, usada para aumentar a interatividade de páginas Web. O JavaScript foi introduzido pela Netscape em seu navegador 2.0 e posteriormente
Os objetivos indicados aplicam-se a duas linguagens de programação: C e PHP
AGRUPAMENTO DE ESCOLAS DE SANTA COMBA DÃO CURSO PROFISSIONAL DE TÉCNICO DE GESTÃO E PROGRAMAÇÃO DE SISTEMAS INFORMÁTICOS 2012-2015 PROGRAMAÇÃO E SISTEMAS DE INFORMAÇÃO MÓDULO 2 Mecanismos de Controlo de
Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática
Folha 1-1 Introdução à Linguagem de Programação JAVA 1 Usando o editor do ambiente de desenvolvimento JBUILDER pretende-se construir e executar o programa abaixo. class Primeiro { public static void main(string[]
Resumo da Matéria de Linguagem de Programação. Linguagem C
Resumo da Matéria de Linguagem de Programação Linguagem C Vitor H. Migoto de Gouvêa 2011 Sumário Como instalar um programa para executar o C...3 Sintaxe inicial da Linguagem de Programação C...4 Variáveis
JSP - ORIENTADO A OBJETOS
JSP Orientação a Objetos... 2 CLASSE:... 2 MÉTODOS:... 2 Método de Retorno... 2 Método de Execução... 2 Tipos de Dados... 3 Boolean... 3 Float... 3 Integer... 4 String... 4 Array... 4 Primeira:... 4 Segunda:...
20 Caracteres - Tipo char
0 Caracteres - Tipo char Ronaldo F. Hashimoto e Carlos H. Morimoto Até agora vimos como o computador pode ser utilizado para processar informação que pode ser quantificada de forma numérica. No entanto,
Roteiro 1: Dados, variáveis, operadores e precedência
1. Introdução Universidade Federal do ABC Disciplina: Processamento da Informação (BC-0505) Assunto: Dados, variáveis, operadores e precedência Roteiro 1: Dados, variáveis, operadores e precedência Nesta
ALGORITMOS PARTE 01. Fabricio de Sousa Pinto
ALGORITMOS PARTE 01 Fabricio de Sousa Pinto Algoritmos: Definição 2 É uma sequência de instruções finita e ordenada de forma lógica para a resolução de uma determinada tarefa ou problema. Algoritmos 3
Algoritmo. Linguagem natural: o Ambígua o Imprecisa o Incompleta. Pseudocódigo: o Portugol (livro texto) o Visualg (linguagem) Fluxograma
Roteiro: Conceitos básicos de algoritmo, linguagem, processador de linguagem e ambiente de programação; Aspectos fundamentais da organização e do funcionamento de um computador; Construções básicas de
INF 1005 Programação I
INF 1005 Programação I Aula 12 Cadeia de Caracteres (Strings) Edirlei Soares de Lima Caracteres Até o momento nós somente utilizamos variáveis que armazenam números (int, float ou
Aluísio Eustáquio da Silva
1 Aluísio Eustáquio da Silva SciLab Programável Material didático usado em aulas de Programação de Computadores, Algoritmos e Lógica de Programação Betim Maio de 2012 2 PROGRAMAÇÃO O SciLab permite que
Para testar seu primeiro código utilizando PHP, abra um editor de texto (bloco de notas no Windows) e digite o código abaixo:
Disciplina: Tópicos Especiais em TI PHP Este material foi produzido com base nos livros e documentos citados abaixo, que possuem direitos autorais sobre o conteúdo. Favor adquiri-los para dar continuidade
A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.
INTRODUÇÃO A lógica de programação é extremamente necessária para as pessoas que queiram trabalhar na área de programação, seja em qualquer linguagem de programação, como por exemplo: Pascal, Visual Basic,
Programação Elementar de Computadores Jurandy Soares
Programação Elementar de Computadores Jurandy Soares Básico de Computadores Computador: dispositivos físicos + programas Dispositivos físicos: hardware Programas: as instruções que dizem aos dispositivos
UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA
Responda 1) Quem desenvolveu a linguagem C? Quando? 2) Existe alguma norma sobre a sintaxe da linguagem C? 3) Quais são os tipos básicos de dados disponíveis na linguagem C? 4) Quais são as principais
2 echo "PHP e outros.";
PHP (Hypertext Preprocessor) Antes de qualquer coisa, precisamos entender o que é o PHP: O PHP(Hypertext Preprocessor) é uma linguagem interpretada gratuita, usada originalmente apenas para o desenvolvimento
Introdução à Programação
Introdução à Programação Introdução a Linguagem C Construções Básicas Programa em C #include int main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius = 30; farenheit = 9.0/5
Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis
1. TIPOS DE DADOS Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem ser classificadas em dois tipos: As instruções, que
Resolução de problemas e desenvolvimento de algoritmos
SSC0101 - ICC1 Teórica Introdução à Ciência da Computação I Resolução de problemas e desenvolvimento de algoritmos Prof. Vanderlei Bonato Prof. Cláudio Fabiano Motta Toledo Sumário Análise e solução de
Capítulo 2: Introdução à Linguagem C
Capítulo 2: Introdução à Linguagem C INF1005 Programação 1 Pontifícia Universidade Católica Departamento de Informática Programa Programa é um algoritmo escrito em uma linguagem de programação. No nosso
INF 1005 Programação I
INF 1005 Programação I Aula 03 Introdução a Linguagem C Edirlei Soares de Lima Estrutura de um Programa C Inclusão de bibliotecas auxiliares: #include Definição de constantes:
AULA 02. 1. Uma linguagem de programação orientada a objetos
AULA 02 TECNOLOGIA JAVA O nome "Java" é usado para referir-se a 1. Uma linguagem de programação orientada a objetos 2. Uma coleção de APIs (classes, componentes, frameworks) para o desenvolvimento de aplicações
Universidade Federal Rural do Rio de Janeiro PET-Sistemas de Informação. Lucas Nunes Paim [email protected]
Universidade Federal Rural do Rio de Janeiro PET-Sistemas de Informação Lucas Nunes Paim [email protected] Aula 1 1. Introdução O que é Python? Por que usar Python? 2. Instalação 3. Variáveis 4.
Organização e Arquitetura de Computadores I
Organização e Arquitetura de Computadores I Aritmética Computacional Slide 1 Sumário Unidade Lógica e Aritmética Representação de Números Inteiros Aritmética de Números Inteiros Representação de Números
Algoritmos e Programação Conceitos e Estruturas básicas (Variáveis, constantes, tipos de dados)
Algoritmos e Programação Conceitos e Estruturas básicas (Variáveis, constantes, tipos de dados) Os algoritmos são descritos em uma linguagem chamada pseudocódigo. Este nome é uma alusão à posterior implementação
Introdução a Algoritmos Parte 04
Universidade Federal do Vale do São Francisco Curso de Engenharia de Computação Introdução a Algoritmos Parte 04 Prof. Jorge Cavalcanti [email protected] www.univasf.edu.br/~jorge.cavalcanti
ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.
Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 8 ARRAYS Introdução Até agora, utilizamos variáveis individuais. Significa que uma variável objeto
AULA 2: INTRODUÇÃO A LINGUAGEM DE C. Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme
AULA 2: INTRODUÇÃO A LINGUAGEM DE C Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme Agenda Introdução a linguagem C Compiladores Variáveis IDEs Exemplos Exercícios Introdução A Linguagem C
Orientação a Objetos
1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou
Introdução à Lógica de Programação
Introdução à Lógica de Programação Sistemas Numéricos As informações inseridas em um computador são traduzidos em dados, ou seja, em sinais que podem ser manipulados pelo computador. O computador trabalha
Geração de código intermediário. Novembro 2006
Geração de código intermediário Novembro 2006 Introdução Vamos agora explorar as questões envolvidas na transformação do código fonte em uma possível representação intermediária Como vimos, nas ações semânticas
5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES
CAPÍTULO 5 5 VETORES E MATRIZES 5.1 Vetores Um vetor armazena uma determinada quantidade de dados de mesmo tipo. Vamos supor o problema de encontrar a média de idade de 4 pessoas. O programa poderia ser:
CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM
CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM 71 Introdução Difere dos níveis inferiores por ser implementado por tradução A tradução é usada quando um processador está disponível para uma mensagem fonte mas
Curso de Programação Computadores
3 O Primeiro Programa em C Unesp Campus de Guaratinguetá Curso de Programação Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro 3 O Primeiro Programa em C 3.1 - Introdução Depois dos conceitos
Python Condicionais e Loops. Introdução à Programação SI1
Python Condicionais e Loops Introdução à Programação SI1 Conteúdo Comando de Decisão Comandos de Repetição Exercícios 13/06/2013 2 Condicional Controle de fluxo É muito comum em um programa que certos
3 Sistemas de Numeração:
3 Sistemas de Numeração: Os computadores eletrônicos têm como base para seu funcionamento a utilização de eletricidade. Diferente de outras máquinas que a presença ou ausência de eletricidade apenas significam
Cálculo Numérico Aula 1: Computação numérica. Tipos de Erros. Aritmética de ponto flutuante
Cálculo Numérico Aula : Computação numérica. Tipos de Erros. Aritmética de ponto flutuante Computação Numérica - O que é Cálculo Numérico? Cálculo numérico é uma metodologia para resolver problemas matemáticos
Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária
1- Apresentação Binária Os computadores funcionam e armazenam dados mediante a utilização de chaves eletrônicas que são LIGADAS ou DESLIGADAS. Os computadores só entendem e utilizam dados existentes neste
Javascript 101. Parte 2
Javascript 101 Parte 2 Recapitulando O Javascript é uma linguagem de programação funcional Os nossos scripts são executados linha a linha à medida que são carregados. O código que está dentro de uma função
CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES
CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES 3.1 - IDENTIFICADORES Os objetos que usamos no nosso algoritmo são uma representação simbólica de um valor de dado. Assim, quando executamos a seguinte instrução:
PROGRAMAÇÃO ESTRUTURADA. CC 2º Período
PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 06: Ponteiros Declarando e utilizando ponteiros Ponteiros e vetores Inicializando ponteiros Ponteiros para Ponteiros Cuidados a serem
Sistemas de Numerações.
Matemática Profº: Carlos Roberto da Silva; Lourival Pereira Martins. Sistema de numeração: Binário, Octal, Decimal, Hexadecimal; Sistema de numeração: Conversões; Sistemas de Numerações. Nosso sistema
Introdução. A Informação e sua Representação (Parte III) Universidade Federal de Campina Grande Departamento de Sistemas e Computação
Universidade Federal de Campina Grande Departamento de Sistemas e Computação Introdução à Computação A Informação e sua Representação (Parte III) Prof.a Joseana Macêdo Fechine Régis de Araújo [email protected]
Aula de JavaScript 05/03/10
Objetos Sabe-se que variável são contêiners que podem armazenar um número, uma string de texto ou outro valor. O JavaScript também suporta objetos. Objetos são contêiners que podem armazenar dados e inclusive
Algoritmos em Javascript
Algoritmos em Javascript Sumário Algoritmos 1 O que é um programa? 1 Entrada e Saída de Dados 3 Programando 4 O que é necessário para programar 4 em JavaScript? Variáveis 5 Tipos de Variáveis 6 Arrays
Busca. Pesquisa sequencial
Busca Banco de dados existem para que, de tempos em tempos, um usuário possa localizar o dado de um registro, simplesmente digitando sua chave. Uma tabela ou um arquivo é um grupo de elementos, cada um
Tutorial de Matlab Francesco Franco
Tutorial de Matlab Francesco Franco Matlab é um pacote de software que facilita a inserção de matrizes e vetores, além de facilitar a manipulação deles. A interface segue uma linguagem que é projetada
INTRODUÇÃO À LINGUAGEM C++
INTRODUÇÃO À LINGUAGEM C++ 1 - VARIÁVEIS Variáveis espaço de memória reservado para armazenar tipos de dados, com um nome para referenciar seu conteúdo. Observações importantes Todas as variáveis devem
2. Representação Numérica
2. Representação Numérica 2.1 Introdução A fim se realizarmos de maneira prática qualquer operação com números, nós precisamos representa-los em uma determinada base numérica. O que isso significa? Vamos
Algoritmos de pesquisa. Tabelas de dispersão/hash
Algoritmos de pesquisa Tabelas de dispersão/hash Introdução Motivação: Considerar o problema de pesquisar um determinado valor num vetor (array). Se o vetor não está ordenado, a pesquisa requer O(n) de
2 Orientação a objetos na prática
2 Orientação a objetos na prática Aula 04 Sumário Capítulo 1 Introdução e conceitos básicos 1.4 Orientação a Objetos 1.4.1 Classe 1.4.2 Objetos 1.4.3 Métodos e atributos 1.4.4 Encapsulamento 1.4.5 Métodos
Estruturas de Dados Pilhas, Filas e Deques
Estruturas de Dados Pilhas, Filas e Deques Prof. Eduardo Alchieri Estruturas de Dados Pilhas Pilhas Lista LIFO (Last In, First Out) Os elementos são colocados na estrutura (pilha) e retirados em ordem
Introdução à Engenharia de
Introdução à Engenharia de Computação Tópico: Sistemas de Numeração José Gonçalves - LPRM/DI/UFES Introdução à Engenharia de Computação Introdução O número é um conceito abstrato que representa a idéia
Pontifícia Universidade Católica do Rio Grande do Sul Faculdade de Engenharia Disciplina de Lógica Computacional Aplicada. Prof. Dr.
Índice 1. SISTEMAS NUMÉRICOS 1.1 Caracterização dos Sistemas Numéricos 1.2 Sistemas Numéricos em uma Base B Qualquer 1.2.1 Sistema de Numeração Decimal 1.2.2. Sistema de Numeração Binário 1.2.3 Sistema
JavaScript (ou JScript)
1. Introdução JavaScript (ou JScript) Uma linguagem como o JavaScript permite criar interfaces interativas na web (permite a interação do usuário). Para desenvolver web sites interativos precisamos de
Universidade Federal de Minas Gerais Instituto de Ciências Agrárias
Universidade Federal de Minas Gerais Instituto de Ciências Agrárias Professor: Renato Dourado Maia Disciplina: Programação de Computadores Curso: Engenharia de Alimentos Turma: Terceiro Período 1 Introdução
Internet e Programação Web
COLÉGIO ESTADUAL PEDRO MACEDO Ensino Profissionalizante Internet e Programação Web 3 Técnico Prof. Cesar 2014 1 SUMÁRIO Criar sites dinâmicos em PHP --------------------------------------------------------
UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA
UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA RESUMO DE AULA CRIAÇÃO E MANIPULAÇÃO DO BANCO DE DADOS
CURSO BÁSICO DE PROGRAMAÇÃO AULA 7
CURSO BÁSICO DE PROGRAMAÇÃO AULA 7 Revisão para prova: Comandos de Entrada e Saída Estruturas de Decisão (Se, caso (escolha)) Laços de Repetição (Enquanto, Repita, Para) Relembrando Trabalho 1 Prazo de
Informática I. Aula 6. http://www.ic.uff.br/~bianca/informatica1/ Aula 6-12/09/2007 1
Informática I Aula 6 http://www.ic.uff.br/~bianca/informatica1/ Aula 6-12/09/2007 1 Ementa Noções Básicas de Computação (Hardware, Software e Internet) HTML e Páginas Web Internet e a Web Javascript e
Estrutura de Dados Básica
Estrutura de Dados Básica Professor: Osvaldo Kotaro Takai. Aula 4: Tipos de Dados O objetivo desta aula é apresentar os tipos de dados manipulados pela linguagem C, tais como vetores e matrizes, bem como
Representação de Dados
Representação de Dados Introdução Todos sabemos que existem diferentes tipos de números: fraccionários, inteiros positivos e negativos, etc. Torna-se necessária a representação destes dados em sistema
Algoritmos e Programação
Universidade Federal do Vale do São Francisco Curso de Engenharia da Produção / Elétrica Algoritmos e Programação Parte 05 Prof. Jorge Cavalcanti [email protected] www.univasf.edu.br/~jorge.cavalcanti
Linguagem e Técnicas de Programação I Operadores, expressões e funções. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.
Linguagem e Técnicas de Programação I Operadores, expressões e funções Prof. MSc. Hugo Souza Material desenvolvido por: Profa. Ameliara Freire Operadores básicos Toda linguagem de programação, existem
Linguagens de programação
Prof. André Backes Linguagens de programação Linguagem de Máquina Computador entende apenas pulsos elétricos Presença ou não de pulso 1 ou 0 Tudo no computador deve ser descrito em termos de 1 s ou 0 s
&XUVRGH,QWURGXomRDR (GLWRUGH3ODQLOKDV([FHO
Universidade Federal de Viçosa Departamento de Informática &XUVRGH,QWURGXomRDR (GLWRUGH3ODQLOKDV([FHO Flaviano Aguiar Liziane Santos Soares Jugurta Lisboa Filho (Orientador) PROJETO UNESC@LA Setembro de
Lógica de Programação com Python
Lógica de Programação com Python por Nilo Menezes http://www.nilo.pro.br/python/ Python 2.7 requer PyGame Atualizada em 30/10/2012 1 Objetivos Introduzir os conceitos de programação Apresentar as principais
Fábio Rodrigues Jorge. E-mail: [email protected]
Fábio Rodrigues Jorge E-mail: [email protected] Este minicurso tem por objetivo apresentar uma noção introdutória á linguagem Python. Temas abordados no minicurso: -variáveis -comandos de decisão
Microsoft Excel 2007
Microsoft Excel 2007 O Microsoft Excel é um aplicativo para a construção e edição de planilhas eletrônicas, que permite o trabalho com: formulários, tabelas, gráficos e outros. 2.1 CONCEITOS INICIAIS:
AULA 12 CLASSES DA API JAVA. Disciplina: Programação Orientada a Objetos Professora: Alba Lopes [email protected]
AULA 12 CLASSES DA API JAVA Disciplina: Programação Orientada a Objetos Professora: Alba Lopes [email protected] CLASSES DA API JAVA A maioria dos programas de computador que resolvem problemas do
Faculdade de Ciências Universidade Agostinho Neto Departamento de Matemática e Engenharia Geográfica Ciências da Computação
FaculdadedeCiências UniversidadeAgostinhoNeto DepartamentodeMatemáticaeEngenhariaGeográfica CiênciasdaComputação ProgramaçãoII SegundaParte Adaptado de um original dos docentes de ISCTE Objectivos Os alunos
1. Sistemas de numeração
1. Sistemas de numeração Quando mencionamos sistemas de numeração estamos nos referindo à utilização de um sistema para representar uma numeração, ou seja, uma quantidade. Sistematizar algo seria organizar,
LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES
LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES Prof. Dr. Daniel Caetano 2012-1 Objetivos Apresentar o funcionamento do computador Apresentar a função da memória e dos dispositivos
Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008
Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,
