sábado, 7 de novembro de 2009

Problema 5.18

O exemplo do euromilhões é bom para mostrar como podemos escrever código mais limpo, genérico e reutilizável. Comecemos com uma solução trivial.

01.def euro():
02. # Gera 5 numeros
03. num_sol=[]
04. for i in range(5):
05.  num=randint(1,50)
06.  while num in num_sol:
07.   num=randint(1,50)
08.  num_sol.append(num)
09. num_sol.sort()
10. # Gera 2 estrelas
11. est_sol=[]
12. for i in range(2):
13.  num=randint(1,9)
14.  while num in est_sol:
15.   num=randint(1,9)
16.  est_sol.append(num)
17. est_sol.sort()
18. return [num_sol, est_sol]


Se notarmos, a geração dos números e das estrelas obedece ao mesmo padrão. Daí a ideia que escrever um sub-programa de geração de números.
01.def ger_numeros(quantidade, inf, sup):
02.    num_sol=[]
03.    for i in range(quantidade):
04. num=randint(inf,sup)
05. while num in num_sol:
06.     num=randint(inf,sup)
07. num_sol.append(num)
08.    num_sol.sort()
09.    return num_sol


Feito isto podemos re-escrever o código.
1.def euromilhoes():
2. # Gera 5 numeros
3. num_sol=gera_numeros(5,1,50)
4. # Gera 2 estrelas
5. est_sol=gera_numeros(2,1,9)
6. return [num_sol, est_sol]

Note-se que a definição gera_numeros não está agarrada ao problema do euro milhões podendo ser usada em situações em que nos peçam uma lista de números inteiros, todos diferentes, entre certos limites.

Sem comentários:

Enviar um comentário