3. Komentarze, funkcja print() oraz input() - majsylw/Introduction-to-programming-in-python GitHub Wiki

Skoro pierwsze kroki mamy już za sobą i umiemy uruchomić samodzielnie napisany skrypt, przyszedł czas na poszerzenie wiedzy. Będzie to podstawa, na której będziemy później bazować budując dalsze, bardziej skomplikowane programy.

Komentarze

Jednak zanim poznamy masę konkretnych instrukcji, porozmawiajmy o komentarzach. Komentarz jest wydzielonym fragmentem tekstu, który nie jest interpretowany przez interpreter języka Python. Ma on służyć jedynie człowiekowi, po to aby kod był czytelniejszy. Zazwyczaj jest to skomentowanie mniej oczywistych partii kodu, pewnego rodzaju notatka informująca czym jest dana zmienna, do czego konkretna partia służy, cz po prostu wyłączamy fragment kodu, którego aktualnie nie chcemy wykonywać.

W języku Python mamy dwa podstawowe rodzaje komentarzy: jedno- oraz wielowierszowe. Te pierwsze zaczynamy znakiem #. Od tego znaku aż do końca wiersza kod nie jest interpretowany. Dodatkowo między znakiem # a komentarzem zwyczajowo zostawiamy odstęp (spację), aby podnieść czytelność programu.

# funkcja główna programu
def main():
    print("Witaj świecie!") # ta funkcja wypisuje napis
    # wiersz poniżej wczytuje dane z klawiatury
    pobrany_napis = input("Napisz coś od siebie: ")
    print("Twój napis to: " + pobrany_napis)

# uruchomienie funkcji głównej
main()

W przypadku komentarzy wielowierszowych możemy skorzystać z trzech znaków " lub ', czyli odpowiednio """ lub '''. Tak naprawdę zapis ten tworzy długi napis/łańcuch znaków, który nie jest ignorowany przez interpreter, ale o tym jeszcze będziemy się uczyć później.

"""
Tutaj następuje obszerne wyjaśnienie funkcji main(): 
Funkcja wypisuje na ekranie napis "Witaj świecie" oraz napis wpisany z klawiatury przez użytkownika.
Przyjmowane parametry: nic
Wartość zwracana: nic
"""
def main():
    print("Witaj świecie!")
    pobrany_napis = input("Napisz coś od siebie: ")
    print("Twój napis to: " + pobrany_napis)

main()

Oczywiście możemy w ramach jednego kodu źródłowego dowolnie używać na przemian obu typów komentarzy.

Wypisywanie komunikatów - funkcja print()

Przyjrzyjmy się jeszcze bliżej funkcji pirint(). Jest to funkcja, czyli fragment kodu wykonujący określoną operację. W przypadku print() jest to wypisanie komunikatu na standardowe wyjście, czyli po prostu konsolę, w której kazaliśmy wykonać nasz program - w naszym przypadku jest to powłoka IDLE. Uruchomienie funkcji nazywamy wywołaniem. W nawiasach () umieszczamy argument (może być ich kilka), który jest zmienną wykorzystywaną w wewnątrz naszej funkcji - wyszczególnionego za pomocą wcięcia bloku kodu. Jak już wiemy przykładowe wywołanie funkcji:

print('Witaj świecie!')

spowoduje wypisanie napisu 'Witaj świecie!' na ekran konsoli.

Domyślnie po wypisaniu napisu kursor przejdzie do nowej linijki, jak w poniższym przykładzie:

print('Witaj świecie!')
print('Witaj Sylwio!')
print('Witaj Studencie!')
## efektem wywołania takieg skryptu będzie wypisanie 3 linijek, jak poniżej:
## Witaj świecie!
## Witaj Sylwio!
## Witaj Studencie!

Można temu 'zapobiec' poprzez wykorzystanie nazwanego argumentu funkcji end, następująco:

print('Witaj świecie!', end=" ") # na końcu tej linijki pojawi się spacja
print('Witaj Sylwio!', end=",") # ten napis zakończy się ,
print('Witaj Studencie!', end=";") # ten napis zakończy się ;
## efektem wywołania takieg skryptu będzie wypisanie:
## Witaj świecie! Witaj Sylwio!,Witaj Studencie!;

Podobny efekt możemy uzyskać przekazując do funkcji print, kilka argumentów:

print('Witaj świecie!', 'Witaj Sylwio!', 'Witaj Studencie!') # przekazaliśmy do funkcji kilka zmiennych do wyświetlenia
## efektem wywołania takieg skryptu będzie wypisanie:
## Witaj świecie! Witaj Sylwio! Witaj Studencie! --> domyślnym znakiem oddzielającym od siebie napisy podane jako argumenty jest spacja

Typem separatora (znaku oddzialającego wypisywane napisy) także można sterować - za pomocą zmiennej sep:

print('Witaj świecie!', 'Witaj Sylwio!', 'Witaj Studencie!', sep=';') # przekazaliśmy do funkcji kilka zmiennych do wyświetlenia
## efektem wywołania takieg skryptu będzie wypisanie:
## Witaj świecie!;Witaj Sylwio!;Witaj Studencie! --> domyślnym znak został zastąpiony ;

Znakami najczęściej wykorzystywanymi do odczielenia od siebie napisów są tzw. znaki sterujące, znamy pięć podstawowych znaków sterujących: \n, \t, ', ", \.

# Autor: Karol Tarnowski
# Program pokazuje wykorzystanie znaków sterujących \n, \t, \', \", \\
def main():
    print('To jest napis') #Funkcja print() wyświetli napis
    
    # Znak sterujący \n powoduje przeniesienie kursora do nowej linii
    print('To\njest\nnapis')

    # Znak sterujący \t powoduje przejście do następnego położenia tabulatora
    print('To\tjest\tnapis')
    # Może to być pomocne przy formatowaniu nagłówka tabeli
    print('pn\twt\tśr\tcz\tpt')

    # Znaki specjalne \' oraz \" pozwalają uzyskać apostrof i cudzysłów
    print('Apostrof: \' ')
    print('Cudzysłów: \" ')

    # Skoro znaki sterujące wykorzystują ukośnik
    # To jak uzyskać ukośnik?
    print('Ukośnik: \\')
main()

Wartym poruszenia w tym miejscu tematem jest formatowanie. Jeśli będziemy wyświetlać zmienne liczbowe, możemy chcieć zaokrąglić je do odpowiedniej liczby miejsc po przecinku, czy też zapisać w notacji naukowej (10^-3 to w Pythonie 1e-3). W tym celu możemy skorzystać z funkcji format(). Przyjmuje ona dwa argumenty: liczbę, którą chcemy sformatować oraz sposób formatowania w postaci odpowiedniego napisu, np:

liczba = 1.23456
print("Twoja liczba to", liczba) # niesformatowane wyświetlenie liczby zmiennoprzecinkowej
print("Twoja liczba to", format(liczba, ".2f")) # sformatowane wyświetlenie liczby zmiennoprzecinkowej - zaokrąglenie liczby typu float (f) do 2 miejsc po przecinku
print("Twoja liczba to", format(liczba, "e")) # wyświetlenie liczby w formacie naukowym
print("Twoja liczba to", format(liczba, "12.2f")) # oprócz ograniczenia się do dwóch liczb po przecinku, mozemy ustaliś szerokość pola, w obrębie którego tekst jest wyrównywany do prawej -> tutaj jest to 12 znaków, lajlepiej samodzielnie sprawdź to wywołanie w swoim interpreterze

Odczyt danych wejściowych - funkcja input()

Program z powyższego przykładu działa poprawnie, ale jego wadą jest ograniczenie się tylko do jednej wartości liczby. Co zrobić, jeśli chcielibyśmy sprawić, by był bardziej uniwersalny. Jednym z udoskonaleń jest umożliwienie użytkownikowi wpisania dowolnej wartości. Program po jej przetworzeniu mógłby wwyświetlić różne rezultaty.

Aby to osiągnać, potrzebujemy w jakiś sposób umożliwić użytkownikowi wpisanie dowolnej wartości dla zmiennej liczba. Jak się można spodziewać, Python udostępnia wbudowaną funkcję input(), która nam to umożliwia.

liczba = input("Podaj liczbę rzeczywistą: ")
print(type(liczba))
## <class 'str'> <- tylko my chcielismy wprowadzić liczbe rzeczywista a nie napis
liczba = float(input("Podaj liczbe rzeczywistą: ")) # pomocne będzie poznane wcześniej rzutowanie
print(type(liczba))
## <class 'float'>

Po wywołaniu funkcji input na ekranie ukazuje się kursor oczekiwania na wprowadzenie ciągu znaków. Użytkownik programu ma możliwość wprowadzenia dowolnej liczby znakow i zatwierdzenia go enterem. Napis ten następnie jest zwracany poprzez funkcję input i przypisany do zmiennej liczba. Aby zamienic napis (zmienną typu str) na dowolny typ musimy dokonać rzutowania. Teraz całość wydzielonego fragmentu programu:

# liczba = 1.23456
liczba = float(input("Podaj liczbę rzeczywistą: "))
print("Twoja liczba to", liczba)
print("Twoja liczba to", format(liczba, ".2f")) 
print("Twoja liczba to", format(liczba, "e")) 
print("Twoja liczba to", format(liczba, "12.2f")) 

Uzbrojony w wiedzę na temat zmiennych, typów danych, rzutowania, funkcji print i input oraz komentarzy możesz swobodnie tworzyć zmienne, wykonując na nich przeróżne operacje, o czym trochę więcej w następnej sekcji.