While loop - Learn Python 3 - Snakify

Lesson 6
Podczas gdy pętla


1. Podczas gdy pętla

while pętla powtarza sekwencję działań wiele razy, aż jakiś warunek zostanie oceniony jako False . Warunek jest podawany przed ciałem pętli i jest sprawdzany przed każdym wykonaniem korpusu pętli. Zazwyczaj, while pętla jest używana, gdy niemożliwe jest ustalenie dokładnej liczby iteracji pętli z góry.

Składnia while pętli w najprostszym przypadku wygląda następująco:

while some condition:
    a block of statements

Python najpierw sprawdza warunek. Jeśli jest to fałsz, a następnie pętla jest zakończona, a sterowanie jest przekazywane do następnej instrukcji po while ciała pętli. Jeśli warunek jest prawdziwy, to ciało pętli jest wykonywane, a następnie warunek jest ponownie sprawdzany. To trwa, dopóki warunek jest prawdziwy. Gdy warunek staje się fałszywy, pętla kończy się i kontrola jest przekazywana do następnej instrukcji po pętli.

Na przykład poniższy fragment programu drukuje kwadraty wszystkich liczb całkowitych od 1 do 10. Tutaj można zastąpić pętlę "while" pętlą for ... in range(...) :

i = 1
while i <= 10:
    print(i ** 2)
    i += 1

W tym przykładzie zmienna i wewnątrz pętli iteruje od 1 do 10. Taka zmienna, której wartość zmienia się wraz z każdą nową iteracją pętli nazywana jest licznikiem. Zauważ, że po wykonaniu tego fragmentu wartość zmiennej i jest zdefiniowana i jest równa 11 , ponieważ kiedy i == 11 warunek i <= 10 jest fałszywy po raz pierwszy.

Inny przykład użycie while pętli w celu określenia liczby cyfr liczb całkowitych n :

n = int(input())
length = 0
while n > 0:
    n //= 10  # jest to równoważne n = n // 10
    length += 1
print(length)  # 4

Przy każdej iteracji wycinamy ostatnią cyfrę liczby używając dzielenia liczby całkowitej przez 10 ( n //= 10 ). W zmiennej length liczymy ile razy to zrobiliśmy.

W Pythonie jest inny, łatwiejszy sposób rozwiązania tego problemu: length = len(str(i)) .

Advertising by Google, may be based on your interests

2. Przepływ regulacji pętli: else

Można napisać instrukcję else: po treści w pętli, która jest wykonywana raz po zakończeniu pętli:

i = 1
while i <= 10:
    print(i)
    i += 1
else:
    print('Loop ended, i =', i)

Na pierwszy rzut oka stwierdzenie to nie wydaje się mieć sensu, ponieważ ciało else: statement może być po prostu umieszczone po zakończeniu pętli. Instrukcja "else" po pętli ma sens tylko wtedy, gdy jest używana w połączeniu ze break instrukcji. Jeśli podczas wykonywania pętli interpreter Pythona napotka break , natychmiast zatrzymuje wykonywanie pętli i wychodzi z niej. W takim przypadku gałąź else: branch nie zostanie wykonana. Tak więc, break jest używany do przerwania wykonywania pętli podczas połowy dowolnej iteracji.

Oto przykład podobny do Black Jacka: program odczytujący liczby i sumujący go do momentu, w którym suma stanie się większa lub równa 21. Sekwencja wejściowa kończy się na 0, aby program mógł się zatrzymać nawet, jeśli suma wszystkich liczb jest równa mniej niż 21.

Zobaczmy, jak zachowuje się na różnych wejściach.

Wersja 1. Po sprawdzeniu warunku pętla jest wychodzona normalnie, więc wykonywana jest gałąź "else".

total_sum = 0
a = int(input())
while a != 0:
    total_sum += a
    if total_sum >= 21:
        print('Total sum is', total_sum)
        break
    a = int(input())
else:
    print('Total sum is less than 21 and is equal to', total_sum, '.')

Wersja 2. Pętla jest przerwana przez break , więc gałąź "else" jest pomijana.

total_sum = 0
a = int(input())
while a != 0:
    total_sum += a
    if total_sum >= 21:
        print('Total sum is', total_sum)
        break
    a = int(input())
else:
    print('Total sum is less than 21 and is equal to', total_sum, '.')

Odmiana "Else" może być również używana z pętlą "for". Spójrzmy na przykład, gdy program odczytuje 5 liczb całkowitych, ale zatrzymuje się zaraz po spełnieniu pierwszej ujemnej liczby całkowitej.

Wersja 1. Pętla wychodzi normalnie, więc wykonywana jest gałąź "else".

for i in range(5):
    a = int(input())
    if a < 0:
        print('Met a negative number', a)
        break
else:
    print('No negative numbers met')

Wersja 2. Pętla zostaje przerwana, więc gałąź "else" nie jest wykonywana.

for i in range(5):
    a = int(input())
    if a < 0:
        print('Met a negative number', a)
        break
else:
    print('No negative numbers met')

Advertising by Google, may be based on your interests

3. Przepływ regulacji pętli: kontynuuj

Inna instrukcja używana do kontrolowania wykonywania pętli jest continue . Jeśli interpreter Pythona spełnia continue gdzieś w środku iteracji pętli, to pomija wszystkie pozostałe instrukcje i przechodzi do następnej iteracji.

for num in range(2, 10):
    if num % 2 == 0:
        print("Found an even number", num)
        continue
    print("Found a number", num)

Jeśli break i continue są umieszczone w kilku zagnieżdżonych pętlach, mają wpływ tylko na wykonanie najbardziej wewnętrznej. Spójrzmy na raczej głupi przykład, aby to zademonstrować:

for i in range(3):
    for j in range(5):
        if j > i:
            # zrywa tylko wartość dla linii 2
            break
        print(i, j)

Instrukcje break i continue są odradzane, jeśli możesz wdrożyć swój pomysł bez ich używania. Oto typowy przykład złego użycia break : ten kod zlicza liczbę cyfr w liczbie całkowitej.

n = int(input())
length = 0
while True:
    length += 1
    n //= 10
    if n == 0:
        break
print('Length is', length)

Jest to czystsze i łatwiejsze do odczytania, aby przerobić tę pętlę z sensownym warunkiem pętli:

n = int(input())
length = 0
while n != 0:
    length += 1
    n //= 10
print('Length is', length)
Advertising by Google, may be based on your interests

4. Wielokrotne przypisanie

W języku Python możliwe jest, aby pojedyncza instrukcja przypisania zmieniała wartość wielu zmiennych. Zobaczmy:

a, b = 0, 1

Efekt pokazany powyżej kodu można zapisać jako:

a = 0
b = 1

Różnica między tymi dwiema wersjami polega na tym, że wielokrotne przypisanie zmienia wartości dwóch zmiennych jednocześnie.

Wielokrotne przypisanie jest przydatne, gdy zachodzi potrzeba wymiany wartości dwóch zmiennych. W starszych językach programowania bez obsługi wielokrotnego przypisania można to zrobić za pomocą zmiennej pomocniczej:

a = 1
b = 2
tmp = a
a = b
b = tmp
print(a, b)
# 2 1

W Pythonie ta sama wymiana może być zapisana w jednym wierszu:

a = 1
b = 2
a, b = b, a
print(a, b)
# 2 1

Lewa strona "=" powinna mieć rozdzieloną przecinkami listę nazw zmiennych. Prawa strona może być dowolnymi wyrażeniami oddzielonymi przecinkami. Lista po lewej i po prawej stronie powinna mieć taką samą długość.

Advertising by Google, may be based on your interests