Podstawy programowania w Pythonie Wykład 6 dr Andrzej Zbrzezny Instytut Matematyki i Informatyki Akademia Jana Długosza w Cz˛estochowie 21 listopada 2012 dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 21.11.2012 1 / 18 Podstawy jezyka ˛ Python Konwersje typów Funkcja int przekształca swój argument, o ile to możliwe, na liczbe˛ całkowita. ˛ >>> int("30") 30 >>> int("3O") Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: '3O' >>> int(-2.3) # obcina cz˛ eść ułamkowa˛ -2 >>> int(3.9999) # obcina cz˛ eść ułamkowa˛ 3 >>> int() # można ja˛ wywołać bez argumentu 0 dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 21.11.2012 2 / 18 Podstawy jezyka ˛ Python Konwersje typów Jeżeli pierwszy argument funkcji int jest łańcuchem znaków, to można użyć drugiego argumentu, który musi być liczba˛ całkowita˛ z przedziału [2, 36] określajac ˛ a˛ podstawe˛ systemu liczbowego. >>> int(110, 2) Traceback (most recent call last): File "<input>", line 1, in <module> TypeError: int() can’t convert non-string with explicit base >>> int(’110’, 2) 6 >>> int(’123’, 2) Traceback (most recent call last): File "<input>", line 1, in <module> ValueError: invalid literal for int() with base 2: '123' dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 21.11.2012 3 / 18 Podstawy jezyka ˛ Python Konwersje typów Funkcja float przekształca liczby całkowite i łańcuchy znaków na liczby zmiennoprzecinkowe. >>> float("3.1417") 3.1417 >>> float(32) 32.0 >>> float(0j) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't convert complex to float >>> float() 0.0 dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 21.11.2012 4 / 18 Podstawy jezyka ˛ Python Konwersje typów Funkcja str przekształca swój argument na łańcuch znaków. >>> str(32) '32' >>> str(3.1417) '3.1417' >>> str(True) 'True' >>> str(true) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name ’true’ is not defined >>> str() '' dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 21.11.2012 5 / 18 Podstawy jezyka ˛ Python Konwersje typów Funkcja complex(a, b) tworzy liczbe˛ zespolona˛ ze swoich argumentów zgodnie ze wzorem a + b · 1j >>> complex(3, 5) (3+5j) >>> complex(3) # równoważne wywołaniu complex(3, 0) (3+0j) >>> complex() # równoważne wywołaniu complex(0, 0) 0j >>> complex(3, 5j) (-2+0j) >>> complex(3j, 5j) -5 + 3j dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 21.11.2012 6 / 18 Podstawy jezyka ˛ Python Konwersje typów Funkcja complex przekształca argument bed ˛ acy ˛ łańcuchem znaków na liczbe˛ zespolona. ˛ >>> complex("1+2j") (1+2j) >>> complex("1-2j") (1-2j) >>> complex("1") (1+0j) >>> complex("1j") 1j >>> complex("1 + 2j") Traceback (most recent call last): File "<input>", line 1, in <module> ValueError: complex() arg is a malformed string dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 21.11.2012 7 / 18 Podstawy jezyka ˛ Python Inne wbudowane funkcje konwertujace ˛ Funkcje bin, oct oraz hex przekształcaja˛ swój argument, który musi być liczba˛ całkowita˛ na łańcuch znaków. Wynikiem jest odpowiednio: łańcuch binarny, łańcuch oktalny oraz łańcuch heksadecymalny. >>> bin(2012) '0b11111011100' >>> oct(2012) '0o3734' >>> hex(2012) '0x7dc' dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 21.11.2012 8 / 18 Podstawy jezyka ˛ Python Funkcja wbudowana chr Wywołanie funkcji chr z argumentem m zwraca łańcuch znaków reprezentujacy ˛ znak, którego punktem kodowym w Unicode jest liczba całkowita m. Przykładowo, chr(80) zwraca łańcuch znaków 'P'. Zakres wartości dla argumentu funkcji chr obejmuje liczby od 0 do 1114111 (0x10FFFF w systemie szesnastkowym). Jeżeli wartość argumentu funkcji chr jest poza tym zakresem, to zostanie wygenerowany bład ˛ ValueError. dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 21.11.2012 9 / 18 Podstawy jezyka ˛ Python Przykład def main(): # Litery alfabetu angielskiego print_chars(65, 91) # duże print_chars(97, 123) # małe print_chars(0x391, 0x3A9) # duże print_chars(0x3B1, 0x3C9) # małe print_chars(0x410, 0x42F) # duże print_chars(0x430, 0x44F) # małe litery litery greckie litery greckie litery litery cyrylicy litery cyrylicy def print_chars(first, last): for j in range(first, last): print(chr(j), end = ’ ’) print() main() dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 21.11.2012 10 / 18 Podstawy jezyka ˛ Python Funkcje wbudowana ord Wywołanie funkcji ord z argumentem bed ˛ acym ˛ ciagiem ˛ reprezentujacym ˛ jeden znak Unicode, zwraca liczbe˛ całkowita˛ reprezentujac ˛ a˛ punkt kodowy w Unicode tego znaku. Przykładowo: ord('A') zwraca liczbe˛ całkowita˛ 65, ord('\uFFFF') zwraca liczbe˛ 65535, ord('\U0010FFFF') zwraca liczbe˛ 1114111. Funkcja ord jest funkcja˛ odwrotna˛ do funkcji chr: ord(chr(m)) = m chr(ord(c)) = c dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 21.11.2012 11 / 18 Podstawy jezyka ˛ Python Przykład def main(): print_char_numbers("0123456789") print_char_numbers("A˛ĆEŁ ˛ ŃÓŚŹŻ") print_char_numbers("ać˛ ˛ ełńóśźż") def print_char_numbers(string): for c in string: print(c, ":", ord(c), end = " print() ") main() dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 21.11.2012 12 / 18 Podstawy jezyka ˛ Python Instrukcja iteracyjna while (dopóki) Ogólna postać instrukcji iteracyjnej while jest nastepuj ˛ aca: ˛ while wyrażenie: blokInstrukcji else: blokIntrukcjiElse przy czym fragment else: blokIntrukcjiElse może nie wystapić. ˛ Instrukcja iteracyjna while jest używana do wykonywania bloku instrukcji tak długo, jak długo wartościa˛ logiczna˛ wyrażenia wyrażenie jest True. dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 21.11.2012 13 / 18 Podstawy jezyka ˛ Python Semantyka instrukcji iteracyjnej while Każdorazowo wartościowane jest wyrażenie wystepuj ˛ ace ˛ po słowie kluczowym while; jeśli jest ono prawdziwe, wykonywany jest blokInstrukcji. Jeśli za którymś razem (być może już za pierwszym) wartościa˛ wyrażenia bedzie ˛ False, nastepuje ˛ przerwanie wykonywania instrukcji iteracyjnej. Jeśli w instrukcji wystepuje ˛ klauzula else, to wykonywany jest zwiazany ˛ z nia˛ ciag ˛ instrukcji. dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 21.11.2012 14 / 18 Schemat blokowy instrukcji iteracyjnej while bez klauzuli else ✲ ❄ ❅ ❅ ❅ False warunek ❅ ❅ ❅ ❅ ❅ True ❄ blokInstrukcji ❄ dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 21.11.2012 15 / 18 Podstawy jezyka ˛ Python Przykład (Suma liczb od 1 do n) """Oblicza sum˛ e liczb naturalnych od 1 do n""" #!/usr/bin/env python3 def main(): n = int(input("Podaj liczb˛ e naturalna: ˛ ")) s = 0 j = 1 while j <= n: s = s + j j = j + 1 print("Suma liczb od 1 do", n, "wynosi", s) main() dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 21.11.2012 16 / 18 Podstawy jezyka ˛ Python Przykład (Ciag ˛ Collatza) def main(): n = int(input("Podaj liczb˛ e naturalna: ˛ ")) seq3np1(n) def seq3np1(n): while n > 1: print(n, end = ", ") if n % 2 == 0: n = n // 2 else: n = 3 * n + 1 print(n, end = ".\n") if __name__ == "__main__": main() dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 21.11.2012 17 / 18 Podstawy jezyka ˛ Python Przykład (Ilość cyfr w liczbie naturalnej) def main(): n = int(input("Podaj liczb˛ e naturalna˛ dodatnia: ˛ ")) if n > 0: print("Ilość cyfr liczby", n, ":", n_digits(n)) else: print("Skup si˛ e! Powiedziałem \"Dodatnia\"!") ˛ def n_digits(n): count = 0 while n > 0: count += 1; n //= 10 return count if __name__ == "__main__": main() dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 21.11.2012 18 / 18