Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)
Avatar
hanpari
Redaktor
Avatar
hanpari:17.6.2014 19:41

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:17.6.2014 19:46
"{0:*>{odsazeni}}".format("text",odsazeni=25)
 
Nahoru Odpovědět 17.6.2014 19:46
Avatar
coells
Redaktor
Avatar
Odpovídá na hanpari
coells:17.6.2014 19:47

nebo oblíbené

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

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:17.6.2014 19:54

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:17.6.2014 19:55

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.