Znamy zmienne, umiemy pobrać dane od użytkownika, wyświetlić wynik operacji, a także wykonywać różne instrukcje w zależności od warunku, ale cały czas brakuje czegoś naszym programom. Przychodzi ten moment, gdy chcemy by w naszym kodzie dana część wykonywała się kilkukrotnie. Takie powtarzanie konkretnego bloku kodu nazywamy pętlą, zresztą na pewno znamy słowo zapętlić i to będziemy dzisiaj z naszym kodem robić.
Pętla FOR
W prostym przypadku chcemy, by dana czynność wykonała się z góry określiną liczbę razy. Tutaj przyda nam się część składni, która występuje w każdym języku programowania – pętla FOR.
Załóżmy, że chcemy zapytać 3 użytkowników o imię, a następnie przywitać każdego po imieniu. Możemy zrobić to tak:
print("Cześć", name)
name = input("Jak masz na imię?")
print("Cześć", name)
name = input("Jak masz na imię?")
print("Cześć", name)
ale wygodniej byłoby jednak tak:
name = input("Jak masz na imię?")
print("Cześć", name)
Możemy wywoływać każdego pokolei i kopiować ten sam kod, ale nie musimy. Przy 3 osobach jeszcze nie ma problemu, ale przy 30?
Pętle w językach programowania będą nam służyć do radzenia sobie w prosty sposób z takimi powtarzającymi się instrukcjami.
Gdyby osób było 50 nasza pętla zostałaby zmodyfikowana
range(start, stop, step)
Funkcja range()
może być używana na 3 sposoby.:
Najbardziej podstawowy i najczęściej używany range(0, end)
utworzy sekwencję od 0 do podanej liczby. Zapis ten możemy skrócić. Jeśli w range podamy tylko jedną wartość np. range(5)
oznacza, że start i step mają wartości domyślne – start = 0, step = 1.
Podając start, możemy zdecydować od jakiego indeksu Python rozpocznie pętlę np. range(3, 10)
– range(start, end)
pozwala określić początek i koniec zakresu.
Natomiast range(start, end, step)
dodaje do tego co jaki krok ma się wykonać pętla.
Utworzona sekwencja nigdy nie zawiera końca zakresu(!).
Oznacza to, że range(0, 5)
przeczytamy: jako wygeneruj zakres od 0 do 5, ale na 5 przestań się wykonywać!.
Sprawdź to:
print("wartosc: ", i)
Powyższy kod wyświetli: 0, 1, 2, 3, 4 (wyświetli 5 cyfr, od 0, bez ostatniej będącej końcem zakresu tj. cyfry 5). Tak jak wspomniałam, wartość 0 jest domyślna, więc możemy ją pominąć. Jednak, co jeśli chcemy zacząć od innej wartości?
Porównaj ten kod z
print("krok: ", i)
oraz
print("krok: ", i)
Może wydawać się, że funkcja range()
tworzy nam niewidoczną listę i dla każdego jej elementu wyświetla wartości. Nic bardziej mylnego! Funkcja range()
nie tworzy bezpośrednio listy, zamiast tego zwraca zakres – osobny typ w Pythonie. Range tworzy elementy sekwencji po jednym na raz, tym samym unikamy niepotrzebnego przechowywania pełnej sekwencji w pamięci. Po prostu wie jaki ma zakres (start, stop, krok) i przy wywołaniu na bieżąco „dobiera” nowy, następujący element.
print(a)
Iterowanie po liście
Oczywiście, nic nie stoi na przeszkodzie, by w pętli wywoływać elementy z listy. Możemy mieć z góry znaną listę imion użytkowników. Np. nasi goście to: Ania, Kasia, Jan, Piotr, Paweł. Ich też da się łatwo powitać w pętli:
for i in range(5):
print("Cześć", names[i])
ale znacznie czytelniej będzie to zrobić tak:
for name in names:
print("Cześć", name)
Czym się różnią powyższe przykłady?
Sposobem dostawania do elementów na liście. Pierwszy przykład wykorzysuje fakt, że każdy element na liście ma swój indeks. Jak wiecie z poprzednich odcinków kursu komputery nie liczą jak ludzie. Zamiast liczyć jeden, dwa, trzy …, komputer zawsze (o ile programista nie zada inaczej) będzie numerował rzeczy od 0 – zero, jeden, dwa…. Kolejne elementy tablicy z imionami mają indesy 0, 1, 2, 3, 4. Dzięki temu możemy wyświetlić pierwszego mężczyznę jako element names[2]
i pojawi nam się Jan.
Drugi, ładniejszy sposób to wywołanie bezpośrednio imienia z listy for name in names
oznacza tyle co dla każdego imienia z listy imion wykonaj instrukcje.
Jeżeli wszystko do tej pory było zrozumiałe, czas to podsumować:
Pętla for zawiera:
- słowo kluczowe for
- nazwa zmiennej, która odpowiada kolejnym elementom
- słowo in
- wartości, po których będziemy iterować
- blok kodu, który będzie wykonywał się w pętli (oznaczony wcięciem)
W przedostatnim podpunkcie celowo napisałam wartości, a nie lista po której będziemy iterować. Te wartości to moze być lista, iterator, krotka, string czy słownik.
Iterowanie po krotce:
print("krok: ", i)
Iterowanie po stringu:
print("krok: ", i)
Pętla w pętli
Narysowanie trójkąta w konsoli już po pierwszej lekcji i było dla was problemem:
print("##")
print("###")
print("####")
print("#####")
Teraz powinno być to jeszcze prostrze:
print(i * "#")
Gdybyśmy chcieli zbudować 3 takie trójkąty?
Można to zrobić powielając kod odpowiedzialny za pojedyńczy trójkąt w ten sposób
print("#")
print("##")
print("###")
print("####")
print("#####")
albo stworzyć pętle w pętli:
for j in range(1, 6):
print(j * "#")
Proste?
Zadania
Zadanie 1
Napisz program, który dla 10 kolejnych liczb naturalnych wyświetli sumę poprzedników.
Oczekiwany wynik: 1, 3, 6, 10, 15, 21, 28, 36, 45, 55
Zadanie 2
Napisz program, który dla 10 kolejnych liczb naturalnych wyświetli ich ich wartość do sześcianu. Szybka przypominajka:
Zadanie 3
Pozwól użytkownikowi wprowadzić dowolną liczbę imion ciągiem (np.jako jeden string rozdzielonych przecinkiem lub białym znakiem). Następnie powitaj każdą osobę na liście.
Zadanie 4
Napisz prosty program, który wykona się zadaną przez użytkownika liczbę razy. Z każdym uruchomieniem pętli wyświetli informacje:
– czy liczba jest wielokrotnością 3
– czy liczba jest wielkorotnością 4
– wyświtli „hurra” jeżeli liczba dzieli się zarówno przez 3 jak i 4
– wyświetli gwiazdkę, jeśli żaden z powyższych warunków nie jest spełniony
Zadanie 5
Spróbuj wyświetlić choinkę z trójkątów w taki sposób, aby każdy poziom choinki był o 1 wiersz dłuższy:
##
#
##
###
#
##
###
####
Zadanie 6
Wyświetl w konsoli klasyczną tabliczkę mnożenia. W razie wątpliwości jak sformatować, by w konsoli pojawiła się tabela warto sobie przypomnieć odcinek 3 – formatowanie napisów w Pythonie.
Ten wpis jest częścią cyklu Python kurs od podstaw:
Po bardzo intensywnym kontakcie z c++, to aż się dziwnie czuję patrząc na tak proste w obsłudze pętle. Python jest naprawdę przyjazny developerowi, dlatego zastanawia mnie skąd pęd, żeby zaczynać na uczelniach akurat od C/C++ .
Swoją drogą to bardzo fajny kurs. Mam nadzieję, że będziesz go dalej rozwijać : ).
zależy od wykładowcy i trendów u mnie było najpierw c potem c++ potem java i równolegle c# a np u kolegi na polibudzie szli od pascala po python
Ja też miałam tryb bardzo akademicki
C równolegle assembler oraz awk
C++ / Perl / Java
C++ / Python / C#
i potem już głównie utrzymywało się programowanie w tych 3 w zależności od przedmiotu ( bioinformatyczne w Pythonie, większość projektów w C++ i na ostatnim semestrze mgr wrócił C# )
po drodze zaliczając jakieś okazjonalne wizyty z innymi językami w projektach – wszystko zależy od przedmiotów i wykładowców, ale generalnie wszystkie uczelnie mają gdzieś na początku C/C++
ll
No i dotarłem do końca 🙁
Rozumiem, że teraz czas opuścić gniazdo (ten kurs) i udać się w świat zgłębiać tajniki Pythona.
Super. Dziękuję za dotychczasowe „odcinki”. Śledzę bloga i mam nadzieje, ze jak już będą kolejne części to będę do nich wracał już tylko celem przypomnienia sobie opanowanego materiału.
Pozdrawiam.
Bardzo fajny kurs szkoda ze tak szybko się kończy liczę ze jeszcze wrócisz do jego kontynuacji i dowiem się wielu innych ciekawych rzeczy. A teraz chyba czas poszukać nowych info odnośnie pythona
Dobry kurs. Dziękuję.
Dziękuję za kurs, dzięki któremu poznałem trochę Pythona.
A przy okazji rozwiązywania zadań też:
– przypomniałem sobie, czego uczyli mnie o formatowaniu – ponad 30 lat temu
– odczułem jak bardzo zmieniło się pisanie programów: z Fortranu z kartami perforowanymi przeszedłem do kodów pisanych na smartfonie w tramwaju,
– kolejny raz utwierdziłem się w przekonaniu, że kurs czy szkolenie mają nie tylko „pokazywać” ale też (może nawet przede wszystkim) „zaciekawiać” (aktualnie pracuję jako trener).
Gdzie można znaleźć rozwiązania do zadań? 🙂
zad 1
cnt = int(input(’Podaj liczbe: ’))
sum = 0;
for i in range(1, cnt + 1):
sum = sum + i
print(sum)
zad 2
zad 3
zad 4
reszta wydaje mi sie zbyt nudna 🙂
Hej, nie obraź się, ale poprawiłam zadanie 3 – w twojej wersji wyprintowuje 'hi’ nie tylko do każdego imiona, ale też do każdej spacji. Dlatego ja przerobiłam tak:
imiona = str(input(’Podaj liste imion: ’))
lista = imiona.split()
for i in lista:
i = i.strip(’,’)
print(’hi, ’, i)
Jakoś pokombinowałaś, z pierwotnego przykładu wystarczy usunąc wewnętrzną pętlę.
list = str(input(’Podaj liste imion: ’))
for i in list.split():
print(’hi ’ + i)
zad 4 uproszczone 😉
Przyznam, że zadanie 1 mnie rozłożyło. Tydzień zgrzytałem zębami i szukałem sposobu liczenia czegoś jak sumy pośrednie, czy coś w tym stylu. Miałem to zostawić, dziś usiadłem popatrzyłem, poczytałem i „gotowca” nie znalazłem…ale zaraz, zaraz a jak wezmę i wpiszę… a to było takie proste 🙂
byłbyś tak dobry i podał jakieś wskazówki?
A proszę bardzo:
Dziękuje Ci Kamil! 🙂
Poniżej jeszcze ładniejszy zapis choć o samej funkcji sum to nie było 😛
Zadanie 1.
i = 0
for j in range(1,11):
i += j
print(i)
Fajny kurs, kiedyś chyba go czytałam, pomaga w jakimś stopniu zrozumieć Pythona
Walczę z zadaniem 4.
Sprawdzam czy wynik dzielenia przez 3 jest liczbą całkowitą:
if isinstance(number/3,int):
print(’Liczba jest wielokrotnością 3′)
ale wynik dzielenia daje XX.0 i to już jest float. Jak to rozwiązać?
a może tak?:
ZADANIE 1
ZADANIE 2
Jakie obejście zad 1 😀
Jak to nie zart to raczej nie o to chodziło 🙂
Tu, jak i w szkole zadanie domowe nijak ma się do tego, czego nauczono nas na lekcji…:/
nie może być za lekko, a zadania te są inspiracją, nie zabraniam używać google czy innych materiałów, ale mówiąc szczerze, wszystko co jest potrzebne pojawiło się w poprzednich lekcjach ;D
Rozwiązanie 1.
Niestety musiałem sięgnąć do wiki by znaleźć jak się wylicza sumę ciągu. Bez tego nie wiem czy by się udało:
Wie ktoś czy można to zrobić bez używania tego wzoru i bez stosowania funkcji które nie były omawiane typu SUMA.
nie wiem, czy to niestety! ten kurs nie jest po to by nie używać Internetu do szukania rozwiązań, przypadkowo ich nie podałam i ludzka wyobraźnie nie zna granic ;D
ps: nie było sum(), ale zwykłą sumę można przechowywać w zmiennej i ją aktualizować z każdym przebiegiem pętli – jest to najprostsze, brutalne rozwiązanie i jednocześnie ćwiczenie na pętle for 😉 wszystko było
Super tłumaczysz za co jestem bardzo Ci wdzięczny.
Co do zad. 1. Oczywiście kieruję się tym co poznaliśmy do tej pory dlatego nie użyłem sum(), więc wykonałem to tak:
Zad. 2
Zad. 5
Mam zadanie 1 zrobione po Bożemu, tylko z pętlą for, bez definiowania list itd 😉
Zadanie 1:
Zadanie 2:
Zadanie 3:
Zadanie 4:
Zadanie 5:
Zadanie 6:
Czy to koniec kursu? Nie będzie więcej lekcji…? 🙁
będą, ale wolno mi to idzie, prowadzenie bloga to moje zajęcie poza pracą i poza życiem osobistym i przyznam, że jedna lekcja jest dość czasochłonna do napisania
#zadanie 5 – odpowiedź 🙂
#moja wersja zadania 6 :):
# … i jeszcze inna wersja odpowiedzi zad.6, ale kod niezbyt ładny, do dalszej ewaluacji :), póki co jeszcze nie wiem jak go uprościć (?):
”’jak już 'wdepnąłem’ w wyświetlanie tabliczki 10×10 z zad.6 to czuję się w obowiązku uprościć ten kod. Oczywiście, uprzedzając uwagi jest to tylko tablica wyników mnożenia: ”’
for i in range(1,11):
____for j in range(1,11):
________print(’ {:3} ’.format(j*i), end=chr(9478))
________if j==10:
____________print(”)
____________print(’-’*59)
#:-)
A to moja wersja zad. 6:
Pozwoliłem sobie nieco ulepszyć Twój kod.
Ogółem bardzo zacny!
Zad. 5
Bardzo się cieszę, że znalazłam Twój blog! 🙂 Rozumiem i umiem coraz więcej, nauka z Tobą to sama przyjemność.
Tak wykonałam kilka z zadanych zadań, jeśli ktoś chciałby sobie porównać.
Zad.2
Zad.3
Zad.4
Dzięki za kurs pythona. Robię go od kilku dni i bardzo mi się podoba. Wrzucam moje rozwiązania zadań i czekam na kolejne części.
print(„Zadanie 1”)
print(„Zadanie 2”)
Brawo za bardzo fajny język w którym podajesz wiedzę, super przyswajalny!
Zad 6
Zad 5
raczej powinno być tak
Zad 4
Zad 3
Chyba nikt z komentujących nie zrozumiał o co chodzi w zadaniu 4. Dlatego wrzucam swój – myśle poprawny kod.
Zadanie 6. Pętla w pętli.
Z = 0
for Y in range (1,13):
Z=Z+Y
for Z in range (1,13):
print(Y,”*”,Z,”=”,(Y*Z))
Najlepszy Blog o programowaniu jaki kiedykolwiek widziałem i czytałem. Super! Jesteś najlepsza.
super. Bardzo wartosciowy kurs. W sposob przyjazny i w pelni zrozumialy wprowadzasz w tajniki programowania w Pythonie. Mam nadzieje ze pojawia sie jeszcze kolejne lekcje moze z zagadnien bardziej zaawansowanych. Great job !
jakie polecenia należy wykonać w Pythonie, aby na ekranie otrzymać piramidę utworzoną ze znaków @. Tylko żeby ona nie była dosunięta do lewego boku, lecz na środku??
sprawdź metodę
.center()
wreszcie dobrze rozwiązane zadanie 5
dobrze rozwiązane zadanie 5
Witam, jest napisane żeby zostawiać komentarz wiec zostawiam, mam nadzieje ze blog i kurs będzie dalej prowadzony , a nie jak wszystkie inne urwany i nigdy nie skończony ! ;(
dziekuje i pozdrawiam
Chyba prawidłowe rozwiązanie zadania 5:
Świetny kurs! Wszystko jasno i przejrzyście wytłumaczone, można się spokojnie uczyć samemu! Dziękuję również za zadania zamieszczane na końcach wpisów i ich tłumaczenie 🙂
Super kurs – jak dobra książka od francuskiego, a ćwiczenia… jak wycieczka do Paryża 🙂 Twoje przykładowe rozwiązania uczą pięknego kodu 🙂
Hej, ten kod można jeszcze poprawić. Gdy używamy przecinka do oddzielania imion program traktuje to jako jednego stringa. Wystarczy dodać jedną linię zamieniająca ’,’ na spację. Jest to chyba najlepsze rozwiązanie tego zadania 🙂
Zadanie 6
Fajny poradnik szkoda że mój nauczyciel informatyki jest retardem.
Wg mnie poprawne rozwiązanie zadania 4:
I na gotowo zad. 5:
Dziękuję (i proszę o więcej, jeśli można :D)
2021_05_24
Powiem tak, bardzo, bardzo fajny kurs. Masz talent do przekazywania wiedzy i lekkie „pióro”. Super się czyta a przykłady jasne i klarowne. Szkoda, że zarzuciłaś temat i nie ma dalszych części. No ale może kiedyś do tego wrócisz. Tak czy siak Dzięki Wielkie 🙂
Zadanie pierwsze tylko na wiedzy uzyskanej z tego kursu.
Ja nie pomyślałem że for może liczyć po liczbie elementach listy, wyszło trochę więcej kodu (wasze są fajnie skompresowane 😉
Zadanie 6 w mojej wersji 😉
Zadanie 4 – Nie tak trudne jak sądziłam na początku!
Zadanie 4
Zadanie nr 3 przysporzyło mi trochę kłopotu. Przyjąłem że zazwyczaj imiona oddzielamy spacją albo przecinkiem. Mój kod z rozwiązaniem poniżej: