{{tag>python code linux gw}} ====== Rappel des dates d'anniversaire pour nerds ====== Vous avez le plus grand mal à penser aux dates d'anniversaire de votre famille et de vos amis ?\\ Pour compliquer les choses, ceux-ci se reproduisent de manière exponentielle ?(et la génération des petits enfants commence à peine)\\ Vous avez renoncé à facebook même si vous trouviez bien pratique de trouver toutes ces infos au même endroit ?\\ Vous passez plus de temps le nez dans la fenêtre sombre d'un terminal plutôt que dans les livres de photos souvenir ?\\ **VOICI LA SOLUTION** #! /usr/bin/env python3 # -*- coding: utf-8 -*- bdays = """\ 23-8-1754 Louis XVI 24-8-1948 Jean-Michel Jarre 15-6-1943 Johnny Hallyday 28-9-1934 Brigitte Bardot """ from datetime import date def str2date(str_date): d, m, y = str_date.split('-') return (int(y), int(m), int(d)) def find_next(bdays, md): if not bdays: return [] match = [] for l in bdays: next_date = (l[0][1], l[0][2]) if len(match): # Check if there is another bday the same day if next_date == (match[0][0][1], match[0][0][2]): match.append(l) else: break elif next_date >= md: match.append(l) return match if len(match) else find_next(bdays, (0,0)) if __name__ == "__main__": converted = [] for l in bdays.splitlines(): tokens = l.strip().split() if tokens: converted.append((str2date(tokens[0]), ' '.join(tokens[1:]))) # Sort by month and day sorted_bdays = sorted(converted, key=lambda d: (d[0][1], d[0][2])) today = date.today() md = (today.month, today.day) next_bdays = find_next(sorted_bdays, md) for bday in next_bdays: bmd = (bday[0][1], bday[0][2]) if bmd == md: print(f"* Aujourd'hui : Anniversaire de {bday[1]} ({today.year-bday[0][0]} ans)\n") else: isnextyear = bmd < md dt = date(today.year if not isnextyear else today.year+1, bmd[0], bmd[1]) - today print(f"* Anniversaire de {bday[1]} dans {dt.days} jours ({today.year-bday[0][0]} ans)\n") ===== Utilisation ===== Téléchargez le script çi-dessus et copiez-le à l'endroit de votre choix sur votre système. Éditez le script pour ajouter les dates d'anniversaire et les noms de vos amis ou autres personnalités préférés.\\ Il est important de respecter format de la date ''JJ-MM-AAAA''.\\ L'ordre chronologique n'a pas d'importance (la liste est triée à chaque exécution du script). Vous pouvez lancer le script dans un terminal avec la commande : $ python3 anniv.py Mais bon comme ça, en brut, c'est un peu austère. Pour un plus bel effet vous pouvez utiliser l'appli **cowsay** Pour installer **cowsay** (moins de 100 Ko) : $ sudo apt install cowsay Nous pouvons maintenant afficher la sortie de notre script au travers **cowsay** : $ python3 anniv.py | cowsay ______________________________________ / Aujourd'hui : Anniversaire de Michel \ \ 7 ans / -------------------------------------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || || ===== Afficher le message à l'ouverture du terminal ===== Dans un terminal : $ echo "python3 ~/anniv.py | cowsay" >> ~/.bashrc Remplacer l'emplacement du script ''~/anniv.py'' en fonction de l'endroit où vous l'avez mis sur votre machine. {{:ressource:code:python:cowsay.png|}}