
Cześć! To jest fragment książki Python od podstaw, która ma pomóc w nauce programowania od zera. Znajdziesz ją na Allegro, w Empikach i w księgarniach internetowych.
W poprzednim rozdziale nauczyliśmy się jak napisać kod Python, wypisujący tekst "Witaj, Świecie":
print("Witaj, Świecie") # Witaj, Świecie
Kiedy na niego patrzysz, być może zastanawiasz się, dlaczego wygląda on tak, a nie inaczej. Czym jest
print? Czemu tekst Witaj, Świecie jest w cudzysłowie? Wszystko z czasem się wyjaśni. print poznamy lepiej przy okazji funkcji. Teraz zaś pomówmy o wartości "Witaj, Świecie".Cudzysłowy służą do określenia wartości tekstowej. Gdy czytasz książkę fabularną, cudzysłowy często określają, co dosłownie pomyślał bohater. Podobnie jest w programowaniu, oznaczają dokładną wartość tekstową.
# Język pisany
Wypisz "Witaj, Świecie"
# Python
print("Witaj, Świecie") # Witaj, Świecie
Tekst w cudzysłowie nie zostanie zinterpretowany, czyli nawet gdyby zawierał instrukcję, nie zostanie ona wykonana. Jest wartością zawierającą tekst znak po znaku. Z taką wartością możemy coś zrobić, na przykład przekazać ją do
print. Choć raczej nie ma to sensu, równie dobrze moglibyśmy też nic z nią nie robić.print(10) # 10 # Powstanie wartość i nic się z nią nie stanie "print(10)" print("print(10)") # print(10)
Wartości tekstowe w programowaniu są zwykle nazywane stringami. Wzięło się to od angielskiego słowa "string", oznaczającego sznur lub strunę. Trochę przypominają sznur znaków: mogą mieć rozmaite długości, można je łączyć albo przycinać, można nawet wyciąć ze środka mały kawałek. Ta nazwa już się utarła i jest standardem w niemal wszystkich językach programowania. Programiści zaczęli używać tego pojęcia także w języku mówionym. Czasem stosuje się spolszczenie "ciąg znaków" albo "łańcuchy znaków", ale rzadko kiedy ktoś tak mówi. Programiści mówią "stringi"[^102_1], a że celem tej książki jest uczenie wiedzy praktycznej, więc i ja nie będę się wyłamywał od takiej nomenklatury.
W języku Python stringi można tworzyć przy użyciu cudzysłowu podwójnego
" lub pojedynczego '.
Nie ma istotnych różnic między nimi. Są tylko pewne konwencje, które sprawiają, że w jednych przypadkach programiści preferują jedne, a w innych drugie. W książce zdecydowałem się na użycie podwójnego cudzysłowu
", który uważam za bardziej intuicyjny dla nas, Polaków.print("Witaj, Świecie") # Witaj, Świecie print('Witaj, Świecie') # Witaj, Świecie
Wiedza o różnych cudzysłowach może się przydać, gdy potrzebujesz uzyskać tekst z cudzysłowem. Jeśli chcesz wyświetlić w tekście pojedynczy cudzysłów, otocz tekst podwójnymi. Jeśli podwójny, otocz pojedynczymi.
print("Let's play") # Let's play print('Powiedział "Hej"') # Powiedział "Hej"
Tekst otoczony jednym cudzysłowem musi znajdować się w jednej linii. Jeśli chcielibyśmy, by zawierał on kilka linii, to oddzielamy je znakiem "\n". Można powiedzieć, że oznacza on "Enter".
text = "Line 1,\nLine2" print(text) # Wypisze: # Line 1 # Line 2
Tekst możemy także otoczyć trzema cudzysłowami (pojedynczymi lub podwójnymi). Wtedy może on mieć wiele linii.
text = """Line 1, Line 2""" print(text) # Wypisze: # Line 1 # Line 2
W języku pisanym możemy łączyć ze sobą cytaty. Moglibyśmy na przykład powiedzieć:
# Język pisany
Wypisz "Witaj, " oraz "Świecie"
W programowaniu wartości
"Witaj, " oraz "Świecie" możemy połączyć w jedną przy użyciu znaku dodawania +, który postawiony pomiędzy dwoma stringami utworzy ich połączenie:print("Witaj, " + "Świecie") # Witaj, Świecie
Co zostanie wypisane w poniższym kodzie?
print('Kim jest "ona"?') print("Użyję " + " by dodać teksty") print("Tekst," + "następny," + "jeszcze jeden")
Odpowiedzi na końcu książki.
Liczba również jest wartością. W Python operujemy na liczbach całkowitych (np.
23) oraz rzeczywistych (np. 23.5). Wszystkie liczby mogą być ujemne (z minusem przed liczbą). Zauważ, że część dziesiętna w przypadku liczb rzeczywistych zapisywana jest po kropce, czyli według zasad języka angielskiego (np. 3.14, a nie 3,14).# Liczby całkowite print(42) # 42 print(-1) # -1 # Liczby rzeczywiste print(2.71) # 2.71 print(-3.14) # -3.14
Na liczbach możemy wykonywać operacje matematyczne. Python wspiera wiele operacji, które część czytelników może pamiętać jeszcze ze szkoły:
- Dodawanie
+ - Odejmowanie
- - Mnożenie
* - Dzielenie
/ - Dzielenie bez reszty
// - Reszta z dzielenia
% - Podnoszenie do potęgi
**
# Dodawanie print(3 + 2) # 5 print(10 + 8) # 18 print(2 + 4) # 6 # Odejmowanie print(3 - 2) # 1 print(10 - 8) # 2 print(2 - 4) # -2 # Mnożenie print(3 * 2) # 6 print(10 * 8) # 80 print(2 * 4) # 8 # Dzielenie print(3 / 2) # 1.5 print(10 / 8) # 1.25 print(2 / 4) # 0.5 # Dzielenie bez reszty print(3 // 2) # 1 print(10 // 8) # 1 print(2 // 4) # 0 # Reszta z dzielenia print(3 % 2) # 1 print(10 % 8) # 2 print(2 % 4) # 2 # Podnoszenie do potęgi print(3 ** 2) # 9 print(10 ** 8) # 100000000 print(2 ** 4) # 16
Co ważne, jeśli wykonamy operację między dwoma liczbami całkowitymi, wynik również będzie liczbą całkowitą. Jeśli natomiast jedna z tych liczb będzie miała wartość dziesiętną, a więc będzie liczbą rzeczywistą, to wynik również będzie liczbą rzeczywistą.
print(2 + 3) # 5 print(2 + 3.0) # 5.0 print(2.0 + 3) # 5.0 print(2.0 + 3.0) # 5.0
Pythona można wykorzystywać jako kalkulator, nawet do obliczania wyników złożonych operacji. Domyślnie zachowana jest matematyczna kolejność działań, można również stosować nawiasy.
print(1 + 2 * 3) # 7 # (mnożenie wykonywane jest przed dodawaniem) print(1 + (2 * 3)) # 7 print((1 + 2) * 3) # 9 print(1 ** 2 + 2 ** 2 + 3 ** 2 + 4 ** 2) # 30 print(1 * 2 * 3 * 4 * 5) # 120 print(1 * 2 + 3 * 4 + 5 * 6) # 44
Tutaj warto sięgnąć pamięcią do poprzedniego rozdziału, gdzie uczyliśmy się jak używać REPL. Niejednokrotnie używałem go jak kalkulatora.

Użyj Python REPL aby ustalić, ile to jest:
1 * 2 + 3 * 4 + 5 * 6 + 7 * 8 + 91 * (2 + 3) * (4 + 5) * (6 + 7) * (8 + 9)(Czy wartość ta będzie się różniła od powyższej?)1 * 2 / 3 * 4 / 5 * 6 / 7 * 8 / 9 * 10(Czy wartość ta będzie większa niż 1?)- $2^{10}$ (Czy spodziewasz się, że wartość ta będzie większa, czy mniejsza niż 1000?)
Odpowiedzi na końcu książki.
Kolejnym istotnym typem wartości są wartości logiczne, czyli prawda
True oraz fałsz False.print(True) # True print(False) # False
Są one przydatne w wielu przypadkach. Na przykład mogą określać, czy użytkownik wyraził zgodę na zbieranie danych (
True) czy nie (False). W rozdziale o warunkach przekonamy się, że mogą one decydować, czy jakiś fragment kodu powinien zostać wywołany. Wartości logiczne są bardzo przydatne i istotne, tylko skąd się biorą?Wartości logiczne najczęściej powstają w wyniku porównywania dwóch wartości. Używamy do tego operatora
== (podwójny znak równości), który zwraca True gdy wartości są sobie równe, oraz False gdy nie są. Zadziała on dla znanych nam już liczb i stringów.print(1 == 1) # True print(1 == 2) # False print("Marcin" == "Marcin") # True print("Marcin" == "Maciek") # False
Uwaga! Operator==, oznaczający porównanie, nie powinien być mylony z=, który opiszemy w dalszej części książki, a oznacza przypisanie wartości.
Jest także operator
!= sprawdzający, czy wartości są różne. W praktyce zwracana przez niego wartość logiczna jest zawsze odwrotna do tej zwracanej przez == (czyli jeśli == zwróciłby True, to != zwróci False, a jeśli == zwróciłby False, to != zwróci True).print(1 != 1) # False print(1 != 2) # True print("Marcin" != "Marcin") # False print("Marcin" != "Maciek") # True
Te operatory można łączyć z innymi poznanymi operacjami:
print("Witaj, " + "Świecie" == "Witaj, Świecie") # True print(1 + 2 == 3) # True print(1 + 2 != 3) # False
Warto zauważyć, że powyższy kod działa poprawnie dzięki kolejności działań. Porównywanie
== i != jest wykonywane po operatorach arytmetycznych. By obliczyć 3 == 1 + 2, w pierwszej kolejności wykonywana jest operacja dodawania 1 + 2, a dopiero potem porównanie 3 == 3, zwracające wynik True.Warto wiedzieć, że znak równości w programowaniu ma znaczenie nieco inne, niż znak równości w szkolnej matematyce. Gdy na matematyce widzieliśmyx * 2 = 4to zakładaliśmy, że to równanie musi być spełnione, więcxmusi być równy 2. W programowaniu sprawdzamy, czy jest spełnione, czy nie.xmoże być na przykład równy3i wtedy równaniex * 2 == 4zwróciFalse.
Czasem może wystąpić potrzeba sprawdzenia, czy jedna wartość jest większa od drugiej. Do tego wykorzystujemy operatory porównania[^102_2]:
>sprawdzający, czy to, co jest po lewej stronie, jest większe od tego, co jest po prawej,<sprawdzający, czy to, co jest po lewej stronie, jest mniejsze od tego, co jest po prawej,>=sprawdzający, czy to, co jest po lewej stronie, jest większe lub równe od tego, co jest po prawej,<=sprawdzający, czy to, co jest po lewej stronie, jest mniejsze lub równe od tego, co jest po prawej.
print(1 > 3) # False print(1 < 3) # True print(2 > 3) # False print(3 > 3) # False print(4 > 3) # True print(2 < 3) # True print(3 < 3) # False print(4 < 3) # False print(2 >= 3) # False print(3 >= 3) # True print(4 >= 3) # True print(2 <= 3) # True print(3 <= 3) # True print(4 <= 3) # False
Użyj Python, by sprawdzić, co jest większe:
1 * 2 + 3 * 4 + 5czy1 + 2 * 3 + 4 * 5?- $2^{20}$ czy $3^{15}$?
- $2^{15}$ czy $10^4$?
Odpowiedzi na końcu książki.
Na przestrzeni tego rozdziału omówiliśmy kilka podstawowych typów wartości. Poznaliśmy liczby całkowite i rzeczywiste, stringi, wartości logiczne. Każdy z tych typów jest jakby z innego świata, mówiąc językiem matematyki "z innej przestrzeni". W programowaniu każda wartość ma swój typ, który określa z jakiej przestrzeni są dane wartości. Mają one swoje nazwy:
- Stringi (teksty) są typu
str[^102_3]. - Liczby całkowite (bez wartości dziesiętnej) są typu
int[^102_4]. - Liczby rzeczywiste (z wartością dziesiętną) są typu
float[^102_5]. - Wartości logiczne (
TrueiFalse) są typubool[^102_6].
Typ określonej wartości można sprawdzić przy użyciu funkcji
type:print(type("")) # <type 'str'> print(type("Some text")) # <type 'str'> print(type("Text " + "another")) # <type 'str'> print(type(10)) # <type 'int'> print(type(0)) # <type 'int'> print(type(-10)) # <type 'int'> print(type(0.1)) # <type 'float'> print(type(3.14)) # <type 'float'> print(type(42.0)) # <type 'float'> print(type(True)) # <type 'bool'> print(type(False)) # <type 'bool'> print(type((1 > 2))) # <type 'bool'>
Poza nimi Python wspiera także wiele innych typów, jak również można definiować własne. Przekonamy się o tym w dalszych częściach książki.
Spokojnie, wszystko po kolei. W następnych rozdziałach poznamy wymienione typy wartości i przekonamy się, jak wykorzystuje się je w programowaniu. Poznając kolejne bloki, będziemy umieć coraz więcej z nimi zrobić, a na koniec wykorzystamy je, by napisać własną grę. Gotowi? To ruszamy! Czas poznać zmienne.
[^102_1]: Językoznawcy często nie są zadowoleni z tego stanu rzeczy, ale zauważyłem, że programiści cechują się wyjątkową obojętnością wobec zadowolenia językoznawców.
[^102_2]: Formalnie pojęcie operatora porównania obejmuje także
== i !=. Nie znalazłem jednak słowa, które określałoby wyłącznie <, >, <= i >=. Uniknąłem też pojęcia operatora nierówności, gdyż w programowaniu silnie kojarzy się z !=.
[^102_3]: str to skrót od "string".
[^102_4]: int to skrót od "integer", czyli po angielsku liczba całkowita.
[^102_5]: Nazwa "float" odnosi się do tego, jak w programowaniu kodowane są liczby rzeczywiste.
[^102_6]: Nazwa tego typu pochodzi od nazwiska matematyka George Boole’a, który wprowadził metody algebraiczne do logiki, tworząc tzw. algebrę Boole’a. Traktuje ona True i False jako wartości oraz definiującą różne operacje, takie jak i, lub czy nie.