Poprzedni temat poruszał wykorzystanie pętli FOR. W zależności od tego ile razy chcemy wykonać daną czynność, zamykamy nasz kod w powtarzalny blok. W podobny sposób zadziała pętla WHILE, która wykonuje się dopóki jest spełniony zadany warunek. Tylko co to znaczy?
Tworzenie pętli w Pythonie
Przypomnijmy sobie przykład z poprzedniej części kursu:
print("Cześć", name)
name = input("Jak masz na imię?")
print("Cześć", name)
name = input("Jak masz na imię?")
print("Cześć", name)
To samo zrobimy z wykorzystaniem pętli for:
name = input("Jak masz na imię? ")
print("Cześć", name)
Dla porównania możemy stworzyć warunek, aby pętla wykonywała się, dopóki licznik nie osiągnie określonej przez nas wartości:
while counter != 3:
name = input("Jak masz na imię? ")
print("Cześć", name)
counter += 1
Kolejne wykonania pętli zwiększają nasz licznik o 1. Ponieważ zaczynamy od wartości licznika 0 wykonamy pętlę dla wartości 0, 1, 2.
Sprawdźmy to dodając wyświetlanie stanu licznika w kolejnych iteracjach:
while counter != 3:
name = input(str(counter) + ". Jak masz na imię? ")
print("Cześć", name)
counter += 1
Stąd nasz wynik wygląda przykładowo tak:
Cześć Maria
1. Jak masz na imię? Ania
Cześć Ania
2. Jak masz na imię? Karolina
Cześć Karolina
Pętla WHILE w Pythonie
W Pythonie spotykamy pętle for oraz while.
W niektórych językach programowania np. C++ mamy np. również pętlę do while, w Pythonie pętla do-while nie występuje.
WHILE
rozpoczyna blok instrukcji, które będą wykonywać się tak długo, jak długo zadany warunek jest spełniony.
Warunek po każdym wykonaniu jest ponownie sprawdzany i jeśli warunek jest prawdziwy (zwraca wartość True), kod w bloku jest wykonywany. Jeżeli warunek jest fałszywy – przyjmie wartość False, blok kodu wewnętrz pętli się nie wykona. Interpreter pójdzie dalej.
while a > 4:
a = int(input("Podaj liczbę większą od 4: "))
print("Podano liczbę a =", a)
print("Twoja liczba nie była większa od 4")
Załóżmy, że chcemy kupić pewnę książką, ale dopiero jak jej cena spadnie poniżej 30 zł. Pomoże nam Python, a konkretnie pętla malejąca – cenę książki będziemy regularnie obniżać.
while book > 30:
print("Czekam na przecenę")
book = book * 0.8
print("Przecena 20%, aktualna cena: ", round(book, 2), "zł")
print("— — — — — — — — — — — — — — — — — —")
print("\nIdę do księgarni!")
Python – pętla nieskończona
Jeżeli warunek byłby cały czas spełniony, pętla wykonywałaby się bez końca.
Stąd dla pythona instrukcja while True, to po prostu pętla nieskończona.
Nie musicie jej testować, zaufajcie mi na słowo, lub przyjrzyjcie się uważnie – nie ma warunku stopu:
print("Hello World!")
Taką samą funkcję spęłni instrukcja warunkowa 1, gdyż 1 to wg Pythona wartość True.
print(bool(1))
Za pomocą funkcji bool(), wykonamy rzutowanie wartości liczbowej na wartość boolowską:
print(bool(0))
Podsumujmy co do tej pory robiliśmy korzystając z przykładu. Nasza firma się rozrosła. Na 5 lecie firmy chcemy dać specjalny kod promocyjny dla naszych pierwszych 100 klientów. Wiemy, że ich id w bazie mają numery od 0 do 99, stąd:
Pętla while zawiera:
- słowo kluczowe while
- warunek
- blok kodu, który będzie wykonywał się w pętli (oznaczony wcięciem)
Instrukcje break
/ continue
Do tej pory pętla (for albo while) wykonywała się dopóki był spełniony warunek. Czasami chcemy zakończyć aktualną iterację lub nawet całą pętlę wcześniej – bez kolejnego sprawdzania wyrażenia warunkowego. Python udostępnia nam dwie instrukcje break oraz continue, które odpowiadają za natychmiastowe przerwanie bieżącej iteracji.
- break – kończy działanie pętli. Interpreter przechodzi do dalszej części instrukcji – następujących po bloku pętli.
- continue – kończy iterację bieżącej pętli. Interpreter wraca do początku pętli, wyrażenie warunkowe jest ponownie sprawdzane, aby określić, czy pętla zostanie wykonana ponownie, czy zakończyć i przejść dalej.
Instrukcja break
Dla zobrazowania przetestujcie poniższy kod:
while num < 20:
num += 1
if num == 15:
break
print("Aktualny numer to", num)
print("Jestem poza pętlą")
Zobaczymy kolejno wartości 10, 11, 12, 13, 14, przy wartości 15 instrukcja break wymusi zakończenie wykonywania pętli i przejście do kodu poza pętlą (nie zostanie wyświetlona wartość 15). Podobnie zadziała kod z wykorzystaniem pętli for.
if num == 15:
break
print("Aktualny numer to", num)
print("Jestem poza pętlą")
Instrukcja continue
Skorzystamy z tego samego przykładu, tylko teraz zamiast break, użyjemy instrukcji continue.
while num < 20:
num += 1
if num == 15:
continue
print("Aktualny numer to", num)
print("Jestem poza pętlą")
W tym wypadku wyświetlą się wartości od 11 do 20 bez wartości 15, przy której zostanie wywołana instrukcja continue – tzn. zostanie pominięta dalsza część pętli – część wyświetlająca „Aktualny numer to”.
if num == 15:
continue
print("Aktualny numer to", num)
print("Jestem poza pętlą")
Mam nadzieję, że pętle to temat dla was łatwy i przyjemny, dlatego czas na zadania!
Zadania – python pętle
Zadanie 1
Napisz program z wykorzystaniem pętli while, 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
Zapoznaj się z modułem random.
Stwórz prostą grę zgadywankę. Komputer losuje wartość z przedziału od 1-30. Poproś użytkownika o zgadnięcie liczby. Program pyta użytkownika o podanie liczby tak długo, dopóki gracz nie zgadnie.
Zadanie 3
Rozszerz grę z punktu powyżej. Gracz powinen otrzymać informację czy jego liczba jest za duża czy za mała.
Zadanie 4
Napisz skrypt obliczający wartość silnii. Rozwiąż zadanie za pomocą pętli for oraz pętli while.
Wejście: „Podaj dowolną liczbę całkowitą do 15:” 4
Wyjście: 4! = 24
Zadanie 5
Korzystając z modułu random stwórz kolejną prostą grę. Komputer losuje słowo z dostępnego zakresu (posiada listę słów). Następnie litery są mieszane.
Wymieszane litery pokazywane są graczowi. Gracz musi zgadnąć co to za słowo. Gracz zgaduje do skutku. Dopiero zgadnięcie przerywa grę.
Rozszerzenie: gracz może wybrać na klawiaturze „q” lub „Q”, aby zakończyć grę przed czasem.
Ten wpis jest częścią cyklu Python kurs od podstaw:
Czy zadania mają gdzieś rozwiązania?
Będą wrzucone za jakiś czas, chociaż jak nie dodałam rozwiązań w poprzednim wpisie, zachęciło to czytelników do dzielenia się swoimi rozwiązaniami 😛
<3
”’Trochę sobie utrudniłem zadanie 3 i postanowiłem rozszerzyć kod opcję wyboru zakresu losowego oraz o wstępną weryfikację poprawności wprowadzanych liczb. Przy okazji douczyłem się funkcji exec która pomogła nieco skrócić kod:”’
print(’LET\’S START THE LOTTERY’)
import random
r=input(’Enter lottery range number (max 50): ’)
R=’while r.isdigit()==False or int(r)>50:\n\tprint(\’Enter correct value:\’)\n\tr=input()\n\tcontinue\nm=int(r)’
exec(R)
random_number=random.randint(1,m)
x=input(’Enter your number from the range 1-’+r+’: ’)
E=’while x.isdigit()==False or int(x) not in range (1,m+1):\n\tprint(\’Enter correct value:\’)\n\tx=input()\n\tcontinue\nn=int(x)’
exec(E)
while n in range(1,m+1):
____if n==random_number:
________print(’\nTHAT\’S IT! CONGRATULATIONS !’)
________break
____else:
________print(„Try again”)
________x=input(’Enter your number: ’)
________exec(E)
________continue
Bardzo przyjemny kurs. Czekam na następne części!
Podobało mi się, że inni wrzucali wcześniej swoje rozwiązania, więc wrzucam też moje:
zad.1
i=1 #pierwsza l. naturalna
j=0 #suma poprzedników
while i<=10: # liczymy od 1 do 10 liczb naturalnych
print(i+j)
j=i+j
i+=1
zad.3
import random
random_num = (random.randint(1,30))
print("Podaj liczbę z zakresu 1 – 30: ")
i=True
while i :
num=int(input())
if num==random_num:
print("Wygrana!")
i=False # lub break;
elif 0<num=num>random_num:
print(„Za duża!”)
else:
print(„Liczba poza zakresem!!”)
zad.5
import random
wordSet = [’amazing’,’surprise’, 'advanced’, 'building’, 'mysterious’]
random_word = random.choice(wordSet)
x_word=list(random_word)
random.shuffle(x_word)
print(„Guess this word:”)
print(„”.join(x_word))
i=1
while i>0:
n=input()
n.lower()
if n == random_word:
print(„You won!”)
break;
elif n == „q”:
print(„End!”)
break;
else:
print(„Try again.”)
i+=1
Dzięki Twoim kursom Pythona sporo się o nim nauczyłem, więcej niż na jakichkolwiek innych platformach (a tych było sporo). Bardzo się cieszę, że wpadłem na ten kurs. Także „10 powodów, dla których warto nauczyć się Pythona” umocniło mnie trochę na duchu, ponieważ już chciałem rezygnować z nauki Pythona i przejść na Javę, której nauka nie szła mi zbyt dobrze. Tak trzymać!
Rita wielkie dzięki za ten kurs! Jest bardzo przejrzysty i pomocny, dużo można z niego wyciągnąć. Zaczęłam naukę Pythona z przypadkowo znalezionym kursem na Udemy, ale zadania były dość nudne i oderwane od rzeczywistości. Bardzo się cieszę, ze trafiłam na Twojego bloga, bo zadania są bardzo praktyczne i konkretne.
Dodatkowy plus to wegańskie przepisy <3
Muszę przyznać, że ten kurs to kawał dobrej roboty 🙂 Sam sobie odświeżam dzięki niemu Pythona — ostatni raz używałem na studiach.
Mam pytanie trochę nie w temacie: Czy używasz type hints w Pythonie?
Zadanie 3:
dzięki wielkie, nareszcie zrozumiałam!
Fajny tutorial 🙂 czekam na dalsze odcinki… Kiedy mogę się spodziewać?
Pozdrawiam
Coś tam działa!
Zad 5.
to w sumie można uznać za zadanie od 2 do 5
Kiedy kolejna część? 😀
Po pierwsze super kurs , dziękuje autorce za włożony w to czas , naprawdę przyjemnie sie uczy. Nie widziałem nigdzie rozwiązania zadania 4 więc podaje moją wersje , nie wiem na ile jest poprawna, pewnie da się to zrobić łątwiej, ale działa tak jak było opisane w zadaniu, więc może się komuś przyda.
Nie wiem jak mam to wyliczyć za pomocą while (de facto ty chyba też nie do końca używasz).
silnia = int(input(’Podaj dowolną liczbę całkowitą do 15:’))
a = 1
for c in range(1, silnia + 1):
a = a * c
print(’Silnia {} wynosi {}’.format(silnia, a))
Zad. 5. Pozwoliłem sobie rozbudować polecenie o podpowiedzi do szukanego słowa 🙂
<pre<import random
wordSet = {"telewizor":"do niego pilot", "myszka":"zwierzę komputerowe","tramwaj":"inaczej bimba",
"autobus":"komunikacja zbiorowa","kuchenka":"indukcyjna lub na gaz","rower":"dwa kółka" }
wordkey = list(wordSet.keys())
random_word = random.choice(wordkey)
x_word=list(random_word)
random.shuffle(x_word)
a = wordkey.index("{}".format(random_word))
print("—————-Zgadnij co to za słowo!—————-")
print("——————————————————-")
print("Jeżeli chcesz zakończyć grę wciśnij: q")
print("——————————————————-")
help = list(wordSet.values())
print("Podpowiedź:{}".format(help[a]))
print("".join(x_word))
print("——————————————————-")
i=True
while i==True:
n=input()
n.lower()
if n == random_word:
print("Zwycięstwo! Szykane słowo to {}".format(random_word))
break
elif "q" != n != random_word:
print("Próbuj dalej!")
continue
elif n == "q":
print("Koniec gry")
break
czy zadanie 2 nie powinno być z warunkiem ? ze liczba powyżej 15 ma być odrzucana ?
a = int(input(’podaj liczbę doobliczenia silni do 15 ’))
b = 1
c = 1
for i in range(0,a):
if a > 15 :
print(’podałeś za dużą liczbę ’)
break
elif a 16 :
print(’za duża liczba : ’)
break
elif a < 16 :
y = y * z
z = z + 1
print(y)
Mam pytanie do Ciebie Rita
Dlaczego w pętli while znak < oznacza również znak równości dla liczby 10 w tym przypadku. W pętli for ostatnia liczba była pomijana i trzeba było zwiększyć zakres.
pozdro
nie ma znaku równości dla 10
w kodzie masz najpierw inkrementację i a porem dodanie do zmiennej x liczącej sumę – co oznacza, że dla i = 0 pierwsza wyświetlona wartość x to 1
dla i = 9 robimy i+=1 (czyli 10)
gdy i = 10 pętla się już nie wykona
Mam nadzieję, że to rozjaśniło sprawę
Porządny kurs podparty praktycznymi zadaniami, nad którymi trochę trzeba pogłówkować i wygodna zwięzła forma lekcji. Tak trzymać! 🙂 Planujesz może jakieś dalsze lekcje np. związane z klasami i programowaniem obiektowym? Chciałbym bardzo przeczytać taką lekcję w Twoim wydaniu, gdzie temat byłby wreszcie uporządkowany i praktycznie przedstawiony 🙂
Konkretny wpis dla początkujących 🙂
Pozdrawiam !
Kiedy 9ta czesc? 🙁
Zadanie 1:
W wiekszosci rozwiazan zadania 5tego nie ma poprawnie obsluzonej funkcji wyjscia poprzez q lub Q..
WItam, proszę o pomoc:
Dlaczego ta pętla wykonuje się tylko dwa razy?
Pętla nie wykonuje się ani razu, chyba że trafisz z odpowiedzią.
#odp=int(input(„zgadnij liczbe od 1 do 30 „))
#int(input(„spróbuj jeszcze raz: „))
to się pojawia
no a przed tym drukujesz wylosowaną liczbę
Moje rozwiązania:
ZAD 1 .
ZAD.3
ZAD.4
i jeszcze ZAD 5.
Dzięki za te dobro wniesione do świata, super kurs 🙂 Czekam na Django 🙂
zadanie 4
Przebyłem przez wszystkie lekcje, miło się czytało 😉
Rita, super kurs. Czekamy na następne odcinki!
Jak widać z odpowiedziami na zadania radzimy sobie sami nieźle, więc jak dla mnie może być bez rozwiązań.
Mam pytanko, jak wkleić kod, żeby był ładnie zedytowany?
Dziękuję!
2021_05_24 (coby potomni widzieli, że w pamiętnym szalonym roku 2021 ktoś ciągle uczył się podstaw pythona na tym kursie…)
Moja wersja do zadania 5 (ze zliczaniem punktów):
1.
”’
1, 3, 6, 10, 15, 21, 28, 36, 45, 55
”’
2.
3.
4.
5.
Fajny tutorial
Czy w Twoich przykładach z while wynikiem nie będą liczy rozpoczynające się od 11 a hmie jak napisałaś od 10? Nim += 1 jest przed printem.
Dziękuję Pani za tak przyjemny kurs 😀
Mimo wcześniejszej pracy z Pythonem i innymi językami programowania dobrze było przypomnieć sobie podstawy oraz zobaczyć jak można korzystać z Pythona.
Całą swoją przygodę publikowałem na GitHubie:
Jeszcze raz dziękuję i liczę na kolejną lekcję kursu 😀