Powtarzanie wielokrotnie tych samych operacji (pętla for)

Okazuje się, że wyniki pomiarów tolerenacji z poprzedniego rozdziału były trochę zawyżone, bo aparatura badawcza była od początku rozregulowana. Musisz to poprawić! Ale chyba nie uśmiecha Ci się ręcznie zmieniać 100 wartości? Z pomocą przychodzi pętla for ,a przy okazji też przychodzi Ci się spotkać z wcięciami tekstu i operowaniem znakami białymi. Brzmi strasznie, też tak na początku myślałem, ale w rzeczywistości szybko się o tym zapomina i wszystko dzieje się bez bólu. Zobaczmy więc kawałek kodu, który zrobi za nas tą żmudną pracę:

for i in range(len(d)):
    d[i] = d[i]*0.1

Całe DWIE linijki kodu zamiast 100! Cudownie prawda? Fajnie było by jeszcze rozumieć co się stało, a wiedzy do przyswojenia jest naprawdę dużo w tych dwóch linijkach, więc zacznijmy od prostszego przykładu, w którym chcemy wyświetlić sobie pojedynczo wyniki:

for element in d:
    print element

Mówimy, że dla każdego (for) elementu z (in) listy nazwanej przez nas wcześniej literą d chcemy by został wyświetlony element.

Instrukcja for tworzy tymczasową zmienną, która kolejno przyjmuje wartości z listy. W naszym wypadku ta zmienna nosi nazwę element, możemy używać jej jako normanej zmiennej (z pewnym bardzo istotnym zastrzeżeniem, o którym za moment).

Bardzo istotne jest wcięcie kodu (może ono być zrobione przez dowolną ilość spacji lub tabulatorów, ale koniecznie trzeba trzymać się raz przyjętego schamatu. Najbardziej zgodne z normami jest użycie 4 spacji (co będziemy praktykować w dalszej części samouczka). Wygodniej jednak jest używać pojedynczego tabulatora (część edytorów i tak zamini go na cztery spacje), ponieważ to tylko jedo naciśnięcie klawisza i od razu widać jeśli użyje się o jeden za dużo).

Te wcięcia kodu możemy sobie porównać do struktury folderów:

Wewnątrz tego wcięcia możemy normalnie programować, definiować zmienne, pisać wyrażenia arytmetyczne, odwoływać się do zmiennych zdefiniowanych wcześniej. Wszystko "wewnątrz" tego wcięcia będzie zrobione za każdym razem kiedy zmienna element przyjmie kolejną wartość z listy. Najważniejszą różnicą jest to, że zmienna "element" w naszym programie po wyjściu z pętli będzie miała wartość z ostatniego obrotu pętli.

 

for element in [1,2,3,4,5]:
  print element
print "zrobimy sobie odstep"
print element

Wyświetli nam najpierw wszystkie liczby z listy, a potem jeszcze raz piątkę.

A teraz powróćmy do naszego zadania. Używamy tam pewnej "sztuczki" żeby móc modyfikować wartości na liście. Jak już powinieneś/powinnaś wiedzieć funkcja range generuje listę liczb całkowitych od zera aż do osiągnięcia żądanej długości. Zaś funkcja len jest dość uniwersalną funkcją, która wraca nam długość tego co podamy jako argument czyli:

print len([851, 1, 58])

Wyświetli nam liczbę 3, bo na liście znajdują się dokładnie 3 elementy. Korzystając z funkcji range możemy wygenerować listę o tej samej długości a jej elementów użyć jako indeksów w naszej liście, którą chcemy zmienić. Jest to bardzo ważny schemat postępowania jeśli chcemy modyfikować wartości listy.

W następnym rozdziale poznamy instrukcje warunkowe. A zaraz potem wrócimy do pętli poznając pętlę warunkową.