Compare commits

..

No commits in common. "cd673302eb5e06fef7bdd22adfd65cb53b96825f" and "d56516931ff47977da31018af44a97a68aee8c82" have entirely different histories.

View file

@ -1,11 +1,7 @@
#!/usr/bin/python #!/usr/bin/python
import datetime
import json
import random import random
import sys
annee = datetime.date.today().year
participants = [ participants = [
'Maman', 'Maman',
'Papa', 'Papa',
@ -18,6 +14,8 @@ participants = [
'Ludo', 'Ludo',
] ]
participants_recois = participants.copy()
on_evite = { on_evite = {
'Ben': 'Ludo', 'Ben': 'Ludo',
'Charlotte': 'Nico', 'Charlotte': 'Nico',
@ -25,69 +23,29 @@ on_evite = {
'Didi': 'Johnny', 'Didi': 'Johnny',
} }
# On charge le résultat de l'année dernière
nom_fichier = sys.argv[1] if len(sys.argv) > 1 else f"{annee-1}.json"
try:
with open(nom_fichier, "r", encoding="utf-8") as fd:
annee_passee = json.load(fd)
print(f"Résultat de l'an passée chargé depuis le fichier {nom_fichier} :")
print("\n".join([f"- {offre} => {recois}" for offre, recois in annee_passee.items()]))
except FileNotFoundError:
print(f"Échec de chargement du tirage de l'an passé depuis le fichier {nom_fichier}.")
sys.exit(1)
class EchecTirage(Exception):
pass
# On défine notre méthode de tirage
def tirage(nb_tentatives_max=99):
participants_offre = participants.copy()
participants_recois = participants.copy()
# On mélange les listes # On mélange les listes
random.shuffle(participants_offre) random.shuffle(participants)
random.shuffle(participants_recois) random.shuffle(participants_recois)
result = dict() # On procède au tirage
for offre in participants_offre: tirage = dict()
count = 0 for offre in participants:
while True: while True:
count += 1
if count == nb_tentatives_max:
raise EchecTirage
recois = random.choice(participants_recois) recois = random.choice(participants_recois)
# Pas à soi même # Pas à soi même
if recois == offre: if recois == offre:
continue continue
# On évite entre couple # On évite entre couple
if on_evite.get(offre) == recois or on_evite.get(recois) == offre: if on_evite.get(offre) == recois or on_evite.get(recois) == offre:
continue continue
# On évite de faire comme l'an passée
if annee_passee.get(offre) == recois:
continue
# Trouvé ! # Trouvé !
result[offre] = recois tirage[offre] = recois
participants_recois.remove(recois) participants_recois.remove(recois)
break break
return result
# On procède au tirage
print("On procède au tirage... Suspense !")
result = None
while not result:
try:
result = tirage()
except EchecTirage:
print("Échec du tirage, on recommence !")
result = None
# On affiche le résultat print("Résultat du tirage :")
print("Résultat du tirage pour l'année {annee} :") for offre, recois in tirage.items():
for offre, recois in result.items(): print(" - %s -> %s" % (offre, recois))
print(f" - {offre} -> {recois}")
# On enregistre le tirage pour l'année passée
nom_fichier = f"{annee}.json"
with open(nom_fichier, "w", encoding="utf-8") as fichier:
fichier.write(json.dumps(result, indent=2, ensure_ascii=False))
print(f"Résultat enregistré dans le fichier {nom_fichier}.")