#! /usr/bin/env python import sys import getopt def css_block(selector, rule, comment): return "%s { \t%s /* %s */ } " % (selector, rule, comment) def usage(): print "%s: [OPTION]..." % (sys.argv[0], ) print "Try to convert pixels to em " print "Options can be:" print "\t -h, --help\t\tthis help" print "\t -c, --css\t\tturns on fancy css ouput (default: off)" print "\t -s, --start\t\tstart range for conversion (default 14)" print "\t -e, --end\t\tend range for conversion (default 16)" print "\t -p, --px_size\t\tbrowser default font size (default 16)" print "\t -d, --em_size\t\tbase font size for body, in em (default 1)" def main(): try: opts, args = getopt.getopt(sys.argv[1:], "hcs:e:p:d:", ["help", "css", "start=", "end=", "px_size=", "em_size="]) except getopt.GetoptError: usage() sys.exit(2) px_size = 16 # default font-size, in pixels. == 1em em_size = 1 # base font-size, i.e. in the body rule, in ems convert_start_size = 14 # give results starting with this size in px... convert_end_size = 16 # and ending with this one. generate_useless_css_rules_mode = False # generate css rules for o, a in opts: if o in ("-h", "--help"): usage() sys.exit() if o in ("-c", "--css"): generate_useless_css_rules_mode = True if o in ("-s", "--start"): convert_start_size = int(a) if o in ("-e", "--end"): convert_end_size = int(a) if o in ("-p", "--px_size"): px_size = float(a) if o in ("-d", "--em_size"): em_size = float(a) if not generate_useless_css_rules_mode: print "if %.3fem == %.2fpx," % (1, px_size), if em_size != 1: print "and base font size is %.3fem" % (em_size, ), print "then:" else: selector = "body" comment = "(default size assumed: %.2fpx)" % (px_size) rule = "font-size: %.3fem;" % (em_size, ) print css_block(selector, rule, comment) for px in range(convert_start_size, convert_end_size + 1): em = (float(px) / float(px_size)) / float(em_size) if generate_useless_css_rules_mode: selector = "element_%d" % (px, ) rule = "font-size: %.3fem;" % (em, ) comment = "(%dpx)" % (px, ) print css_block(selector, rule, comment) else: print "\t%.3fem == %dpx" % (em, px) if __name__ == "__main__": main()
Convertisseur em vers pixels
Par Mathieu Pillard le vendredi, février 17 2006, 00:00 - Openweb - Lien permanent
J'ai essayé de faire un truc qui ressemble vaguement à ce que demande Emmanuel Clement dans son billet sur le coup du 62.5%, en python. C'est bourrin, ca a vaguement l'air de marcher, mais j'ai pas plus testé que ca. Feedback welcome, parceque moi c'est un truc dont je me fiche un peu à la base (je suis farouchement contre le principe meme de toucher à la taille initiale du body, étant moi meme réglé sur une taille de police de base dans mon navigateur de 12px et non 16, valeur par défaut utilisée un peu partout), donc je n'ai aucune idée de si ca correspond ou non à ce qui est demandé 
La discussion continue ailleurs
- 1. Le samedi, février 18 2006, 18:01 par Biologeek : Ubuntu, bio-informatique et geekeries libres d'un bio-informaticien au quotidien.
-
Un template python pour parser des arguments
En réaction au billet de mat qui a codé un convertisseur em vers pixels. Je me demande souvent si la méthode que j'emploie est la plus pertinente pour parser des arguments en ligne de commande lorsque je crée des petits scripts en python.
Commentaires
une petite remarque :
em = (float(px) / float(px_size)) / float(em_size)
Peut devenir de façon interessate:
from __future__ import division
em = px / pxsize / em_size
Les prochaines versions de python changeront le comportement de la division, mais c'est deja implanté et disponible en __future__
Mouais, __future__ ca me dit rien
Mais tant que je te tiens, je me suis posé la question hier: ya pas un moyen plus simple de faire ca ? C'est quand meme lourd ces float() de partout.
Et après je fais des billets geeks...

Le moyen le plus simple c'est __future__
Lis le pourquoi du comment de ce module, tu veras que ce n'est pas un délire psycopatique.
Sinon, à part float, aucune autre solution ( bien que tu peux te contenter de float sur la premiere valeur
>>> 5 / 2
2
>>> 5.0 / 2
2.5
>>> 5.0 / 2 / 2
1.25
>>> 5 / 2
2
>>> 5 // 2
2
>>> from __future__ import division
>>> 5 / 2
2.5
>>> 5 // 2
2
>>> 5.0/ 2
2.5
>>> 2 / 2
1.0
>>>
je viens de lire tous vos billetes je n'y comprend rien il faut dire qu'ayant atteint les 58 balais je nage un peu