• Nie Znaleziono Wyników

Wielokrotnie widziałeś już instrukcję drukowania. Co się stanie, jeśli użyjesz go więcej niż raz? Wypróbuj ten krótki program:

N/A
N/A
Protected

Academic year: 2022

Share "Wielokrotnie widziałeś już instrukcję drukowania. Co się stanie, jeśli użyjesz go więcej niż raz? Wypróbuj ten krótki program:"

Copied!
17
0
0

Pełen tekst

(1)

Formatowanie wyświetlania i ciągi znaków

Waaaayyyy w części 1 dowiedziałeś się o instrukcji print. To było pierwsze polecenie, które kiedykolwiek użyłeś w Pythonie. Widziałeś również (w części 5), że możesz umieścić przecinek na końcu instrukcji print, aby Python kontynuował drukowanie następnej rzeczy w tej samej linii. (Przynajmniej w Pythonie 2. Nie w Pythonie 3). Użyłeś tego do monitowania o raw_input (), dopóki nie nauczyłeś się skrótu do wprowadzenia znaku zachęty w funkcji raw_input (). W tej części przyjrzymy się formatowaniu wydruku - sposobom, aby wygląd programu wyglądał tak, jak tego chcesz. Przyjrzymy się takim rzeczom

■ Uruchamianie nowych linii (i kiedy powinieneś to robić)

■ Wycinanie elementów w poziomie (i układanie elementów w kolumnach)

■ Drukowanie zmiennych w środku łańcucha

■ Formatowanie liczb w formacie całkowitoliczbowym, dziesiętnym lub E-notacji oraz ustawianie liczby miejsc dziesiętnych, które powinny mieć. Dowiesz się również o niektórych wbudowanych w Python metodach pracy z ciągami znaków. Te metody mogą robić takie rzeczy jak

■ Dzielenie ciągów na mniejsze części

■ Łącząc ze sobą struny

■ Wyszukiwanie ciągów znaków

■ Wyszukiwanie w łańcuchach

■ Usuwanie części strun

■ Zmiana przypadku (wielkie i małe litery)

Wszystkie te rzeczy będą przydatne w programach w trybie tekstowym (nie GUI), a większość z nich znajdzie się również w GUI i programach do gier. Istnieje więcej Pythona, który może zrobić z formatowaniem wydruku, ale to wszystko, czego potrzebujesz do 99 procent twoich programów.

Nowe linie

Wielokrotnie widziałeś już instrukcję drukowania. Co się stanie, jeśli użyjesz go więcej niż raz?

Wypróbuj ten krótki program:

print "Hi"

print "There"

Po uruchomieniu wynik powinien wyglądać następująco:

>>> =================== RESTART ===================

>>>

Hi There

Dlaczego te dwie rzeczy drukowane były na różnych liniach? Dlaczego dane wyjściowe nie wyglądały tak:

(2)

HiThere

Jeśli nie powiesz inaczej, Python rozpocznie każdy wydruk na nowej linii. Po Hi, Python przesuwa się w dół o jedną linię i wraca do pierwszej kolumny, aby ją wydrukować. Python wstawia znak nowej linii między dwoma słowami. Nowa linia przypomina naciśnięcie klawisza Enter w edytorze tekstu.

Myśląc jak programista

Pamiętasz z powrotem w części 5, że dowiedziałeś się o CR i LF (powrót karetki i posuw linii) do oznaczania końca linii tekstu? I pamiętaj, jak powiedziałem, że niektóre systemy używają jednego lub drugiego lub obu? Nowa linia to ogólna nazwa znacznika końca linii w dowolnym systemie. W systemie Windows nowa linia = CR + LF. W Linuksie, nowej linii = LF iw Mac OS X, nowa linia = CR. W ten sposób nie musisz się martwić o to, co

system, na którym jesteś. Po prostu umieść nową linię w dowolnym miejscu, gdzie chcesz rozpocząć nową linię.

Wyświetlanie i przecinek

Instrukcja print automatycznie umieszcza nową linię na końcu tego, co drukuje, chyba że jej nie powiesz. A jak tego nie chcesz? Dodając przecinek

print 'Hi', print 'There'

>>> =================== RESTART ===================

>>>

Hi There

(Ponownie, to nie zadziała w Pythonie 3). Zauważ, że między Hi a There jest spacja. Gdy używasz przecinka, aby uniemożliwić Pythonowi drukowanie nowej linii, zamiast tego drukuje spację. Jeśli chcesz wydrukować dwie rzeczy razem bez spacji, możesz użyć konkatenacji, które widziałeś wcześniej:

print 'Hi' + 'There'

>>> =================== RESTART ===================

>>>

HiThere

Pamiętaj, że konkatenacja przypomina dodawanie ciągów, ale ma specjalną nazwę, ponieważ

„dodawanie” dotyczy tylko liczb.

Dodawanie naszych nowych linii

Co jeśli chcesz dodać własne znaki nowej linii? Na przykład, jeśli chcesz uzyskać dodatkowy rząd miejsca między Hi a There? Najprostszym sposobem jest dodanie dodatkowej instrukcji wyświetlania:

print "Hi"

print

print "There"

(3)

When you run it, you’ll get this:

>>> =================== RESTART ===================

>>>

Hi There

Specjalne kody drukowania

Istnieje inny sposób dodawania znaków nowej linii. Python ma specjalne kody, które możesz dodawać do ciągów, aby drukować je w inny sposób. Te specjalne kody drukowania zaczynają się od znaku () Kod nowej linii to n. Wypróbuj to w trybie interaktywnym:

>>> print "Hello World"

Hello World

>>> print "Hello \nWorld"

Hello World

\n sprawiło, że dwa słowa „Hello” i „World” drukowane są na różnych liniach, ponieważ między nimi dodano nową linię.

Odstępy poziome - tabulatory

Właśnie widziałeś, jak kontrolować odstępy w pionie (dodając znaki nowej linii lub używając przecinków, aby zapobiec wyświetlaniu znaków nowej linii). Teraz przyjrzymy się, jak kontrolować odstępy między obiektami na ekranie, poziomo, za pomocą zakładek. Karty są przydatne do układania elementów w kolumnach. Aby zrozumieć, w jaki sposób działają tabulatory, pomyśl, że każda linia na ekranie jest podzielona na bloki, a każdy blok ma ten sam rozmiar. Powiedzmy, że każdy blok ma osiem znaków szerokości. Po włożeniu karty przechodzisz na początek następnego blok. Najlepszym sposobem sprawdzenia, jak to działa, jest wypróbowanie. Specjalny kod dla karty to, więc spróbuj tego w trybie interaktywnym:

>>> print 'ABC\tXYZ' ABC XYZ

Zauważ, że XYZ jest kilka znaków od ABC. W rzeczywistości XYZ to dokładnie osiem znaków od początku linii. To dlatego, że rozmiar bloku wynosi osiem. Innym sposobem, aby to powiedzieć, jest zatrzymanie tabulacji co osiem znaków. Oto przykład niektórych różnych instrukcji drukowania, z pewnymi cieniami dodanymi, aby pokazać, gdzie są tabulatory:

(4)

Możesz myśleć o ekranie (lub każdej linii) jako ułożonym w blokach po osiem spacji. Zauważ, że ponieważ sekwencja ABC wydłuża się, XYZ pozostaje w tym samym miejscu. Polecenie \t mówi Pythonowi aby uruchamił XYZ na następnym tabulatorze lub w następnym dostępnym bloku. Ale gdy sekwencja ABC staje się wystarczająco duża, aby wypełnić pierwszy blok, Python przesuwa XYZ do następnego tabulatora. Karty są przydatne do układania elementów w kolumnach, aby wszystko się układało. Użyjmy tego, a także tego, co wiemy o pętlach, aby wydrukować tabelę kwadratów i kostek.

Otwórz nowe okno w IDLE i wpisz krótki program z następującej listy. Zapisz go i uruchom. (Nazwałem mój squbes.py, skrót od „kwadraty i kostki”)

Listing 21.1 Program do drukowania kwadratów i kostek print "Liczba\tKwadrat \tSześcian"

for i in range (1, 11):

print i, '\t', i**2, '\t', i**3

Kiedy go uruchomisz, powinieneś zobaczyć ładnie uporządkowane dane wyjściowe, takie jak poniżej:

>>> ====================== RESTART ======================

>>>

Liczba Kwadrat Sześcian

1 1 1

2 4 8

3 9 27

4 16 64

5 25 125

6 36 216

7 49 343

8 64 512

9 81 729

10 100 1000

Jak wydrukować odwrotny ukośnik?

(5)

Ponieważ znak ukośnika odwrotnego () jest używany do specjalnych kodów drukowania, w jaki sposób powiesz Pythonowi, kiedy chcesz wydrukować znak \ zamiast używać go jako części kodu? Sztuka polega na tym, żeby połączyć dwa z nich:

>>> wydrukuj 'hi \\ there' hi\there

Pierwszy \ mówi Pythonowi, że nadchodzi coś specjalnego, a drugi mówi Pythonowi, co jest wyjątkowe:

znak \.

Kiedy używasz dwóch odwrotnych ukośników do wydrukowania znaku ukośnika odwrotnego, pierwszy ukośnik odwrotny nazywany jest znakiem ucieczki. Mówimy, że pierwszy ukośnik odwraca drugi, tak że drugi ukośnik odwrotny jest traktowany jak normalny znak, a nie jako znak specjalny.

Wstawianie zmiennych do łańcuchów

Do tej pory, kiedy chciałeś umieścić zmienną w środku ciągu, zrobiłeś coś takiego:

name = 'Jan Sandek'

print 'Moje imię to', name, 'i piszę ten tekst.' Gdybyśmy uruchomili ten kod, otrzymalibyśmy to:

Moje imię to Jan Sandek i piszę ten tekst

Ale istnieje inny sposób wstawiania zmiennych do łańcuchów, co daje większą kontrolę nad tym, jak będą wyglądać, zwłaszcza liczby. Możesz użyć ciągów formatujących, które używają znaku procentu (%). Powiedzmy, że chcesz wstawić zmienną łańcuchową w środku instrukcji drukowania, tak jak to zrobiliśmy. Sposób, w jaki można to zrobić za pomocą łańcuchów formatowania, wygląda następująco:

name = 'Jan Sandek'

print 'Mam na imię% s i napisałem% ten tekst

Znak% jest używany w dwóch miejscach. Jest używany w środku napisu, aby powiedzieć, gdzie pójdzie zmienna. Następnie jest ponownie używane po łańcuchu, aby powiedzieć Pythonowi, że zmienna, którą chcesz wstawić w ciągu, będzie następna. % S oznacza, że jest to zmienna łańcuchowa, którą chcesz wstawić. Dla liczby całkowitej użyjesz% i; dla pływaka użyłbyś% f. Oto kilka przykładów:

age = 13

print 'Mam %lat.' % age

Po uruchomieniu otrzymasz następujące informacje:

Mam13 lat.

Oto kolejny przykład:

średnia = 75,6

print „Średnia na naszym teście matematycznym wynosiła% f procent.” % średniej Po uruchomieniu otrzymasz następujące informacje:

Średnia na naszym teście matematycznym wyniosła 75.600000 procent.

(6)

Nazwy %s,%f i %i nazywane są fomatami łańcuchów i są rodzajem kodu określającego wygląd zmiennej.

Istnieje kilka innych rzeczy, które możesz dodać do ciągów formatowania, aby liczby były drukowane dokładnie tak, jak chcesz. Istnieje również kilka różnych ciągów formatów, których można użyć do uzyskania takich rzeczy jak notacja elektroniczna. Przyjrzymy się tym w następnych kilku sekcjach.

Formatowanie liczb

Kiedy wyświetlamy liczby, chcielibyśmy mieć kontrolę nad tym, jak wyglądają:

■ Ile miejsc dziesiętnych wyświetlają

■ Czy używać zwykłej lub e-notacji

■ Czy dodać zera wiodące czy końcowe

■ Czy wyświetlać znaki + lub - przed liczbami

Dzięki łańcuchom formatowania Python daje nam elastyczność, której potrzebujemy, aby zrobić to wszystko i wiele więcej! Na przykład, jeśli korzystasz z programu, który poinformował Cię o prognozie pogody, co wolisz zobaczyć:

Dzisiejszy Wysoki: 72,45672132, Niski 45,4985756 lub

Dzisiejszy Wysoki: 72, Niski: 45

Uzyskanie prawidłowych liczb jest ważne dla wielu programów.

Zacznijmy od przykładu. Załóżmy, że chcemy wydrukować liczbę dziesiętną z dokładnością do dwóch miejsc po przecinku. Wypróbuj to w trybie interaktywnym:

>>> dec_number = 12.3456

>>> print 'Jest %.2f stopni dzisiaj.' % dec_number Jest 12.35 stopni dzisia

W środku instrukcji drukowania znajduje się nasz ciąg formatowania. Ale zamiast używać tylko %f, tym razem użyliśmy %2f. To mówi Pythonowi, aby pokazywał dwie cyfry po miejscu dziesiętnym, z formatem zmiennoprzecinkowym. (Zwróć uwagę, że Python był na tyle sprytny, by poprawnie zaokrąglić liczbę do dwóch miejsc po przecinku, zamiast po prostu odciąć dodatkowe cyfry).

Po łańcuchu drugi znak % mówi Pythonowi, że następny numer ma zostać wydrukowany. Numer jest drukowany z formatowaniem opisanym w ciągu formatowania. Jeszcze kilka przykładów uczyni to jaśniejszym

Liczby całkowite: %d lub %i

Aby wydrukować coś jako liczbę całkowitą, użyj ciągu formatującego% d lub% i (nie wiem, dlaczego są dwa, ale możesz użyć jednego z nich):

>>> liczba = 12.67

>>> print '%i' % liczba 12

(7)

Zauważ, że tym razem liczba nie została zaokrąglona. Została obcięta (co oznacza „odcięte”). Gdyby było zaokrąglone, zobaczylibyśmy 13 zamiast 12. Gdy używasz formatowania liczb całkowitych, liczba jest obcinana, a gdy używasz formatowania zmiennoprzecinkowego, liczba jest zaokrąglana. Należy zwrócić uwagę na trzy rzeczy:

■ Nie musisz mieć żadnego innego tekstu w łańcuchu - możesz mieć łańcuch formatu sam.

■ Mimo że nasza liczba był zmiennoprzecinkowa, wyświetliliśmy ją jako liczbę całkowitą. Możesz to zrobić za pomocą łańcuchów formatowania.

■ Python skrócił wartość do następnej najniższej liczby całkowitej. Ale różni się to od funkcji int () (którą widziałeś w rozdziale 4), ponieważ łańcuchy formatowania nie tworzą nowej wartości, takiej jak int (), ale zmieniają tylko sposób wyświetlania wartości. Właśnie teraz wydrukowaliśmy 12.67 w formacie całkowitym, a Python wydrukowano 12. Jednak wartość numeru zmiennej nie została zmieniona.

Sprawdź to i zobacz:

>>> print liczba 12.67

Wartość liczby się nie zmieniła. Właśnie sprawiliśmy, że drukuje się inaczej, używając ciągu formatującego.

Liczby zmiennoprzecinkowe: %f lub %F

W przypadku liczb dziesiętnych można użyć wielkiej lub małej litery f w ciągu formatowania (%f lub

%F):

>>> number = 12.3456

>>> print '%f' % number 12.345600

Jeśli użyjesz samo %f , liczba wyświetli się z sześcioma miejscami po przecinku. Jeśli dodasz .n przed f, gdzie n jest dowolną liczbą całkowitą, zaokrąglisz liczbę do tego miejsca po przecinku:

>>> print '%.2F' % number 12.35

Możesz zobaczyć, jak zaokrąglono liczbę 12.3456 do dwóch miejsc po przecinku: 12.35. Jeśli określisz więcej miejsc po przecinku niż w liczbie, Python wstawi (wypełni) liczbę zerami:

>>> print '%.8f' % number 12.34560000

Tutaj liczba miała tylko cztery miejsca po przecinku, ale poprosiliśmy o osiem, więc pozostałe cztery wypełniono zerami. Jeśli liczba jest ujemna,% f zawsze wyświetla znak -. Jeśli chcesz, aby numer zawsze wyświetlał znak, nawet jeśli jest pozytywny, użyj znaku + zaraz po znaku% (jest to przydatne do ustawiania list liczb dodatnich i ujemnych):

>>> print '% + f'% liczba +12.34560

(8)

Jeśli chcesz, aby lista dodatnich i ujemnych liczb była wyrównana, ale nie chcesz widzieć znaku + na liczbach dodatnich, użyj spacji zamiast znaku +, zaraz po%:

>>> number2 = -98.76

>>> print '% .2f' % number2 -98.76

>>> print '% .2f' % number 12.35

Zauważ, że na wyjściu znajduje się spacja przed 12, tak że 12 i 98 ustawiają się jeden pod drugim, nawet jeśli jeden ma znak, a drugi nie.

E-notacja: %e i %E

Kiedy rozmawialiśmy o e-notacji (w części 3), obiecałem, że pokażę ci, jak drukować liczby za pomocą e-notacji. Cóż, tutaj jest:

>>> number = 12.3456

>>> print '%e' % number 1.234560e+01

Ciąg formatu %e jest używany do drukowania notacji elektronicznej. Zawsze drukuje sześć miejsc po przecinku, chyba że powiesz inaczej. Możesz wydrukować więcej lub mniej miejsc po przecinku, używając .n po%, tak jak możesz z float

>>> number = 12.3456

>>> print '%.3e' % number 1.235e+01

>>> print '%.8e' % number 1.23456000e+01

%.3e zaokrąglił do trzech miejsc po przecinku, a%.8e dodał kilka zer, aby uzyskać dodatkowe cyfry.

Możesz użyć małej lub dużej litery e, a wyjście użyje tego samego przypadku, którego użyłeś w ciągu formatowania:

>>> print '%E' % number 1.234560E+01

Automatyczne float lub e-notacja: %g i %G

Jeśli chcesz, aby Python automatycznie wybierał dla ciebie notację float lub notację E, użyj ciągu formatującego %g. Ponownie, jeśli użyjesz wielkich liter, na wyjściu otrzymasz wielką literę E:

>>> number1 = 12.3

>>> number2 = 456712345.6

>>> print '%g' % number1

(9)

12.3

>>> print '%g' % number2 4.56712e+08

Czy zauważyłeś, że Python automatycznie wybrał notację E dla dużej liczby i regularnej notacji zmiennoprzecinkowej dla mniejszej liczby?

Jak wyświetlić znak procentu?

Być może zastanawiasz się, ponieważ znak procentu (%) jest znakiem specjalnym dla łańcuchów formatowania, w jaki sposób tworzysz wydruk znaku %? Czasami Python jest na tyle sprytny, by dowiedzieć się, kiedy używasz znaku %, aby rozpocząć łańcuch formatowania i kiedy chcesz go wydrukować. Spróbuj tego:

>>> print 'Mam 90% na teście z matmy!' Mam 90% na teście z matmy!

W tym przypadku nie było drugiego % poza łańcuchem i nie było żadnej zmiennej do sformatowania, więc Python założył, że % był po prostu kolejnym znakiem w ciągu. Ale jeśli drukujesz za pomocą łańcuchów formatów i chcesz wydrukować znak procentu, używasz dwóch znaków procentu, tak jak użyłeś dwóch odwrotnych ukośników, aby wydrukować odwrotny ukośnik. Mówimy, że pierwszy znak procentu ucieka przed drugim znakiem procentu.

>>> math = 75.4

>>> print 'Mam %.1f%% na teście ' % matmy Mam75.4% na teście z matmy

Pierwsze% uruchamia ciąg formatujący. Dwa %% razem mówią Pythonowi, że faktycznie chcesz wydrukować znak%. Następnie masz% poza cudzysłowami, które mówią Pythonowi, że zmienna, którą chcesz wydrukować, będzie następna.

Więcej niż jeden format ciągu

Co zrobić, jeśli chcesz umieścić więcej niż jeden ciąg formatu w pojedynczej instrukcji drukowania? Oto jak to zrobić

>>> math = 75.4

>>> science = 82.1

>>> print 'Mam %.1f na matmie and %.1f w nauce' % (matma, nauka)

Możesz umieścić dowolną liczbę łańcuchów formatowania w instrukcji print, a następnie krotkę zmiennych, które chcesz wydrukować. Pamiętaj, że krotka jest jak lista, ale używa okrągłych nawiasów zamiast kwadratowych, a krotka jest niezmienna. Jest to jeden przypadek, w którym Python jest wybredny - musisz użyć krotki; nie możesz użyć listy. Jedynym wyjątkiem jest sytuacja, w której masz tylko jedną zmienną do sformatowania; to nie musi być w krotce. (Widziałeś to w większości naszych przykładów). Upewnij się, że liczba ciągów formatów (w cudzysłowach) i liczba zmiennych (poza cudzysłowami) są zgodne lub pojawi się komunikat o błędzie

Przechowywanie sformatowanych liczb

(10)

Czasami nie chcesz drukować sformatowanego numeru od razu, ale raczej przechowuj go w postaci łańcucha, aby użyć go później. To łatwe. Zamiast go drukować, po prostu przypisz go do zmiennej, takiej jak ta

>>> my_string = '%.2f' % 12.3456

>>> print my_string 12.35

>>> print 'Odpowiedź', my_string Odpowiedź to 12.35

Zamiast bezpośrednio drukować sformatowaną liczbę, przypisaliśmy ją do zmiennej my_string.

Następnie połączyliśmy my_string z innym tekstem i wydrukowaliśmy nasze zdanie. Przechowywanie sformatowanego numeru jako ciągu znaków jest bardzo przydatne dla GUI i innych programów graficznych, takich jak gry. Gdy masz już nazwę zmiennej dla sformatowanego ciągu, możesz ją wyświetlić w dowolny sposób: w polu tekstowym, przycisku, oknie dialogowym lub ekranie gry.

Formatowanie, nowy sposób

Składnia formatowania łańcuchów, o których właśnie dowiedziałeś się o pracach we wszystkich wersjach Pythona. Ale istnieje inny sposób robienia tego samego w Pythonie 2.6 i nowszych wersjach.

Ponieważ używamy Pythona 2.7 w tej książce, myślałem, że przyjrzymy się także nowej drodze. Możesz to zobaczyć w kodzie Pythona, więc w ten sposób przynajmniej wiesz, co to znaczy. Możesz zdecydować, która składnia - stara lub nowa - chcesz użyć do formatowania łańcuchów.

Metoda format()

Łańcuchy Pythona (od wersji) mają metodę o nazwie format(). Działa to bardzo podobnie do formatu łańcucha % , które widziałeś powyżej. W rzeczywistości specyfikatory formatu - f, g, e itd. - są takie same. Po prostu używasz ich trochę inaczej. Najlepszym sposobem na to jest przykład. Oto stary sposób:

print ' Mam %.1f na matmie and %.1f w nauce' % (matma, nauka) A oto nowy sposób:

print 'Mam {0:.1f} z matmy, {1:.1f} w nauce'.format(matma, nauka)

W nowy sposób, zamiast uruchamiać specyfikator formatu z %, umieszczasz go w nawiasach klamrowych. 0 lub 1 mówi Pythonowi, która zmienna z krotki zmiennych zostanie sformatowana.

Pamiętaj, że liczenie Pythona rozpoczyna się od 0, więc pierwszy element w krotce (zmienna matematyka) ma indeks 0, a drugi (zmienna nauka) ma indeks 1. Następnie używasz .1f, podobnie jak w przypadku starej metody. To wszystko. Możesz zapisać sformatowany ciąg znaków w zmiennej, tak jak w starym,% formatowaniu:

distance = 149597870700

myString = 'Słońce jest {0:.4e} metrów od ziemi'.format(distance)

A ponieważ nie używasz znaku% do oznaczania ciągów formatów, nie musisz robić niczego specjalnego, jeśli chcesz wydrukować znak%

>>> print 'Mam {0:.1f}% z matmy'.format(matma)

(11)

Mam 87% z matmy Łańcuchy ”n” rzeczy

Kiedy po raz pierwszy dowiedziałeś się o łańcuchach, zauważyłeś, że możesz połączyć dwa z nich znakiem +, tak jak poniżej:

>>> print 'kot + 'pies' kotpies

Teraz znajdziesz więcej rzeczy, które możesz zrobić za pomocą łańcuchów. Ciągi w Pythonie są naprawdę obiektami (zobacz, wszystko jest obiektem…) i mają swoje własne metody do robienia rzeczy takich jak wyszukiwanie, dzielenie i łączenie. Są one znane jako metody łańcuchowe. Metoda format (), którą właśnie widziałeś, jest jedną z metod łańcuchowych.

Dzielenie łańcuchów

Czasami trzeba podzielić długi ciąg na kilka mniejszych. Zwykle chcesz to zrobić w określonych punktach łańcucha, np. Za każdym razem, gdy pojawia się określony znak. Na przykład powszechnym sposobem przechowywania danych w pliku tekstowym jest oddzielenie ich przecinkiem. Więc możesz mieć listę nazw, która wygląda tak:

>>> name_string = 'Sam,Brad,Alex,Cameron,Toby,Gwen,Jenn,Connor'

Załóżmy, że chcesz umieścić te nazwy na liście, a każdy element będzie jedną nazwą. Musisz podzielić ten ciąg wszędzie, gdzie jest przecinek. Metoda Pythona do tego jest nazywana split() i działa w ten sposób:

>>> names = name_string.split(',')

Mówisz, jakiego znakui użyć jako znacznika podziału, i wyświetlasz z powrotem listę, która jest oryginalnym łańcuchem podzielonym na części. Jeśli wydrukujemy dane wyjściowe z tego przykładu, jeden duży ciąg nazw zostanie podzielony na pojedyncze elementy na liście

>>> print names

['Sam','Brad','Alex','Cameron','Toby','Gwen','Jenn','Connor']

>>> for name in names:

print name Sam Brad Alex Cameron Toby Gwen Jenn Connor

(12)

Możesz mieć więcej niż jedną postać jako znacznik podziału. Na przykład możesz użyć „Toby” jako znacznika podziału, a otrzymasz następującą listę:

>>> parts = name_string.split('Toby,')

>>> print parts

['Sam,Brad,Alex,Cameron', 'Gwen,Jenn,Connor']

>>> for part in parts:

print part

Sam,Brad,Alex,Cameron Gwen,Jenn,Connor

Tym razem ciąg został podzielony na dwie części: wszystkie rzeczy po jednej stronie „Toby” i wszystkie rzeczy po drugiej stronie „Toby”. Zauważ, że „Toby” nie pojawia się na liście, ponieważ znacznik podziału zostaje odrzucony. Jest jeszcze jedna rzecz do poznania. Jeśli nie podasz Pythonowi żadnego znacznika podziału, to podzielisz ten ciąg na dowolne białe znaki:

>>> names = name_string.split()

Białe znaki oznaczają dowolne spacje, znaki tabulacji lub znaki nowej linii.

Łączenie stringów

Właśnie widziałeś, jak podzielić strunę na mniejsze kawałki. Jak połączyć dwa lub więcej ciągów, aby utworzyć jeden większy ciąg? Już w części 2 widziałeś, że możesz łączyć ciągi za pomocą operatora +.

To tak, jakby dodać dwa ciągi razem, z tym wyjątkiem, że nazywa się to łączeniem. Istnieje inny sposób łączenia ciągów. Możesz użyć funkcji join(). Mówisz, jakie łańcuchy chcesz dołączyć i jakie znaki (jeśli w ogóle) chcesz wstawić między częściami, gdy są połączone. Jest to zasadniczo przeciwieństwo split().

Oto przykład w trybie interaktywnym:

>>> word_list = ['Moje', 'imię', 'to', 'Jan']

>>> long_string = ' '.join(word_list)

>>> long_string 'Moje imię to Jan'

Przyznaję, że wygląda to trochę dziwnie. Znaki, które będą przechodzić między każdym fragmentem połączonego łańcucha, przechodzą przed join(). W tym przypadku potrzebowaliśmy spacji między każdym słowem, więc użyliśmy ' ' .join (). To różni się od tego, czego oczekuje większość ludzi, ale tak właśnie działa metoda Pythona join(). Poniższy przykład sprawia, że brzmię jak pies:

>>> long_string = 'WOOF WOOF' .join (word_list)

>>> long_string

„Nazwa WOOF WOOF WOOF WOOF to WOOF WOOF Jan”

Innymi słowy, łańcuch przed join () jest używany jako klej do trzymania innych łańcuchów razem.

Wyszukiwanie ciągów znaków

(13)

Załóżmy, że chcesz stworzyć program dla swojej mamy, który przyjmuje przepisy i wyświetla je w GUI.

Chcesz umieścić składniki w jednym miejscu, a instrukcje w innym. Wyobraźmy sobie, że przepis wygląda mniej więcej tak

Ciasto czekoladowe Składniki:

2 jajka

1/2 szklanki mąki

1 łyżeczka sody oczyszczonej 1 funt czekolady

Instrukcje:

Rozgrzej piekarnik do 250C

Wymieszaj wszystkie składniki razem Piecz przez 30 minut

Załóżmy, że linie receptury znajdują się na liście, a każda linia jest osobnym elementem na liście. Jak znaleźć sekcję „Instrukcje”? Python ma kilka metod, które ci pomogą.

Metoda startswith() informuje, czy ciąg rozpoczyna się od określonego znaku lub znaków. Przykład jest najłatwiejszym sposobem na pokazanie tego. Wypróbuj to w trybie interaktywnym:

>>> name = "Frankenstein"

>>> name.startswith('F') True

>>> name.startswith("Frank") True

>>> name.startswith("Flop") False

Nazwa Frankenstein zaczyna się od litery F, więc pierwsza była prawdziwa. Nazwa Frankenstein zaczyna się od liter Frank, więc druga była prawdziwa. Nazwa Frankenstein nie zaczyna się od Flopa, więc jedno było Fałszem. Ponieważ powraca metoda startswith ()

wartość True lub False, możesz użyć jej w porównaniach lub instrukcjach, takich jak to:

>>> if name.startswith („Frank”):

print "Czy mogę zadzwonić Frank?"

Istnieje podobna metoda o nazwie endswith(), która robi to, czego można się spodziewać:

(14)

>>> name = "Frankenstein"

>>> name.endswith('n') True

>>> name.endswith('stein') True

>>> name.endswith('stone') False

Wróćmy teraz do problemu… Gdybyśmy chcieli znaleźć początek sekcji „Instrukcje”, moglibyśmy zrobić coś takiego:

i = 0

while not lines[i].startswith("Instructions"):

i = i + 1

Ten kod będzie się zapętlał, dopóki nie znajdzie linii zaczynającej się od „Instrukcje”. Pamiętaj, że linie [i] oznaczają, że jest to indeks dla linii. Zaczniesz więc od linii [0] (pierwsza linia), następnie linii [1]

(druga linia) i tak dalej. Gdy zakończy się pętla while, będę równy indeksowi linii rozpoczynającej się od

„Instrukcje”, której szukamy.

Wyszukiwanie w dowolnym miejscu ciągu: in i index ()

Metody startswith() i endswith() sprawdzają się bardzo dobrze przy wyszukiwaniu pozycji na początku lub na końcu łańcucha. Ale co, jeśli chcesz znaleźć coś w środku łańcucha? Powiedzmy, że mieliśmy kilka ciągów znaków, które miały adresy uliczne, jak poniżej:

657 Maple Lane 47 Birch Street 95 Maple Drive

Może chcemy znaleźć wszystkie adresy z „Maple” w nich. Żaden z nich nie zaczyna się ani nie kończy

„Maple”, ale dwa z nich zawierają słowo Maple. Jak je znajdziesz? Właściwie to już widziałeś, jak to zrobić. Kiedy rozmawialiśmy o listach, zobaczyłeś, że możesz sprawdzić, czy dany element znajduje się na liście

if someItem in my_list:

print „Znalazłem!”

Użyliśmy słowa kluczowego, aby sprawdzić, czy dany element znajduje się na liście. Słowo kluczowe in działa również w przypadku łańcuchów. Ciąg jest w zasadzie listą znaków, więc możesz to zrobić:

>>> addr1 = '657 Maple Lane'

>>> if 'Maple' in addr1:

print "Ten adres ma 'Maple' w sobie."

(15)

Gdy szukasz mniejszego ciągu, takiego jak „Klon”, w większym ciągu, np. „657 Maple Lane”, mniejszy ciąg nazywany jest podciągiem.

Słowo kluczowe in mówi tylko, czy podciąg znajduje się gdzieś w sprawdzanym łańcuchu. Nie mówi ci, gdzie to jest. W tym celu potrzebujesz metody index(). Podobnie jak w przypadku list, index() mówi ci, gdzie w większym ciągu zaczyna się mniejszy ciąg. Oto przykład:

>>> addr1 = '657 Maple Lane'

>>> if 'Maple' in addr1:

position = addr1.index('Maple')

print "znaleziono 'Maple' pod indeksem", position

Słowo Maple zaczyna się w pozycji 4 napisu „657 Maple Lane”. Podobnie jak w przypadku list, indeksy (lub pozycje) liter w ciągu zaczynają się od 0, więc M ma indeks 4.

Zauważ, że zanim spróbowaliśmy użyć index(), najpierw sprawdziliśmy, czy podciąg „Maple” był w większym ciągu. To dlatego, że jeśli używasz indeksu (), a tego, czego szukasz, nie ma w ciągu, otrzymasz błąd. Sprawdzanie za pomocą pierwszego zapewnia, że nie wystąpi błąd. To samo robiliśmy z listami.

Usuwanie części stringa

Dość często będziesz chciał usunąć lub zdjąć część sznurka. Zwykle będziesz chciał zdjąć coś z końca, np. Znak nowej linii lub dodatkowe spacje. Python ma metodę łańcuchową o nazwie strip(), aby to zrobić. Po prostu powiesz to, co chcesz rozebrać, tak:

>>> name = 'Jan Sandek'

>>> short_name = name.strip('de')

>>> short_name 'Jan San'

W tym przypadku usunęliśmy „dek” z końca imienia. Gdyby na końcu nie było „dek”, nic by nie zostało rozebrane:

>>> name = 'Bart Simpson'

>>> short_name = name.strip('de')

>>> short_name 'Bart Simpson'

Jeśli nie powiesz strip(), co usunąć, usuniesz wszelkie białe znaki. Jak powiedzieliśmy wcześniej, zawiera spacje, tabulatory i znaki nowej linii. Więc gdybyśmy mieli dodatkowe przestrzenie do pozbycia się, moglibyśmy to zrobić:

(16)

>>> name = "Jan Sandek "

>>>> short_name = name.strip()

>>> short_name 'Jan Sandek'

Zauważ, że dodatkowe spacje po nazwisku zostały usunięte. Dobrą rzeczą jest to, że nie musisz informować strip(), ile spacji ma zostać usuniętych. Usunie wszystkie białe znaki na końcu łańcucha.

Zmiana wielkości liter

Chcę ci pokazać jeszcze dwie metody łancuchowe. Służą do zmiany wielkości liter z dużych na małe lub odwrotnie. Czasami chcesz porównać dwa ciągi, takie jak „Hello” i „hello”, i chcesz wiedzieć, czy mają te same litery, nawet jeśli wielkość nie jest taka sama. Jednym ze sposobów na to jest wykonanie wszystkich liter w obu łańcuchach małymi literami, a następnie porównanie. Python ma do tego metodę łańcuchową. Nazywa lower(). Wypróbuj to w trybie interaktywnym:

>>> string1 = "Hello"

>>> string2 = string1.lower()

>>> print string2 hello

Jest podobna metoda nazwana upper():

>>> string3 = string1.upper()

>>> print string3 HELLO

Możesz tworzyć kopie oryginalnych ciągów z małymi literami (lub wielkimi literami), a następnie porównać kopie, aby sprawdzić, czy są takie same, ignorując wielkość liter.

Czego się nauczyłeś?

■ Jak dostosować odstępy w pionie (dodawanie lub usuwanie znaków nowej linii)

■ Jak ustawić odstępy poziome za pomocą zakładek

■ Jak wyświetlać różne formaty liczb za pomocą łańcuchów formatowania

■ Dwa sposoby używania ciągów formatujących - znak% i metoda format ()

■ Jak podzielić łańcuchy na split () i połączyć je za pomocą join ()

■ Jak przeszukiwać ciągi za pomocą startswith (), endswith (), in i index ()

■ Jak usunąć rzeczy z końca łańcucha za pomocą paska ()

■ Jak tworzyć ciągi znaków wielkimi literami lub wszystkimi małymi literami z górnymi () i niższymi ()

(17)

Sprawdź swoją wiedzę

1 Jeśli masz dwie oddzielne instrukcje drukowania, takie jak ta printj „Jakie jest”

print „Twoje imię?"

jak sprawisz, że wszystko będzie drukowane na tej samej linii?

2 Jak można dodać dodatkowe puste linie podczas drukowania?

3 Jakiego specjalnego kodu drukowania używasz do wyrównywania kolumn?

4 Jakiego formatu formatu używasz do wymuszenia drukowania liczby w notacji elektronicznej?

Wypróbuj to

1 Napisz program, który poprosi o imię, wiek i ulubiony kolor osoby, a następnie wydrukuje je w jednym zdaniu. Uruchomienie programu powinno wyglądać następująco:

>>> ======================== RESTART ======================

>>>

Jak masz na imię? Sam Ile masz lat? 12

Jaki jest Twój ulubiony kolor? Zielony Masz na imię Sam, masz 12 lat i lubisz zieleń

2 Pamiętasz nasz program tabeli czasu z rozdziału 8 (listing 8.5)? Napisz ulepszoną wersję, która używa kart, aby upewnić się, że wszystko układa się ładnie w kolumnach.

3 Napisz program, który obliczy wszystkie ułamki 8 (na przykład 1/8, 2/8, 3/8,… do 8/8) i wyświetli je z dokładnością do trzech miejsc po przecinku.

Cytaty

Powiązane dokumenty

Wiadomo, że biurka I rodzaju cieszą się dwukrotnie większym powodzeniem (tzn. prawdopodobieństwo tego, że klient kupujący biurko zdecyduje się na biurko I rodzaju wynosi 2/3)..

Oblicz prawdopodobieństwo wylosowania króla z talii 24 kart, jeśli wiemy, że wylosowana karta jest pikiem..

2 lata przy 38 to pestka… Izrael był na finiszu i to właśnie wtedy wybuch bunt, dopadł ich kryzys… tęsknota za Egiptem, za niewolą, za cebulą i czosnkiem przerosła Boże

Widać już, że coś się zmieniło i zmienia się z dnia na dzień.. Co znaczy, gdy przyjdzie odpowiedni człowiek na odpowiednie

Gdyby Basia oddała Asi swój muchomor z najmniejszą liczbą kropek, to wtedy u niej byłoby 8 razy więcej kropek niż u Asi.. Oblicz,

Przeczytajcie uważnie tekst o naszym znajomym profesorze Planetce i na podstawie podręcznika, Atlasu geograficznego, przewodników, folderów oraz map

Podaj szczegóły wykonania, takie jak: temat obrazu, kolorystyka, wyszczególnienie planów (kompozycja), nastrój, światłocień, odniesienie tematyki i kolorystyki do

Zamiast zdjęcia możesz też wykorzystać jedną z gotowych swoich prac plastycznych lub