[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