-
Celem tego filmu jest oswojenie was trochę ze stringami
-
jak również pokazanie wam ich mocy, oraz rzeczy których można z nimi robić.
-
Albo robić za ich pomocą.
-
Więc teraz zamierzam napisać prosty program,
-
który zasadniczo zdefiniuje mi kilka stringów.
-
i potem użyję Python interpretera by trochę się z nimi pobawić
-
i zobaczyć co można z nimi robić.
-
Więc zdefiniujmy string, nazwijmy go "a"
-
i a to powiedzmy "My first test string."
*mój pierwszy testowy string.
-
Jak wiemy, string to sekwencja znaków
-
i możesz je rozpoznać, bo mogą być zamknięte zarówno w pojedynczych jak i podwójnych "uszach"( ' ' lub " " ).
-
I żeby udowodnić że wcale nie musi to być cudzysłów, pozwólcie mi zdefiniować b jako
-
'Another test string that I have defined'
*Kolejny testowy string, który zdefiniowałem
-
I żeby pokazać jak można definiować stringi,
-
w zasadzie możesz używać uszu wewnątrz uszu dopóki jasne jest
-
gdzie string się zaczyna i kończy.
-
Więc powiedzmy ze mamy coś takiego
-
"This is Sal's string"
*to jest string Sala
-
Więc w tym przypadku, apostrof jest ok
-
ponieważ interpreter "pomyśli":
-
"O, string zaczyna się od cudzysłowia (")więc muszę szukać kolejnego cudzysłowia(")
-
żeby go zamknąć" Więc nie powie. "O, kończy się na apostrofie('),"
-
zamiast tego powie "Potrzebuję cudzysłowia("). " By wiedział, że to z czym ma do czynienia to string.
-
wie również, że ten apostrof to tylko znak.
-
Jedna rzecz której nie mogę zrobić:
-
Spróbujmy zdefiniować string "d".
-
Więc powiedzmy, zdefiniuję go tak.
-
Zatem, nie mogę zrobić tak:
-
'This is Sal's string'
-
To nie ma żadnego sensu,
-
Ze względu na to że tutaj, otwieramy string apostrofem
-
zamknie się on dokładnie wtedy, gdy natrafi na kolejny apostrof.
-
i wszystko to [s string] będzie tylko tekstem
-
który interpreter weźmie za jakąś część programu,
-
i zawiesi się na nim.
-
Więc jeżeli chcecie żeby to działało, nie możecie tego tak zostawić.
-
Możecie zrobić coś takiego:
-
'Sal's-- nie, tak nie możecie
-
są sposoby żeby to zrobić, ale nie będziemy wchodzić w znaki wyjścia
-
to tyle co do nich, ale, 'My favourite word is....'
*moje ulubione słowo to...
-
I w zasadzie nie wiem jakie jest moje ulubione słowo, trochę się wkopałem.
-
Ale powiedzmy ze moim ulubionym słowem jest asparagus (szparag)
-
Asparagus. Nie wiem nawet jak to zapisać As,asparagus.
-
Więc 'My favourite word is "aspraraus", what is yours?'
*Moje ulubione słowo to "szparag", Jakie jest twoje?
-
i znowu to jest poprawne, ponieważ zacząłem string apostrofem i program myśli:
-
"Nie skończę stringu dopóki nie dostaniemy kolejnego apostrofu."
-
Więc to nie jest tak że interpreter zgubi się gdy zobaczy pierwszy cudzysłów
-
ponieważ wie, że string został zaczęty od apostrofu.
-
Pozwólcie, że pokażę inne przykłady stringów,
które będą ciekawym wyzwaniem.
-
nie zawsze muszą być nazwane szablonowo, więc nazwijmy go "math_string" .
*string_matematyczny
-
I tu wpiszemy, powiedzmy "3+4*2"
-
Więc to jest "math_string", zwykły ciąg znaków.
-
Interpreter nie będzie brał pod uwagę ich wartości, pokaże natomiast tylko ciąg znaków.
-
Myślę, że to całkiem dobry-- pozwólcie że zrobię kolejny pseudo-matematyczny string
-
albo zróbmy jakieś wyrażenie, niech nazywa się "expression string"
*string wyrażeniowy
-
to jest tylko nazwa zmiennej, i powiedzmy że mój "expression string" ma wartość
-
"a+' 'b+' tiger' "
* tygrys
-
Wszystko co pomiędzy podwójnymi uszami
-
interpreter pokaże jako ciąg znaków.
-
Jest kilka interesujących rzeczy które możemy teraz w końcu zrobić.
-
Starczy definiowania stringów, wiec zapiszmy plik i odpalmy go.
-
Mamy tutaj zdefiniowane stringi
-
i możemy je zweryfikować, wpisując na przykład "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'
(odkrył literówkę)
-
Nawet nie umiem tego poprawnie zapisać "asparagus", będzie trzeba to poprawić.
-
'asparaus, what is yours?'
-
Potrzeba "g" asparaGus!
*szparag
-
'What is yours?'
-
I dalej mamy ...
-
Możemy sprawdzić jak wygląda "math_string"
-
math_string jest jedynie ciągiem znaków.
-
Następnie mamy "expression_string"
-
"expression_string" też jest tylko ciągiem znaków.
-
Teraz zacznijmy zabawę z tymi stringami i sprawdźmy co można z nimi zrobić.
-
Jest parę rzeczy o które możemy spytać, na przykład "Jak długi jest ten string? "
-
I możemy użyc wbudowanej funkcji Pythona len(),
[skrót od lenght]
*długość
-
Więc len() od a [len(a)],
-
mówi nam - "W a jest 20 znaków!"
-
Sprawdźmy to, policzmy je.
-
1,2,spacja jest znakiem!
-
{liczy do dwudziestu}
-
Tak, dwadzieścia znaków!
-
Jaka jest len(math_string)?
-
len- length w skrócie.
*długość
-
"math_string" składa się z pięciu znaków, policzmy je.
-
1,2,3,4,5 znaków. To ma sens.
-
Możemy zrobić to dla każdego z nich i zachęcam was do zrobienia tego samemu.
-
Naprawdę, eksperymentujcie, oswajajcie się z tym.
-
Kolejną rzeczą, jaką chciałbym wam pokazać jest to jak zespolić dwa stringi.
-
Brzmi wymyślnie, ale tak naprawdę znaczy tyle co połączyć dwa ciągi, jeden z drugim.
-
Więc dla przykładu stwórzmy nowy string, nazwiemy go,
-
"awithb", i zdefiniujmy go jako a+b
*azb
-
Robię właśnie bardzo ciekawą rzecz.
-
Przywykłeś do używania znaku dodawania (+) z liczbami,
-
ale, ja zaraz dodam do siebie dwa stringi.
-
Spójrzmy jak to wygląda
-
Także, spójrzmy jak wygląda awithb.
-
awithb jes tylko zmienną.
-
Co sie stało?
-
Miałem a, czyli "My first string," i b, czyli 'Another test string that i have defined'
-
Gdy wpisałem a+b, program wziął a, "My first test string,"
-
i dodał b do jego końca!
-
i zespolił b z a -- zespolić to tylko mądre słowo znaczące
"złożyć je do kupy"
-
'Another test string that I have defined,'
*kolejny testowy string który zdefiniowałem
-
także, program scalił a-- myślę że mógłbym to wyświetlić, przyłączył b do końca a.
-
Możesz to zrobić inaczej, mógłbyś to wywołać,
-
bwitha, powiedzmy że to będzie b+a.
-
i teraz zobaczmy jak wyglada bwitha..
-
teraz jest odwrócony w drugą stronę.
-
a jest przyłączone do końca b.
-
Możesz robić ze stringami bardzo ciekawe rzeczy:
-
jeżeli zrobiliśmy... masthstring+expressionstring
-
nie będę tworzył dla tego zmiennej, zobaczę tylko co się stanie jak spróbuję znaleźć wartość...
-
mathstring+expressionstring
-
teraz, zasadniczo mam te dwa stringi dodane do siebie
-
i ten string znalazł się na końcu tego,
-
widzicie to tutaj, efekt wygląda trochę dziwacznie
-
ale to string! Wszystko pomiędzy tymi znakami, wszystko pomiędzy podwójnymi uszami
-
jest pokazywane jako znaki. To są tylko znaki.
-
Jest ...
-
innych rzeczy które możemy robić ze stringami, nie zamierzam wam ich wszystkich przedstawiać.
-
Ale jeśli mowa o stringach to to mamy do nich cały arsenał funkcji
-
i jeżeli pracujesz w zintegrowanym środowisku programistycznym (IDE), często podpowie ci ono,
-
jakie funkcje możesz wykorzystać.
-
Na przykład,
-
możesz chcieć rozdzielić -split(), gdybyś chciał liste wszystkich słów w tym stringu.
-
Więc napisze program, w którym wezmę string który mam w "b"
-
i pokaże każde ze słów jako oddzielny element listy.
-
Więc, mogę teraz wpisać b kropka (b.) i wywołać jedną z metod dla b
-
będziemy przerabiali dużo więcej metod i elementów programowania obiektowego (OOP),
-
ale możemy pojmować b jako obiekt tekstowy, i ma on wtedy swoje własne metody i można wykonywać na nim operacje.
-
Jak na dziś możemy tylko powiedzieć,
-
"O, jeżeli chce podzielić b na kawałki, mogę użyć metody split()."
-
Więc gdy mówię podzielić, mam na myśli odseparować od siebie części danego string'a.
-
zrobić z niego listę przecinając go gdziekolwiek widzimy spację.
-
Więc, zobaczmy co otrzymamy gdy to wykonamy.
-
Zauważ : wziąłem ten string, "Another test string that i have defined"
-
pociął string na każdej spacji
-
i pokazał jego części w formie listy.
-
Może to być przydatne przy przetwarzaniu stringów.
-
Ale musicie wiedzieć, że znakiem który przedziela ciąg nie musi być spacja,
-
możesz powiedzieć "b.split() i powiedzmy przedziel, gdziekolwiek będzie 't' "
-
możesz dzielić na "t" i to da jakieś dziwnie wyglądające efekty...
-
Zauważ: za każdym razem gdy pojawiała się w tekście litera 't', program rozdzielał go,
-
i to co było po obu stronach ' t' zostało umieszczone jako oddzielne elementy na liście.
-
Bardzo interesującą rzeczą jest to, że możesz wyszukiwać gdzie dany znak jest wewnątrz ciągu.
-
Więc przykładowo przywołajmy math_string, i
-
chce znaleźć gwiazdkę. (kolejne słowo z wymówieniem którego mam problem.)
-
Więc find() -funkcja oznaczająca "znajdź" - gwiazdkę. Powiedz mi który znak jest gwiazdką (o ile którykolwiek nią jest).
-
Mówi on nam, że trzeci znak jest gwiazdką.
-
Sprawdźmy to.
-
Więc to jest zerowy znak- początek - tak jest przyjęte w większości
-
programów. Zerowy znak, pierwszy znak, drugi znak, trzeci znak...
-
...to gwiazdka.
-
Jeżeli chciałbyś znaleźć '3' i gorąco zachęcam do takiego eksperymentowania,
-
find() 3 ! To tutaj zerowy znak.
-
Teraz, są jeszcze inne funkcje. Możesz zamienić znaki za pomocą replace() . Możesz powiedzieć,
-
"O, zamieńmy wszystkie 'c' ," i możesz sprawdzić w książkach,
-
albo po prostu poszukać w sieci i normalnie znaleźć wszystkie biblioteki dotyczące Python'owskich stringów.
-
Jeżeli masz I.D.E. , zasugeruje ci ono co możesz zrobić ze stringami
*I.D.E. - zintegrowane środowisko programistyczne
-
i jak to zrobić.
-
Ale powiedzmy że w miejsce każdego 'i' w stringu c,chcemy wstawić 'o'.
-
Zobaczmy co otrzymamy.
-
Jak widzicie, to był "This is Sal's string",
-
i zastąpiliśmy każde ''i' , za pomocą 'o'. Chce żeby to było jasne; nie zmieniliśmy stringu c!
-
Program stworzył kopię c, z 'i' zastąpionymi, 'o'.
-
Efektem jest "Thos os Sal's strong."
-
(brzmi jak jakiś nordycki język.)
-
I żeby było jasne, c się nie zmieniło.
-
Ale gdybym powiedział c = c.replace('i','o')
-
to c by się zmieniło na "Thos os Sal's strong"
-
Teraz ostatnią już rzeczą którą chciałbym wam pokazać jest bardzo magiczna funkcja (przynajmniej z mojego punktu widzenia).
-
I jest to funkcja eval() .
-
I istnieje ona w językach interpretowanych takich jak Python (występuje również w JavaScripcie)
-
I co jest naprawdę fajne, to to że ta funkcja potrafi policzyć wartość stringu. Może pokazywać string,
-
możesz to traktować jako string przez chwile, i możesz go zbudować, żebyś mógł, na przykład,
-
mieć program który pisze kolejny program wewnątrz stringu i potem oblicza jego wartość.
-
To powinno cię trochę, skłonić do filozoficznych myśli.
-
Więc powiedzmy math_string to tylko ciąg znaków.
-
Ale jeśli powiem eval(math_sting) interpreter obliczy wartość tego co jest w środku.
-
Więc zasadniczo traktuje to jako wyrażenie.
-
I dostaje 11, wiec program wziął math_string i mówi,
-
"Okej, teraz potraktuje to jako program,"
-
więc mamy "3+42 ", kolejność działań, robi 42 jako pierwsze i to jest 8
-
3+8 to 11.
-
I możesz robić jeszcze fajniejsze rzeczy!
-
Możesz wpisać "eval()" ,pomyślmy...,
"math_string ".
-
i dodajmy do math_string znak, znak '1'.
-
I zobaczmy co otrzymamy.
-
Otrzymaliśmy 87, co on zrobił?
-
Więc, to co zrobił to,
-
math_string to jest to, ale jeśli dodamy do niego 1,
-
wyglądałby tak [3+4*21], 2. stałaby sie 21.,
-
doczepiamy 1 na końcu stringu. Więc otrzymujemy 4*21 to się równa 84, a po zsumowaniu z 3. otrzymujemy 87.
-
Możemy robić różne rzeczy, obliczmy teraz wartość expression_string ,
-
dlatego go takim ustanowiłem.
-
eval(expression_string)
-
Bardzo fajna zabawa, mógłbym to robić całymi dniami!
-
eval(expression_string)
-
Pamiętaj, expression_string to tylko string, ale gdy obliczasz jego wartość,
-
Możesz chcieć zatrzymać i pomyśleć o tym co otrzymasz.
-
Więc sprawdźmy jego wartość.
-
Dostałem całe to szaleństwo! Skąd to się wzięło?
-
Odpowiedź jest prosta : w stringu były dwa znaki 'a' i 'b'
-
ale gdy obliczamy jego wartość, w tym kontekście 'a' i 'b' reprezentują zmienne typu string.
-
Więc jeśli badasz wartość c, to program odpowie ci
"Okej, a to string 'My first text string', "
-
dołącza tę spację na końcu, więc,
-
"My first test string" i potem mamy spację,
-
a potem dodaje b na samym końcu a więc "Another test string I have defined,"
-
dalej dołącza...
-
dołącza...
-
SPACJA TYGRYS
-
i potem mamy spację i tygrysa
-
Więc zostawiam was z tyn...
-
Jak możecie sobie wyobrazić stringi są,
-
super super duper
-
potężnym narzędziem podczas robienia przeróżnych aplikacji.
-
To co wam pokazałem to tylko malutka część, tego co można z nimi robić.
-
Zachęcam was zatem do eksperymentów.
-
Not Synced
Mogę więc wywołać metodę split(), ale tu pojawia się pytanie na czym chciałbym je podzielić.
-
Not Synced
dużo, dużo, dużo, dużo
-
Not Synced
super
-
Not Synced
super super