80
Rozdział 2.
Jeszcze trochę jaj
Zaprzęganie wycinków do pracy z listami
Zapewniana przez język Python notacja wycinka to niezwykle przydatne rozszerzenie notacji
nawiasów kwadratowych — jest ona wykorzystywana w bardzo wielu miejscach. W czasie
lektury tej książki spotkasz się z mnóstwem zastosowań wycinków w najrozmaitszych
sytuacjach.
Na razie poobserwujmy trochę pythonową notację nawiasów kwadratowych w akcji
(w tym również zastosowanie wycinków). Weźmiemy teraz na warsztat przedstawiony na
poprzednich stronach program
eggs.py i zrefaktorujemy go w taki sposób, aby wykorzystywał
notację nawiasów kwadratowych oraz wycinki w celu osiągnięcia tego samego efektu, który
udało nam się wcześniej otrzymać za pomocą metod listy.
Zanim na poważnie zabierzemy się do pracy, warto przypomnieć sobie, co robił program
eggs.py.
Przekształcanie „Podaj jajko!” w „od jaj”
Kod tego programu przekształca jeden łańcuch znakowy w inny, manipulując istniejącą listą
przy użyciu metod listy. Zaczynając od łańcucha
”Podaj jajko!”
, kod ten generuje łańcuch
”od jaj”
za pomocą kilku przekształceń, które zostały przedstawione poniżej.
obiekt
obiekt
obiekt
obiekt
obiekt
Lista
0
1
2
3
4
phrase = ”Podaj jajko!”
plist = list(phrase)
print(phrase)
print(plist)
for i in range(4):
plist.pop()
plist.pop(0)
plist.remove(”a”)
plist.extend([plist.pop(), plist.pop()])
plist.insert(2, plist.pop(3))
new_phrase = ‘’.join(plist)
print(plist)
print(new_phrase)
Wyświetlanie
początkowego stanu
łańcucha znakowego
i listy
Wyświetlanie
końcowego stanu
łańcucha znakowego
Zastosowanie kilku metod
listy w celu przekształcenia
listy obiektów i wykonania
odpowiednich działań
Łańcuch znakowy „Podaj jajko!” został
przekształcony w łańcuch „od jaj” dzięki
zastosowaniu metod listy.
Kod
programu
eggs.py
Taki jest wynik wykonania tego programu w oknie środowiska IDLE.
jesteś tutaj�
81
Dane
Zaprzęganie wycinków do pracy z listami — ciąg dalszy
Teraz nadszedł czas na zabranie się do poważnej roboty. Poniżej znajdziesz kod programu eggs.py
z zaznaczonymi fragmentami, które należy zmienić.
obiekt
obiekt
obiekt
obiekt
obiekt
Lista
0
1
2
3
4
phrase = ”Podaj jajko!”
plist = list(phrase)
print(phrase)
print(plist)
for i in range(4):
plist.pop()
plist.pop(0)
plist.remove(”a”)
plist.extend([plist.pop(), plist.pop()])
plist.insert(2, plist.pop(3))
new_phrase = ‘’.join(plist)
print(plist)
print(new_phrase)
Te wiersze kodu
powinieneś zmienić.
phrase = ”Podaj jajko!”
plist = list(phrase)
print(phrase)
print(plist)
...............................................................................................
...............................................................................................
...............................................................................................
...............................................................................................
...............................................................................................
print(plist)
print(new_phrase)
Zaostrz ołówek
Ćwiczenie polega na zastąpieniu zaznaczonego powyżej kodu nowym, który wykorzystuje
możliwości oferowane przez notację nawiasów kwadratowych zapewnianą przez język Python.
Zauważ, że nadal możesz używać metod listy wszędzie tam, gdzie ma to sens. Podobnie
jak wcześniej, również tutaj Twoim zadaniem jest przekształcenie łańcucha znakowego
”Podaj jajko!” w łańcuch ”od jaj”. Dodaj odpowiedni kod w miejscach oznaczonych
kropkowanymi liniami i nazwij swój nowy program
eggs2.py
.
82
Rozdział 2.
Znów trochę jaj
Zastanawiam się, który
z tych programów
— eggs.py czy eggs2.py —
jest lepszy?
To świetne pytanie.
Niektórzy programiści spojrzą na kod programu
eggs2.py i po porównaniu go z kodem programu
eggs.py stwierdzą, że dwa wiersze kodu są zawsze
lepsze niż siedem, zwłaszcza że dane wyjściowe
obydwu tych programów są takie same. Jest to
całkiem dobra miara „lepszości”, jednak niezbyt
użyteczna w tym przypadku.
Aby przekonać się, co mamy przez to na myśli,
przyjrzyj się danym wyjściowym wygenerowanym
przez obydwa programy.
Zaostrz ołówek
Rozwiązanie
Ćwiczenie polegało na zastąpieniu kodu zaznaczonego na poprzedniej stronie nowym, który
wykorzystuje możliwości oferowane przez notację nawiasów kwadratowych zapewnianą przez
język Python. Zauważ, że nadal mogłeś używać metod listy wszędzie tam, gdzie miało to sens.
Tak jak wcześniej, również tutaj Twoim zadaniem było przekształcenie łańcucha znakowego
”Podaj jajko!” w łańcuch ”od jaj”. Miałeś dodać odpowiedni kod w miejscach
oznaczonych kropkowanymi liniami i nazwać swój nowy program
eggs2.py
.
phrase = ”Podaj jajko!”
plist = list(phrase)
print(phrase)
print(plist)
print(plist)
print(new_phrase)
new_phrase = ‘’.join(plist[1:3])
new_phrase = new_phrase + ‘’.join([plist[5], plist[4], plist[7], plist[6]])
Zaczęliśmy od wycięcia słowa
„od” z listy plist...
...aby następnie wybrać każdy kolejny znak, który był
nam potrzebny, a więc: spację, „j”, „a” oraz „j”.
jesteś tutaj�
83
Dane
Jazda próbna
Użyj środowiska IDLE, aby otworzyć kody programów eggs.py i eggs2.py w osobnych oknach edycji. Wybierz
najpierw okno z programem
eggs.py, a następnie naciśnij klawisz F5. Potem wybierz okno z programem eggs2.py
i ponownie naciśnij klawisz F5. Porównaj wyniki działania obydwu tych programów w powłoce.
Dane wyjściowe
wygenerowane w wyniku
uruchomienia programu
eggs2.py
Dane wyjściowe wygenerowane
w wyniku uruchomienia
programu eggs.py
eggs.py
eggs2.py
Zauważ, jak bardzo różnią się te dane wyjściowe.
Get Python Rusz głową! Wydanie II now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.