Iteracja w pętlach w Pythonie – część 1 – tekst, liczby

I

W słowniku znajduje się hasło: iteracja / iterować . Jeżeli nie do końca rozumiesz, czym jest iterowanie, przeczytaj ten wpis zanim przejdziesz do kodu w Pythonie.

Jak wspomniałam w podlinkowanym haśle, iteracja w Python odbywa się na największym elemencie typu obiektu, który iterujemy. Co to znaczy w praktyce? Odrobinka prostego kodu na typach tekstowych i liczbach

iteracja przez tekst

W zmiennej tekstowej (tutaj a) przechowamy ciąg znaków. Zmienne tekstowe czyli ciągi znaków, tzw. stringi 😀 (z ang. string) są iterowalne.

a = "Ala ma kota"

# type to wbudowana metoda Pythona służąca, jak się trudno domyśleć ;), 
# do sprawdzenia typu obiektu. Spacje nie są potrzebne. Ja tak sobie 
# lubię wcisnąć niepotrzebną spację. Bo mogę. Ignoruj je.
print( type(a) )

# dla każdej litery w a
for letter in a:
    # coś wykonaj - tutaj 'wydrukuj' każdą literkę 3 razy
    # tutaj wcięcie w tekscie akurat jest potrzbne i wynosi 4 spacje.
    # Wcięć nie ignoruj bo Python się wścieknie.
    print(letter * 3)
    
# świetnie Magda, dzięki Twoim komentarzom ten kod jest niezwykle
# czytelny.

Co da w efekcie, poza oczopląsem:

Efakt iteracji przez wartość tekstową

typ (klasę) tekstowy i wydruk każdego znaku (z uwzględnieniem spacji) 3 x

Czy można iterować przez liczby ?

W Pythonie są typy iterowalne i nie-iterowalne, czyli takie, po których nie można “przechodzić” element po elemencie.

b = 123

for item in b:
    print(item)

Jeżeli w podobny sposób stworzymy zmienną b, przypisując jej wartość 123 nie otrzymamy w efekcie type error, czyli błąd typu.

Int oject is not iterable - Nie przez wszystko w Pythonie można iterować

‘Int’ object is not iterable oznacza, że nie można wykonać jakiejś operacji na wartości liczbowej. Mimo, że pozornie składa się z jakiś elementów ( 1, 2 i 3) to nie można kolejn się do nich dostać. Dzieje się tak, ponieważ, aby obiekt (np. zmienna – u nas b ) był iterowalny, musi zawierać metodę __next__() (wbudowaną do swojego typu/klasy), która pozwala na przejście do kolejnego elementu. Wartości liczbowe – zarówno int`y jak i liczby zmiennoprzecinkowe: float`y jej nie mają.

Jeżeli z jakiś niewiadomych przyczyn (; chcemy się dostać do każdej kolejnej cyferki liczby 123, można to oczywiście obejść np. zmieniając jej typ na string. Python pozwala swobodnie zmieniać typy zmiennych.

b = 123

def add_one_to_str_elem( num ):
    
    # .format to wygodne formatowanie string`ów
    # pozwala na wklejanie różnych wartości do ciągu znaków
    print('Typ b (num) przed zmianą: {}'.format( type(num) ) )

    # zmieniamy b na string
    str_num = str(num)
    print('Typ b (str_num) po zmianie: {}'.format( type(str_num) ) )

    # pusta wartość tekstowa
    empty_str = ''
    
    for number in str_num:
        # dodaj do każdego elementu 1 
        # w tym celu zamień na liczbę, a całość zamień z powrotem na tekst,
        # bo chcemy to jeszcze z powrotem złożyć
        number = str( int(number)+1 )
        empty_str += number
        print('empty_str w kolejnej iteracji pętli wygląda: {}'.format(empty_str))
        
    result = int(empty_str)
    print('Typ b (result) po zmianie na int i pętli: {}'.format(type(result)))
    
    return result

# wywołujemy funkcję
b = add_one_to_str_elem( b )
b

Nie trzeba było oczywiście tworzyć tylu zmiennych w funkcji, można było je nadpisywać, ale chciałam pokazać, że to klasa/typ dokładnie tej wartości. W efekcie dostaniemy:

Wynik pseudo iteracji przez liczbę i podgląd na typy w Pythonie

Są oczywiście różne fajniejsze sposoby na takie zadania, więc jeśli jesteś zaawansowanym Pythonowcem to nie krępuj się z podaniem fajniejszych rozwiąń w komentarzu (:.

Jesteś początkujący? Poćwicz sobie :-).

Analogiczne, bardzo proste ćwiczenia dla Ciebie. Nie kopiuj kodu, napisz go sama – a może wpadniesz na lepszy sposób wykonania zadań, bo w Pythonie jest przynajmniej kilkadziesiąt sposobów, na które można wykonać każde zadanie.

  • Spróbuj przeiterować przez wartość zmiennoprzecinkową np. przez 33.33, albo 123.99 (tak ma się nie udać (; )
  • Stwórz zmienną zawierającą wartość 1410 i stwórz liczbę, której każda kolejna cyfra jest 2 razy większa.
  • Wymyśl więcej zadań dla innych, to je dopiszę (;

About the author

Magdalena Wielobób

Dodaj komentarz