Ceci est une ancienne révision du document !


anniv.py (cliquer pour afficher le code)

anniv.py
#! /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]}\n{today.year-bday[0][0]} ans")
        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\n{today.year-bday[0][0]} ans")

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/anniversaires.1629721345.txt.gz
  • Dernière modification: 2021/08/23 14:22
  • par gweltaz