Added extra exercices from TP
This commit is contained in:
parent
f57f403f37
commit
953befb69e
|
@ -0,0 +1,33 @@
|
||||||
|
# NMEC:
|
||||||
|
|
||||||
|
"""
|
||||||
|
A sequência de Fibonacci começa com os números 0 e 1. Depois, cada elemento
|
||||||
|
consecutivo da sequência obtém-se pela soma dos dois elementos anteriores.
|
||||||
|
Complete a função genFibonacci(n) para _devolver_ uma lista com os n primeiros
|
||||||
|
números de Fibonacci. Por exemplo, se n=6, deve devolver [0, 1, 1, 2, 3, 5].
|
||||||
|
A função só tem de funcionar para n>=2.
|
||||||
|
|
||||||
|
The Fibonacci sequence starts with the numbers 0 and 1. Then each consecutive
|
||||||
|
element of the sequence is obtained by the sum of the two previous elements.
|
||||||
|
Complete the genFibonacci(n) function to _return_ a list of the first n
|
||||||
|
Fibonacci numbers. For example, if n=6, it should return [0, 1, 1, 2, 3, 5].
|
||||||
|
The function only has to work for n>=2.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def genFibonacci(n):
|
||||||
|
assert n >= 2
|
||||||
|
# Complete ...
|
||||||
|
lst = []
|
||||||
|
for i in range(n):
|
||||||
|
if i == 0:
|
||||||
|
lst.append(0)
|
||||||
|
elif i == 1:
|
||||||
|
lst.append(1)
|
||||||
|
else:
|
||||||
|
lst.append(lst[i-2] + lst[i-1])
|
||||||
|
return lst
|
||||||
|
|
||||||
|
|
||||||
|
# NÃO precisa de invocar a função. O codecheck trata disso.
|
||||||
|
# You DO NOT need to call the function. Codecheck does that for you.
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
# ID:
|
||||||
|
|
||||||
|
"""
|
||||||
|
Imagine que está a fazer palavras cruzadas (em Inglês) e falta-lhe uma
|
||||||
|
palavra com o padrão "?YS???Y", onde os "?" representam letras por preencher.
|
||||||
|
Complete este programa para o ajudar a descobrir a palavra.
|
||||||
|
O programa já inclui instruções para ler uma lista de palavras inglesas a
|
||||||
|
partir do ficheiro wordlist.txt.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# This function reads words from a file.
|
||||||
|
def load(fname):
|
||||||
|
with open(fname) as f:
|
||||||
|
lst = []
|
||||||
|
for line in f:
|
||||||
|
words = line.strip().split()
|
||||||
|
lst.extend(words)
|
||||||
|
return lst
|
||||||
|
|
||||||
|
|
||||||
|
""" a)
|
||||||
|
Complete a função matchesPattern(s, pattern) para devolver
|
||||||
|
True se s corresponder ao padrão fornecido e False, no caso contrário.
|
||||||
|
Uma string s corresponde ao padrão se e só se tiver os mesmos carateres
|
||||||
|
que o padrão nas mesmas posições, exceto onde o padrão tem ?.
|
||||||
|
Nas posições dos ?, não importa que carateres estão na string s.
|
||||||
|
A correspondência não deve fazer distinção entre maiúsculas e minúsculas.
|
||||||
|
"""
|
||||||
|
def matchesPattern(s, pattern):
|
||||||
|
# Complete ...
|
||||||
|
if len(s) != len(pattern):
|
||||||
|
return False
|
||||||
|
for i in range(len(s)):
|
||||||
|
if (s[i].lower() != pattern[i].lower()) and (pattern[i] != "?"):
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
""" b)
|
||||||
|
Complete a função filterPattern(lst, pattern) para extrair duma lista de strings
|
||||||
|
as strings que têm o padrão dado.
|
||||||
|
Sugestão: use a função matchesPattern para testar cada palavra.
|
||||||
|
"""
|
||||||
|
def filterPattern(lst, pattern):
|
||||||
|
# Complete ...
|
||||||
|
matches = []
|
||||||
|
for word in lst:
|
||||||
|
if matchesPattern(word, pattern):
|
||||||
|
matches.append(word)
|
||||||
|
return matches
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
print("a)")
|
||||||
|
print( matchesPattern("secret", "s?c??t") ) #-> True
|
||||||
|
print( matchesPattern("secreta", "s?c??t") ) #-> False
|
||||||
|
print( matchesPattern("socket", "s?c??t") ) #-> True
|
||||||
|
print( matchesPattern("soccer", "s?c??t") ) #-> False
|
||||||
|
print( matchesPattern("SEcrEt", "?ecr?t") ) #-> True
|
||||||
|
print( matchesPattern("SEcrET", "?ecr?t") ) #-> True
|
||||||
|
print( matchesPattern("SecrEt", "?ECR?T") ) #-> True
|
||||||
|
|
||||||
|
words = load("wordlist.txt")
|
||||||
|
|
||||||
|
print("b)")
|
||||||
|
# Solution to "S?C??T"
|
||||||
|
lst = filterPattern(words, "s?c??t")
|
||||||
|
print(lst)
|
||||||
|
|
||||||
|
assert isinstance(lst, list), "result lst should be a list"
|
||||||
|
assert "secret" in lst, "result should contain 'secret'"
|
||||||
|
|
||||||
|
# Solution to "?YS???Y"
|
||||||
|
lst = filterPattern(words, "?ys???y")
|
||||||
|
print(lst)
|
||||||
|
|
||||||
|
|
||||||
|
# Call main function:
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
# Devolve o número de linhas da matriz M.
|
||||||
|
def matrows(M):
|
||||||
|
return len(M)
|
||||||
|
|
||||||
|
# Complete para devolver o número de colunas da matriz M.
|
||||||
|
def matcols(M):
|
||||||
|
return len(M[0])
|
||||||
|
|
||||||
|
# Complete a função para devolver uma matriz com m×n zeros.
|
||||||
|
def matzeros(m, n):
|
||||||
|
M = []
|
||||||
|
for i in range(m):
|
||||||
|
M.append(n*[0])
|
||||||
|
return M
|
||||||
|
|
||||||
|
def matzerosTEST(m, n):
|
||||||
|
M = matzeros(m, n)
|
||||||
|
M[0][1] = 1 # should change just 1 element!
|
||||||
|
return M
|
||||||
|
|
||||||
|
# Complete a função para multiplicar a matriz A pela matriz B.
|
||||||
|
def matmult(A, B):
|
||||||
|
assert matcols(A) == matrows(B)
|
||||||
|
C = [[sum(a*b for a, b in zip(A_row, B_col))
|
||||||
|
for B_col in zip(*B)]
|
||||||
|
for A_row in A]
|
||||||
|
return C
|
||||||
|
|
||||||
|
def matmultTEST(A, B):
|
||||||
|
C = matmult(A, B)
|
||||||
|
return A, B, C
|
||||||
|
|
Loading…
Reference in New Issue