Avatar
hanpari
Redaktor
Avatar
hanpari:

Svého času jsem narazil na takový zajímavý problém.

Když uvažuji tento kód:

>>> s = "{0:*>15}".format("text")
>>> s #získám tento výstup
'***********text'

Jak je vidět, celý text je zarovnaný hvězdičkami zprava.Jeho užitečnost si můžeme demonstrovat tady:

>>> s = "{0:*>15}".format("Delší text")
>>> s # Dostaneme opět hezké zarovnání na 15 znaků.
'*****Delší text'

Jenomže, co když budu chtít odsazení měnit za chodu programu?

Tenhle kód nefunguje.

>>> odsazeni=25
>>> s = "{0:*>odsazeni}".format("text")
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    s = "{0:*>odsazeni}".format("text")
ValueError: Invalid format specifier

Jediné, co mne napadlo, je použít funkce eval, popřípadě exec, ale věřím, že musí být nějaké elegantnější řešení.

Napadá někoho něco?

 
Odpovědět 17.6.2014 19:41
Avatar
coells
Redaktor
Avatar
Odpovídá na hanpari
coells:
"{0:*>{odsazeni}}".format("text",odsazeni=25)
 
Nahoru Odpovědět 17.6.2014 19:46
Avatar
coells
Redaktor
Avatar
Odpovídá na hanpari
coells:

nebo oblíbené

"{:*>{}}".format("text",25)
 
Nahoru Odpovědět 17.6.2014 19:47
Avatar
hanpari
Redaktor
Avatar
Odpovídá na coells
hanpari:

Díky ti, dobrá vílo. Tohle je opravdu užitečné. Nevím, jak to děláš, že si to tak dobře pamatuješ. Já jsem to hledal v dokumentaci (asi špatně) a zrovna tenhle konkrétní problém mi přišlo, že tam nebyl řešený. Ten druhý příklad se mi líbí víc - ale když o tom tak uvažuji, ten první bude asi přehlednější pro delší zápisy.

 
Nahoru Odpovědět 17.6.2014 19:52
Avatar
coells
Redaktor
Avatar
Odpovídá na hanpari
coells:

Mně se líbí víc ten druhý, protože vypadá jako smajlík.

 
Nahoru Odpovědět 17.6.2014 19:54
Avatar
hanpari
Redaktor
Avatar
Odpovídá na coells
hanpari:

Tak to je aspoň důvod :)

 
Nahoru Odpovědět 17.6.2014 19:55
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.