Programování v Pythonu
Programování v Pythonu (10/21) · 5:22

Python 3 není zpětně kompatibilní s Pythonem 2 Proč vzorový program nebude fungovat v Pythonu 3 a jak to vyřešit.

Videa, která jsem vytvořil použitím těchto příkladů v Pythonu využil jsem Python 2, což je standardní verze Pythonu která je v době vytváření tohoto videa použitá na většinu implementací Ale je zde také Python 3, což je nejmodernější verze Pythonu nebo chcete-li nejnovější verze Pythonu. Ale nejsou zpětně kompatibilní Pokud jde o zpětnou kompatibilitu znamená to, že pokud provozujete Python 3, nebudete schopni spustit všechno, co je v napsáno v Pythonu 2. Takže to je to, co máme na mysli zpětnou kompatibilitou. Nemůžete prostě vzít program napsaný v Pythonu 2 takže vezměmě program což je tento program a řekněme, že dokáže běžet v Pythonu 2. Pokud vezmete stejný program a pokusíte se ho spustit v interpreteru Pythonu 3, nebude to fungovat. Což znamená, že to není zpětně kompatibilní. Pokud to bude fungovat, potom je to "zpětně kompatibilní". A hlavní důvod... ... toto je vlastně docela dobré vysvětlení toho, co znamená zpětná kompatibilita ale pointa tohoto videa je, že program, který jsem spustil v posledním videu bude fungovat v Pythonu 2. ale bude fungovat v Pythonu 3. A důvodem, proč to nefunguje v Pythonu 3 je, že Python 3 má rozdílnou verzi... ...funkce input zde. V Pythonu 2, pokud použijete funkci input jako já Vložím sem zprávu pro uživatele, co má zadat a když uživatel něco zadá vrátí se to programu zcela vyhodnocené Takže v tomto případě, pokud uživatel zadá číslo, dostnu číslo jako číslo. Tedy doslova vyhodnocený výraz. Takže jak jsme viděli v několika posledních příkladech, pokud uživatel vloží 4, pak se číslo 4 vloží do proměnné "number" pokud uživatel vloží doslova 3 + 4 pak se do proměnné "number" vloží číslo 7. V Pythonu 3 funkce input dělá něco trochu jiného a to stačí k rozbití tohoto programu pokud ho zkusíte pustit v Pythonu 3. V Pythonu 3, funkce input nevrací vyhodnocený výraz, vrací řetězec a to je slovo, které uslyšíte v informatice uslyšíte často a vysvětlím ho v několika videích ale vrací tedy řetězec toho, co uživatel vložil. Říkáte si: "Sale, co je řetězec?" A to je vlastně dobrý úvod: Řetězec je "řetězec znaků". Takže - možná - je rozdíl pokud - uživatel vloží sem, toto jde od uživatele, pokud uživatel vloží v Pythonu 2 - 2 × 6 pak hodnota uložená v proměnné "number" bude 2 × 6, takže to bude 12, bude to vlastně vyhodnoceno. V Pythonu 3, pokud jsme udělali toto a uživatel vložil 2 × 6 takže znova uživatel vložil 2× 6 pak co je uloženo v proměnné "number" co se vrátilo z této funkce zde, nebude vyhodnoceno jako 2 × 6. Bude to řetězec znaků "2 × 6". Takže toto je řetězec a řetězec je ... můžete ho považovat za řetězec znaků. můžete ho považovat za text který není nijak interpretován. Takže to vlastně vrátí řetězec znaků, takže byste měli tento řetězec znaků... ... vložený do "number" a tato funkce "range" by se rozbila protože se zde snažím získat rozsah... ...slova, ne čísla Což je důvod, proč se to rozbije v Pythonu 3. Takže pokud chcete zprovoznit původní funkci v Pythonu 3 tak musíte vložit... takže místo prostého zavolání "input" jako zde, musíte - a já to napíšu hned níže - musíte napsat "eval" a pak napsat "input" a pak napíšete "input" a pak to znamená, že vše co jsem sem napsal, dvojtečka, uvozovky, závorky a pak uzavřel eval() závorkami zde. eval() vlastně vezme řetězec znaků, může vzít nějaký text jako tento. A vyhodnotí jej. Takže co se stane v Pythonu 3, je, že dostanete řetězec a pokud jej vyhodnotíte takže byste spustili eval() na tímto takže vlastně spouštíte eval() nad input() uživatel vloží nějaký vstup, takže pak spouštíte eval() nad tím, co uživatel zadal, a pak to vrátí 12. Takže v Pythonu 2 funkce input dělá vše za vás, v Pythonu 3 vrací řetězec který pak musíte vyhodnotit, abyste dostali 12. Takže pokud se pokoušíte toto řešit v Pythonu 3 a rozbije se to, toto je důvodem, proč to musíte uzavřít do eval()
video