Saber se temos prémio no euromilhões e o seu valor não é tarefa difícil. Na solução abaixo admitimos que vamos ter a chave correcta e a nossa chave representadas por uma lista de dois elementos. O primeiro, é uma lista de cinco números e, o segundo, uma lista de dois números (as estrelas). Por outro lado o valor dos prémios está armazenado num dicionário em que a chave é um tuplo (n1, n2) que traduz quantos números e estrelas acertámos e o valor é o prémio.
def premio_euro(dicio,chave_certa, minha_chave): # as chaves estão na forma [[5 números],[2 estrelas]] # verifica números num_certos = chave_certa[0] num_meus = minha_chave[0] conta_n = 0 for num in num_meus: if num in num_certos: conta_n += 1 # verifica estrelas est_certas = chave_certa[1] est_minhas = minha_chave[1] conta_e = 0 for est in est_minhas: if est in est_certas: conta_e += 1 # calcula prémio return dicio.get((conta_n,conta_e),0)Problema 3
Pretende-se normalizar os números guardados num ficheiro. Cada linha do ficheiro contém um nome e os números. A normalização é feita por linha, subtraindo a cada número a média dos valores dos números da linha e dividindo o resultado pelo respectivo desvio padrão.
import statistics def normaliza_fich(fich_entrada, fich_saida): # abre ficheiros f_in = open(fich_entrada,'r',encoding='utf8') f_out = open(fich_saida,'w',encoding='utf8') # lê e normaliza por linha for linha in f_in: # recolhe nome e números linha = linha.strip().split() nome = linha[0] numeros = [int(num) for num in linha[1:]] # normaliza números num_normais = normaliza(numeros) # escreve resultado nova_linha = nome + ' '.join([str(num) for num in num_normais]) + ‘\n' f_out.write(nova_linha) # fecha ficheiros f_in.close() f_out.close() def normaliza(numeros): media = statistics.mean(numeros) desvio_pad = statistics.stdev(numeros) return [(num - media)/desvio_pad for num in numeros]A função auxiliar normaliza usa o módulo statistics para normalizar os números dados numa lista.