← Lekcje
Python · lekcja 04

Operatory arytmetyczne

  1. Siedem działań: + - * / // % **
  2. Kiedy wynik jest liczbą całkowitą, a kiedy ułamkiem
  3. Kolejność działań i nawiasy
  4. Zaokrąglanie round i wartość bezwzględna abs
Rozgrzewka · 3 minuty

Co pamiętacie z lekcji 3?

  1. Co robi funkcja input i co oddaje programowi?
  2. Jakiego typu jest to, co przychodzi z klawiatury?
  3. Co się stanie, gdy dodacie dwie liczby z input bez int?
Część 1 · Operatory arytmetyczne

Sześć działań: dwa z nich są nowe

OperatorNazwaPrzykładWynik
+dodawanie7 + 29
-odejmowanie7 - 25
*mnożenie7 * 214
/dzielenie7 / 23.5
//dzielenie całkowite7 // 23
%reszta z dzielenia7 % 21

Jabłka: 7 jabłek dla 2 osób. Każda dostaje 7 // 2, czyli 3, a 7 % 2, czyli 1 jabłko, zostaje w koszyku. Wynik / to zawsze float: 6 / 2 daje 3.0.

Podręcznik Informatyka na czasie 2 (Nowa Era), s. 227 (dodatek 8 „Operatory i funkcje matematyczne”, tabela operatorów arytmetycznych) · docs.python.org, The Python Tutorial, rozdz. 3.1.1 (Numbers)
Część 1 · Siódme działanie

Potęgowanie: dwie gwiazdki

Siódmy operator to **, czyli potęgowanie. Po lewej stoi podstawa, po prawej wykładnik. Uwaga: jedna gwiazdka to mnożenie, dwie to potęga.

>>> 5 ** 2
25
>>> 2 ** 7
128
>>> 2 ** 10
1024
>>> 9 ** 0.5
3.0
  • 5 ** 2 to 5 podniesione do kwadratu, czyli 5 razy 5.
  • 2 ** 10 to dwójka pomnożona przez siebie dziesięć razy.
  • Wykładnik 0.5 daje pierwiastek kwadratowy: 9 ** 0.5 to 3.0.
docs.python.org, The Python Tutorial, rozdz. 3.1.1 (Numbers) · Podręcznik Informatyka na czasie 2 (Nowa Era), s. 227 (dodatek 8, potęgowanie 2 ** 3)
Część 2 · Typ wyniku

Całkowita czy z przecinkiem?

wynik int: liczba całkowita 7 + 2 → 9 7 // 2 → 3 2 ** 3 → 8 same liczby całkowite wynik float: z przecinkiem 6 / 2 → 3.0 8 / 5 → 1.6 4 * 3.75 - 1 → 14.0 dzielenie albo ułamek w działaniu

Dwie zasady wystarczą. Po pierwsze: / zawsze daje float, nawet gdy dzieli się równo. Po drugie: gdy w działaniu jest choć jeden ułamek, cały wynik jest float.

docs.python.org, The Python Tutorial, rozdz. 3.1.1 (Numbers) · Podręcznik Informatyka na czasie 2 (Nowa Era), s. 223 (dodatek 6 „Typy danych w języku Python”)
Część 2 · Kolejność działań

Python liczy jak na matematyce

1. nawiasy ( ) (50 - 5 * 6) / 4 → 5.0 2. potęgowanie ** 2 + 3 * 4 ** 2 → 50 3. * / // % 2 + 3 * 4 → 14 4. + oraz - 50 - 5 * 6 → 20

Działania z jednego piętra Python liczy od lewej do prawej: 10 - 4 - 3 to 3. Nawias zmienia wszystko: 2 + 3 * 4 to 14, ale (2 + 3) * 4 to 20.

docs.python.org, The Python Tutorial, rozdz. 3.1.1 (Numbers)
Część 3 · Dwie funkcje

round i abs

ZapisWynikCo się dzieje
round(2.6)3zaokrąglenie do najbliższej liczby całkowitej
round(2.5)2przy dokładnej połówce wynik idzie do liczby parzystej
round(3.5)4tu parzysta jest czwórka, więc w górę
round(113.0625, 2)113.06drugi argument to liczba miejsc po przecinku
abs(-2)2wartość bezwzględna, czyli odległość od zera
abs(-4.5)4.5ułamek zostaje ułamkiem, znika tylko minus

Ciekawostka: przy dokładnej połówce Python zaokrągla do liczby parzystej, dlatego round(2.5) daje 2, a round(3.5) daje 4. Dzięki temu w długiej kolumnie liczb błędy zaokrągleń w górę i w dół się znoszą.

Podręcznik Informatyka na czasie 2 (Nowa Era), s. 227 (dodatek 8, wbudowane funkcje matematyczne: round, abs) · docs.python.org, The Python Tutorial, rozdz. 3.1.1 (Numbers)
Część 3 · Działania na danych użytkownika

Program, który dzieli jabłka

print("Ile jabłek zebraliście?")
apples = int(input())
print("Ile jest osób?")
people = int(input())

each = apples // people
left = apples % people
print("Każdy dostaje", each, "jabłka, w koszyku zostaje", left)
print("Średnio na osobę:", round(apples / people, 2))
Ile jabłek zebraliście?
17
Ile jest osób?
5
Każdy dostaje 3 jabłka,
w koszyku zostaje 2
Średnio na osobę: 3.4

// mówi, ile pełnych jabłek dostaje każdy, % ile zostaje, a / z round podaje średnią.

docs.python.org, The Python Tutorial, rozdz. 3.1.1 (Numbers) · Podręcznik Informatyka na czasie 2 (Nowa Era), s. 227 (dodatek 8, operatory // i %, funkcja round)
Ćwiczenie · przy komputerze · 12 minut

Ćwiczenie: policz i sprawdź

  1. Zapisz na kartce swoje przewidywania, potem sprawdź w Pythonie: 13 // 4, 13 % 4, 13 / 4, 2 ** 10, round(7 / 3, 2), abs(-12).
  2. Napisz program, który pyta o liczbę sekund i wypisuje ją jako minuty i sekundy. Sprawdź dla 125 i dla 200.
  3. Policz bez komputera 2 + 3 * 4 ** 2, sprawdź w Pythonie, a potem dopisz nawias tak, żeby wyszło 80.
Jak to sprawdzić

W terminalu wpisz python3 i wciśnij Enter. Pojawią się trzy znaki >>>. Wpisuj kolejne działania i zatwierdzaj Enterem, wynik pojawia się od razu. Wyjście z trybu interaktywnego: exit() albo Ctrl+D.

Sprawdzenie

Trzy pytania na koniec

  1. Czym różni się wynik 7 / 2 od wyniku 7 // 2?
  2. Co wypisze print(2 + 3 * 4) i dlaczego?
  3. Jakim działaniem sprawdzicie, czy liczba n jest parzysta?
Podsumowanie

A jak to wygląda w produkcji?

Na lekcjiW produkcjiStatus
// i %Przeliczanie sekund na minuty i sekundy: 125 // 60 to 2 minuty, 125 % 60 to 5 sekundcodziennie
% reszta z dzieleniaCo druga linia tabeli w innym kolorze: numer wiersza % 2; zadanie „co 15 minut”: minuta % 15 równa zerocodziennie
round do dwóch miejscKwoty na fakturze i średnie w raportach zaokrągla się na samym końcu, nigdy w trakcie liczeniastandard w firmach
float do pieniędzyCeny trzyma się jako liczbę groszy w int, bo 0.1 + 0.2 daje 0.30000000000000004zmienione

W praktyce: ułamki w komputerze są zapisywane dwójkowo, więc 0.1 i 0.2 to drobne przybliżenia. Ich suma wychodzi odrobinę za duża i widać to po siedemnastu cyfrach.