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.


def euro():
# Gera 5 numeros
num_sol=[]
for i in range(5):
num=randint(1,50)
while num in num_sol:
num=randint(1,50)
num_sol.append(num)
num_sol.sort()
# Gera 2 estrelas
est_sol=[]
for i in range(2):
num=randint(1,9)
while num in est_sol:
num=randint(1,9)
est_sol.append(num)
est_sol.sort()
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.

def ger_numeros(quantidade, inf, sup):
num_sol=[]
for i in range(quantidade):
num=randint(inf,sup)
while num in num_sol:
num=randint(inf,sup)
num_sol.append(num)
num_sol.sort()
return num_sol


Feito isto podemos re-escrever o código.

def euromilhoes():
# Gera 5 numeros
num_sol=gera_numeros(5,1,50)
# Gera 2 estrelas
est_sol=gera_numeros(2,1,9)
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