Programování v Pythonu
Přihlásit se
Programování v Pythonu (6/21) · 13:58

Zábava s řetězci Experimentování na téma, co všechno se dá dělat s řetězci.

To, co chci dělat v tomto videu, je předat vám trochu více informací o řetězcích. A také vám ukázat sílu řetězců a všechny věci, které podle nich a s nimi můžete dělat Takže jdu na to, co jsem chtěl dělat. Napíšu malý jednoduchý program, v podstatě mi stačí definovat spoustu řetězců. A potom použiji Python interpret ke hře s těmito řetězci a podíváme se, co s nimi můžeme dělat. Takže jdu definovat řetězec. Pojmenujme (deklarujme) ho "a" a "a" je - dejme mu hodnotu (inicializujme) "My first test string" "My first test string" (Můj první test řetězce) je támhle. Jak jistě víš, řetězec je prostě dlouhá řada znaků poskládaných za sebou a ty je poznáš podle toho, že buď bývají v jednoduchých (') nebo dvojitých (") uvozovkách. A jen aby bylo jasné, že nemusí být použity dvojité uvozovky, definuji ještě "b" s hodnotou 'Another test string that I have defined' a jen pro vyjasnění, jak můžete definovat řetězce, skutečně může nastat i případ, ve kterém zadáte apostrof (') tak, aby se nejednalo o uvozovky a aby bylo jasné, kde řetězec začíná a končí. Takže pojďme udělat něco jako toto: Dalšímu řetězci c dejme hodnotu "This is Sal's string" V tomto příkladě je apostrof v pořádku je to jednoduchá uvozovka ('), ale je v pořádku, protože interpret si řekne: "Podívej, řetězec začíná dvojitými uvozovkami!" a tak bude hledat další dvojité uvozovky (") pro ukončení. Takže si neřekne něco jako: "Ale, vždyť končí jednoduchými uvozovkami (')" řekne si: "Potřebuji dvojité uvozovky (")" Tak ví, že tento celý text je řetězec a také ví, že apostrof je pouze normální znak. Jedna věc, kterou jsem nemohl udělat - nemůžu udělat: Pojďme zde zkusit definovat řetězec "d". Řekněme si definujme ho následujícím způsobem. Nemohu udělat toto: 'This is Sal's string' Nebude to mít žádný význam, protože tady otevíráme řetězec jednoduchými uvozovkami ('), takový řetězec se správně zavře při použití dalších jednoduchých uvozovek, a vše za nimi [s string'] je prostě nějaký text, který se interpret pokusí zobrazit jako nějaký typ příkazu samotného programu, a v tom momentě se přeruší. Takže pokud chcete, aby to fungovalo, nemůžete to udělat takto. Ale můžete udělat něco jako toto: 'Sal's - ne, to nemůžete udělat... Takže 'My favourite... a jsou tady způsoby jak to udělat a nebudeme chodit do únikových znaků, a všechno je momentálně... ale 'My favourite word is... a právě nevím, jaké je moje oblíbené slovo, Trochu jsem naváděn přímo na místo. Ale řekněme 'My favourite word is "asparagus"... A... Dokonce to neumím ani vyspelovat. Asparagus. Takže 'My favourite word is "aspara[g]us", what is yours?' Takže toto je opět přijatelné, protože jsem začal můj řetězec jednoduchou uvozovkou takže interpret si říká: "Podívej, to není konec řetězce." předtím než dojde k dalším jednoduchým uvozovkám. Takže to není něco, co by interpreta zmátlo, když uvidím tyto první dvojité uvozovky, protože on ví, že řetězec začal jednoduchými uvozovkami. Teď vám ukážu nějaké jiné příklady řetězců, a bude zajímavé se s nimi zabývat. Ne vždy musí být pojmenovány (štítky), takže pojmenujeme ho "math_string" A pojďme ho zavolat - řekněme, že je to "3+4*2" Toto je math string (matematický řetězec). Opravdu je to řetězec znaků. Interpret nebude počítat jeho hodnotu, vidí doslova jen řetězec znaků. Já si myslím, že toto je opravdu dobré - pojďme si udělat další druh pseudo-math-string nebo pojďme udělat další výraz, pojďme dát řetězci hodnotu výrazu. Takže toto je název proměnné a řekněme, že můj expression string je "a+... potom udělám řetězec uvnitř dalšího řetězce ..+b+'tiger'" přesně tamhle. Takže toto je prostě - všechno mezi dvojitými uvozovkami interpret uvidí pouze jako řadu znaků. Dobře, jsou tady zajímavé věci, které bychom s tím mohli dělat. Takže toto je dostatečný řetězec k definici, takže pojďme teď uložit tento soubor a pojďme ho spustit. A co to udělá - teď v této zábavě všech řetězců, které jsme definovali a které si mohu ověřit tím, že mohu říci "a", 'My first test string' "b", 'Another test string that I have defined,' "c" 'This is Sal's string" "d", 'My favourite word is... "aspara... "asparaus"... Dokonce neumím pořádně vyspelovat slovo "asparagus" možná to budeme muset napravit. "asparaus", co je vaše? To potřebuje "g" asparaGus! ... Co je tvé? A teď pojďme - je to dobrá věc, že toto není hláskovací video - pojďme se podívat, jak vypadá math_string math_string, skutečně je to řetězec znaků. A teď tady máme řetězec výrazu. expression_string je také opravdu jen řetězec znaků. Teď si pojďme pohrát znovu s některými z těchto řetězců a uvidíme, co se s nimi dá dělat. Takže, pár věcí, můžeme říci, "Hej, jak dlouhý je tento řetězec?" A k tomu můžeme použít funkci vestavěnou v Pythonu - len(), což je zkratka pro délku (lenght). takže len() nebo len(a), nám odpoví: "Hele, v řetězci "a" je 20 znaků!" Pojďme je spočítat, pojďme to zkontrolovat. 1,2, mezera je také znak (počítání do dvaceti) Ano, 20 znaků! Jaká je délka len() řetězce math_string? len() - zkratka od délky (length) math_string má 5 znaků. Pojďme je spočítat. 1 2 3 4 5 znaků. To dává smysl. Můžeme to udělat pro jakýkoliv z nich a doporučuji vám, abyste si to sami vyzkoušeli; opravdu dobrý experiment, zvyknete si na to. Teď, další věc, kterou vám chci ukázat je jak sloučit dva řetězce. Zní to jako trochu přepychové slovo, ale opravdu to znamená spojit je dohromady. Tak například, řekněme pojďme vytvořit nový řetězec - pojmenujme ho "a<u>with</u>b" a definuji, že je to a+b Takže tady právě dělám něco velmi zajímavého. Používali jsme sčítací operátor (+) s čísly, ale já jsem sečetl dva řetězce. Podívejme se tedy, jak toto vypadá. Podívejme se, jak vypadá a<u>with</u>b. a<u>with</u>b je proměnná. Tak teď, co se stane? Mám a, které má hodnotu "My first test string" a mám b, které má hodnotu "Another test string that I have defined" Když dám a+b dostanu "My first test string", a b bude přidáno na konec toho! b bude sloučeno s a Sloučení je pouze přepychové slovo pro "spojit" "Another test string that I have defined" takže se spojilo a- Hádám, že byste mohli vidět, že b bude na konci a a můžete je dát v opačném pořadí, můžete dát b<u>with</u>a dejme hodnotu b+a A podívejme se, jak to vypadá b<u>with</u>a... Tak, teď je pořadí obrácené. a je přidáno na konec b. Takže teď můžeš dělat velmi fascinující řetězce, víš? Když jsme udělali <u>string+expression</u>string nebudu ji nastavovat na žádnou proměnou, pouze se podívám, co dostanu, když... nastavím hodnotu math<u>string+expression</u>string Teď mám v podstatě tyto dva řetězce spojené dohromady, a takže tento řetězec půjde na konec tohoto řetězce, můžete to právě vidět zde a toto je druh bizarně vypadajícího řetězce, ale pořád je to řetězec! Všechno mezi těmito znaky, všechno mezi dvojitými uvozovkami je vnímáno jako znak. Toto jsou prostě znaky. Teď je jtady mnoho, mnoho, mnoho, mnoho dalších věci, které můžeme dělat s řetězci, Nebudu vám představovat všechny z nich. Ale řetězce mají spoustu funkcí, a když budete mít Integrated Development Environment, často vám řeknu, jaké typy funkcí můžete použít. Například, můžete použít funkci split() Možná chcete seznam všech slov v řetězci. Možná píšu nějaký typ programu a chci vzít tento řetězec, který je v b a chci dát každé z těchto slov jako oddělený prvek v seznamu. Takže vše, co musím udělat je, že napíšu b tečka (b.) a zavolám jednu z metod b a budeme dělat více metod a objektově orientovaného programování a všeho toho, ale můžeme vidět b jako objekt řetězce a b má své vlastní metody a operuje s nimi sám. Takže teď můžeš prostě říci: "Podívej, chci rozdělit b do samostatných slov." Zavolám metodu split() Musím zavolat metodu split() a řeknu "Co mám rozdělit?" takže když řeknu "split", myslím rozdělit tento řetězec do spousty prvků a dát je do seznamu a rozdělit řetězec kdekoli uvidím mezeru. Takže pojďme se podívat, co se nám vrátí. Upozornění: Vzít tento řetězec "Another test string that I have defined", je rozdělen všude, kde je mezera a co je na obou stranách prostoru a dát to jako prvek do seznamu. To může být užitečné, když děláte nějaký typ textového úkolu. Ale já vám chci ukázat, že se nemusí dělit jenom tam, kde je mezera, Můžeš říci "b.split()" a můžeš chtít mezeru všude, kde je 't'. Takže můžeš udělat mezeru na t a to ti dá další bizarně vypadající věc... Upozornění: Pokaždé, když je tam 't', rozdělí to řetězec a cokoliv, co bylo na obou stranách 't' a dá to do samostatného prvku v seznamu. Takže velmi fascinující věc, můžeš dělat věci jako toto... Najdi, kde v řetězci je znak. Takže, řekni, co chceš volat - já nevím - zkusíme math_string a chci najít v math_string, (jedna z těchto metod), chci najít hvězdičku (*) (další slovo, se kterým mám potíže při jeho vyslovení) takže find() - pojďme najít hvězdičku. Řekni mi, který znak, jestli nějaký, obsahuje hvězdičku. Říká nám, že třetí charakter obsahuje. Pojďme to zkontrolovat. Takže, toto je nultý znak, to je počátek, - taková je domluva ve většině programovacích jazyků Nultý znak, první znak, druhý znak, třetí znak, ... je hvězdička. Když chceš najít 3, a já vás opravdu povzbuzuji k experimentům s tímto, find() 3! Tady je to nultý znak. Teď je tady další věc můžeš replace() - nahradit znaky, řekneš "Podívej, vezmi c a nahraď ho..." můžete buď najít v knihovně nebo hledat na webu, normálně můžete najít všechny z knihoven pro řetězce v Pythonu nebo když máte IDE, bude vám navrhovat věci, které můžete dělat s řetězci a radit, jak je máte udělat. Ale řekněme, že chceme nahradit všechna 'i' písmenkem 'o' v řetězci c. Podívejme se, co uděláme. Pojďme, tady je "This is Sal's string" a nahraďme všechny s pomocí o a abych byl přesný - nezmění to řetězec c vytvoří to jeho kopii, ve které jsou 'i' nahrazeny písmeny 'o' takže se z toho stane "Thos os Sal's strong." (To zní jako nějaký druh Norského jazyka.) A přesně tak, c nebylo změněno. Ale když si vezmu, když řeknu c=c.replace('i','o') potom bude c změněno na "Thos os Sal's strong." Teď poslední věc, kterou udělám je, že vám ukážu velmi magickou funkci (nejméně z mého úhlu pohledu). A to je eval() funkce. Tato funkce existuje v interpretovaných jazycích jako Python (existuje také v JavaScriptu) a je velmi cool. Může dát řetězci hodnotu. Může ukázat řetězec, vy ho můžete upravit jako řetězec for a while a můžete ho vytvořit, takže můžete, například, mít počítačový program, který napíše další počítačový program uvnitř řetězce a dá mu hodnotu počítačového programu. K tomu potřebujete trochu filozofického myšlení. Takže například, když mám math_string, je to prostě řetězec znaků. Ale když řeknu eval(math_string), interpret bude okamžitě dávat hodnotu tomu, co je uvnitř. Takže to bude opravdu upravené jako výraz. A dostanu 11, takže to vezme math_string a řekne to "Dobře, teď to upravím jako program." takže 3+4*2, správné pořadí operací, to znamená prvně 4*2 a to je 8 a 3 + 8 je 11. A dokonce s tím můžeš dělat ještě více super věci! Můžeš udělat "eval(" - přemýšlejme o tom - "math_string" - a přidejme do math_string znak, znak "1". A podívejme se, co se stane. Dostaneme 87, co to je?! Dobře, co to tedy udělalo... math_string jak byl předtím, je jedna věc, ale když k němu na konec přidáte 1, vypadá to takto: 3+4*21 ze 2 se stane 21, protože nakonec zřetězíme 1 takže se z toho stane 4*21, což je 84 a +3 to je 87. A můžete dělat i další věci, můžeme dát hodnotu řetězci expression_string, to je důvod, proč jsem to zadal takto. eval(expression_string) Opravdu legrace hrát si s tím, Mohl bych to dělat celý den! eval(expression_string) Pamatuj, expression_string je pouze řetězec, ale když mu dáme hodnotu, můžete se pozastavit a přemýšlet, co se stane. Takže dejme mu hodnotu. To je šílenství! Odkud přichází? Dobře, v řetězci jsou tyto znaky: 'a' a 'b', ale když jim dáme hodnotu v jejich aktuálním kontextu a a b jsou proměnné a reprezentují řetězce. Takže když jim dáme hodnotu, řekne to "Dobře, je to řetězec", 'My first text string' zřetězí nebo dá mezeru na konec takže "My first test string" a potom mám mezeru a potom dám na konec toho b takže "Another test string that I have defined" potom dám... potom dám ... SPACE TIGER a teď máme mezeru tygra (space tiger) Takže vás opustím... Když si dokážete představit, že řetězce jsou super super mocné pojmy pro dělání hromady aplikací. A já jsem nevyčerpal ani zdaleka všechny věci, které s nimi můžete dělat, takže vám doporučuji experimentovat!
video