1. Stałe, zmienne i typy danych

1.1. Stałe i zmienne

1.1.1. Deklarowanie zmiennych

my_variable = 10
my_variable = 'ehlo world'

1.1.2. Deklarowanie stałych

MY_CONSTANT = 10
MY_CONSTANT = 'ehlo world'

1.1.3. Różnica między stałymi i zmiennymi

Jedyną różnicą jest konwencja nazewnicza:

  • stałe zapisujemy dużymi literami
  • zmienne zapisujemy małymi literami

1.1.4. Zasięg widoczności

  • globals()
  • locals()

1.2. Numeryczne typy danych

1.2.1. int - Liczba całkowita

Jednym z najbardziej podstawowych typów danych jest int. int() jest funkcją wbudowaną, która zamieni swój argument na liczbę całkowitą.

>>> age = 10

>>> int(10)
10

>>> int(10.0)
10

>>> int(10.9)
10

1.2.2. float - Liczba zmiennoprzecinkowa

float w Pythonie reprezentuje liczbę zmiennoprzecinkową. Ciekawą własnością tego typu jest możliwość reprezentacji nieskończoności za pomocą Infinity oraz minus nieskończoności -Infinity. Więcej szczegółów dostępnych jest w dokumentacji dla tego typu

Podobnie jak pozostałe typy float() jest funkcją, która konwertuje swój argument na liczbę zmiennoprzecinkową.

>>> float(10)
10.0

>>> float('+1.23')
1.23

>>> float('   -12345\n')
-12345.0

>>> float('1e-003')
0.001

>>> float('+1E6')
1000000.0

>>> float('-Infinity')
-inf

1.2.3. complex - liczba zespolona

complex reprezentuje typ liczby zespolonej posiadającej część rzeczywistą oraz urojoną. Należy zwrócić uwagę, że argument powinien być ciągiem znaków niezawierającym spacji. W przeciwnym przypadku otrzymamy ValueError.

>>> complex('1+2j')
(1+2j)

>>> complex('1 + 2j')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: complex() arg is a malformed string

1.3. Tekstowe typy danych

1.3.1. str - Ciąg znaków

Obiekt typu str przechowuje łańcuch znaków. str() jest także funkcją, która zwraca ciąg znaków z argumentu.

>>> name1 = 'José'
'José'

>>> name2 = "Ivan"
'Ivan'

>>> print("""
... Max Peck
... """)
'\nMax Peck\n'

>>> str(10)
'10'

1.3.2. Wprowadzanie znaków od użytkownika

  • Spacja na końcu prompt
name = input('Type your name: ')
print(name)

1.3.3. Escape’owanie znaków

"""
\xac
\u7723
\n
\b
\r
\t
\'
"""

1.3.4. Znaki przed stringiem

u'zażółć gęślą jaźń'
r'(?P<foo>)\n' # escapes does not matters
r'C:\Users\Admin\Desktop\foobar.txt'
f'hello {first_name}, how are you?'
b'this is text'

1.3.5. Niemutowalność

  • Ważną cechą ciągów znakowych jest tzw. niemutowalność.
  • Gdy wykonujemy operację na stringu tworzona jest jego nowa kopia.
  • Zwóć uwagę ile stringów jest przechowywanych w pamięci
>>> name = 'José'
>>> name += 'Jiménez'
>>> print(name)
José Jiménez

1.3.6. Pojedynczy czy podwójny cudzysłów

  • Python nie rozróżnia czy stosujemy pojedyncze znaki cudzysłowiu czy podwójne.
  • Ważne jest aby wybrać jedną konwencję i się jej konsekwentnie trzymać.
  • Interpreter Pythona domyślnie stosuje pojedyncze znaki cudzysłowia.
  • Z tego powodu w tej książce będziemy trzymać się powyższej konwencji.

1.3.7. Operacje na stringach

  • split()
>>> text = 'ehlo,world'
>>> text.split(',')
['ehlo', 'world']
  • strip(), lstrip(), rstrip()
    >>> name = '    Max Peck    '
    >>> name.strip()
    'Max Peck'
    >>> name.lstrip()
    'Max Peck    '
    >>> name.rstrip()
    '    Max Peck'
    
  • startswith()
    name = 'José Jiménez'
    
    if name.startswith('José'):
        print('My name José Jiménez')
    else:
        print('Noname')
    
  • join()
    >>> names = ['José', 'Max', 'Ivan', str(1961), '1969']
    >>> ';'.join(name)
    'José;Max;Ivan;1961;1969'
    
  • title(), lower(), upper()
    >>> name = 'joSé jiMénEz'
    
    >>> name.title()
    'José Jiménez'
    
    >>> name.upper()
    'JOSÉ JIMÉNEZ'
    
    >>> name.lower()
    'josé jiménez'
    
  • replace()
    >>> name = 'José Jiménez'
    >>> name.replace('J', 'j')
    'josé jiménez'
    

1.3.8. Wykonywanie operacji na obiekcie

>>> text = 'Ehlo,world'

>>> text.split(',')
['ehlo', 'world']

>>> str.split(text, ',')
['ehlo', 'world']

>>> str.split('Ehlo,world', ',')
['ehlo', 'world']

1.3.9. Wycinanie części stringów

>>> text = 'Lorem ipsum'

>>> text[2]
'r'

>>> text[:2]
'Lo'

>>> text[0:3]
'Lor'

>>> text[1:4]
'ore'

>>> text[-3]
's'

>>> text[-3:]
'sum'

>>> text[-3:-1]
'su'

>>> text[:-2]
'Lorem ips'

1.3.10. io

io to biblioteka do obsługi strumienia wejściowego i wyjściowego. StringIO jest wtedy traktowany jak plik wejściowy.

import io

io.StringIO

1.4. Logiczne typy danych

1.4.1. bool - Wartość logiczna

Obiekt typu bool może przyjąć dwie wartości logiczne:

  • True
  • False

Zwróć uwagę na wielkość liter!

bool() to także funkcja wbudowana w język Python, która zwraca wartość logiczną wyrażenia.

1.4.2. None - Wartość pusta

Ważne: nie jest to wartość False ani 0. Wyobraź sobie, że masz bazę danych z użytkownikami. Gdy użytkownik nie poda wieku, to jest to wartość None.

wiek = None

if wiek is None:
    print('użytkownik nie podał wieku')

if not wiek:
    print('user does not ')

1.5. Zadania kontrolne

1.5.1. Zmienne i typy

  1. Napisz program, który poprosi użytkownika o imie i ładnie go przywita wyświetlając ‘hello IMIE’.
  2. Zamiast spacji użyj przecinka
Podpowiedź:
  • Użyj podawania stringów po przecinku print(str, str) oraz parametru sep
  • Użyj f-string formatting dla Python >= 3.6