Podstawy

Wypisywanie samego „Hello World” raczej Ci nie wystarczy, nieprawdaż? Z pewnością chcesz zrobić więcej: chcesz coś wpisać, przerobić to i dostać z tego coś z powrotem. Możemy to osiągnąć, używając stałych i zmiennych.

Komentarze

Komentarz jest każdym tekstem po prawej stronie znaku #, i jest używany głównie jako notatka dla czytającego kod programu.

Na przykład:

print('Hello world') # Print jest to funkcja

albo

# Wyraz print jest funkcją
print('Hello world!')

Używaj tyle komentarzy ile chcesz w swoim programie aby:

  • wyjaśnić założenia
  • wyjaśnić ważne decyzje
  • wyjaśnić ważne szczegóły
  • wyjaśnić problemy które próbujesz rozwiązać etc.

Kod mówi: jak, komentarz mówi: dlaczego.

To jest ważne dla czytelników twojego programu, tak aby łatwo zrozumieli jak ten program działa. Pamiętaj, że tą osobą możesz być ty za kilka miesięcy!

Stałe dosłowne

Od tłumacza Zgodnie z zasadami polskiej pisowni separatorem części dziesiętnej jest przecinek. Python używa jednak zasad anglosaskich, gdzie separatorem części dziesiętnej jest kropka. Należy o tym pamiętać przy pisaniu programów.

Przykładem stałej dosłownej jest liczba, np. 5, 1.23, lub też łańcuch w rodzaju 'To jest łańcuch' albo "To też jest łańcuch!". Nazywa się ją dosłowną, bo jest dosłowna, tzn. zawsze używasz jej wartości w sposób dosłowny. Przykładowo liczba 2 zawsze reprezentuje samą siebie i nic innego. Jest stałą, ponieważ jej wartości nie można zmienić. Stąd wszystkie stałe tego typu nazywa się stałymi dosłownymi.

Liczby

Liczby w Pythonie dzielimy na głównie dwa typy: całkowite (ang. integers) i zmiennoprzecinkowe (ang. floating point albo krócej: floats).

Przykładami liczb całkowitych mogą być: 2, 1025. Przykłady liczb zmiennoprzecinkowych to: 3.23 i 52.3E-4. Notacja E oznacza potęgę dziesiątki. W naszym przykładzie 52.3E-4 oznacza dokładnie: 52.3 * 10^-4^.

Dla zaawansowanego programisty

Nie ma oddzielnych typów long. Typ int może być liczbą dowolnej długości.

Łańcuchy

Łańcuch (ang. string) to po prostu zlepek słów. Mówiąc bardziej formalnie, łańcuch to ciąg znaków.

Jestem niemal pewien, że będziesz używał łańcuchów w większości swoich programów, dlatego zwróć szczególną uwagę na sposoby ich używania.

Pojedynczy cudzysłów

Można określić łańcuch, używając pojedynczego cudzysłowu, np. 'Możecie mnie cytować.'. Wszystkie białe znaki (np. spacje, tabulatory) są zachowane w niezmienionej postaci.

Podwójny cudzysłów

Łańcuchy w podwójnych cudzysłowach zachowują się dokładnie tak samo, jak w pojedynczych. Przykład: "Jak Cię zwą?".

Potrójny cudzysłów

Za pomocą potrójnych cudzysłowów możesz oznaczać łańcuchy wielolinijkowe. Co więcej, wewnątrz nich możesz swobodnie używać zarówno pojedynczych, jak i podwójnych cudzysłowów. Najlepiej zilustruje to przykład:

'''To jest łańcuch wielolinijkowy. Tu mamy pierwszy wiersz.
To jest drugi wiersz.
"Jak się nazywasz?," Zapytałem.
Powiedział "Bond, James Bond."
'''

Łańcuchy są niezmienialne

Oznacza to, że jeżeli już raz utworzyłeś łańcuch, nie możesz go zmienić. Co prawda może się to wydawać wadą, ale tak nie jest. W programach, które później napiszemy, przekonamy się, dlaczego to nas wcale nie ogranicza.

Dla zaawansowanego programisty

Nie ma oddzielnego typu char w Pythonie. Nie ma takiej potrzeby i jestem pewien, że nie będziesz tego potrzebował.

Dla programisty Perl

Pamiętaj, że łańcuchy w pojedyńczych i podwójnych cudzysłowach są takie same - niczym się nie różnią.

Metoda format

Czasami chcemy skonstruować łańcuchy podając zewnętrzne informacje. Tutaj przyda się metoda format().

Zapisz poniższe linijki jako w pliku str_format.py;

age = 20
name = 'Swaroop'

print('{0} miał {1} lat gdy napisał tą ksiązkę'.format(name, age))
print('Dlaczego {0} bawi się z tym pytonem?'.format(name))

Wynik:

$ python str_format.py
Swaroop miał 20 lat gdy napisał tą ksiązkę
Dlaczego Swaroop bawi się z tym pythonem?

Jak to działa

W pierwszym przykładznie, gdzie używamy {0} i odpowiada to zmiennej name która jest pierwszym argumentem dla metody format. Podobnie w drugim gdzie {1} odpowiada {age}. Uwaga, Python liczy od 0, co oznacza, że pierwsza pozycja jest pod indeksem 0, druga ma pozycję 1 itd.

Zauważ, że ten sam efekt możemy osiągnać używają łączenia łańcuchów:

name + ' ma ' + str(age) + ' lat'

ale jest to znacznie bardziej brzydkie oraz skłonne do błędów. Po drugie, konwersja łańcuchów mogłaby być zrobiona automatycznie używając metody format zamiast bezpośredniej konwersji do łańcuchów w tym przykładzie. Po trzecie, używając metody format, mozemy zmienić informację bez potrzeby zmian zmiennych.

Zauważ że liczby są opcjonalne, więć można zapisać

age = 20
name = 'Swaroop'

print('{} miał {} lat gdy napisał tą książkę'.format(name, age))
print('Dlaczego {} bawi się z tym Pythonem'.format(name))

co da ten sam wynik co poprzednio.

Python w metodzie format podstawia każdą wartość argumentu we wskazane miejsce. Bardziej szczegółowe informacje:

# liczba dziesiętna (.) z precyzją 3 dla rozdzielnoprzecinkowych '0.333'
print('{0:.3f}'.format(1.0/3))
# użyj podkreślnika (_) z tekstem w środku
# (^) to 11 długosć '___hello___'
print('{0:_^11}'.format('hello'))
# na podstawie słów 'Swaroop napisał A Byte of Python'
print('{name} napisał {book}'.format(name='Swaroop', book='A Byte of Python'))

Wynik:

0.333
___hello___
Swaroop napisał A Byte of Python

Ponieważ omawiamy formatowanie zauważ, że print zawsze kończy się niewidzialnym znakiem "nowej lini" (\n) dlatego ponowne wywołania funkcji print pozowlą na jej wyświetlenie w nowej lini. Jeśli nie chcemy aby znak końca lini był używany, można sprecyzować aby znak nowej lini był pusty (atrybut end):

print('a', end='')
print('b', end='')

Wynik:

ab

Możesz zakończyć ze spacją:

print('a', end=' ')
print('b', end=' ')
print('c')

Wynik:

a b c

Znaki ucieczki

Wyobraź sobie, że potrzebujesz łańcuch, który zawierałby pojedynczy cudzysłów ('), na przykład Nie lubię Harry'ego. Jak byś to zrobił? Nie możesz zapisać tak: 'Nie lubię Harry'ego', bo Python nie będzie miał szans się dowiedzieć, gdzie łańcuch ma się kończyć, a gdzie zaczynać. Musimy więc wyraźnie dać mu znać, że ten konkretny cudzysłów pomiędzy y a e nie oznacza końca łańcucha. Tutaj z pomocą przychodzą nam właśnie znaki ucieczki. Za ich pomocą możemy zapisać ów cudzysłów tak: \' — spójrz na ukośnik wsteczny. Zatem nasz łańcuch, poprawnie zapisany, wyglądałby tak: 'Nie lubię Harry\'ego'.

Oczywiście w tym przypadku możesz również użyć podwójnych cudzysłowów do oznaczenia łańcucha: "Nie lubię Harry'ego". Jeżeli chciałbyś wewnątrz takiego łańcucha zawrzeć podwójny cudzysłów, podobnie musisz użyć znaków ucieczki. Przy zapisywaniu ukośników wstecznych również używamy znaków ucieczki: \\.

A co w przypadku łańcuchów wielolinijkowych? Można użyć potrójnych cudzysłowów, jak pokazaliśmy wyżej. Można także użyć znaków ucieczki jak pokazano wcześniej albo zapisać znak specjalny — znak nowej linii. Robimy to w następujący sposób:

`To jest pierwszy wiersz\nTo jest drugi wiersz`

Oprócz \n istnieje jeszcze wiele podobnych znaków specjalnych, szczególnie użyteczny może być znak tabulacji: \t.

Należy zauważyć, że pojedyńczy backslash na końcu linijki wskazuje na kontynuację tekstu w następnej linijce, ale nie jest dodana nowa linia.

"To jest pierwsze zdanie. \
A to drugie."

Powyższy przykład jest równoważny z:

"To jest pierwsze zdanie. A to drugie."

Zauważ, że umieściliśmy spację przed ukośnikiem wstecznym — w przeciwnym wypadku A występowałoby w łańcuchu bezpośrednio po kropce (przyp. tłumacza).

Łańcuchy surowe

Jeżeli musisz stworzyć łańcuch, który nie zawiera żadnych znaków specjalnych ani nie są respektowane znaki ucieczki, przydatną opcją stają się łańcuchy surowe (ang. raw). Tworzymy je, poprzedzając łańcuch literą r lub R. Przykład:

r"Nowe linie zapisujemy za pomocą \n"

Dla użytkowników wyrażeń regularnych

Należy zawsze używać łańcuchów surowych podczas pracy z wyrażeniami regularnymi. W przeciwnym wypadku należy używać dużo znaków ucieczki. Przykładowo referencje wsteczne mogą być definiowane jako '\\1' lub r'\1'.

Zmienne

Używanie tylko stałych dosłownych może szybko stać się nudne — potrzebujemy sposobu do przechowywania informacji i manipulowania nimi. Do tego właśnie służą zmienne. Są dokładnie tym, co mówi nam ich nazwa, czyli mogą ulegać zmianom, a to oznacza, że możesz w nich przechowywać cokolwiek. Zmienne to nic innego, tylko fragmenty pamięci Twojego komputera, w których przechowywana jest jakaś informacja. W przeciwieństwie do stałych, musisz mieć możliwość dostępu do tych danych, tak więc zmiennym nadajemy nazwy. Najpierw tylko zobaczmy, jakie nazwy możesz nadać zmiennym.

Nazewnictwo identyfikatorów

Zmienne są przykładami identyfikatorów. Identyfikatory to nazwy, które nadajemy czemuś do zidentyfikowania tego. Tworząc identyfikatory w Pythonie, musisz trzymać się kilku zasad:

  • Pierwszym znakiem identyfikatora musi być mała lub duża litera alfabetu (łacińskiego, więc polskie znaki są niedopuszczalne — przyp. tłumacza) albo podkreślnik (_).
  • Pozostałe znaki mogą zawierać małe lub duże litery alfabetu łacińskiego, podkreślniki oraz cyfry (09).
  • Wielkość znaków w identyfikatorze jest ważna. Stąd mojanazwa i mojaNazwa to zupełnie co innego. Zwróć uwagę na duże N w drugim przykładzie.
  • Przykłady poprawnych identyfikatorów to: i, __moja_nazwa, nazwa_23, a1b2_c3.
  • Przykłady niepoprawnych identyfikatorów to: 2nazwy, nazwa ze spacjami, moja-nazwa.

Typy danych

Zmienne przechowują wartości różnego rodzaju: są to typy danych. Podstawowe typy danych już poznaliśmy, są to liczby i łańcuchy. W następnych rozdziałach dowiemy się, jak tworzyć nasze własne typy danych za pomocą klas.

Obiekty

Od teraz zapamiętaj sobie, że Python traktuje wszystkie rzeczy użyte w programie jako obiekty. Rozumiemy to w ogólnym sensie. Zamiast mówić „to coś”, mówimy „ten obiekt”.

Uwaga dla programujących w językach zorientowanych obiektowo Python jest silnie zorientowany obiektowo, co oznacza, że wszystko jest obiektem, włącznie z liczbami, łańcuchami i funkcjami.

Jak pisać programy w Pythonie

Standardowa procedura:

Dla Pycharm

  1. Otwórz PyCharm.
  2. Utwórz nowy plik z wyżej wynienioną nazwą.
  3. Wpisz kod programu.
  4. Kliknij prawym guzikiem myszki i uruchom program.

Dla innych edytorów

  1. Otwórz swój ulubiony edytor.
  2. Wprowadź/Skopiuj kod programu podany w przykładzie.
  3. Zapisz plik pod nazwą zapisaną w komentarzu.
  4. Uruchom interpreter Pythona w powłoce za pomocą polecenia python var.py.

Przykład

# Nazwa pliku: var.py

i = 5
print(i)
i = i + 1
print(i)
s = '''To jest łańcuch wielolinijkowy.
To jest drugi wiersz.'''
print(s)

Rezultat:

5
6
To jest łańcuch wielolinijkowy.
To jest drugi wiersz.

Jak to działa

Najpierw przypisujemy stałą dosłowną 5 do zmiennej i za pomocą operatora przypisania (=). Linia ta nazywa się poleceniem, ponieważ zleca ona Pythonowi wykonanie czegoś: w tym przypadku łączymy nazwę zmiennej i z wartością 5.

Następnie, również za pomocą polecenia, wypisujemy wartość zmiennej i na ekran, używając print.

Później dodajemy 1 do wartości przechowywanej w zmiennej i i zapisujemy nowo obliczoną wartość do tej zmiennej. Potem wypisujemy wartość zmiennej i, jak się spodziewaliśmy, dostajemy 6.

Analogicznie postępujemy ze zmienną s, której przydzielamy wartość dosłowną łańcucha i wypisujemy ją.

Dla programistów języków statycznych

Aby użyć zmiennej, wystarczy przydzielić jej jakąś wartość. Nie musimy tej zmiennej deklarować ani nadawać jej konkretnego typu danych.

Linie logiczne i fizyczne

Linia fizyczna to to, co Ty widzisz, kiedy piszesz program. Linia logiczna to to, co Python widzi jako pojedyncze polecenie. Python domyślnie zakłada, że każda linia fizyczna odpowiada logicznej.

Przykładem linii logicznej jest dobrze znane nam print 'hello world'. Jeżeli znajdowało się ono również w jednej linii w programie (tak, jak to widzieliśmy w edytorze), to była to również jedna linia fizyczna.

Zachęcamy do używania zawsze jednego polecenia na linię, dzięki czemu kod staje się bardziej czytelny.

Jeśli chcesz zawrzeć więcej, niż jedną linię logiczną w jednej linii fizycznej, musisz użyć średnika (;), który oznacza po prostu koniec linii logicznej/polecenia. Przykładowo

i = 5
print(i)

oznacza to samo, co

i = 5;
print(i);

Możesz to zapisać tak:

i = 5; print(i);

a nawet tak:

i = 5; print(i)

Jednakże mimo tak dużej liczby możliwości, bardzo zalecam Ci przyzwyczajenie się do pisania wyłącznie pojedynczych linii logicznych w pojedynczych liniach fizycznych. Tylko w przypadku naprawdę długich linii logicznych możesz je zapisać w kilku liniach fizycznych. Chodzi o to, aby unikać użycia średnika tak bardzo, jak to tylko możliwe, ponieważ to skutkuje dużo czytelniejszym kodem. Żeby być szczerym, nigdy nie użyłem średnika w programie Pythona.

Jest jeden rodzaj sytuacji kiedy taki zapis może być przydatny: jeśli masz długą linijkę kodu, możesz rozdzielić to na kilka fizycznych lini używająć backslasha (Nazywane z ang. explicit line joining). Spójrzmy na przykład zapisu jednej linii logicznej w wielu liniach fizycznych.

s = 'To jest łańcuch. \
Kontynuacja łańcucha.'
print(s)

To nam da oczywiście na wyjściu:

To jest łańcuch. Kontynuacja łańcucha.

Analogicznie

i = \
5

jest równoznaczne z

i = 5

Czasami sytuacja jest tak jednoznaczna, że nie trzeba używać ukośników wstecznych. Dzieje się tak w przypadku, gdy w linii logicznej są nawiasy okrągłe, kwadratowe lub klamrowe. Zobaczysz takie sytuacje na własne oczy, gdy tylko dojdziemy do rozdziału z listami. (Nazywane z ang. implicit line joining)

Wcięcia

Białe znaki w Pythonie są znaczące. Zapamiętaj, że białe znaki na początku linii są znaczące. Nazywamy je wcięciami. Wiodące białe znaki (mamy cały czas na myśli spacje i znaki tabulacji) na początku linii logicznej są brane pod uwagę przy określaniu stopnia wcięcia danej linii logicznej, co z kolei pozwala Pythonowi grupować polecenia.

Idąc tym tokiem rozumowania, łatwo się domyślić, że polecenia, które są tak samo ważne muszą mieć takie samo wcięcie. Każdy taki zestaw poleceń nazywamy blokiem. W następnych rozdziałach przekonamy się, jak bardzo bloki są ważne.

Powinieneś również zapamiętać, że nieprawidłowe wcięcia pociągają za sobą czasem trudne do znalezienia błędy. Spójrz na ten przykład:

i = 5
# Błąd poniżej! Zauważ pojedyńczą spację na początku nowe lini
 print('Value is', i)
print('I repeat, the value is', i)

Próbując uruchomić powyższy program, prawdopodobnie otrzymasz następujący błąd:

  File "whitespace.py", line 3
    print('Value is', i)
    ^
IndentationError: unexpected indent

Spójrz na spację na początku linii wskazanej przez Pythona. Błąd wychwycony przez Pythona oznacza, że składnia programu jest nieprawidłowa, czyli został on źle napisany. A co to oznacza dla Ciebie? Nie możesz dowolnie zaczynać nowych bloków poleceń (za wyjątkiem oczywiście bloku głównego, który kiedyś musisz przecież rozpocząć). Sytuacje, w których możesz rozpoczynać nowe bloki, zostaną opisane w następnych rozdziałach.

Jak używać wcięć?

Uzywaj 4 spacji do indentacji. To jest oficjalna rekomendacja dla języka Python. Dobre edytory automatycznie zrobią to za ciebie. Pamiętaj aby być konsekwentnym w używanej liczbie spacji, ponieważ program się nie uruchomi lub moze mieć niespodziewane zachowanie.

Dla programistów języków statycznych

Python bedzię zawsze używaj wcięć w instrukcjach i nigdy nie będzie używał klamer. Uruchom from __future__ import braces aby dowiedzieć się więcej

Podsumowanie

Przebrnęliśmy przez wiele treściwych szczegółów, więc możemy zaraz przejść do czegoś bardziej interesującego, jak na przykład kontrola przepływu. Zanim jednak to zrobimy, upewnij się, że oswoiłeś się ze wszystkim, co było w tym rozdziale, a zrozumienie tego nie sprawia Ci problemu.

results matching ""

    No results matching ""