Pamiętacie jak wspominałam, że zmienne mogą mieć prawie dowolne nazwy. Teraz wszystko się wyjaśni, ale zacznijmy od uporządkowania tego co już wiemy.
Typy
Do tej pory we wpisach przewijały się typy liczbowe (int i float) oraz stringi zawierające tekst, ale do dyspozycji mamy więcej typów takich jak:
- Liczby (Numbers)
- Teksty (String)
- Typ logiczny (Bool)
- Listy (List)
- Krotki (Tuple)
- Słowniki (Dictionary)
Liczby
Liczby w Pythonie mogą być dwojakiego typu – int (integer = l. całkowita) i float (floating point number l. zmiennoprzecinkowa).
Np.
Liczbą typu int będzie 4
, która jest liczbą całkowitą, natomiast 4.4
jest już liczbą z przecinkiem, co nie powinno budzić niczyich wątpliwości 😉 Liczbą typu float jest też 62.1E+6
, gdzie E
odpowiada notacji do potęgi 10 czyli 62.1E+6
oznacza 62.1 * 10^6
, ten zapis jest w Polsce popularniejszy.
W Pythonie nie ma osobnego typu
long
. Typ int
może „pomieścić” liczby całkowite dowolnej wielkości.Szybkie sprawdzenie czy nie kłamię:
type(4)
>>>
type(4.4)
…
Teksty
String jest sekwencją znaków, a zazwyczaj przechowują słowa, zdania. Nie ma skryptu, w którym nie użyjecie stringów, dlatego warto poświęcić im więce uwagi.
Cudzysłów pojedynczy
String możemy zapisać umieszczając w pojedynczym cudzysłowie i wygląda to tak 'Hej, zawieram tekst'
. Wszystkie białe znaki tzn. spacje czy tabulatory są wyświetlane dokładnie tak, jak zostały zapisane.
Cudzysłów podwójny
Działa tak samo jak pojedynczy, należy tylko pilnować, by początek i koniec rozpoczynał się tym samym znakiem "Dzień dobry!"
.
Cudzysłów potrójny
Możesz też tworzyć teksty wielolinijkowe za pomocą trzech cudzysłów – ("""
lub '''
). Jeśli chcesz, możesz użyć pojedynczych cudzysłowów i podwójnych cudzysłowów wewnątrz tekstu znajdującego się w potrójnym cudzysłowie. Zdecydowanie potrzebujemy przykładu:
quote='''To jest wielolinijkowy tekst
zawierający cytat
"Always code as if the guy who ends up maintaining your code will be a
violent psychopath who knows where you live"
-John Wood'''
>>>
print(quote)
Stringi są niemutowalne
Niemutowalne = niezmienne. Oznacza to, że po utworzeniu tekstu nie można go bezpośrednio zmodyfikować. Osobom, dla których Python jest pierwszym językiem nie powinno to sprawiać problemu.
W Pythonie nie spotkacie typu
char
. Tak naprawdę, to nawet nie ma powodu, by był. Nie będziecie za nim tęsknić.Łańcuchy znaków w pojedynczych i podwójnych cudzysłowach są takie same. Nie, niczym się nie różnią, można używać je zamiennie.
Formatowanie stringów
Czasem możemy chcieć zbudować treść w oparciu o inne informacje. W takim wypadku przydaje się metoda format()
.
O formatowaniu dowiesz się dużo i jeszcze więcej w poprzednim poście: Formatowanie napisów
Skoro jesteśmy już przy formatowaniu, warto zwrócić uwagę na jeszcze jeden niuans. Zauważyliście, że print
zawsze zakończony jest „niewidzialnym” znakiem nowej linii (\n
)? Oczywiście, można się go po prostu pozbyć.
Jeśli w pliku zapiszemy:
print('czeko', end='')
print('lada', end='')
To na wyjściu otrzymamy
Dodatkowo znak nowej linii można zamienić na np. spację:
print('czeko', end=' ')
print('lada', end='')
To na wyjściu otrzymamy
Stringi mogą być raw
Jeśli chcesz wyświetlić czy wykorzystać tekst, w którym nie będzie obsługi znaków specjalnych (pojawiły się w pierwszym wpisie), takich jak sekwencje escapowane, warto użyć surowego łańcucha znaków poprzedzonego r lub R.
txt = r"Nowe linie zapisujemy jako \n a tabulatory za pomocą \t"
>>>
print(txt)
Nowe linie zapisujemy jako \n a tabulatory za pomocą \t
Typ logiczny
Wartości logiczne – Prawda / Fałsz są przechowywane w typie logicznym. O tym jak go używać dowiesz się już wkrótce.
type(True)
<class 'bool’>
>>>
type(False)
<class 'bool’>
Listy i krotki
Listy i krotki to złożone typy danych.
Listy przechowują różne element poprzedzielane przycinkiem umieszczone w nawiasie kwadartowym. Elementy na liście mogą mieć różne typy.
lista = [3,5,"herbata", False]
>>>
lista
[3,5,’herbata’, False]
>>>
type(lista)
<class 'list’>
Listy pozwalają na modyfikacje elementów, możemy podmienić element na liście. Listy są indeksowane (numerowane) od 0 – oznacza to, że żeby dostać się do pierwszego elementu musimy wpisać lista[0]
.
Aby podmienić pierwszy element na liście wystarczy lista[0] = 4
.
Krotki to listy, które są niezmienne. Nie można zmodyfikować elementów zawartych w krotce. Krotka, tak jak stringi jest niemutowalna. Krotki umieszczamy w nawiasach okrągłych.
krotka = (3,5,"kawa", True)
>>>
krotka
(3,5,’kawa’, True)
>>>
type(krotka)
<class 'tuple’>
Możemy wyświetlić element w krotce wg jego indeksu krotka[2]
, ale nie mamy możliwości jego bezpośredniej modyfikacji krotka[2] = 12
(dostajemy błąd).
Słowniki
Słowniki są bardzo przydatnym typem danych. W innych językach programowania pojawiają się jako tablica haszująca, tablica asocjacyjna czy hasz mapa. Przechowuje dane w parach jako klucz : wartość
, z czego klucz musi być niemutowalnego typu oraz unikalny w obrębie słownika (klucz nie może się powtarzać!).
Przykład słownika:
slownik = { "kawa": "czarna", "herbata" : "zielona", "cukier kostka": 4, 0: "zero"}
>>>
slownik["herbata"]
zielona
>>>
slownik[0]
zero
>>>
slownik[1] = "jeden"
>>>
slownik = { "kawa": "czarna", "herbata" : "zielona", "cukier kostka": 4, 0: "zero", 1: "jeden" }
>>>
type(slownik)
<class 'dict’>
Słownik jest strukturą nieuporządkowaną, w związku z czym nie można odwołać się do elementów słownika po indeksie. Jeśli istnieje klucz o wartości 0, otrzymamy wartość słownika jak w przykładzie powyżej niezależnie, którym z kolei elementem w słowniku jest para 0 : "zero"
.
Warto wiedzieć, że jeśli spróbujemy przypisać wartości do nieistniejącego klucza, spowoduje to automatyczne powiększenie słownika – stworzenie takiego klucza i przypisanie mu wartości.
Sprawdź też działanie:
slownik.keys()
– zwraca klucze w słowniku
slownik.values()
– zwraca wartości w słowniku
"herbata" in slownik
– zwróci prawdę jeśli klucz występuje w słowniku.
Porównaj wynik slownik.keys()
i list(slownik.keys())
.
Co przypomina Ci list()
?
Jeśli twoje skojarzenie padło na int(), float(), str() to jest to znaczy, że test na uwagę zdany na 5+! 😉 Tak list()
spowoduje przekształcenie obiektu dict_keys na listę.
Zmienne i ich nazwy
Pewne wartości są nam czasem potrzebne do wykorzystania później, dlatego chcemy je sobie gdzieś zapisać. Do tej pory używaliśmy zmiennych, jednak warto tę wiedzę nazwać i usystematyzować.
Zmienna o nazwie name ma przypisaną wartość tekstową (string) – Ada Lovelace.
Zmienne są dokładnie tym, co sugeruje nazwa – ich wartość może się zmieniać. To „konstrukty programistyczne”, służące do przechowywania danych. Zmienna w Pythonie może przechowywać dowolne wartości.
W Pythonie wszystkie wartości są przekazywane przez referencję. Typy są dynamiczne, co oznacza, że zmiennej nie deklarujemy typu. W momencie nadania wartości zmienna będzie przechowywać dany typ, dopóki, w trakcie działania kodu nie zdecydujemy się przypisać do niej innej wartości (wraz z jej typem).
Brnę w tłumaczenie dalej: zmienne są przechowywane w pamięci komputera. Najprościej można je sobie wyobrazić pudełka, do których coś wkładamy. W pudełkach zapisywane pewne informacje, a aby otrzymać do nich dostęp (do zmiennych) musimy odwołać się do nich po nazwie.
Jak prawidłowo nazywać zmienne w Pythonie?
Zmienne trzeba jakoś zidentyfikować. Jak? – Najprościej, po nazwie!
Wracam znowu do zdania: zmienne mogą mieć prawie dowolne nazwy. Istnieją pewne reguły, których należy przestrzegać przy nazywaniu zmiennych:
- pierwszym znakiem musi być litera alfabetu, mała bądź wielka litera (ASCII lub Unicode – co oznacza, że możecie używać nie tylko znaków alfabetu łacińskiego, ale również polskich znaków, znaków z innych języków, czego mimo wszystko nie polecam!) lub podkreślenie (_).
- reszta może składać się z liter, podkreślenia (_), a także cyfry (0-9)
- nazwy zmiennych są „case-sensitive” – ważna jest wielkość liter. Dlatego
myvariable
,myVariable
iMyVariable
to 3 różne nazwy zmiennych
Dobre przykłady nazw zmiennych: i
, my_name
, name_2_3
,_variable
.
Przykładowo błędne nazwy: 4Ucode
, 3words
, my-name
, oh space
, >zmienna_z_dziubkiem
, -sthNew
.
To wartość, a nie zmienna, posiada typ, dlatego też zmienna nie może istnieć bez wartości.
my_variable
Traceback (most recent call last):
File „<stdin>”, line 1, in
NameError: name 'my_variable’ is not defined
>>>
my_variable = 5
>>>
my_variable
5
>>>
type(my_variable)
<class 'int’>
>>>
my_variable='tekst'
>>>
my_variable
'tekst’
Kolejną ciekawostką w Pythonie jest możliwość przypisania kilku zmiennym ich wartości w jednej linii.
varA, varB, varC = 4, 14, 'kawa'
Wyświetl zawartość varA, varB, varC.
Mimo, że kurs jest po polsku, staraj się używać angielskich nazw w kodzie. Przykłady staram nazywać w sposób jasny w języku polskim z w kolejnych częściach będziemy od tego odchodzić.
Komentarze
Komentowanie kodu to dobry zwyczaj na początek nauki. Komentarze ułatwiają nam (czy innemu programiście) analizę naszego kodu. Są to uwagi, teksty, których nie zobaczy użytkownik programu.
Wraz z nabraniem praktyki przestaniesz komentować swój kod. Dobrze ponazywane zmienne i metody nie wymagają komentarza – kod jest samokomentujący się.
Komentarze w Pythonie mogą być jednowierszowe – rozpoczynać się znakiem # i ciągnąć do końca linii lub blokowe przechowywane w cudzysłowie potrójnym.
my_name = "Rita"
# Zmienna przechowujaca imiemy_age = 23
# Zmienna przechowujaca wiek""" A to jest
wielolinijkowy komentarz blokowy.
Fajny prawda? """
Czy komentarz blokowy coś wam przypomina?
Tak, wygląda jak jeden ze stringów, jednak dopóki go nie przypiszemy do zmiennej, to interpreter będzie ignorował tę część kodu – traktował jako komentarz.
Niedosyt? Już wkrótce szczegółowe wpisy o strukturach danych 😉
Zadanie 1
Utwórz i wyświetl dowolne zmienne przechowujące wartości wg. typów:
Liczby (Numbers) – całkowite/zmiennoprzecinkowe
Teksty (String)
Typ logiczny (Bool)
Listy (List)
Krotki (Tuple)
Słowniki (Dictionary)
Zadanie 2
Utwórz spis oglądanych seriali.
Każdy serial powinen mieć przypisaną ocenę w skali od 1-10.
Zapytaj użytkownika jaki serial chce obejrzeć.
W odpowiedzi podaj jego ocenę.
Zapytaj użytkownika o dodanie kolejnego serialu i oceny.
Dodaj serial do spisu.
Zadania wraz z rozwiązaniem znajdziesz na Githubie jako Lekcja 4.
Ten wpis należy do cyklu: Python kurs od podstaw
Fajnie! Dzisiaj przerobiłam poprzednie części i wszystko jest jasne, czyste i klarowne. Nie mogę się doczekać kolejnych „lekcji”! Dzięki i pozdrawiam 🙂
powodzenia, następna część już się pisze 😀
Warto wspomnieć, że łańcuchy znaków w „” i ” (pojedynczych i podwójnych cudzysłowach) niczym się od siebie nie różnią (w niektórych językach bywa inaczej).
I w tym miejscu, ktoś dociekliwy, spyta pewnie: to po co aż dwa sposoby zapisu?
Ano, żeby dość prosto zrobić stringa z apostrofem albo cudzysłowem w środku np.:
my_super_string = 'Post „Python #4: Typy i zmienne” jest bardzo ciekawy!’
potraktowałam ten przykład trochę po macoszemu, ale takie przykłady były w drugim wpisie w zabawach w konsoli 😛 trochę z góry założyłam, że jak ktoś jest na 4 poście kursowym, to już zauważył 😀 ale ładny przykład
Fakt, może powinienem więcej postów przejrzeć :P. Pythona znam jako tako i z ciekawości tak sobie zerkam :).
Bardzo przystepny material dla poczatkujacych. Mam tylko jedna uwage:
'Komentowanie kodu to dobry zwyczaj.’
Prosze nie opowiadac takich herezji. Komentowania kodu nalezy unikac jak ognia. Jesli natomiast komentarz wydaje sie konieczny to prawdopodobnie dlatego ze sam kod wymaga poprawy.
Nie zgadzam się. Tam gdzie komentarz jest potrzebny należy go stosować, tam gdzie kod jest przejrzysty nie ma takiej konieczności.
Stąd też nie uważam, że komentowania należy unikać, natomiast należy stosować tam, gdzie to konieczne.
czym się różni potrzeba od konieczności? w tym przypadku niczym. Tam gdzie komentarz jest potrzebny = tam gdzie jest konieczny.
Proszę przeczytać ze zrozumieniem
O samokomentującym się kodzie jeszcze kiedyś będzie, ale na etapie początkującym warto komentować z głową.
Ba w dużych projektach komercyjnych też spotykam się z komentarzami kodu. Szczególnie zauważam tendencję do komentowania w rozbudowanych plikach zawierających SQL query, oczywiście to może zależeć od style quide’ów konkretnej firmy
Tutaj już trzeba było się skupić, ale wytłumaczone trafnie.
Dziękuję
bardzo fajny kurs 🙂 korzystamy i polecamy dalej 🙂
kolejna lekcja zaliczona, nie jest łatwo ale ciekawie
witam , mam problem dotyczący wiersza polecenia lub powersheela. otóż nie mogę przejść do następnego wiersza nie rozpoczynając formuły. jak temu zapobiec ? niektóre długi formuły chciałbym przenieść do następnego wiersza żeby było lepiej czytelne lecz klikając „enter” formuła się rozpoczyna
Drugi dzień zabawy z Pythonem. Mój pierwszy jezyk. Bardzo fajny kurs.
Dzięki za kurs pythona!
Nie rozumiem tego języka
Spróbuj innego! 😉
Dziękujemy! Uczymy się razem. Mama i córka 🙂
Byłabym wdzięczna gdyby udało Ci się dodać przykład dodawania do listy kluczy i wartości. Gdy przeszłam do zadania 2 jakoś miałam z tym problem.
Dziękuję za kolejną lekcję! :*
Dziękuję pięknie! :*
Fajne zadania, dzięki.
W propozycji rozwiązania zadania nr 2 sugerowałbym podanie listy seriali w treści pytania o nazwę serialu. ja to zrobiłem w ten sposób:
UserSerial=input(„Podaj nazwę serialu jaki chcesz obejrzeć {}:”.format(list(Serials.keys())))
Myślę, że to będzie czytelniejsze.
hej, dopiero zaczynam z programowaniem choć miałem jakieś podstawy na studiach. Ale drugie ćwiczenie sprawiło mi tyle trudu że musiałem zajrzeć do odpowiedzi. Nie wiedziałem w jaki sposób odnieść się do danego miejsca w słowniku. Dopiero zobaczyłem że najpierw zmieniłaś go na listę. Dzięki za kurs, spoko sprawa dla takiego laika jak ja.
wartosci ze slownika wywolasz:
i otrzymasz jego wartosc
Slownik to
Nie odkryłem jeszcze jak, ale czy da się wyciągnąć nazwę ze słownika po jego wartości? Jak tak to poproszę o wskazówkę.
Prosze o wiecej wstawek typu „>zmienna_z_dziubkiem” 😀 Z uśmiechem na ustach łatwiej się uczy.
Kolejne dzieki!
Jedna sprawa w wolnej chwili – jak zapamietac wynik (serial dodany przez uzytkownika) i rozszerzac liste co sesje?
To osobny temat z ktorejs z przyszlych lekcji, czy mi cos umknelo? 🙂
Dziękuję za kurs!
Właśnie skończyłem czwartą lekcję i bawię się dalej. Nie znam się zupełnie na programowaniu. Fajnie, że ktoś do tego wprowadza w ojczystym języku 😀
Podobają mi się zadania <3
Mam problem z formatowaniem stringów. Nie mogę połaczyć dwóch napisów :
print(’czeko’, end=”)
print(’lada’, end=”)
wyskakuje mi błąd „invalid syntax”
Posiadam wersje Python 2.7.17 Linux
Masz błąd składni i słusznie, bo cały kurs jest w Pythonie 3.x – rzuć okiem na pierwszy wpis https://www.flynerd.pl/2016/12/python-start.html
Szacunek szacunek szacunek
Duze podziekowania za przystepnosc, logike
Zadanie nieco trudniejsze wymagało nie tylko znajomości składni, ale umiejętności jej wykorzystanie. Niestety musiałem zajrzeć do rozwiązania. Cóż początki bywają trudne.
Hej super seria wpisów, bardzo Ci za nie dziękuję.
Znam już dość dobrze Javę, a od początku tego roku zaczęłam uczyć się Pythona i od razu trafiłam na Twój kurs. Link do mojego rozwiązania zadania 2 z tego wpisu: https://github.com/demensiss/list-of-series/tree/master
Listę seriali postanowiłam zapisać do pliku, ale mam problem z wyszukiwaniem ich. Zdefiniowałam funkcję, która pobiera tytuły i oceny z pliku i zapisuje je ponownie do słownika, ale podczas sprawdzania go za każdym razem nie znajduje serialu i nie wiem dlaczego.
Dzięki wielkie, stopniowo do przodu 🙂 Szczególnie zadowalają mnie zadania na których mogę poćwiczyć nowe funkcje we własnym zakresie związane z omawianym tematem.
Strzałka!
Hmm is anyone else experiencing problems with the pictures on this blog loading?
I’m trying to figure out if its a problem on my end or if it’s
the blog. Any responses would be greatly appreciated.
Fajnie napisany kurs, bez patosu i zbędnych „zniechęcaczy” dla początkujących. Thx
Bardzo fajny kurs dziękuję!
UwU