PPy3/SekwencjeIIteracja: Różnice pomiędzy wersjami

Z Brain-wiki
Linia 60: Linia 60:
  
 
Zamiast <tt>print(x)</tt> pętlę <tt>for</tt> może tworzyć dowolny blok instrukcji, zgodnie z zasadami jakie już poznaliśmy przy omawianiu instrukcji warunkowej. Cały blok tworzący wnętrze pętli będzie wykonany wielokrotnie, tyle razy, ile elementów ma lista, a za każdym razem pod nazwę stojącą bezpośrednio po słowie <tt>for</tt> podstawiony będzie kolejny element listy (przywołanej po słowie <tt>in</tt>) - kolejny, tzn. zgodnie z kolejnością, w jakiej umieszczone są one w liście.
 
Zamiast <tt>print(x)</tt> pętlę <tt>for</tt> może tworzyć dowolny blok instrukcji, zgodnie z zasadami jakie już poznaliśmy przy omawianiu instrukcji warunkowej. Cały blok tworzący wnętrze pętli będzie wykonany wielokrotnie, tyle razy, ile elementów ma lista, a za każdym razem pod nazwę stojącą bezpośrednio po słowie <tt>for</tt> podstawiony będzie kolejny element listy (przywołanej po słowie <tt>in</tt>) - kolejny, tzn. zgodnie z kolejnością, w jakiej umieszczone są one w liście.
 +
 +
Inny, znany nam już rodzaj sekwencji to napis (''string''), zwany czasami ''łańcuchem znakowym''. Napis składa się ze znaków, i jest w szczególności sekwencją, której elementami są znaki. Analogicznie jak w przypadku listy, można pobierać znaki stojące na poszczególnych pozycjach w napisie. '''Nie można''' natomiast podmieniać znaków w napisie, ani ich usuwać bądź dopisywać:  w odróżnieniu od listy, napis raz utworzony jest ''niezmienny''. Można go zastąpić innym napisem, i ewentualnie opatrzyć ten nowy napis tą samą nazwą, ale nie da się go zmodyfikować. I nie jest to dzielenie włosa na czworo, własność ta ma namacalne konsekwencje:
 +
 +
<source lang=python>
 +
napis1 = 'abc'
 +
napis2 = napis1
 +
napis1 = 'ABC'
 +
print(napis1, napis2)
 +
→ ABC abc
 +
# dla porównania, listy:
 +
lista1 = ['a', 'b', 'c']
 +
lista2 = lista1
 +
lista1[0] = 'A'
 +
print(lista1, lista2)
 +
→ ['A', 'b', 'c'] ['A', 'b', 'c']
 +
</source>
 +
 +
<blockquote><small>
 +
Powraca jeszcze raz pytanie: czym są poszczególne znaki? Tzn. jaki typ danych reprezentują? Otóż w Pythonie pojedyncze znaki też są po prostu napisami, tyle że o długości jeden. Poza długością nic ich szczególnie nie wyróżnia. Ta uwaga jest na użytek tych z Was, którzy znają jakiś inny język programowania, gdyż w wielu z nich znak jest oddzielnym, innym niż napis typem danych.
 +
</small></blockquote>
 +
 +
  
 
----
 
----

Wersja z 11:08, 29 cze 2016

Sekwencje i iteracja

Sekwencje to typ danych charakteryzujący się tym, że składają się z elementów zgromadzonych w pewnej kolejności. Elementem sekwencji może być cokolwiek (w tym - inna sekwencja), ale w najprostszym przypadku elementami tymi są liczby.

Sekwencje to szczególny przypadek kolekcji - takich typów danych, które składają się z elementów, ale niekoniecznie są one uporządkowane. Innym przykładem kolekcji jest zbiór (set).

Najczęściej używanym typem sekwencji jest lista (list). Listę można stworzyć (i zapamiętać) np. nadając jej pewien początkowy skład:

numerki = [0, 1, 2, 3, 5, 8]

To co stoi po prawej stronie znaku równości to literalny zapis listy - ciąg elementów, oddzielonych przecinkami, wewnątrz pary nawiasów kwadratowych.

Z listy - podobnie jak z każdej sekwencji - można pobrać element stojący w dowolnej pozycji:

print(numerki[4])
 5

Uwaga: pozycje numerowane są kolejnymi liczbami naturalnymi, począwszy od zera - podobnie, jak w większości języków programowania.

Można też podmienić istniejący element na inny:

numerki[0] = -1
print(numerki)
 [-1, 1, 2, 3, 5, 8]

a nawet przedłużyć ją o kolejny element:

numerki.append(13)
print(numerki)
 [-1, 1, 2, 3, 5, 8, 13]

oraz usunąć element (skracając listę):

del numerki[0]
print numerki
 [1, 2, 3, 5, 8, 13]

Jest jeszcze sporo innych ,,gotowych do użytku" operacji na listach. Ale najważniejsza cecha listy jest taka: można zmieniać jej skład, a nawet długość, a pozostaje ona tą samą listą. Nawet jeśli występuje w programie pod więcej niż jedną nazwą.

Pętla for

Naczelne zastosowanie listy (czy ogólniej -sekwencji), to iteracja - czyli wykonanie jakiejś operacji dla każdego elementu. I tak wygląda najprostszy rodzaj iteracji - Pętla for:

for x in numerki:
    print(x)

Zamiast print(x) pętlę for może tworzyć dowolny blok instrukcji, zgodnie z zasadami jakie już poznaliśmy przy omawianiu instrukcji warunkowej. Cały blok tworzący wnętrze pętli będzie wykonany wielokrotnie, tyle razy, ile elementów ma lista, a za każdym razem pod nazwę stojącą bezpośrednio po słowie for podstawiony będzie kolejny element listy (przywołanej po słowie in) - kolejny, tzn. zgodnie z kolejnością, w jakiej umieszczone są one w liście.

Inny, znany nam już rodzaj sekwencji to napis (string), zwany czasami łańcuchem znakowym. Napis składa się ze znaków, i jest w szczególności sekwencją, której elementami są znaki. Analogicznie jak w przypadku listy, można pobierać znaki stojące na poszczególnych pozycjach w napisie. Nie można natomiast podmieniać znaków w napisie, ani ich usuwać bądź dopisywać: w odróżnieniu od listy, napis raz utworzony jest niezmienny. Można go zastąpić innym napisem, i ewentualnie opatrzyć ten nowy napis tą samą nazwą, ale nie da się go zmodyfikować. I nie jest to dzielenie włosa na czworo, własność ta ma namacalne konsekwencje:

napis1 = 'abc'
napis2 = napis1
napis1 = 'ABC'
print(napis1, napis2)
 ABC abc
# dla porównania, listy:
lista1 = ['a', 'b', 'c']
lista2 = lista1
lista1[0] = 'A'
print(lista1, lista2)
 ['A', 'b', 'c'] ['A', 'b', 'c']

Powraca jeszcze raz pytanie: czym są poszczególne znaki? Tzn. jaki typ danych reprezentują? Otóż w Pythonie pojedyncze znaki też są po prostu napisami, tyle że o długości jeden. Poza długością nic ich szczególnie nie wyróżnia. Ta uwaga jest na użytek tych z Was, którzy znają jakiś inny język programowania, gdyż w wielu z nich znak jest oddzielnym, innym niż napis typem danych.



poprzednie | strona główna | dalej

RobertJB (dyskusja) 12:22, 29 cze 2016 (CEST)