CodeGym /Kursy /Python SELF PL /Praca z typami liczbowymi

Praca z typami liczbowymi

Python SELF PL
Poziom 5 , Lekcja 3
Dostępny

3.1 Typy liczbowe: int, float, complex

Python ma kilka typów liczbowych, każdy z nich nadaje się do różnych zadań i przetwarzania danych. Już wspominaliśmy o typach danych int, float, complex, a także o typach logicznych bool, które są podklasą liczb całkowitych. Teraz omówimy każdy z tych typów bardziej szczegółowo.

int (Liczby całkowite):

To prawdopodobnie najczęściej używany typ liczbowy w Pythonie. Liczby całkowite mogą być dodatnie lub ujemne i nie mają miejsc dziesiętnych. Python obsługuje dowolną precyzję, co oznacza, że praktycznie nie ma ograniczeń co do wielkości liczb, które można przetwarzać, z wyjątkiem ograniczeń pamięci Twojego urządzenia.

float (Liczby zmiennoprzecinkowe):

Te liczby służą do reprezentowania liczb rzeczywistych i mogą zawierać punkty dziesiętne. Python implementuje liczby zmiennoprzecinkowe zgodnie ze standardem IEEE 754 double-precision, co daje precyzję około 15 miejsc dziesiętnych po przecinku.

complex (Liczby zespolone):

Liczby zespolone mają część rzeczywistą i urojeniową. Obydwa składniki są reprezentowane jako liczby zmiennoprzecinkowe. W Pythonie do oznaczenia części urojeniowej używany jest sufiks j lub J. Na przykład, liczbę zespoloną można stworzyć tak:

complex_number = 3 + 5j

bool (Wartości logiczne):

W Pythonie True i False są specjalizowaną wersją liczb całkowitych i działają jak 1 i 0 odpowiednio. Umożliwia to ich użycie w operacjach arytmetycznych i innych wyrażeniach matematycznych.

Operacje arytmetyczne:

Python obsługuje wszystkie podstawowe operacje arytmetyczne, w tym dodawanie, odejmowanie, mnożenie, dzielenie, dzielenie całkowite, modulo i potęgowanie. Na przykład:

  • Dodawanie: 3 + 2
  • Odejmowanie: 5 - 2
  • Mnożenie: 2 * 3
  • Dzielenie: 7 / 2
  • Dzielenie całkowite: 7 // 2
  • Modulo: 7 % 2
  • Potęgowanie: 2 ** 3

Konwersja typów:

Już wspomnieliśmy o konwersji (lub rzutowaniu) typów. Liczbę jednego typu na inny można zamienić za pomocą funkcji rzutowania, takich jak int(), float() i complex().

Niektóre zagadnienia związane z konwersją typów liczbowych już omówiliśmy wcześniej, inne omówimy bardziej szczegółowo na kolejnych wykładach.

3.2 Liczby pseudolosowe

Czasami programista napotyka na proste, wydawałoby się, zadania: „wybrać losowy film do obejrzenia z określonej listy”, „wybrać zwycięzcę loterii”, „przemieszać listę piosenek podczas potrząsania smartfonem”, „wybrać losową liczbę do zaszyfrowania wiadomości”. Za każdym razem pojawia się pytanie: jak uzyskać tę właśnie losową liczbę?

Otrzymanie „prawdziwej” losowej liczby jest dość trudne. Nawet do tego stopnia, że do komputera wbudowuje się specjalne koprocesory matematyczne, które potrafią generować takie liczby, spełniając wszystkie wymagania dotyczące „prawdziwej losowości”.

Dlatego programiści wymyślili swoje rozwiązanie – liczby pseudolosowe. Liczby pseudolosowe to pewna sekwencja, liczby w której na pierwszy rzut oka wydają się losowe, ale specjalista przy dokładnej analizie może zauważyć w niej pewne prawidłowości. Do szyfrowania tajnych dokumentów takie liczby się nie nadadzą, ale do imitacji rzutu kością w grze – jak najbardziej.

Istnieje wiele algorytmów generowania sekwencji liczb pseudolosowych i prawie wszystkie z nich generują kolejną liczbę na podstawie poprzedniej i kilku pomocniczych liczb.

Na przykład, ten program wypisze na ekran 1000 unikalnych liczb:


a = 41
c = 11119
m = 11113
seed = 1
                   

def get_next_random():
    global seed
    seed = (a * seed + c) % m
    return seed
                   
for t in range(1000):
    x = get_next_random()
    print(x)              

Swoją drogą, mówimy nie o liczbach pseudolosowych, a właśnie o sekwencji takich liczb. Bo patrząc na jedną liczbę, nie można zrozumieć, czy jest losowa, czy nie.

Losową liczbę można uzyskać na różne sposoby:

def get_random_number():
    return 4  # to na pewno losowa liczba (wyrzuciłem ją kośćmi), zobacz "Żart o kościach"               

3.3 Biblioteka random

W Pythonie jest wbudowana biblioteka random, z którą warto popracować. Jak już pewnie się domyślacie po jej nazwie, za pomocą tej biblioteki można generować [pseudo]losowe liczby.

Biblioteka random, mimo że jest wbudowana, jest osobną biblioteką, dlatego zanim ją użyjemy, musimy ją zaimportować do naszego kodu. Robi się to za pomocą słowa kluczowego import. Przykład:


import random 

W bibliotece random jest wiele ciekawych metod, ale dziś poznamy tylko dwie: metodę random() i metodę randint(). One realizują podobne, ale różne zadania:

Metoda random.random():

Ta metoda zwraca losową liczbę zmiennoprzecinkową pomiędzy 0.0 a 1.0. Liczby są generowane równomiernie w tym zakresie. Oznacza to, że każda liczba wewnątrz tego przedziału ma jednakową szansę na wybór.


import random 

probability = random.random()
print("Losowa szansa:", probability)               

Metoda random.randint(a, b):

Ta funkcja zwraca losową liczbę całkowitą w zakresie od a do b włącznie. W przeciwieństwie do random.random(), która zwraca losową liczbę zmiennoprzecinkową w zakresie od 0 do 1, randint() jest używana, gdy chcemy wybrać liczbę całkowitą. Na przykład, random.randint(1, 10) może zwrócić każdą liczbę całkowitą od 1 do 10, włącznie z obydwoma wartościami końcowymi.


import random

dice_roll = random.randint(1, 6)  # Symulacja rzutu kością do gry
print("Wylosowano liczbę:", dice_roll)               

To bardzo przydatne i interesujące metody, więc korzystajcie w zdrowiu.

3.4 Biblioteka math

Skoro już zaczęliśmy, pozwól, że przedstawię Ci jeszcze jedną ciekawą bibliotekę. To biblioteka math. Zawiera ona podstawowe funkcje matematyczne i stałe, takie jak liczby π i e.

Podobnie jak bibliotekę random, ją również trzeba zaimportować przed użyciem:


import math 

Oto tabela z podstawowymi funkcjami i stałymi biblioteki math w Pythonie:

Funkcja/Stała Opis
math.pi Stała π, około 3.14159
math.e Podstawa logarytmu naturalnego, około 2.71828
math.sqrt(x) Zwraca pierwiastek kwadratowy z x
math.exp(x) Zwraca e podniesione do potęgi x
math.log(x[, base]) Zwraca logarytm z x o podstawie base, jeśli base jest podane; w przeciwnym razie zwraca logarytm naturalny.
math.cos(x) Zwraca cosinus x, gdzie x jest podane w radianach
math.sin(x) Zwraca sinus x, gdzie x jest podane w radianach
math.tan(x) Zwraca tangens x, gdzie x jest podane w radianach
math.ceil(x) Zaokrągla liczbę w górę do najbliższej liczby całkowitej
math.floor(x) Zaokrągla liczbę w dół do najbliższej liczby całkowitej
math.factorial(x) Zwraca silnię x

Nawet jeśli nie przepadasz za matematyką i nie zamierzasz używać tych funkcji przez najbliższe 10 lat, tu są co najmniej trzy bardzo przydatne:

  • sqrt() — pierwiastek kwadratowy z liczby
  • ceil() — zaokrąglenie w górę do najbliższej liczby całkowitej
  • floor() — zaokrąglenie w dół do najbliższej liczby całkowitej

Przykłady:


import math

number = 9.7
rounded_up = math.ceil(number)  # Zaokrągla w górę, wynik 10 
rounded_down = math.floor(number)  # Zaokrągla w dół, wynik 9 
            
print("Zaokrąglona w górę liczba:", rounded_up)
print("Zaokrąglona w dół liczba:", rounded_down)              
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION