Échangez 1000 yens contre une combinaison de 500 boules de yens, 100 boules de yens, 50 boules de yens et 10 boules de yens. Cependant, le nombre total de pièces est de 15 ou moins.
Code Résolvez sans réfléchir
#Q05 Payez-vous toujours en espèces?
combinations = [] #Liste des combinaisons
for c500 in range(3):
for c100 in range(11):
for c50 in range(16):
for c10 in range(16):
if c500 + c100 + c50 + c10 <= 15:
if c500 * 500 + c100 * 100 + c50 * 50 + c10 *10 == 1000:
combinations.append((c500, c100, c50, c10))
print(combinations)
print(len(combinations))
Écrivez avec le moins de répétitions possible d'énoncés for
import itertools
import numpy as np
combinations = []
for c in list(itertools.product(list(range(16)), repeat=4)):
m = np.array(list(c)) * np.array([500, 100, 50, 10])
if np.sum(c) <= 15 and np.sum(m) == 1000:
combinations.append(c)
print(combinations)
print(len(combinations))
Le code est devenu plus court, mais je ne pense pas qu'il soit beaucoup plus rapide et moins lisible, donc c'est juste pour référence. .. ..
Ce que je veux dire, c'est que lors du traitement autour du tableau
Si vous cherchez, vous trouverez des outils plus faciles à mettre en œuvre.
Ce qui suit est un complément aux outils utilisés cette fois.
itertools.product Trouvez le produit direct de la séquence. Vous pouvez utiliser l'option de répétition pour trouver le produit direct avec vous-même. Renvoie un objet itertools, mais peut être converti en liste. L'exemple d'utilisation suivant.
import itertools
x = ['a', 'b']
y = ['c', 'd']
z = list(range(3)) #[0, 1, 2]
print(list(itertools.product(x, y)))
#[('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd')]
print(list(itertools.product(x, repeat=2)))
#[('a', 'a'), ('a', 'b'), ('b', 'a'), ('b', 'b')]
print(list(itertools.product(z, repeat=2)))
#[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
Dans une liste normale, le signe + représente une concaténation de la liste. Les autres symboles arithmétiques sont des erreurs. Dans numpy, si vous connectez la liste avec un symbole d'opération, la liste des résultats du calcul des éléments à la même position est renvoyée.
import numpy as np
x = [1, 3, 5]
y = [2, 4, 6]
print(x + y) #[1, 3, 5, 2, 4, 6]
print(x - y) #error
print(x * y) #error
print(x / y) #error
print(np.array(x) + np.array(y)) # [ 3 7 11]
print(np.array(x) - np.array(y)) # [-1 -1 -1]
print(np.array(x) * np.array(y)) # [ 2 12 30]
print(np.array(x) / np.array(y)) # [0.5 0.75 0.83333333]
Recommended Posts