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.
01.
def
premio_euro(dicio,chave_certa, minha_chave):
02.
# as chaves estão na forma [[5 números],[2 estrelas]]
03.
# verifica números
04.
num_certos
=
chave_certa[
0
]
05.
num_meus
=
minha_chave[
0
]
06.
conta_n
=
0
07.
for
num
in
num_meus:
08.
if
num
in
num_certos:
09.
conta_n
+
=
1
10.
# verifica estrelas
11.
est_certas
=
chave_certa[
1
]
12.
est_minhas
=
minha_chave[
1
]
13.
conta_e
=
0
14.
for
est
in
est_minhas:
15.
if
est
in
est_certas:
16.
conta_e
+
=
1
17.
# calcula prémio
18.
return
dicio.get((conta_n,conta_e),
0
)
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.
01.
import
statistics
02.
03.
def
normaliza_fich(fich_entrada, fich_saida):
04.
# abre ficheiros
05.
f_in
=
open(fich_entrada,
'r'
,encoding
=
'utf8'
)
06.
f_out
=
open(fich_saida,
'w'
,encoding
=
'utf8'
)
07.
# lê e normaliza por linha
08.
for
linha
in
f_in:
09.
# recolhe nome e números
10.
linha
=
linha.strip().split()
11.
nome
=
linha[
0
]
12.
numeros
=
[int(num)
for
num
in
linha[
1
:]]
13.
# normaliza números
14.
num_normais
=
normaliza(numeros)
15.
# escreve resultado
16.
nova_linha
=
nome
+
' '
.join([str(num)
for
num
in
num_normais])
+
‘\n'
17.
f_out.write(nova_linha)
18.
# fecha ficheiros
19.
f_in.close()
20.
f_out.close()
21.
22.
def
normaliza(numeros):
23.
media
=
statistics.mean(numeros)
24.
desvio_pad
=
statistics.stdev(numeros)
25.
return
[(num
-
media)
/
desvio_pad
for
num
in
numeros]