Introdução a Python¶

Aula 4¶

Sumário¶

  • Funções de ordem superior
  • Módulo os
  • Input/Output
  • Exercícios

Funções de ordem superior¶

map(): Utiliza-se para aplicar uma função a um ou mais iteráveis, sequencialmente

In [1]:
def difference(x, y):
    return x - y

list1 = [8,5,3]
list2 = [3,4,1]

list(map(difference, list1, list2))
Out[1]:
[5, 1, 2]

filter(): Utiliza-se para filtrar os elementos de um iterável, com recurso a uma função

In [2]:
list3 = [1,2,3,4,5]

list(filter(lambda x: x%2==0, list3))
Out[2]:
[2, 4]

reduce(): Utiliza-se para aplicar uma função cumulativa a um iterável

In [3]:
from functools import reduce

def sum(x,y):
    return x+y

list4 = [6,3,45,74]

reduce(sum, list4, 2) #o terceiro argumento é opcional
Out[3]:
130

Módulo os¶

In [4]:
import os

os.getcwd(): Utiliza-se para saber qual é a diretoria atual

In [5]:
os.getcwd()
Out[5]:
'/home/beatriz/python-introduction/notebooks'

os.listdir(): Utiliza-se para listar uma diretoria

In [6]:
os.listdir()
Out[6]:
['class5.ipynb',
 'class1.ipynb',
 'class6.ipynb',
 'class3.ipynb',
 '.ipynb_checkpoints',
 'example.txt',
 'jupyter.png',
 'vscode.png',
 'kahoot.png',
 'class2.ipynb',
 'python.png',
 'temp.txt',
 'class4.ipynb',
 'numpy.png']

os.chdir(): Utiliza-se para mudar de diretoria

In [7]:
os.chdir("/home/beatriz/python-introduction")

os.getcwd()
Out[7]:
'/home/beatriz/python-introduction'

os.path.join(): Utiliza-se para unir vários caminhos

In [8]:
new_dir = os.path.join("/home/beatriz/python-introduction", "notebooks")

os.chdir(new_dir)

os.getcwd()
Out[8]:
'/home/beatriz/python-introduction/notebooks'

os.path.exists(): Utiliza-se para verificar se um ficheiro existe

In [9]:
os.path.exists("class4.ipynb")
Out[9]:
True

os.mkdir(): Utiliza-se para criar uma nova diretoria

In [10]:
os.mkdir("my_new_dir")

os.listdir()
Out[10]:
['class5.ipynb',
 'class1.ipynb',
 'class6.ipynb',
 'class3.ipynb',
 '.ipynb_checkpoints',
 'example.txt',
 'jupyter.png',
 'vscode.png',
 'kahoot.png',
 'my_new_dir',
 'class2.ipynb',
 'python.png',
 'temp.txt',
 'class4.ipynb',
 'numpy.png']

os.rename(): Utiliza-se para trocar o nome de um ficheiro ou de uma diretoria

In [11]:
os.rename("my_new_dir", "my_old_dir")

os.listdir()
Out[11]:
['class5.ipynb',
 'class1.ipynb',
 'class6.ipynb',
 'class3.ipynb',
 '.ipynb_checkpoints',
 'example.txt',
 'jupyter.png',
 'vscode.png',
 'kahoot.png',
 'class2.ipynb',
 'python.png',
 'temp.txt',
 'my_old_dir',
 'class4.ipynb',
 'numpy.png']

os.rmdir(): Utiliza-se para remover uma diretoria

In [12]:
os.rmdir("my_old_dir")

os.listdir()
Out[12]:
['class5.ipynb',
 'class1.ipynb',
 'class6.ipynb',
 'class3.ipynb',
 '.ipynb_checkpoints',
 'example.txt',
 'jupyter.png',
 'vscode.png',
 'kahoot.png',
 'class2.ipynb',
 'python.png',
 'temp.txt',
 'class4.ipynb',
 'numpy.png']

os.remove(): Utiliza-se para remover um ficheiro

In [13]:
os.remove("temp.txt")

os.listdir()
Out[13]:
['class5.ipynb',
 'class1.ipynb',
 'class6.ipynb',
 'class3.ipynb',
 '.ipynb_checkpoints',
 'example.txt',
 'jupyter.png',
 'vscode.png',
 'kahoot.png',
 'class2.ipynb',
 'python.png',
 'class4.ipynb',
 'numpy.png']

Input/Output¶

Utilizador¶

input(): Permite interagir com o utilizador (a partir da versão 3.6)

In [14]:
"""age = input("Enter your age: ")
print(f"User is {age} years old")"""
Out[14]:
'age = input("Enter your age: ")\nprint(f"User is {age} years old")'

Ficheiro¶

open(): Utiliza-se para abrir um ficheiro e recebe dois argumentos (caminho do ficheiro e modo)

Diferentes modos de abrir um ficheiro:

  • r: Abre um ficheiro para leitura e levanta um erro caso o ficheiro não exista (modo por omissão)
  • a: Abre um ficheiro para acrescentamento e cria o mesmo caso este não exista
  • w: Abre um ficheiro para escrita e cria o mesmo caso este não exista
  • x: Cria o ficheiro especificado e levanta um erro caso este já exista
  • r+: Abre um ficheiro para leitura e escrita e levanta um erro caso o ficheiro não exista
  • a+: Abre um ficheiro para acrescentamento e leitura e cria o mesmo caso este não exista
  • w+: Abre um ficheiro para escrita e leitura e cria o mesmo caso este não exista

Leitura¶

In [15]:
f = open("example.txt", "r")
print(f.read())
f.close()
Hello world!
Welcome to Python introduction course.
This is class number 4.
Stay focused!

In [16]:
with open("example.txt", "r") as f: #com o with, não precisamos de fechar o ficheiro
    result = f.read()
    print(result)
Hello world!
Welcome to Python introduction course.
This is class number 4.
Stay focused!

In [17]:
with open("example.txt", "r") as f:
    result = f.read(5)
    print(result)
Hello
In [18]:
with open("example.txt", "r") as f:
    result = f.readline()
    print(result)
Hello world!

In [19]:
with open("example.txt", "r") as f:
    result = f.readlines()
    for line in result:
        print(line)
Hello world!

Welcome to Python introduction course.

This is class number 4.

Stay focused!

Escrita/Criação¶

In [20]:
with open("example.txt", "a") as f:
    f.write("\nMore information.")
    
with open("example.txt", "r") as f:
    result = f.read()
    print(result)
Hello world!
Welcome to Python introduction course.
This is class number 4.
Stay focused!

More information.
In [21]:
with open("example.txt", "w") as f:
    f.write("All gone.")
    
with open("example.txt", "r") as f:
    result = f.read()
    print(result)
All gone.
In [22]:
with open("new_file.txt", "x") as f:
    f.write("I've just created my first file!")
    
os.listdir()
Out[22]:
['class5.ipynb',
 'class1.ipynb',
 'class6.ipynb',
 'class3.ipynb',
 '.ipynb_checkpoints',
 'example.txt',
 'jupyter.png',
 'vscode.png',
 'kahoot.png',
 'class2.ipynb',
 'python.png',
 'new_file.txt',
 'class4.ipynb',
 'numpy.png']

Exercícios¶

1) Escreva uma função que seja capaz de simular uma calculadora (para simplificar, apenas suporte as operações de soma, subtração, divisão e multiplicação entre dois números).

2) Escreva uma função que seja capaz de escrever todo o conteúdo de um ficheiro num novo ficheiro, passando à frente a linha número 5.

3) Escreva uma função que recebe o caminho de um ficheiro como input e retorna o número de palavras presentes nesse ficheiro.

4) Escreva uma função que recebe uma lista de palavras e um inteiro e retorna a lista de palavras que são maiores que esse inteiro, com recurso a funções de ordem superior.

5) Escreva uma função que recebe uma lista de números e retorna a lista dos valores absolutos desses números, com recurso a funções de ordem superior.

6) Escreva uma função que recebe uma lista de números e retorna o menor, com recurso a funções de ordem superior.

7) Escreva uma função que retorna a série harmónica de 1 até $n$-1, com recurso a funções de ordem superior.

8) Escreva uma função que retorna a soma de três listas, com recurso a funções de ordem superior.

9) Escreva uma função que aceita uma palavra e o caminho de um ficheiro como input e retorna a frequência dessa palavra nesse ficheiro.

10) Escreva uma função que recebe uma lista de números e retorna outra lista com apenas os números positivos, com recurso a funções de ordem superior.