Python - wprowadzenie

05 - Skrypty i komunikacja z użytkownikiem

Dotychczas używaliśmy poleceń jednolinijkowych albo krótkich kodów. Przyjdzie jednak czas na napisanie nieco dłuższych programów. Poznajmy zatem podstawowe zasady pisania i uruchamiania skryptów. W trakcie tej lekcji poznamy także podstawy komunikacji z użytkownikiem w linii komend.

Tworzymy i uruchamiamy skrypt

Do pisania skryptów potrzebny jest dobry edytor tekstu (nie jest nim Word) lub zintegrowane środowisko programistyczne. Wybór jest szeroki i nie będziemy teraz rozwijać tego tematu. Do tworzenia programu użyjemy teraz Visual Studio Code, który można pobrać ze strony https://code.visualstudio.com/.

Utwórz katalog w którym będziesz zapisywać skrypty.

W Visual Studio (lub innym wybranym edytorze) utwórz nowy plik i zapisz go jako program-01.py. Zauważ, że plik ma przedłużenie py, co jest charakterystycznym przedłużeniem dla skryptów Pythona. Przy zapisywaniu pliku Visual Studio poprosi o zainstalowanie rozszerzenia Pythona.

Zgadzamy się.

Możesz też zainstalować kolejne dodatki.

Następnie w pliku umieść następujący kod:

print('Witaj ponownie Świecie!')
Witaj ponownie Świecie!

Zapisz plik.

Teraz otwórz okno w terminala. W przypadku systemu Windows i zainstalowanego środowiska Anaconda, możesz uruchomić Anaconda Navigator z menu Start a następnie wybrać ,,CMD.exe Prompt''.

Pod Windows pokaże się takie okienko:

Pod Linuksem może ono wyglądać np. tak:

W obu przypadkach pojawiła się linia, w której możemy wpisać polecenia. Teraz trzeba przejść do katalogu, w którym został zapisany plik. W obu systemach służy do tego komenda cd ale trzeba pamiętać, że w różny sposób zapisuje się ścieżkę prowadzącą do katalogu, zwróć uwagę na rodzaj ukośnika między nazwami katalogów. W Windows jest to \ w Linuksie /.

Zatem pod Windows polecenie może wyglądać tak:

cd Documents\Python-programowanie

Pod Linuksem:

cd Dokumenty/python_dla_biologow/skrypty/

Teraz uruchamiamy skrypt:

python proba-01.py

lub

python3 proba-01.py

Pokazuje się wynik:

Witaj ponownie Świecie!

Wprowadzanie danych przez użytkownika

Teraz powróćmy do edytora w którym piszemy skrypt. Usuń polecenie. Wpisz kolejne polecenia i uruchom skrypt.

sekwencja = input('Podaj sekwencję: ')
print(sekwencja)

W terminalu pojawi się tekst, oraz zachęta w postaci migającego kursora, do wpisania sekwencji:

Podaj sekwencję: 

Wpisz sekwencję i wciśnij Enter. Zostanie wydrukowana sekwencja lub inny ciąg znaków, który został wpisany.

Podaj sekwencję:  ACCAGAAA

ACCAGAAA

Jak łatwo się domyślić, za pobieranie sekwencji odpowiadało polecenie input(). Można, jako argument, podać w nawiasach ciąg znaków, który zostanie wydrukowany jako ,,zachęta'' do wprowadzenia danych.

Teraz spróbujmy pobrać dwie liczby i je przez siebie pomnożyć. Usuń poprzednio wpisane polecenia i wprowadź do skryptu nowe:

liczba1 = input('Podaj pierwszą liczbę: ')
liczba2 = input('Podaj drugą liczbę: ')
wynik = liczba1 * liczba2
print(f'Wynik: {wynik}')

Podaj pierwszą liczbę:  12
Podaj drugą liczbę:  23



---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-11-dcafbc6b7a68> in <module>
      1 liczba1 = input('Podaj pierwszą liczbę: ')
      2 liczba2 = input('Podaj drugą liczbę: ')
----> 3 wynik = liczba1 * liczba2
      4 print(f'Wynik: {wynik}')


TypeError: can't multiply sequence by non-int of type 'str'

Po uruchomieniu i wpisaniu liczb pojawił się komunikat błędu.

Okazuje się, że liczby, które wprowadziliśmy zostały potraktowane jako ciągi znaków, a tych nie można przez siebie pomnożyć. Trzeba je wcześniej przekonwertować na typ liczbowy.

Poprawmy zatem nasz kod:

liczba1 = int(input('Podaj pierwszą liczbę: '))
liczba2 = int(input('Podaj drugą liczbę: '))
wynik = liczba1 * liczba2
print(f'Wynik: {wynik}')
Podaj pierwszą liczbę:  12
Podaj drugą liczbę:  23


Wynik: 276

Podobnie można, korzystając innych funkcji poznanych na lekcji poświęconej zmiennym u typom danych, konwertować dane wprowadzone przez użytkownika na inne typy liczbowe.

liczba1 = float(input('Podaj pierwszą liczbę: '))
liczba2 = float(input('Podaj drugą liczbę: '))
wynik = liczba1 * liczba2
print(f'Wynik: {wynik}')
Podaj pierwszą liczbę:  12
Podaj drugą liczbę:  13


Wynik: 156.0

Uruchamianie skryptu bez opuszczania edytora

Jeśli piszemy skrypt w Visual Studio można go uruchomić bezpośrednio z poziomu edytora. Służy do tego skrót Ctrl+F5 lub pozycja w menu: Run -> Run Without Debugging. Poniżej okienka edytora pojawi się okienko terminala gdzie pokażą się efekty działania programu.

Warto też wiedzieć, że mamy możliwość wyboru interpretera Pythona, co może mieć znaczenie zwłaszcza, gdy mamy zainstalowanych jego kilka wersji. W takim przypadku może się okazać, że domyślnie włączy się np. Python 2.7 a nasz kurs bazuje na Python 3.8.x.

Można to zmienić klikając w lewy dolny róg okna Visual Studio:

Komentarze i czytelny kod

Pisząc program, zwłaszcza jeśli jest on długi i złożony, warto (a nawet trzeba!) umieszczać w nim komentarze. Mogą one służyć wyjaśnieniu działania kodu innej osobie, która będzie chciała w przyszłości pracować nad naszym dziełem, lub je sprawdzać, ale przede wszystkim służą samemu programiście. Kiedy piszesz kod, prawdopodobnie jego działanie jest w momencie tworzenia dla Ciebie jasny. Jednak praktyka wskazuje, że jeśli wrócisz do niego po kilku dniach, tygodniach czy tym bardziej miesiącach, może się okazać, że to co było oczywiste, staje się mocno niejasne i trzeba czasem spędzić dużo czasu, żeby zrozumieć co (parafrazując klasyka) ,,programista miał na myśli''.

Czas poświęcony na pisanie komentarzy, choc może się wydawać początkowo stracony, często zwraca się później z nawiązką. Zatem warto jest wyrobić w sobie zwyczaj komentowania kodu, zwłaszcza jeśli przypuszczasz, że może być w przyszłości modyfikowany czy ponownie wykorzystany na przykład przy pisaniu kolejnych programów.

Odpowiednie komentowanie kodu jest jednym z aspektów pisania czytelnego kodu. Kod powinien być pisany w taki sposób, żeby był możliwie zrozumiały dla człowieka (programisty). Ma to znaczenie nie tylko przy pisaniu i modyfikowaniu programów ale także przy usuwaniu zawartym w nich błędów (debugowaniu). Bardzo rzadko zdarza się, że napisany dłuższy kod działa od razu bezbłędnie. Zwykle znacznie więcej czasu zajmuje znajdywanie i poprawianie w nim błędów niż napisanie pierwszej wersji programu. Im kod będzie czytelniej napisany i lepiej skomentowany, tym poprawianie go będzie łatwiejsze i krótsze.

W trakcie kursu będę tłumaczył niektóre zasady pisania czytelnego kodu w Pythonie, ale warto także zapoznać się z bardziej kompletnym omówieniem problemu np. pod adresem https://github.com/google/styleguide/blob/gh-pages/pyguide.md.

Komentarz jest dowolnym tekstem, który nie jest interpretowany przez komputer. Jak więc umieścić go w kodzie, tak aby nie został potraktowany jako fragment kodu, który należy wykonać? W tym celu można użyć znaku #. Wszystko co znajdzie się po prawej stronie kodu od tego znaku, jest traktowane jak komentarz. Znak ten może znaleźć się na początku linii, wtedy cała linia jest traktowana jako komentarz, albo po prawej stronie fragmentu kodu, w takim przypadku od miejsca wystąpienia # do końca linii, wszystko będzie traktowane jako komentarz:

# Pobranie danych od użytkownika
liczba1 = float(input('Podaj pierwszą liczbę: ')) # Pierwsza liczba
liczba2 = float(input('Podaj drugą liczbę: ')) # Druga liczba
# Obliczanie wyniku
wynik = liczba1 * liczba2
# Drukowanie wyniku 
print(f'Wynik: {wynik}')
Podaj pierwszą liczbę:  2.3
Podaj drugą liczbę:  3.7


Wynik: 8.51

Jest jeszcze inny sposób umieszczania komentarzy, stosowany zwłaszcza, jeśli składa się z kilku linijek. W taki przypadku można zamiast umieszczać na początku każdej z nich #, zamknąć całość w parze potrójnych cudzysłowów:

"""
Program, który pobiera od użytkownika dwie liczby,
które następnie mnoży przez siebie
i wypisuje wynik.
"""

# Pobranie danych od użytkownika
liczba1 = float(input('Podaj pierwszą liczbę: ')) # Pierwsza liczba
liczba2 = float(input('Podaj drugą liczbę: ')) # Druga liczba
# Obliczanie wyniku
wynik = liczba1 * liczba2
# Drukowanie wyniku 
print(f'Wynik: {wynik}')
Podaj pierwszą liczbę:  2.3
Podaj drugą liczbę:  4.5


Wynik: 10.35

Otaczanie komentarza przez """ ma jeszcze inne zastosowania, do którego wrócimy później.

Komentowanie linii wykorzystuje się także w inny sposób. Można ,,wyłączać'', pewne fragmenty kodu, na przykład podczas debugowania, albo, przeciwnie, kiedy część kodu służy nam wyłącznie podczas testowania a podczas normalnego funkcjonowania jest zbędna:

"""
Program, który pobiera od użytkownika dwie liczby,
które następnie mnoży przez siebie
i wypisuje wynik.
"""

# Pobranie danych od użytkownika
liczba1 = float(input('Podaj pierwszą liczbę: ')) # Pierwsza liczba
liczba2 = float(input('Podaj drugą liczbę: ')) # Druga liczba
# Obliczanie wyniku
wynik_mnozenia = liczba1 * liczba2
# Drukowanie wyniku mnożenia
# print(f'Wynik mnożenia: {wynik_mnozenia}')
# Drukowanie końcowego wyniku
koncowy_wynik = wynik_mnozenia ** 2
print(f'Końcowy wynik: {koncowy_wynik}')
Podaj pierwszą liczbę:  2.3
Podaj drugą liczbę:  24.1


Końcowy wynik: 3072.4849

W powyższym, nieco rozbudowanym kodzie, linia print(f'Wynik mnożenia: {wynik_mnozenia}') może być zbędna dla normalnego funkcjonowania programu, ale gdybyśmy chcieli sprawdzić np. czy mnożenie działa prawidłowo, to można ją ,,odkomentować'' i wtedy wynik się wyświetli.

Last updated on 22 Oct 2020
Published on 22 Oct 2020