Compare commits
No commits in common. "cd673302eb5e06fef7bdd22adfd65cb53b96825f" and "d56516931ff47977da31018af44a97a68aee8c82" have entirely different histories.
cd673302eb
...
d56516931f
1 changed files with 24 additions and 66 deletions
90
tirkdo.py
90
tirkdo.py
|
@ -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
|
# On mélange les listes
|
||||||
nom_fichier = sys.argv[1] if len(sys.argv) > 1 else f"{annee-1}.json"
|
random.shuffle(participants)
|
||||||
try:
|
random.shuffle(participants_recois)
|
||||||
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
|
|
||||||
random.shuffle(participants_offre)
|
|
||||||
random.shuffle(participants_recois)
|
|
||||||
|
|
||||||
result = dict()
|
|
||||||
for offre in participants_offre:
|
|
||||||
count = 0
|
|
||||||
while True:
|
|
||||||
count += 1
|
|
||||||
if count == nb_tentatives_max:
|
|
||||||
raise EchecTirage
|
|
||||||
recois = random.choice(participants_recois)
|
|
||||||
# Pas à soi même
|
|
||||||
if recois == offre:
|
|
||||||
continue
|
|
||||||
# On évite entre couple
|
|
||||||
if on_evite.get(offre) == recois or on_evite.get(recois) == offre:
|
|
||||||
continue
|
|
||||||
# On évite de faire comme l'an passée
|
|
||||||
if annee_passee.get(offre) == recois:
|
|
||||||
continue
|
|
||||||
# Trouvé !
|
|
||||||
result[offre] = recois
|
|
||||||
participants_recois.remove(recois)
|
|
||||||
break
|
|
||||||
return result
|
|
||||||
|
|
||||||
# On procède au tirage
|
# On procède au tirage
|
||||||
print("On procède au tirage... Suspense !")
|
tirage = dict()
|
||||||
result = None
|
for offre in participants:
|
||||||
while not result:
|
while True:
|
||||||
try:
|
recois = random.choice(participants_recois)
|
||||||
result = tirage()
|
|
||||||
except EchecTirage:
|
|
||||||
print("Échec du tirage, on recommence !")
|
|
||||||
result = None
|
|
||||||
|
|
||||||
# On affiche le résultat
|
# Pas à soi même
|
||||||
print("Résultat du tirage pour l'année {annee} :")
|
if recois == offre:
|
||||||
for offre, recois in result.items():
|
continue
|
||||||
print(f" - {offre} -> {recois}")
|
# On évite entre couple
|
||||||
|
if on_evite.get(offre) == recois or on_evite.get(recois) == offre:
|
||||||
|
continue
|
||||||
|
|
||||||
# On enregistre le tirage pour l'année passée
|
# Trouvé !
|
||||||
nom_fichier = f"{annee}.json"
|
tirage[offre] = recois
|
||||||
with open(nom_fichier, "w", encoding="utf-8") as fichier:
|
participants_recois.remove(recois)
|
||||||
fichier.write(json.dumps(result, indent=2, ensure_ascii=False))
|
break
|
||||||
print(f"Résultat enregistré dans le fichier {nom_fichier}.")
|
|
||||||
|
|
||||||
|
print("Résultat du tirage :")
|
||||||
|
for offre, recois in tirage.items():
|
||||||
|
print(" - %s -> %s" % (offre, recois))
|
||||||
|
|
Loading…
Reference in a new issue