Python: Voltando aos Containers Existe um vasto leque de funções que facilitam as operações com containers: listas, conjuntos e dicionários. len(c) items count Generic Operations on Containers min(c) max(c) sum(c) Note: For dictionaries and sets, these sorted(c) list sorted copy operations use keys. val in c boolean, membership operator in (absence not in) enumerate(c) iterator on (index, value) zip(c1,c2 ) iterator on tuples containing c i items at same index all(c) True if all c items evaluated to true, else False any(c) True if at least one item of c evaluated true, else False Specic to ordered sequences containers (lists, tuples, strings, bytes ) reversed(c) inversed iterator c*5 duplicate c+c2 concatenate c.index(val) position c.count(val) events count import copy copy.copy(c) shallow copy of container copy.deepcopy(c) deep copy of container modify original list Operations on Lists lst.append(val) add item at end lst.extend(seq) add sequence of items at end lst.insert(idx,val) insert item at index lst.remove(val) remove 8rst item with value val lst.pop([idx]) value remove & return item at index idx (default last) lst.sort() lst.reverse() sort / reverse liste in place >>> L=[4,6,1,7] >>> L [4, 6, 1, 7] >>> min(l) 1 >>> max(l) 7 >>> sorted(l) [1, 4, 6, 7] >>> L.pop() 7 >>> L [4, 6, 1] >>> 2*L [4, 6, 1, 4, 6, 1] >>> L.sort() >>> L [1, 4, 6]
Python: Voltando aos Containers Existe um vasto leque de funções que facilitam as operações com containers: listas, conjuntos e dicionários. len(c) items count Generic Operations on Containers min(c) max(c) sum(c) Note: For dictionaries and sets, these sorted(c) list sorted copy operations use keys. val in c boolean, membership operator in (absence not in) enumerate(c) iterator on (index, value) zip(c1,c2 ) iterator on tuples containing c i items at same index all(c) True if all c items evaluated to true, else False any(c) True if at least one item of c evaluated true, else False Specic to ordered sequences containers (lists, tuples, strings, bytes ) reversed(c) inversed iterator c*5 duplicate c+c2 concatenate c.index(val) position c.count(val) events count import copy copy.copy(c) shallow copy of container copy.deepcopy(c) deep copy of container modify original list Operations on Lists lst.append(val) add item at end lst.extend(seq) add sequence of items at end lst.insert(idx,val) insert item at index lst.remove(val) remove 8rst item with value val lst.pop([idx]) value remove & return item at index idx (default last) lst.sort() lst.reverse() sort / reverse liste in place >>> L [1, 4, 6] >>> L = L + [9,8,4] >>> L [1, 4, 6, 9, 8, 4] >>> L.remove(4) >>> L [1, 6, 9, 8, 4]
Python: Voltando aos Containers Trabalhando com conjuntos e seus operadores matemáticos. Operations on Sets Operators: union (vertical bar char) & intersection - ^ dinérence/symetric din. < <= > >= inclusion relations Operators also exist as methods. s.update(s2) s.copy() s.add(key) s.remove(key) s.discard(key) s.clear() s.pop() >>> A = {1,2,3,4,5} >>> A {1, 2, 3, 4, 5} >>> B = {4,5,6,7,8,9} >>> B-A {8, 9, 6, 7} >>> A-B {1, 2, 3} >>> A^B {1, 2, 3, 6, 7, 8, 9} >>> A&B {4, 5} >>> A B {1, 2, 3, 4, 5, 6, 7, 8, 9} >>> A<B False >>> A&B < A True
Python: Voltando aos Containers Dicionários (HashMap do Java). Uma associação eficiente entre chaves e valores. Por outro lado, um dicionário é uma extensão de um conjunto Operations on Dictionaries d[key]=value d.clear() d[key] value del d[key] d.update(d2) update/add d.keys() associations d.values() iterable views on d.items() keys/values/associations d.pop(key[,default]) value d.popitem() (key,value) d.get(key[,default]) value d.setdefault(key[,default]) value >>> precos= {} >>> precos= {'cafe':55} >>> precos {'cafe': 55} >>> precos['nata']= 65 >>> precos['cerveja']= 75 >>> precos {'cerveja': 75, 'nata': 65, 'cafe': 55} >>> precos['nata']= precos['nata'] + 2 >>> precos {'cerveja': 75, 'nata': 67, 'cafe': 55} >>> precos.keys() dict_keys(['cerveja', 'nata', 'cafe']) >>> precos.values() dict_values([75, 67, 55]) >>>
Python: Voltando aos Containers Dicionários (HashMap do Java). Uma associação eficiente entre chaves e valores. Por outro lado, um dicionário é uma extensão de um conjunto Operations on Dictionaries d[key]=value d.clear() d[key] value del d[key] d.update(d2) update/add d.keys() associations d.values() iterable views on d.items() keys/values/associations d.pop(key[,default]) value d.popitem() (key,value) d.get(key[,default]) value d.setdefault(key[,default]) value >>> precos {'cerveja': 75, 'nata': 67, 'cafe': 55} >>> for p in precos.keys():... print("o preço da", p, "é", precos[p])... O preço da cerveja é 75 O preço da nata é 67 O preço da cafe é 55 >>>
Python: Manipular Strings Para Strings dispomos de um vasto repositório de funcionalidades prontas a serem aplicadas. >>> s = "universidade da beira interior" >>> s.islower() True >>> len(s) 30 >>> s.capitalize() 'Universidade da beira interior' >>> s.title() 'Universidade Da Beira Interior' >>>
Python: Manipular Strings Para Strings dispomos de um vasto repositório de funcionalidades prontas a serem aplicadas. >>> s.ljust(40) 'universidade da beira interior ' >>> s.ljust(40,'.') 'universidade da beira interior...' >>> s.center(40,'.') '...universidade da beira interior... >>> s.split() ['universidade', 'da', 'beira', 'interior'] >>> s.split('a') ['universid', 'de d', ' beir', ' interior'] >>> s.split('er') ['univ', 'sidade da beira int', 'ior'] >>>
Python: Manipular Strings Exercício/exemplo:
Python: Manipular Strings Exercício/exemplo: bebidas= 'cerveja:75 cafe:50 agua:60 sumo:70' print('input: ', bebidas) print('output:') print(''.ljust(30,'=')) print('tabela DE PREÇOS') print(''.ljust(30,'-')) for b in bebidas.split() : np= b.split(':') print(np[0].ljust(20,'.'), np[1])
Python: Manipular Ficheiros Interessam-nos essencialmente ficheiros de texto.
Python: Manipular Ficheiros Interessam-nos essencialmente ficheiros de texto. Versão A ficheiro = open('uber.txt', 'r', encoding='utf8') linhastexto= ficheiro.readlines() ficheiro.close() for linha in linhastexto : print('#', linha) ficheiro = open('uber.txt', 'r', encoding='utf8') Versão B while True : linha= ficheiro.readline() if not linha : break print('##', linha) ficheiro.close()
Python: Manipular Ficheiros Interessam-nos essencialmente ficheiros de texto. Versão B ficheiro = open('uber.txt', 'r', encoding='utf8') while True : linha= ficheiro.readline() if not linha : break print('##', linha) ficheiro.close() Versão mais moderna e também a mais utilizada! Versão C with open('uber.txt', 'r', encoding='utf8') as ficheiro : for linha in ficheiro : print('###', linha) Quais as vantagens?
Python: Manipular Ficheiros Escrita em ficheiros. Exemplo: queremos gerar um ficheiro com N números aleatórios, gerados entre 0 e 99. Em cada linha devem ser escritos 10 números, separados por três espaços. Os números devem ficar alinhados à direita. 51 98 6 31 22 79 46 92 70 79 26 72 82 50 82 97 0 33 49 4 12 74 69 37 38 65 4 60 4 74 10 66 98 53 96 72 61 42 53 68 51 99 97 41 57 83 65 63 11 37 72 38 25 45 28 85 66 58 22 65 40 42 88 73 32 80 22 58 72 36 27 53 58 60 16 20 26 71 9 44 89 78 57 42 0 7 75 29 36 97 34 75 69 23 0 17 77 89 10 35
Python: Manipular Ficheiros Escrita em ficheiros. Exemplo: queremos gerar um ficheiro com N números aleatórios, gerados entre 0 e 99. Em cada linha devem ser escritos 10 números, separados por três espaços. Os números devem ficar alinhados à direita. import random as ran print('programa PARA ESCREVER N NÚMEROS ALEATÓRIOS NUM FICHEIRO') N= int(input('n=? ')) with open('aleatorios.txt', 'w') as ficheiro : for n in range(1,n+1) : x= ran.randint(0,99) ficheiro.write(str(x).rjust(4)) if n % 10 == 0 : ficheiro.write('\n')
Python: Definição e uso de Funções
Python: Definição e uso de Funções import random as ran def geradoraleatorios(fnome='aleatorios.txt', N=100): with open(fnome, 'w') as ficheiro : for n in range(1,n+1) : x= ran.randint(0,99) ficheiro.write(str(x).rjust(4)) if n % 10 == 0 : ficheiro.write('\n') if name == ' main ': print('gerador DE N NÚMEROS ALEATÓRIOS') nome= input('nome do ficheiro: ') try: N= int(input('n=? ')) except Exception: N= 100 if len(nome) > 0 : geradoraleatorios(nome,n) else: geradoraleatorios(n=n)
Python: Tratamento de Código Crítico Como podemos tratar blocos de instruções críticas? Exemplo: try: x = int(input('introduza um número inteiro: ')) except Exception as e: print('erro: isso não é um inteiro :(') quit()
Exercício em Python Crie um programa em Python que abre um ficheiro de texto e gera uma lista de todas as palavras únicas que lá ocorrem (vocabulário do ficheiro) e as respetivas frequências (número de vezes que ocorre) de cada palavra.