{<Z Kordian Zadrożny

AI, Strony WWW, Programowanie, Bazy danych

Kurs Programowania od ZERA – Lekcja 2: Pierwsze programy – unikamy nudy

utworzone przez | lis 21, 2025 | kurs programowania | 0 komentarzy

Dlaczego uważam, że większość kursów programowania jest nudnych

Kursy programowania mają zazwyczaj ogromny próg wejścia. Zaczynają od abstrakcyjnych teorii, których osoby spoza IT kompletnie nie „czują”.

Na uczelniach wyglądało to tak: pół roku algorytmów na kartce, potem podstawy w Turbo Pascalu, potem to samo w C… Pamiętam, że prawie nikt nie rozumiał, po co to robi. Uczyliśmy się sortowania bąbelkowego, zanim w ogóle napisaliśmy coś użytecznego.

Dziś programistami zostają osoby z różnych branż. Ba, dzięki AI każdy może tworzyć aplikacje! Ale żeby robić to skutecznie i nie „wysadzić” projektu, trzeba znać podstawy. Nie zgadzam się jednak z tym, że trzeba zaczynać od nudnej teorii. Nie musisz pisać programu, który wyświetla tylko smutne „Witaj świecie!”.

Mój plan jest inny: Każda lekcja to konkretny, życiowy przykład. Teorię będę Ci „przemycał” w trakcie pracy, dokładnie wtedy, gdy będzie Ci potrzebna. Mam nadzieję, że sie uda.

Przygotowanie środowiska

Zastanawiałem się, jak najłatwiej zacząć, żebyś nie musiał/a walczyć z instalatorami przez 2 godziny.

Dla Pythona: Użyjemy narzędzia od Google. Jeśli masz konto Google (a pewnie masz), możesz pisać kod w przeglądarce. To się nazywa Google Colab (wersja Jupyter Notebook). Używają tego naukowcy od danych na całym świecie.

Znajdziesz go w google drive ->

Klikasz w dysku google nowy -> więcej -> Google Colaboratory: https://colab.research.google.com/

Klikamy ty w Nowy Notatnik i mamy środowisko

To jest bardzo wygodna sprawa, na sam początek, ale i na prace z API (ale to później).

Dla C# (na później) ale i Pythona później będziemy potrzebować „cięższego sprzętu”. Pobierz i zainstaluj Visual Studio Code. To darmowy edytor od Microsoftu, standard w branży: Visual Studio Code – The open source AI code editor

Pobierzcie z tej strony na swój komputer, zainstalujcie jak każdy inny program.

Program 1 – Prosty Monitor Wydatków

Zamiast kilku rozdziałów teorii zaczniemy od razu od programu, który jest sensowny i pokaże Ci, o co tu chodzi. Użyjemy zmiennych, instrukcji warunkowej (IF), pętli oraz podstawowej matematyki.

Przygotowałem je w trzech krokach:

  1. Pseudokod: Uniwersalny plan (algorytm), który jest fundamentem.
  2. Kod w Pythonie: Implementacja pseudokodu w Pythonie, idealna na start – python sam w sobie jest podobny do pseudokodu.
  3. Kod w C#: Ta sama logika w C#, aby pokazać różnice w składni.

Krok 1: Algorytm (Pseudokod)

  1. Pobierz budżet
  2. Jeśli budżet nie jest liczbą poproś ponownie
  3. Wyświetl budżet i poproś o wpisanie wydatku lub wpisanie słowa koniec
  4. Jeśli koniec zakończ program, w przeciwnym wypadku Oblicz budżet – wydatek
  5. Wróć do punku 3
START # rozpoczęcie programu
PĘTLA (nieskończona)
      USTAW budzet_tekst = POBIERZ_TEKST_OD_UŻYTKOWNIKA
      JEŻELI (CZY_MOŻNA_ZMIENIĆ_TEKST_NA_LICZBĘ(budzet_tekst))
          USTAW budzet_startowy = ZMIEŃ_TEKST_NA_LICZBĘ(budzet_tekst)
          PRZERWIJ PĘTLĘ # Udało się, wychodzimy z pętli konfiguracyjnej
      W PRZECIWNYM RAZIE
          WYŚWIETL "Błąd: To nie jest liczba. Podaj poprawną kwotę budżetu:"
      KONIEC JEŻELI
  KONIEC PĘTLI

  USTAW pozostalo = budzet_startowy

  # --- Główna pętla aplikacji ---
  PĘTLA (nieskończona)
      WYŚWIETL "Pozostało Ci: " + pozostalo + " zł"
      WYŚWIETL "Podaj kwotę wydatku (lub wpisz 'koniec', aby zakończyć):"
      
      USTAW wydatek_tekst = POBIERZ_TEKST_OD_UŻYTKOWNIKA
      
      # Warunek wyjścia z pętli głównej
      JEŻELI (wydatek_tekst == "koniec")
          PRZERWIJ PĘTLĘ # Zakończ program
      KONIEC JEŻELI
      
      # Weryfikacja danych wejściowych
      JEŻELI (CZY_MOŻNA_ZMIENIĆ_TEKST_NA_LICZBĘ(wydatek_tekst))
          USTAW wydatek_liczba = ZMIEŃ_TEKST_NA_LICZBĘ(wydatek_tekst)
          
          # Kluczowa logika aplikacji
          USTAW pozostalo = pozostalo - wydatek_liczba
          
          # Dodatkowy warunek (IF) dla użytkownika
          JEŻELI (pozostalo < 0)
              WYŚWIETL "UWAGA! Przekroczyłeś budżet o: " + (pozostalo * -1) + " zł"
          KONIEC JEŻELI
          
      W PRZECIWNYM RAZIE
          WYŚWIETL "Błąd: To nie jest poprawna kwota. Spróbuj ponownie."
      KONIEC JEŻELI
      
  KONIEC PĘTLI

  # --- Zakończenie ---
  WYŚWIETL "--- Zakończono ---"
  WYŚWIETL "Ostateczny stan Twojego budżetu: " + pozostalo + " zł"

STOP

Wyjaśnienie

# – w pythonie oznacza komentarz a w C# // – to jest komentarz

Oznacza to, iż ten fragment kodu nie będzie wykonywany, jest to tylko nasza notatka w programie.

Kolejna rzecz to wcięcia. W Pythonie wcięcia są odpowiedzialne za tworzenie bloków programu, zwykle tworzymy je za pomocą tabulatora.

Bok programu to np. instrukcja warunkowa Jeżeli:

Jeżeli a = b:
    wydrukuj "a jest równe b"

To oznacza, że druga linia, jest częścią linii pierwszej, że to co będzie wraz z tym wcięciem, wykona się jeżeli a jest równe b. do robienia wcięcia używaj tabulatora, lub czterech spacji.

To samo w większości innych języków było by obudowane w formalne instrukcje.

W SQL i w Turbo paskalu będą to BEGIN i END a w językach jak C i pochodne, Java, JS i PHP będą to klamry {}

JEŻELI a == b
BEGIN
    wydrukuj "a jest równe b"
END
lub 
JEŻELI a == b
{
    wydrukuj "a jest równe b"
}

W ostatnim przykładzie użyłem już bardziej programistycznego porównania ==. Pojedynczy znak = w SQL używa się do porównania i przypisania wartości, w Pythonie i c# pojedynczy = służy do przypisywania wartości do zmiennej a podwójny do porównywania – ale o tym później.

Krok 2: Piszemy kod w Pythonie

Python jest językiem interpretowanym. To znaczy, piszemy kod i od razu widzimy wynik. Jest idealny dla początkujących, bo „wybacza” wiele błędów składniowych i czyta się go prawie jak angielski. Ale jest doskonały nie tylko dla początkujących. Jest językiem do przeróżnych zastosowań, do aplikacji WEBowych, konsolowych, pod AI, pod automatyzację zadań, analitykę, Uczenie maszynowe i dużo dużo więcej.

Zaczniemy od początku, przechodząc i tłumacząc pseudokod na pythona.

Otwórz swój Google Colab i przepisz poniższy kod.

print("--- Start Programu ---")
budzet = 5000
wydatek = 150
wynik = budzet - wydatek
print("Zostało Ci:", wynik)

Po kolei:

print służy do wyświetlania w konsoli tekstu. możemy go umieszczać w pojedynczych (apostrof) oraz podwójnych cudzysłowach. Ważne, że zaczynać się i kończyć musi takim samym.

Tworzymy zmienne budzet i wydatek, i przypisujemy im odpowiednio 5000 i 150

Następnie tworzymy zmienną wynik a zawiera ona wynik odejmowania budzet – wydatek

Na koniec drukujemy informacje ile zostało pieniędzy.

Prawda, że proste?

Zanim przejdziemy do realizacji pseudokodu jeszcze inny przykład:

Dodajemy w Colab nowy wiersz, za pomocą + Kod

i wklejamy to:

budzet_tekst = input("Podaj swój budżet: ")
budzet = float(budzet_tekst) # Zamiana tekstu na liczbę!

print("Twój budżet to:", budzet)

Po uruchomieniu program czeka na wpisanie budżetu. Wpisuję 6000 i otrzymuje wynik.

Krok po kroku:

Tworze zmienną budzet_tekst i przypisuje jej wynik działania funkcji, która przyjmuje od użytkownika dane:

input – wygląda jak print, z tym, że tekst jest wyświetlany wraz z polem, podawania danych.

Funkcja input zawsze przyjmuje tekst. Jeśli chcemy użyć go do obliczeń, to potrzebujemy zmienić go na liczbę, w tym przypadku zmiennoprzecinkową: float(budzet_tekst)

Ostatnie dwie rzeczy potrzebna nam do sensownego pobierania danych od użytkownika to pętla oraz blok obsługi błędów – formalnie wyjątków.

Powyższe przykłady pobierają dane i koniec. A co jeśli użytkownik zamiast liczby wpisze ala ma kota?

Bez sensu. Program padł i zwrócił tak zwany wyjątek. Na dole widzimy, nie da się przekonwertować stringa czyli tekstu we float, czyli wartość zmiennoprzecinkową.

Chcemy aby użytkownik wpisywał wartość aż, będzie ona poprawna.

Do realizacji tego zadania posłużą nam dwie funkcje, pętla while (dopóki) oraz blok obsługi wyjątków. Szerzej o nim później, tu użyjemy podstawowej wersji.

Najpierw pętla:

wprowadź to do colab:

i = 10
while(i>0):
  print(i)
  i = i-1

Oto co tu się wydarzyło:

1. Tworzymy zmienna i oraz przypisujemy jej wartość 10

2. Odpalamy pętlę while, która będzie się wykonywała, dopóki i będzie większe od zera

3. Pętla while sprawa najpierw warunek potem się wykonuje blok kodu a więc, najpierw mamy i = 10 i wyświetlamy 10, następnie odejmujemy 1 od i i przy następnym wykonaniu i = 9 i tka dalej, aż i staje się zerem i pętla kończy działanie.

Świetnie, a teraz spróbuj zamiast i>0 wpisać samo i – while (i): – i zobacz co się stanie.

A teraz zrób to samo, tylko zamiast i wpisz 1 while (1) – UWAGA:

Naciśnij ten przycisk aby przerwać!

Poznałeś właśnie dwie magiczne właściwości w programowaniu, PRAWDĘ oraz FALSZ ( True i False).

0 (zero) – oznacza logiczne False więc gdy robimy pętlę while czyli dopóki i to jakakolwiek wartość różna od zera będzie prawdą, ale gdy trafi na zero stanie się Faslem i kończy pętlę.

To może być błąd, lub celowe działanie. Gdy u nas chcemy aby użytkownik wprowadzał wartość do tego momentu aż wprowadzi prawidłową, to właśnie użyjemy nieskończonej pętli, gdzie warunek zawsze będzie wskazywał na prawdę.

Zróbmy to elegancko, zamiast while(1): wpiszemy while(True):

Działa tak samo, ale widać, iż jest to działanie celowe a nie błąd.

while(True):
  budzet = float(input('podaj budżet: '))
  print('twój budżet: ', budzet)

Zauważ, że konwertuję na float od razu w miejscu podawania wartości, ale dalej nie jest dobrze.

Gdy wpiszemy prawidłową wartość, on znowu prosi o podanie jeszcze raz, a gdy złą, program przestaje działać.

Uratuje nas blok try … except

Czyli tłumacząc SPRÓBUJ – try:
a jak się nie uda to przechwyć i obsłuż błąd except:

try:
  wynik = 1 + 'ala ma kota'
except:
  print('nie działa niestety bo 1 nie równa się stringowi')

Tu mamy przykład, tworzymy zmienną wynik i chcemy zsumować liczbę całkowitą z tekstem, czego oczywiście nie da się zrobić, w normalnej sytuacji był by błąd, jak wcześniej i program by przestał działać. Zamiast tego program wykonuje to co jest w bloku except. Połączmy dwie nasze nowe rzeczy z jeszcze jednym dodatkowym ważnym słowem:

while(True):
  try:
    budzet = float(input('podaj budżet: '))
    break # break słuzy do przerwania pętli, zupełnego z niej wyjścia. Tu robimy to po wprowadzeniu przez użytkownika poprawnej wartości
  except:
   print('Musisz wpisać same cyfry! jeszcze raz')
print('twój budżet to: ', budzet)

No, ale jeszcze nie jest perfekto, użytkownik wprowadził przecinek zamiast kropki, co jest standardem w kodowaniu. Możemy jednak posłużyć się jedną z metod obiektu tekstowego, mianowicie replace aby zastąpić przecinek kropką, jeszcze przed konwersją, tu przykład:

mamy tekst 'Lama wielka’ po nim dodajemy kropkę, to znaczy, że będziemy używać metody, takiej wewnętrznej funkcji, która pracuje na konkretnym obiekcie. O obiektach później, tu ważne, aby wiedzieć, że tak można, i że różne typy danych, różne obiekty mają różne metody. Tu uzywamy replace czyli zastąp, a następnie wskazujemy co ma być zastąpione 'L’ i czym 'J’.

W naszym przykładzie zróbmy to samo, zastępując przecinek kropką, finalna wersja naszego kodu do wprowadzania budżetu będzie taka:

while(True):
  try:
    budzet = float(input('podaj budżet: ').replace(',', '.'))
    break
  except:
   print('Musisz wpisać same cyfry! jeszcze raz')
print('twój budżet to: ', budzet)

I wszystko działa!

Mamy już najważniejsze części naszego programu.

Żeby już naszego programu na pierwszej lekcji za bardzo nie komplikować, użyjmy tego co już wiemy, i załóżmy, że oblicza budżet do momentu przekroczenia w dół albo zrównania się z zerem. Komentarze w poszczególnych liniach opisują dokładnie co się dzieje.

# Początek już mamy, dodajmy co najwyżej jakiś ładny nagłówek:
print('----------- Twój kalulator budżetu -----------')

while(True): # nieskończona pętla, czyli dopóki prawda
  try: # blok - spróbuj
    budzet = float(input('podaj budżet: ').replace(',', '.')) #deklaracja zmiennej budzet, następnie konwersja na float tego co user wprowadzi, ale wczesniej zmiana przecinka na kropkę
    break # wyjście z pętli
  except: # jeśli jest błąd w poprzedniej części
   print('Musisz wpisać same cyfry! jeszcze raz')

print('twój budżet to: ', budzet) # drukujemy gdy wyjdziemy z pętli

# Teraz czas na obliczenia
while(budzet>0): # dopóki budzet jest powyżej zera program będzei działał
  while(True): # nieskończona pętla, czyli dopóki prawda aby pobrać od uzytkownika wydatek
    try: # blok - spróbuj
      wydatek = float(input('podaj ile wydałeś: ').replace(',', '.')) #deklaracja zmiennej budzet, następnie konwersja na float tego co user wprowadzi, ale wczesniej zmiana przecinka na kropkę
      break # wyjście z pętli
    except: # jeśli jest błąd w poprzedniej części
      print('Musisz wpisać same cyfry! jeszcze raz')
  budzet = budzet - wydatek # odejmowanie wydatku od budzetu
  print('Wydałeś: ',wydatek, 'Pozostało Ci: ', budzet) # drukujemy stan po ostatnim wydatku

print('Koniec programu')

BRAWO, napisałeś swój własny pierwszy program, który coś robi!

Są tu jeszcze rzeczy do poprawy, ale to następnym razem, na razie przypomnienie wszystkich poznanych funkcji.

Użyte funkcje

Oto lista narzędzi (funkcji i komend), których użyliśmy w dzisiejszym programie. Potraktuj to jak swoją pierwszą ściągę!

Komenda / Słowo kluczoweCo to robi?Przykład na chłopski rozum
print(...)Wyświetla tekst lub liczby na ekranie (w konsoli).Usta programu. To sposób, w jaki program do Ciebie mówi.
input(...)Pobiera dane wpisane przez użytkownika z klawiatury. Zawsze traktuje je jako tekst!Uszy programu. Program nasłuchuje, co do niego powiesz.
float(...)Zamienia tekst (np. "2.50") na liczbę zmiennoprzecinkową (ułamek).Tłumacz walut. Zmienia napis na wartość, którą można liczyć.
.replace(',', '.')Metoda tekstu. Zamienia jeden znak na inny (np. przecinek na kropkę).Korektor w zeszycie. Przekreśla błędny znak i wpisuje poprawny.
while(...)Pętla. Wykonuje fragment kodu w kółko, dopóki warunek w nawiasie jest prawdą (True).Karuzela. Kręci się tak długo, jak długo jest włączona.
breakInstrukcja, która natychmiast przerywa działanie pętli i „wychodzi” z niej.Hamulec ręczny lub przycisk STOP na karuzeli.
try ... exceptBlok bezpieczeństwa. Jeśli w części try wystąpi błąd (awaria), program nie wybucha, tylko wykonuje część except.Poduszka powietrzna. Uruchamia się tylko wtedy, gdy zdarzy się wypadek.

Krok 3: Wersja dla odważnych – C# (C Sharp)

Teraz zrobimy to samo, ale w języku C#. C# jest potomkiem C i C++. To języki kompilowane. Muszą być przetłumaczone na kod maszynowy przed uruchomieniem. Są szybsze, bezpieczniejsze dla dużych systemów, ale wymagają od nas więcej dyscypliny.

Przygotowanie środowiska pod C# (To musisz zrobić raz) Aby pisać w C#, potrzebujesz dwóch rzeczy:

  1. Edytor kodu: Polecam Visual Studio Code (VS Code). Pobierz go i zainstaluj z code.visualstudio.com jeśli jeszcze tego nie zrobiłeś ( to na początek, wraz ze skomplikowaniem projektów zapewne trzeba się będzie przesiąść na Visual Studio, nazwa podobna, ale to o wiele bardziej skomplikowana aplikacja).
  2. Silnik (.NET SDK): Sam edytor to tylko notatnik. Musisz pobrać „mózg”, który rozumie C#. Pobierz i zainstaluj .NET SDK ze strony Microsoftu (wybierz wersję .NET 8 lub nowszą) Download .NET (Linux, macOS, and Windows) | .NET.

Tworzymy projekt:

Otwórz Visual Studio Code – polecam Ci stworzyć folder np. KURSCSHARP i w VSCODE wybierz opcję open folder, i wskaż na ten katalog:

Następnie musimy wejść w rozszerzenia

w polu wyszukiwania wpisujemy c#

I następnie w tych trzech wybieramy po kolei install.

I wracamy do explolera

W menu górnym wybierz Terminal -> New Terminal.

Wpisz komendę, która utworzy nowy projekt konsolowy: dotnet new console -n MonitorWydatkow

widzimy też nowy katalog w menu

Wejdź do folderu projektu wpisując: cd MonitorWydatkow

Po lewej stronie w plikach otwórz Program.cs.

I tak to teraz wygląda:

Widać to czego chciałem uniknąć, czyli pierwszy program wyświetlający witaj świecie.

Możesz go uruchomić wpisując w konsoli dotnet run

Ale to nie wszystko, zobacz boczne menu, i nowy folder bin

Program został skompilowany, otrzymaliśmy wykonywalny plik .exe i to on wyświetlił Hello, World! w konsoli.

Ten plik, z zawartością możesz przenosić pomiędzy komputerami i to będzie działało.

Masz tu pierwszą różnicę pomiędzy pythonem a C#. Tu następuje właśnie kompilacja, tłumaczenie kodu na język procesora (No, prawie, ale to nie na teraz).

Najpierw skasuj to co jest w edytorze, zacnzijmy od czystej kartki.

Spróbujemy napisać pierwszą cześć naszego programu ale zanim to zrobimy są pewne rzeczy, które musimy w C# wykonać.

Musimy dodać do naszego programu narzędzia systemowe które zawierają funkcje, nasz kod zaczniemy od using System;

Tak dobrze widzisz, tu, podobnie jak w SQL linię kończymy średnikiem.

W C# wszystko jest obiektem (No, w pythonie w sumie też, ale można żyć bez tej wiedzy jakiś czas). Na razie przyjmijmy, bez tłumaczeń, że podstawowa struktura aplikacji w C# wygląda tak:

using System;

class Program
{
    static void Main(string[] args)
    {
        // Tu nasz kod aplikacji
    }
}

Tak po prostu musi być, i na dziś to przyjmijmy, wszystko wyjaśnimy później (Pamiętaj, że ja się uczę C# z tobą, tak, również jak nie równocześnie to niedawno poznawałem, to co tu pokazuję.

Kolejna różnica w stosunku do Pythona to komentarze, tutaj mają postać // komentarz

Jak już zobaczyłeś w przykładowym Hello world, drukowaliśmy go za pomocą metody WriteLine obiektu Console czyli Console.WriteLine(„cześć”);

Spójrz, inny język ale ta sama zasada. „tekst”.replace w pythonie, tu Console.WriteLine. W każdym chyba obiektowym języku programowania dostęp do metod obiektu otrzymujemy właśnie po kropce.

Program nasz zaczniemy więc od Console.WriteLine(„———– Twój kalkulator budżetu (C#) ———–„);

Kolejną krytyczną dla nas zmianą jest lokalizacja zmiennych. W Pythonie jest bardzo duża dowolność, większość zmiennych jest dostępnych zewsząd, a w C# jeśli zadeklarujemy zmienną budżet w pierwszym while, to nie będzie ona dostępna nigdzie indziej.

Sprawdźmy to tworząc taką samą prostą pętlę jak pierwsza w pythonie.

static void Main(string[] args)
    {
        Console.WriteLine("----------- Twój kalkulator budżetu (C#) -----------");
        int i = 10; // Tym razem nie możemy po prostu podać nazwy zmiennej, musimy podać jej tym, int to liczba całkowita.
        while (i>0) // Wygląda podobnie, z tym, że nie kończy się dwukropkiem
        { // otwieranie bloku kodu
            Console.WriteLine(i); // Wyświetlamy wartość i w linii
            int a = 0; // deklarujemy zmienną a i inicjujemy z zerem
            a = a+i; // powiększamy a o wartość aktualnego i
            i--; // zmniejszamy i o jeden. W pythonie tez można użyć takiego wyrażenia. i-- to jest to samo co i = i - 1 a i++ to i = i + 1
            Console.WriteLine(a); // drukujemy a w pętli
        } // koniec bloku kodu pętli while
        Console.WriteLine(a); // drukujemy a poza pętlą
    }

Nie da się! zobacz, w C# nie da się skompilować programu, gdy są takie błędy. To jest ważne, oznacza, że w C# zmienne są dostępne z góry na dół, czyli z ogółu do kolejnych bloków, ale już w druga stronę nie.

Zróbmy jeszcze jeden test, zadeklarujmy zmienną a przed while, i przypiszmy 10

 static void Main(string[] args)
    {
        Console.WriteLine("----------- Twój kalkulator budżetu (C#) -----------");
        int i = 10;
        int a = 10;
        while (i>0)
        {
            Console.WriteLine(i);
            int a = 0;
            a = a+i;
            i--;
            Console.WriteLine(a);
        }
        Console.WriteLine(a);
    }

I znów błąd. W bloku while, jest dostępna już a z wyższego poziomu, a w jednym miejscu nie mogą być dwa a!

static void Main(string[] args)
    {
        Console.WriteLine("----------- Twój kalkulator budżetu (C#) -----------");
        int i = 10;
        int a = 10;
        while (i>0)
        {
            Console.WriteLine(i);
            
            a = a+i;
            i--;
            Console.WriteLine(a);
        }
        Console.WriteLine(a);
    }

Zadziałała dopiero taka wersja, deklarujemy a przed while, i w środku pętli możemy jej używać. To ważne, już wiemy, gdzie deklarować budżet aby móc na nim pracować.

Zaczynamy więc od deklaracji budżetu o typie decimal, to jest prawidłowy format zmiennoprzecinkowy do operowania na pieniądzach.

Poniżej cały blok wprowadzania budżetu

while (true) // nieskończona pętla, to już znamy, zwróć jednak uwagę na true - pisane z małej litery w C#
        {
            try // blog try znamy z pythona, z tym, że w C# jego druga część nazywa się catch a nie except
            {
                Console.Write("Podaj budżet: "); // wypisujemy w konsoli prośbę o podanie wartości, ale tym razem nie WriteLine a samo Write. Nie kończy się ono znakiem nowej linii.
                string input = Console.ReadLine(); // pobieramy linię, i jawnie definiujemy typ zmiennej na string, czytamy całą linię, aż do zatwierdzenia enterem.
                
                // Zamiana przecinka na kropkę (prawie jak w Pythonie)
                input = input.Replace(",", "."); // W pythonie zmiana była w miejscu, to znaczy że wystarczył tekst.replace, a tutaj musimy zrobić tekst = tekst.replace

                // Parsowanie (Konwersja) tekstu na liczbę
                // CultureInfo.InvariantCulture wymusza używanie kropki jako separatora
                budzet = decimal.Parse(input, CultureInfo.InvariantCulture); // Używamy metody Parse obiektu decimal aby przerobić tekst na zmiennoprzecinkowa wartość. CultureInfo.InvariantCulture - To coś po prostu musi być, nie będziemy się teraz bliżej temu przyglądać.
                
                break; // Wyjście z pętli
            }
            catch // Pythonowski except. Catch wystepuje tez w JS, PHP i JAVA
            {
                Console.WriteLine("Musisz wpisać same cyfry! Jeszcze raz.");
            }
        }

        Console.WriteLine($"Twój budżet to: {budzet}");

Próba kompilacji i błąd!

Błędy to sedno życia programisty 😉 Żeby zamienić tekst na decimal potrzebujemy dodać jeszcze jedną bibliotekę.

using System.Globalization; // To potrzebne, żeby kropka w liczbach działała wszędzie tak samo.

Pełny dotychczasowy kod:

using System;
using System.Globalization; // To potrzebne, żeby kropka w liczbach działała wszędzie tak samo
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("----------- Twój kalkulator budżetu (C#) -----------");
        decimal budzet = 0;
        while (true) 
        {
            try 
            {
                Console.Write("Podaj budżet: "); 
                string input = Console.ReadLine();
                
                // Zamiana przecinka na kropkę (prawie jak w Pythonie)
                input = input.Replace(",", ".");               
                budzet = decimal.Parse(input, CultureInfo.InvariantCulture); 
                
                break; 
            }
            catch 
            {
                Console.WriteLine("Musisz wpisać same cyfry! Jeszcze raz.");
            }
        }

        Console.WriteLine($"Twój budżet to: {budzet}");

    }
}

Mamy to, czyli mamy już wszystkie elementy układanki do napisania kompletnego programu.

using System; 
using System.Globalization; 

class Program 
{
    static void Main(string[] args) 
    {
        Console.WriteLine("----------- Twój kalkulator budżetu (C#) -----------");
        decimal budzet = 0; 

        // Pętla pobierania budżetu
        while (true) 
        {
            try 
            {
                Console.Write("Podaj budżet: ");
                string input = Console.ReadLine();
                
                // Zamiana przecinka na kropkę (tak jak w Pythonie)
                input = input.Replace(",", ".");

                // Parsowanie (Konwersja) tekstu na liczbę
                // CultureInfo.InvariantCulture wymusza używanie kropki jako separatora
                budzet = decimal.Parse(input, CultureInfo.InvariantCulture);
                
                break; // Wyjście z pętli
            }
            catch 
            {
                Console.WriteLine("Musisz wpisać same cyfry! Jeszcze raz.");
            }
        }

        Console.WriteLine($"Twój budżet to: {budzet}");

        // Pętla wydatków (działa dopóki masz pieniądze)
        while (budzet > 0) 
        {
            decimal wydatek = 0; // definicja wydatku i ustawienie na start z zerem

            // Wewnętrzna pętla pobierania poprawnej kwoty wydatku
            while (true) 
            {
                try 
                {
                    Console.Write("Podaj ile wydałeś: ");
                    string inputWydatek = Console.ReadLine();
                    
                    // Obsługa zamiany przecinka na kropkę
                    inputWydatek = inputWydatek.Replace(",", ".");
                    
                    wydatek = decimal.Parse(inputWydatek, CultureInfo.InvariantCulture);
                    break;
                }
                catch 
                {
                    Console.WriteLine("Błąd! Wpisz poprawną kwotę.");
                }
            }

            budzet = budzet - wydatek; / obliczamy różnicę
            Console.WriteLine($"Wydałeś: {wydatek}. Pozostało Ci: {budzet}"); // Nowy sposób drukowania, dodajemy $ przed cudzysłów, i dzięki temu możemy w nawiasach klamrowych wypisywać zmienne. W Pythonie to samo osiągniemy dając przed tekst literkę f.
        }

        Console.WriteLine("Koniec programu - jesteś bankrutem!");
    }
}

Różnice są, ale zobacz, to dalej to samo. Troszkę inny zapis, tu więcej szczegółów, tam mniej, ale logika jest ta sama.

Ja się cieszę, że poznaję nowy język, a ty wraz ze mną!

Podsumowanie różnic:

Oprócz znanych już klamerek { } i średników ;, pojawiła się tu jedna krytyczna rzecz, na której wykłada się każdy początkujący programista przesiadający się z Pythona.

Pułapka: Zasięg zmiennych (Scope)

Spójrz na początek kodu. Dlaczego napisałem decimal budzet = 0; przed pętlą while?

  • W Pythonie: Jeśli stworzysz zmienną w środku pętli (wciętą), ona „przeżyje” wyjście z pętli i możesz jej używać dalej.
  • W C#: Co dzieje się w klamerkach { ... }, zostaje w klamerkach! Gdybyśmy zadeklarowali decimal budzet wewnątrz pętli while, to zaraz po klamrze zamykającej } komputer by o niej zapomniał. Dlatego musimy ją „zarezerwować” wcześniej, na poziomie głównym programu.

Pozostałe różnice:

  1. decimal zamiast float: W C# do pieniędzy używamy typu decimal. Jest dużo bardziej precyzyjny. float w C# służy do grafiki i obliczeń naukowych, ale przy pieniądzach gubi grosze!
  2. Console.WriteLine vs print: Inna nazwa, to samo działanie.
  3. Parse: W Pythonie robiłeś float(tekst). W C# typy mają swoje metody, więc piszemy decimal.Parse(tekst). To znaczy: „Hej, typie dziesiętny, przeanalizuj ten tekst i wyciągnij z niego liczbę”.

Użyte funkcje

W C# wiele rzeczy działa logicznie tak samo jak w Pythonie, ale nazywa się inaczej lub wymaga więcej pisania. Oto zestawienie komend użytych w naszym programie:

Komenda / Słowo kluczoweCo to robi?Odpowiednik w Pythonie i Wyjaśnienie
Console.WriteLine(...)Wyświetla tekst w konsoli i przechodzi do nowej linii.To samo co print(...). Tylko nazwa jest dłuższa (dosłownie: „Konsolo, napisz linię”).
Console.Write(...)Wyświetla tekst, ale kursor zostaje w tej samej linii (przydatne przy pytaniu użytkownika).To samo co print(..., end="").
Console.ReadLine()Czeka, aż użytkownik wpisze tekst i naciśnie ENTER.To samo co input(). Zwraca zawsze tekst (string).
decimalTyp zmiennej przeznaczony specjalnie do walut i finansów.W Pythonie używaliśmy float. decimal jest dużo dokładniejszy – nie zgubi ani grosza przy obliczeniach.
decimal.Parse(...)Zamienia tekst na liczbę typu decimal.To samo co float(...). Nakazuje komputerowi „przetłumaczyć” napis na wartość liczbową.
try { ... } catch { ... }Blok bezpieczeństwa. Jeśli w klamrach try coś wybuchnie, program skacze do catch.To samo co try ... except. W C# nazywamy to „łapaniem” (catch) błędu.
{ ... } (Klamry)Oznaczają początek i koniec bloku kodu (np. pętli lub instrukcji warunkowej).W Pythonie robiły to wcięcia. W C# wcięcia są dla Ciebie, a klamry dla komputera.
; (Średnik)Oznacza koniec polecenia.Kropka na końcu zdania. W Pythonie jej nie było (tam wystarczył koniec linii).

Posłowie

To nie jest łatwe co tu próbuję zrobić, aby tłumaczyć samo programowanie, myślenie programistyczne, i dodatkowo uczymy się dwóch języków programowania. Gdy coś jest niejasne, zawiła, niezrozumiałe, albo masz problemy, pisz komentarz albo pisz na maila. Odpowiem i pomogę.

Lekcje będą przeplatane, najpierw jakiś kod, jak dziś, potem w kolejnej lekcji go udoskonalimy, poznamy kolejne ważne elementy programowani, ale nie chcę robić encyklopedii. Nie oczekuj od siebie, ze zapamiętasz wszystko.

0 komentarzy

Wyślij komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Share This

Share this post with your friends!