Aula prática 1 - Funções e Parâmetros

O objetivo desta aula é experimentar a definição de funções simples. Após a realização da prática, deverá ter sido adquirida uma noção básica dos seguintes conceitos e elementos:

  • Função
  • Parâmetro(s) e Argumento(s)
  • Tipo de dados primitivos: int, float e bool
  • Instrução de devolução: return
  • Operadores aritméticos: +, - , *, /, //, %, **
  • Operadores de conversão entre tipos de dados numéricos: int(), float()
  • Operadores relacionais: == (igual), != (diferente), <, >, <=, >=
  • Operadores lógicos: not (negação), and (conjunção), or (disjunção)

Exercícios

Desenvolva uma função para cada um dos objectivos apresentados nas alíneas seguintes. Todas as funções podem ser definidas apenas com a instrução de retorno (return ...). Para cada função escreva expressões para as testar, utilizando argumentos para abranger as diferentes possibilidades de resultados (p.e. verdadeiro/falso, arredondamento por excesso/defeito).

1. Obter o dobro de um número.

A definição desta função é muito semelhante ao exemplo dado inicialmente.

In [1]:
def double(n):
    return 2*n
In [2]:
double(5)
Out[2]:
10

2. Obter a diferença entre dois números (dados em dois parâmetros).

In [3]:
def difference(a, b):
    return a - b
In [4]:
difference(5, 9)
Out[4]:
-4

3. Obter a percentagem de um valor relativamente a um total.

Exemplo: 2 num total de 8 corresponde a 25%.
O valor de percentagem deverá ser devolvido num número real (float) no intervalo [0.0, 1.0].

def percentage(n, total):
    ...
In [5]:
def percentage(n, total):
    # Já não é necessário fazer float(n)/total 
    return n/total
In [7]:
percentage(2,5)
Out[7]:
0.4

4. Obter a média entre dois números inteiros.

Note que a média entre dois inteiros não é necessariamente um inteiro, pelo que o tipo de retorno deverá ser decimal (float).

In [9]:
def average(a, b):
    # Já não é necessário fazer (a+b) / 2.0
    return (a+b)/2
In [10]:
average(3, 6)
Out[10]:
4.5

5. Arredondar um número decimal para inteiro.

Nesta função é necessário aplicar a truncagem (converter um decimal para inteiro, descartando a parte decimal).
Exemplos:

    rounded(4.3) => 4
    rounded(4.7) => 5
In [13]:
def rounded(x):
    return int(x + 0.5)
In [14]:
rounded(4.7)
Out[14]:
5

6. Saber se um número inteiro é negativo.

O valor devolvido pela função deverá indicar se o número passado como argumento é ou não negativo, mediante um valor booleano (bool, que assume apenas os valores True ou False).

Exemplos:

    is_negative(-2) => True
    is_negative(3) => False

    def is_negative(n):
    ...
In [15]:
def is_negative(x):
    return x < 0
In [16]:
is_negative(-2)
Out[16]:
True

7. Utilizando o operador aritmético de divisão inteira (%)

(a) Saber se um número inteiro é impar.
In [22]:
def is_odd(n):
    return n % 2 != 0    
In [23]:
is_odd(3)
Out[23]:
True
(b) Saber se um número inteiro é par.
In [26]:
def is_even(n):
    return not is_odd(n)
In [27]:
is_even(3)
Out[27]:
False
(c) Saber se um número inteiro é múltiplo de outro.
In [28]:
def is_multiple(a, b):
    return a % b == 0
In [29]:
is_multiple(15,22)   
Out[29]:
False

8. Saber se um número inteiro corresponde a um dígito (i.e. está entre 0 e 9)

Nesta função é necessário combinar duas condições lógicas (conjunção).

In [30]:
def is_digit(n):
    return 0 <= n <= 9
    
def is_digit(a):
    return 0 <= a <= 9 and (int(a) - a == 0)

is_digit(9)
Out[30]:
True

9. Saber se um número está incluído num dado intervalo (fechado).

Exemplos:

    is_included(5, 4, 9) => True (5 está incluído em [4, 9])
    is_included(5, 6, 9) => False (5 não está incluído em [6, 9])
In [32]:
def is_included(n, left, right):
    return left <= n <= right
    
is_included(5, 6, 9)
Out[32]:
False

10. Saber se um número está excluído de um dado intervalo (fechado).

Experimente uma solução baseada numa disjunção lógica e uma solução alternativa baseada numa negação da condição utilizada na alínea anterior.

Exemplos:

    is_excluded(4, 4, 9) => False (4 não está excluído de [4, 9])
    is_excluded(4, 5, 9) => True (4 está excluído de [5, 9])
In [33]:
def is_excluded(n, left, right):
    return n < left or right < n
    
is_excluded(5, 6, 9)
Out[33]:
True

11. Calcular a operação lógica disjunção exclusiva (XOR) entre dois valores booleanos.

Exemplos:

    xor(True, False) => True
    xor(False, True) => True
    xor(True, True) => False
    xor(False, False) => False
In [34]:
def xor(a, b):
    return a == b

xor(0,1)
Out[34]:
False

12. Saber se um carácter corresponde a uma vogal minúscula.

Exemplos:

    is_vowel('a') => True
    is_vowel('z') => False
In [35]:
def is_vowel(c):
    return c == 'a' or c == 'e' or c == 'i' or c == 'o' or c == 'u'
In [36]:
is_vowel('i')
Out[36]:
True
In [ ]: