Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Mon code est lourd

15 réponses
Avatar
yves
Bonjour,

soit une séquence, un générateur (de tuples en l'occurrence)

('02', 'D', '27')
('02', 'L', '28')
('03', 'M', '01')
('03', 'M', '02')

Pour la petite histoire,
02 et 03 correspondent Í  Février et Mars
D 27; c'est dimanche 27, etc...


Je voudrais arriver Í  imprimer:
02
D 27
L 28
03
M 01
M 02

En repassant par un dictionnaire, j'ai ça:

#+begin_src python :results output :exports both

from pprint import pprint

def g():
yield('02', 'D', '27')
yield('02', 'L', '28')
yield('03', 'M', '01')
yield('03', 'M', '02')


dic = {}
l02,l03 = [],[]
for elt in g():
m , d, nd = elt
if m == "02":
l02.append((d,nd))
dic['02'] = l02
elif m == "03":
l03.append((d,nd))
dic['03'] = l03

pprint(dic)


#+end_src
#+RESULTS:
: {'02': [('D', '27'), ('L', '28')], '03': [('M', '01'), ('M', '02')]}

Et Í  partir du dictionnaire, l'impression finale est facile.

Mais cette méthode de conversion du générateur en dictionnaire me
paraͮt terriblement lourde, surtout qu'il y aura douze mois, c'est ͠
dire douze branchement if/elif

Vous auriez des suggestions d'écriture plus élégante ?


@+
--
Yves

5 réponses

1 2
Avatar
Alain Ketterlin
yves writes:
Le Thu, 05 May 2022 22:26:20 +0200, Alain Ketterlin a écrit:
(Au passage : pourquoi utiliser des chaÍ®nes de caractères pour les mois
?
Un entier serait plus simple Í  manipuler.)

Pour ce qui est des chaÍ®nes de caractères, c'est surtout que j'ai épuré
au maximum mon exposé du problème.

C'était juste une remarque en passant.
En réalité, ma source de donnée actuelle c'est plutÍ´t ce code lÍ :
from datetime import datetime, timedelta, date
def genereXdates2():
dateDepart = "26012022"
dateFin = "07052022"
depart = datetime.strptime(dateDepart, '%d%m%Y')
fin = datetime.strptime(dateFin, '%d%m%Y')
date = depart
dict_transcodage = {"6": "S", "0": "D", "1":"L", "2":"M", "3":"M",
"4":"J", "5":"V"}
while date != fin:
yield(date.strftime("%m"),dict_transcodage[date.strftime('%w')],date.strftime('%d'))
date = date + timedelta(1)

Je proposais d'utiliser Í  la place :
yield (date.month, "LMMJVSD"[date.weekday()], date.day)
(attention, weekday() ne suit pas la même convention que "%w" pour strftime).
C'est toi qui voit.
-- Alain.
Avatar
yves
Le Fri, 06 May 2022 21:46:00 +0200, Alain Ketterlin a écrit:
Je proposais d'utiliser Í  la place :
yield (date.month, "LMMJVSD"[date.weekday()], date.day)
(attention, weekday() ne suit pas la même convention que "%w" pour
strftime).
C'est toi qui voit.

Merci, je vais utiliser ta ligne de code.
Mon objectif est d'obtenir sur écran un aspect (graphique) analogue Í  un
calendrier carton (ces petits calendriers d'un format approximatif A4
qu'on trouve dans toutes les entreprises).
@+
--
Yves
Avatar
Eric Demeester
Bonjour,
Dominique (Fri, 6 May 2022 15:43:55 +0200 - fr.comp.lang.python) :
la retraite... dans un mois :-)

Jaloux comme un pou je suis ! :)
Avatar
yamo'
yves a écrit :
Le Thu, 05 May 2022 19:43:05 +0000, yves a écrit:
Zut, la mise en page a sautée. Je voudrais arriver Í  imprimer:
02 D 27 L 28 03 M 01 M 02

Rezut.

Bon, la mise en page est bonne dans Gnus, mais pas dans Pan 0.144

C'est sͻrement la fonction wrap de Pan qui te joue des tours...
--
Stéphane
Avatar
yves
Le Mon, 09 May 2022 07:56:13 +0000, yamo' a écrit:
Bon, la mise en page est bonne dans Gnus, mais pas dans Pan 0.144

C'est sͻrement la fonction wrap de Pan qui te joue des tours...

Ah, oui. Misère. Ce n'est pas la première fois, en plus.
@+
--
Yves
1 2