[python] Otázky kladené Pythonem

Pavel Kosina geon na post.cz
Pondělí Červen 9 12:49:59 CEST 2008


Zmizení klasického inputu je jedna z věcí, co mi vadí na 3.0. Vaše 
argumenty jsou pěkné, neplatí však pro 12-ti leté kluky. Tím nechci 
říci, že Jarkovi je 12. Srovnejte čitelnost:

cislo1=input("Zadej cislo")
cislo1=int(raw_input("Zadej cislo"))

V druhém příkladě je až moc závorek a funkce int navíc proti první. 
Přichází chyby ze špatně napsaných závorek a horšího kompletního 
porozumění. Jde o to, že asi tady bude místo, kde se začně říkat žákům: 
tohoto si zatím nevšímejte, prostě to napiště jak to je, vysvětlení bude 
později. To je jedna z hlavních věcí, které se chci u absolutních 
začátečníků vždy vyhnout.

Naopak, to že se do inputu dají zadávat nejen 1+1, ale výraz s 
proměnnými, je jedna z věcí, kterou mí žáci vždy vítali s nadšením, s 
velkým nadšením, byl to jakýsi první hack, a povzbudilo je to k dalšímu 
zápolení s jazykem.

Pavel Kosina


Filip Štědronský napsal(a):
> Dobrý den
> No jde o to, že input jako funkce je dost nelogická,
> protže provádí dva zcela odlišné úkony — načtení řetězce
> a jeho vyhodnocení jako výrazu. Myslím, že cílem většiny
> vstupů nebývá vyhodnocení výrazu, takže nemá cenu
> začínajícím plést hlavu. Navíc, není to dvakrát
> nejrychlejší (což je tady jedno, ale stejně).
>
> Jediný důvod, proč se ve skutečnosti input tak často
> používá je, že v jednoduchých programech pracujeme
> častěji s čísly než řetězci a input nám při prostém
> zadání čísla jej vrátí. Ale "opravdu" si chceme z
> funkce input() udělat read_number ? Navíc pro v původní
> otázce zmíněný příklad zkoušení příkladů by šlo na prompt
> 1+1 napsat prostě 1+1 a vše by fungovalo.
>
> Takže vážení, pokud chcete načítat čísla, použijte
> int(raw_input()). Funkce input() stejně v Pythonu 3
> zmizí. I pokud byste doopravdy potřebovali vyhodnotit
> výraz ze vstupu a věděli, co děláte, použijte
> eval(raw_input()), protože je to daleko čitelnější.
> Funkce input() je archaický přežitek zachovávaný kvůli
> zpětné kompatibilitě, a v žádném případě by se neměla
> používat.
>
> PS: V Pythonu 3 se bude raw_input jmenovat input(), je
>     to hezčí. Původní input pak nahradí přehledné
>     eval(input()).
>
>   


-- 
geon
Pavel Kosina



Další informace o konferenci Python