Защо Python, щом знаем C#
От следващия урок ще извикваме езиков модел от програма, ще разчитаме JSON и ще пишем в база от данни. Всичко това може и на C#. Но цялата екосистема за изкуствен интелект — библиотеките, примерите, документацията — е на Python. И има още една причина: Google Colab е Python среда в браузъра — без инсталация, без права, с готови библиотеки.
Добрата новина: идеите са същите. Променливи, списъци, условия, цикли, функции — знаете ги от Модул 1. Разликата е в синтаксиса, а той се учи за един час.
Colab: клетки и изпълнение
- Отворете
colab.research.google.comс Google акаунта си и създайте нова тетрадка (notebook). - Тетрадката е списък от клетки. В клетка с код пишете Python;
Shift+Enterя изпълнява и показва изхода точно под нея. - Няма
Main— кодът се изпълнява ред по ред, отгоре надолу, в реда, в който пускате клетките. - Променливите живеят между клетките: дефинирана в първата, се ползва в третата. Затова редът на изпълнение е важен.
- Ако се объркате —
Runtime → Restart sessionизтрива всичко и започвате отначало.
Същата програма на два езика
Списък от ученици, филтриране на отличните, средна оценка. Първо така, както бихте го написали в Модул 1:
var ucenici = new List<(string Ime, string Klas, double Ocenka)> {
("Мария", "12а", 5.50), ("Георги", "12а", 4.25), ("Елена", "12б", 5.75)
};
double suma = 0;
foreach (var u in ucenici) {
if (u.Ocenka >= 5.00) {
Console.WriteLine($"{u.Ime} ({u.Klas}) — {u.Ocenka:F2}");
}
suma += u.Ocenka;
}
Console.WriteLine($"Средна: {suma / ucenici.Count:F2}");А сега на Python:
ucenici = [
{"ime": "Мария", "klas": "12а", "ocenka": 5.50},
{"ime": "Георги", "klas": "12а", "ocenka": 4.25},
{"ime": "Елена", "klas": "12б", "ocenka": 5.75},
]
suma = 0
for u in ucenici:
if u["ocenka"] >= 5.00:
print(f"{u['ime']} ({u['klas']}) — {u['ocenka']:.2f}")
suma += u["ocenka"]
print(f"Средна: {suma / len(ucenici):.2f}")
# Мария (12а) — 5.50
# Елена (12б) — 5.75
# Средна: 5.17- Няма типове при декларация: „suma = 0“, а не „double suma = 0“. Типът се извежда от стойността.
- Няма точка и запетая; блокът започва с двоеточие и продължава, докато трае отстъпът (4 интервала).
- Записът е речник (dictionary): двойки ключ → стойност, достъп с u["ime"]. Това е като ред от таблица — колона → стойност.
- f-низът f"…{израз:.2f}" е точно $"…{израз:F2}" от C#.
C# ↔ Python
| C# | Python | |
|---|---|---|
| Променлива | int broi = 5; | broi = 5 |
| Низ | string ime = "Ива"; | ime = "Ива" |
| Форматиране | $"{x:F2}" | f"{x:.2f}" |
| Извеждане | Console.WriteLine(x); | print(x) |
| Блок | { … } | : и отстъп |
| Условие | if (a > b && c) { … } | if a > b and c: |
| Иначе ако | else if (…) | elif …: |
| Цикъл по колекция | foreach (var u in lst) | for u in lst: |
| Цикъл с брояч | for (int i = 0; i < 10; i++) | for i in range(10): |
| Списък | new List<int> { 1, 2 } | [1, 2] |
| Дължина | lst.Count | len(lst) |
| Добавяне | lst.Add(x); | lst.append(x) |
| Речник | new Dictionary<string, int>() | {} |
| Функция | static double Sredna(List<double> a) | def sredna(a): |
| Нищо | null | None |
| Истина | true / false | True / False |
| Коментар | // текст | # текст |
Списъци, речници, функции
Списък
imena = ["Мария", "Георги", "Елена"]
imena.append("Ива")
print(len(imena), imena[0], imena[-1], imena[1:3])
# 4 Мария Ива ['Георги', 'Елена']
for i, ime in enumerate(imena):
print(i, ime) # 0 Мария, 1 Георги, ...
dalgi = [ime for ime in imena if len(ime) > 4] # list comprehension
print(dalgi) # ['Мария', 'Георги', 'Елена']Индексът -1 е последният елемент, [1:3] — срез от позиция 1 до 3 без нея. Редът [израз for x in списък if условие] е цикъл, филтър и нов списък на един ред — ще го виждате навсякъде.
Речник
zapis = {"ime": "Мария", "klas": "12а"}
zapis["ocenka"] = 5.50 # добавяне на ключ
print(zapis["ime"]) # Мария
print(zapis.get("grad")) # None — няма грешка при липсващ ключ
print("klas" in zapis) # True
for kluch, stoynost in zapis.items():
print(kluch, "→", stoynost)Функция
def sredna(stoynosti, znaci=2):
if len(stoynosti) == 0:
return None
return round(sum(stoynosti) / len(stoynosti), znaci)
print(sredna([5.5, 4.25, 5.75])) # 5.17
print(sredna([])) # NoneБез тип на параметрите и на резултата, с параметър по подразбиране (znaci=2). Функцията може да върне число в единия случай и None в другия — Python го позволява, извикващият код трябва да провери.
Какво трябва да запомниш
- Colab е Python в браузъра: тетрадка от клетки, Shift+Enter изпълнява клетката, променливите живеят между клетките.
- Без типове при декларация и без точка и запетая; блокът е двоеточие плюс отстъп.
- Списък [ … ] с append, len, индекси и срезове; речник { ключ: стойност } — запис като ред от таблица.
- for x in списък: обхожда елементите; for i in range(n): е броячът от C#.
- def име(параметри): дефинира функция; None е null; True/False с главна буква.
- f"{x:.2f}" форматира като $"{x:F2}"; and/or/not вместо &&, ||, !.