Créer un objet qui définit une réunion de plages horaires dans un journée
4 réponses
Francois Lafont
Bonjour à tous,
Je cherche à me créer une classe qui me permettra d'instancier un
objet me permettant de représenter des réunion de plages horaires
avec une méthode m'indiquant si, au moment de l'exécution du script,
on est ou non dans une des plages.
J'ai aucune idée de la syntaxe (pour l'instant). Par exemple un truc
du genre :
qui renverra true ou false suivant qu'on est entre 6h00 et 7h30
(du matin) ou non au moment de l'exécution du script. Avec une
réunion de plages, je ne trouve pas de syntaxe élégante mais il
faut que je trouve une chaîne de caractères permettant de
représenter une réunion de plages horaires.
Ma question : existe-t-il des modules Python de la bibliothèque
standard permettant de réaliser cela sans partir de zéro ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Damien Wyart
* Francois Lafont in fr.comp.lang.python:
Je cherche à me créer une classe qui me permettra d'instancier un objet me permettant de représenter des réunion de plages horaires avec une méthode m'indiquant si, au moment de l'exécution du script, on est ou non dans une des plages.
Ma question : existe-t-il des modules Python de la bibliothèque standard permettant de réaliser cela sans partir de zéro ?
Pas grand'chose de tout fait, mais quelques pistes pour un intervalle unique :
Ensuite, c'est facile à généraliser à une liste (au sens Python) d'intervalles.
-- DW
* Francois Lafont <francois.lafont@nospam.invalid> in fr.comp.lang.python:
Je cherche à me créer une classe qui me permettra d'instancier un
objet me permettant de représenter des réunion de plages horaires avec
une méthode m'indiquant si, au moment de l'exécution du script, on est
ou non dans une des plages.
Ma question : existe-t-il des modules Python de la bibliothèque
standard permettant de réaliser cela sans partir de zéro ?
Pas grand'chose de tout fait, mais quelques pistes pour un intervalle
unique :
Je cherche à me créer une classe qui me permettra d'instancier un objet me permettant de représenter des réunion de plages horaires avec une méthode m'indiquant si, au moment de l'exécution du script, on est ou non dans une des plages.
Ma question : existe-t-il des modules Python de la bibliothèque standard permettant de réaliser cela sans partir de zéro ?
Pas grand'chose de tout fait, mais quelques pistes pour un intervalle unique :
Ensuite, c'est facile à généraliser à une liste (au sens Python) d'intervalles.
-- DW
Laurent Pointal
Francois Lafont wrote:
Bonjour à tous,
Je cherche à me créer une classe qui me permettra d'instancier un objet me permettant de représenter des réunion de plages horaires avec une méthode m'indiquant si, au moment de l'exécution du script, on est ou non dans une des plages.
J'ai aucune idée de la syntaxe (pour l'instant). Par exemple un truc du genre :
qui renverra true ou false suivant qu'on est entre 6h00 et 7h30 (du matin) ou non au moment de l'exécution du script. Avec une réunion de plages, je ne trouve pas de syntaxe élégante mais il faut que je trouve une chaîne de caractères permettant de représenter une réunion de plages horaires.
Ma question : existe-t-il des modules Python de la bibliothèque standard permettant de réaliser cela sans partir de zéro ?
A priori non. Éventuellement tu peux réutiliser le type datetime.time pour le stockage des heures, ce qui fournit une base de comparaison ainsi que des méthodes pour le formatage iso & Co.
Quelques idées quand même:
* Revoir le PEP8 pour les identificateurs --> Time_slots ==> TimeSlots
* Permettre d'utiliser des flottants pour représenter les heures en extérieur, genre partie entière=heures et partie décimale=minutes (limitées dont à 59) - même si en interne tu utilises datetime.time - ce qui permet des choses plus sympa à taper et à lire (et moins de trucs à parser à partir de chaînes de caractères). Ainsi tu pourrais écrire:
plage = TimeSlots(6.30, 7.30)
* Définir la méthode __contains__(self, val) dans ta classe, ce qui te permettrait d'avoir des expressions plus élégantes du genre:
if heure in plage: print("C'est l'heure!")
Merci d'avance.
Bon codage.
Laurent.
Francois Lafont wrote:
Bonjour à tous,
Je cherche à me créer une classe qui me permettra d'instancier un
objet me permettant de représenter des réunion de plages horaires
avec une méthode m'indiquant si, au moment de l'exécution du script,
on est ou non dans une des plages.
J'ai aucune idée de la syntaxe (pour l'instant). Par exemple un truc
du genre :
qui renverra true ou false suivant qu'on est entre 6h00 et 7h30
(du matin) ou non au moment de l'exécution du script. Avec une
réunion de plages, je ne trouve pas de syntaxe élégante mais il
faut que je trouve une chaîne de caractères permettant de
représenter une réunion de plages horaires.
Ma question : existe-t-il des modules Python de la bibliothèque
standard permettant de réaliser cela sans partir de zéro ?
A priori non. Éventuellement tu peux réutiliser le type datetime.time pour
le stockage des heures, ce qui fournit une base de comparaison ainsi que des
méthodes pour le formatage iso & Co.
Quelques idées quand même:
* Revoir le PEP8 pour les identificateurs --> Time_slots ==> TimeSlots
* Permettre d'utiliser des flottants pour représenter les heures en
extérieur, genre partie entière=heures et partie décimale=minutes (limitées
dont à 59) - même si en interne tu utilises datetime.time - ce qui permet
des choses plus sympa à taper et à lire (et moins de trucs à parser à partir
de chaînes de caractères). Ainsi tu pourrais écrire:
plage = TimeSlots(6.30, 7.30)
* Définir la méthode __contains__(self, val) dans ta classe, ce qui te
permettrait d'avoir des expressions plus élégantes du genre:
Je cherche à me créer une classe qui me permettra d'instancier un objet me permettant de représenter des réunion de plages horaires avec une méthode m'indiquant si, au moment de l'exécution du script, on est ou non dans une des plages.
J'ai aucune idée de la syntaxe (pour l'instant). Par exemple un truc du genre :
qui renverra true ou false suivant qu'on est entre 6h00 et 7h30 (du matin) ou non au moment de l'exécution du script. Avec une réunion de plages, je ne trouve pas de syntaxe élégante mais il faut que je trouve une chaîne de caractères permettant de représenter une réunion de plages horaires.
Ma question : existe-t-il des modules Python de la bibliothèque standard permettant de réaliser cela sans partir de zéro ?
A priori non. Éventuellement tu peux réutiliser le type datetime.time pour le stockage des heures, ce qui fournit une base de comparaison ainsi que des méthodes pour le formatage iso & Co.
Quelques idées quand même:
* Revoir le PEP8 pour les identificateurs --> Time_slots ==> TimeSlots
* Permettre d'utiliser des flottants pour représenter les heures en extérieur, genre partie entière=heures et partie décimale=minutes (limitées dont à 59) - même si en interne tu utilises datetime.time - ce qui permet des choses plus sympa à taper et à lire (et moins de trucs à parser à partir de chaînes de caractères). Ainsi tu pourrais écrire:
plage = TimeSlots(6.30, 7.30)
* Définir la méthode __contains__(self, val) dans ta classe, ce qui te permettrait d'avoir des expressions plus élégantes du genre:
if heure in plage: print("C'est l'heure!")
Merci d'avance.
Bon codage.
Laurent.
Francois Lafont
Bonsoir,
Merci à tous les deux, Laurent et Damien, pour vos réponses. Je vais essayer de coder un truc dès que j'aurai plus de temps et je le posterai ici, des fois que ayez des remarques (je suis toujours preneurs de critiques constructives même sur la forme ;-)).
Merci encore. À bientôt.
-- François Lafont
Bonsoir,
Merci à tous les deux, Laurent et Damien, pour vos réponses.
Je vais essayer de coder un truc dès que j'aurai plus de temps
et je le posterai ici, des fois que ayez des remarques (je suis
toujours preneurs de critiques constructives même sur la forme ;-)).
Merci à tous les deux, Laurent et Damien, pour vos réponses. Je vais essayer de coder un truc dès que j'aurai plus de temps et je le posterai ici, des fois que ayez des remarques (je suis toujours preneurs de critiques constructives même sur la forme ;-)).
Merci encore. À bientôt.
-- François Lafont
Francois Lafont
Bonjour à tous,
Le 18/02/2014 01:48, Francois Lafont a écrit :
Je vais essayer de coder un truc dès que j'aurai plus de temps et je le posterai ici, des fois que ayez des remarques [...]
Voilà, désolé pour ma réponse tardive (problème de temps toussa ;-)). Ci-dessous vous trouverez le code que j'ai écrit à la lumière des remarques de Damien et Laurent. Il a été testé sous Debian Wheezy avec Python 2.7.3.
Comme d'hab, je suis toujours preneurs de remarques, conseils etc. Par exemple :
- Est-ce qu'au niveau de la forme ça respecte les bonnes pratiques en Python ? Les identificateurs, les sauts de lignes etc.
- Au niveau du code, est-ce que je ne passe pas à côté de certains idiomes classiques en python ?
- Au niveau du découpage des classes, est-ce correct ? Là j'ai fait 3 classes avec une classe TimeSlotsParser qui est un peu à part (on appelle ça une classe statique il me semble ?). Je ne sais pas si c'est un bon choix. Sachant que j'ai besoin de cette fonctionnalité car en pratique c'est par l'intermédiaire d'un fichier texte plat que je vais récupérer les données nécessaires pour créer mes objets TimeSlots.
@staticmethod def string2timeslots(s): assert isinstance(s, unicode) s = s.replace('t', '').replace(' ', '').lower() assert TimeSlotsParser.timeslots_regex.match(s) numbers = TimeSlotsParser.numbers_regex.findall(s) timeslots = [] for i in xrange(0, len(numbers), 4): t1 = datetime.time(int(numbers[i]), int(numbers[i+1])) t2 = datetime.time(int(numbers[i+2]), int(numbers[i+3])) timeslots.append(TimeSlot(t1,t2)) return TimeSlots(timeslots)
class TimeSlot: """Represents a time slot. Takes 2 datetime.time arguments and represents the time slot between this 2 datetimes. In this example below, ts is represents [14h30; 17h47] time slot.
def __contains__(self, time): for timeslot in self.timeslots: if time in timeslot: return True return False
if __name__ == '__main__': import doctest doctest.testmod() --------------------------------------------------
-- François Lafont
Bonjour à tous,
Le 18/02/2014 01:48, Francois Lafont a écrit :
Je vais essayer de coder un truc dès que j'aurai plus de temps
et je le posterai ici, des fois que ayez des remarques [...]
Voilà, désolé pour ma réponse tardive (problème de temps toussa ;-)).
Ci-dessous vous trouverez le code que j'ai écrit à la lumière des
remarques de Damien et Laurent. Il a été testé sous Debian Wheezy
avec Python 2.7.3.
Comme d'hab, je suis toujours preneurs de remarques, conseils etc.
Par exemple :
- Est-ce qu'au niveau de la forme ça respecte les bonnes pratiques en
Python ? Les identificateurs, les sauts de lignes etc.
- Au niveau du code, est-ce que je ne passe pas à côté de certains
idiomes classiques en python ?
- Au niveau du découpage des classes, est-ce correct ? Là j'ai fait
3 classes avec une classe TimeSlotsParser qui est un peu à part (on
appelle ça une classe statique il me semble ?). Je ne sais pas si
c'est un bon choix. Sachant que j'ai besoin de cette fonctionnalité
car en pratique c'est par l'intermédiaire d'un fichier texte plat
que je vais récupérer les données nécessaires pour créer mes objets
TimeSlots.
@staticmethod
def string2timeslots(s):
assert isinstance(s, unicode)
s = s.replace('t', '').replace(' ', '').lower()
assert TimeSlotsParser.timeslots_regex.match(s)
numbers = TimeSlotsParser.numbers_regex.findall(s)
timeslots = []
for i in xrange(0, len(numbers), 4):
t1 = datetime.time(int(numbers[i]), int(numbers[i+1]))
t2 = datetime.time(int(numbers[i+2]), int(numbers[i+3]))
timeslots.append(TimeSlot(t1,t2))
return TimeSlots(timeslots)
class TimeSlot:
"""Represents a time slot.
Takes 2 datetime.time arguments and represents the time
slot between this 2 datetimes. In this example below,
ts is represents [14h30; 17h47] time slot.
Je vais essayer de coder un truc dès que j'aurai plus de temps et je le posterai ici, des fois que ayez des remarques [...]
Voilà, désolé pour ma réponse tardive (problème de temps toussa ;-)). Ci-dessous vous trouverez le code que j'ai écrit à la lumière des remarques de Damien et Laurent. Il a été testé sous Debian Wheezy avec Python 2.7.3.
Comme d'hab, je suis toujours preneurs de remarques, conseils etc. Par exemple :
- Est-ce qu'au niveau de la forme ça respecte les bonnes pratiques en Python ? Les identificateurs, les sauts de lignes etc.
- Au niveau du code, est-ce que je ne passe pas à côté de certains idiomes classiques en python ?
- Au niveau du découpage des classes, est-ce correct ? Là j'ai fait 3 classes avec une classe TimeSlotsParser qui est un peu à part (on appelle ça une classe statique il me semble ?). Je ne sais pas si c'est un bon choix. Sachant que j'ai besoin de cette fonctionnalité car en pratique c'est par l'intermédiaire d'un fichier texte plat que je vais récupérer les données nécessaires pour créer mes objets TimeSlots.
@staticmethod def string2timeslots(s): assert isinstance(s, unicode) s = s.replace('t', '').replace(' ', '').lower() assert TimeSlotsParser.timeslots_regex.match(s) numbers = TimeSlotsParser.numbers_regex.findall(s) timeslots = [] for i in xrange(0, len(numbers), 4): t1 = datetime.time(int(numbers[i]), int(numbers[i+1])) t2 = datetime.time(int(numbers[i+2]), int(numbers[i+3])) timeslots.append(TimeSlot(t1,t2)) return TimeSlots(timeslots)
class TimeSlot: """Represents a time slot. Takes 2 datetime.time arguments and represents the time slot between this 2 datetimes. In this example below, ts is represents [14h30; 17h47] time slot.