Listy, tuple i funkcje
==================================
Pobierz *n* liczb
-----------------
**ZADANIE**: Pobierz od użytkownika *n* liczb i zapisz je w liÅcie. Wydrukuj: elementy listy i ich indeksy, elementy w odwrotnej kolejnoÅci, posortowane elementy. UsuÅ z listy pierwsze wystÄ
pienie elementu podanego przez użytkownika. UsuÅ z listy element o podanym indeksie. Podaj iloÅÄ wystÄ
pieÅ oraz indeks pierwszego wystÄ
pienia podanego elementu. Wybierz z listy elementy od indeksu *i* do *j*.
**POJÄCIA**: *tupla, lista, metoda.*
Wszystkie poniższe przykÅady proponujemy wykonaÄ w konsoli Pythona. Nie umieszczaj w konsoli komentarzy, możesz też pominÄ
Ä lub skróciÄ komunikaty funkcji ``print``. Można również wpisaÄ poniższy kod do pliku i go uruchomiÄ.
.. raw:: html
Kod nr
.. literalinclude:: 04_listy_01.py
:linenos:
JAK TO DZIAÅA
^^^^^^^^^^^^^^
Funkcja ``input()`` pobiera dane wprowadzone przez użytkownika
(tak jak ``raw_input()``), ale próbuje zinterpretowaÄ je jako kod Pythona.
Podane na wejÅciu liczby oddzielone przecinkami zostajÄ
wiÄc spakowane jako
**tupla** (krotka). Jest to uporzÄ
dkowana sekwencja poindeksowanych danych,
przypominajÄ
ca tablicÄ, której wartoÅci nie można zmieniaÄ. GdybyÅmy chcieli
wpisaÄ do tupli wartoÅci od razu w kodzie, napisalibyÅmy: ``tupla = (4, 3, 5)``.
Listy to również uporzÄ
dkowane sekwencje indeksowanych danych, zazwyczaj tego samego typu, które jednak możemy zmieniaÄ.
.. note::
W definicji tupli nawiasy sÄ
opcjonalne, można wiÄc pisaÄ tak: ``tupla = 3, 2, 5, 8.``
DostÄp do elementów tupli lub listy uzyskujemy podajÄ
c nazwÄ i indeks, np. ``lista[0]``.
Elementy indeksowane sÄ
od 0 (zera!). Funkcja ``len()`` zwraca iloÅÄ elementów w tupli/liÅcie.
Funkcja ``enumerate()`` zwraca obiekt zawierajÄ
cy indeksy i elementy sekwencji (np. tupli lub listy) podanej jako atrybut.
Funkcja ``reversed()`` zwraca odwróconÄ
sekwencjÄ.
Lista ma wiele użytecznych metod: ``.append(x)`` â dodaje x do listy; ``.remove(x)`` â usuwa pierwszy x z listy;
``.insert(i, x)`` â wstawia x przed indeksem i; ``.count(x)`` â zwraca iloÅÄ wystÄ
pieÅ x;
``.index(x)`` â zwraca indeks pierwszego wystÄ
pienia x; ``.pop()``
â usuwa i zwraca ostatni element listy. Funkcja ``reversed(lista)`` zwraca kopiÄ listy w odwróconym porzÄ
dku,
natomiast ``sorted(lista)`` zwraca kopiÄ listy posortowanej rosnÄ
co.
Jeżeli chcemy trwale odwróciÄ lub posortowaÄ elementy listy stosujemy metody:
``.reverse()`` i ``.sort()``. Z każdej sekwencji (napisu, tupli czy listy) możemy
wydobywaÄ fragmenty dziÄki notacji *slice* (wycinek). W najprostszym przypadku polega
ona na podaniu poczÄ
tkowego i koÅcowego (wyÅÄ
cznie) indeksu elementów, które chcemy
wydobyÄ, np. ``lista[1:4]``.
POÄWICZ SAM
^^^^^^^^^^^^^^
Utwórz w konsoli Pythona dowolnÄ
listÄ i przeÄwicz notacjÄ *slice*. Sprawdź dziaÅanie indeksów pustych
i ujemnych, np. ``lista[2:], lista[:4], lista[-2], lista[-2:]``.
Posortuj dowolnÄ
listÄ malejÄ
co. Wskazówka: wykorzystaj metodÄ ``.sort(reverse=True)``.
CiÄ
g Fibonacciego
-----------------
**ZADANIE**: Wypisz ciÄ
g Fibonacciego aż do *n*-ego wyrazu podanego przez użytkownika.
CiÄ
g Fibonacciego to ciÄ
g liczb naturalnych, którego każdy wyraz poza dwoma
pierwszymi jest sumÄ
dwóch wyrazów poprzednich. PoczÄ
tkowe wyrazy tego ciÄ
gu to: 0 1 1 2 3 5 8 13 21.
**POJÄCIA**: *funkcja, zwracanie wartoÅci, tupla, rozpakowanie tupli, przypisanie wielokrotne*.
.. raw:: html
Kod nr
.. literalinclude:: 04_funkcja_02.py
:linenos:
JAK TO DZIAÅA
^^^^^^^^^^^^^^
Definicja funkcji w Pythonie polega na użyciu sÅowa kluczowego ``def``,
podaniu nazwy funkcji i w nawiasach okrÄ
gÅych ewentualnej listy argumentów.
DefinicjÄ koÅczymy znakiem dwukropka, po którym wpisujemy w nastÄpnych liniach,
pamiÄtajÄ
c o wciÄciach, ciaÅo funkcji. Funkcja może, ale nie musi zwracaÄ wartoÅci.
Jeżeli chcemy zwróciÄ jakÄ
Å wartoÅÄ używamy polecenia return wartoÅÄ.
Zapis ``a, b = pwyrazy`` jest przykÅadem rozpakowania tupli, tzn. zmienne *a* i *b*
przyjmujÄ
wartoÅci kolejnych elementów tupli ``pwyrazy``. Zapis równoważny, w którym nie
definiujemy tupli tylko wprost podajemy wartoÅci, to ``a, b = 0, 1``; ten sposób
przypisania wielokrotnego stosujemy w kodzie ``a, b = b, b+a``. Jak widaÄ, iloÅÄ
zmiennych z lewej strony musi odpowiadaÄ liczbie wartoÅci rozpakowywanych z tupli
lub liczbie wartoÅci podawanych wprost z prawej strony.
POÄWICZ SAM
^^^^^^^^^^^^^^
ZmieÅ funkcjÄ ``fibonnacci()`` tak, aby zwracaÅa wartoÅÄ *n*-tego wyrazu. Wydrukuj tylko tÄ wartoÅÄ w programie.
Metryka
^^^^^^^
:Autor: Robert Bednarz
:Utworzony: |date| o |time|
.. |date| date::
.. |time| date:: %H:%M
.. raw:: html
.. include:: ../copyright.rst