IlmHamroh
Python kursi/Kompyuter va dasturlash8/8-dars14 daqiqa
Mundarija (25)

1.8-dars: "Salom, dunyo!" ortidagi jarayon — klaviaturadan ekrangacha

1-QISM — KOMPYUTER VA DASTURLASH · 8-dars · 1-qismning yakuni


1. Kirish va motivatsiya

Bu — 1-qismning oxirgi darsi. Va u eng qiziqarlisi, chunki biz o'rgangan hamma narsani bitta zanjirga bog'laymiz.

Deyarli har bir dasturlash kursi shu qatordan boshlanadi:

python
print("Salom, dunyo!")

Odatda o'qituvchi "buni yozing, ishga tushiring, ajoyib — davom etamiz" deydi. Biz boshqacha qilamiz.

Chunki bu bitta qator ortida hayratlanarli murakkab zanjir turibdi. Siz klavishani bosganingizdan ekranda harf paydo bo'lgunicha o'nlab bosqich o'tiladi: operatsion tizim, fayl tizimi, interpretator, bytecode, virtual mashina, tizim chaqiruvlari, drayver, video karta.

Nega bu kerak?

Chunki muammo yuzaga kelganda siz zanjirning qaysi bo'g'inida ekanini bilishingiz kerak. Dastur ishlamayaptimi? Fayl topilmadimi? Kodlash buzuqmi? Chiqish ko'rinmayaptimi? Har biri boshqa bo'g'inda.

Bu darsni tugatgach:

  • python main.py yozganingizda aniq nima sodir bo'lishini bilasiz
  • PATH, stdout, tizim chaqiruvi (system call) nima ekanini tushunasiz
  • Nega ba'zan chiqish darhol ko'rinmaydi (buferlash) va buni qanday hal qilishni bilasiz
  • 1–7-darslardagi barcha tushuncha bir manzaraga birlashadi

2. Nazariya — chuqur tushuntirish

2.1. Umumiy manzara — o'n bosqich

text
 1. Siz klaviaturada yozasiz
 2. Muharrir matnni faylga saqlaydi (disk)
 3. Terminalda "python main.py" deb yozasiz
 4. Operatsion tizim "python" ni topadi (PATH)
 5. OT jarayon yaratadi va Pythonni RAM'ga yuklaydi
 6. Python main.py faylini o'qiydi
 7. Python kodni bytecode'ga kompilyatsiya qiladi
 8. Virtual mashina bytecode'ni bajaradi
 9. print() tizim chaqiruvini amalga oshiradi
10. OT matnni terminalga, terminal ekranga chiqaradi

Endi har birini ko'rib chiqamiz.

2.2. 1–2-bosqich: matndan faylgacha

Siz print("Salom, dunyo!") deb yozasiz. Bu — matn, boshqa hech narsa emas.

Muharrir uni faylga saqlaganda har bir belgi 1-darsda o'rganganimizdek songa aylanadi:

text
p  →  112
r  →  114
i  →  105
n  →  110
t  →  116
(  →   40
"  →   34
S  →   83
...

Fayl diskda shu sonlar ketma-ketligi sifatida yotadi. .py kengaytmasi — bu faqat nom. Fayl ichida hech qanday "men Python faylman" degan belgi yo'q.

Muhim: kodlash muhim. Fayl UTF-8 da saqlanishi kerak. Python 3 buni sukut bo'yicha kutadi. Agar muharrir boshqa kodlashda saqlasa, o'zbekcha harflar buziladi.

2.3. 3–4-bosqich: python qayerdan topiladi

Terminalda python main.py deb yozasiz. Operatsion tizim birinchi savol beradi: python degan dastur qayerda?

Javobni PATH o'zgaruvchisidan qidiradi. PATH — bu papkalar ro'yxati:

text
Windows:
  C:\Python312\
  C:\Python312\Scripts\
  C:\Windows\system32
  ...

Linux/macOS:
  /usr/local/bin
  /usr/bin
  /bin
  ...

OT ro'yxatni yuqoridan pastga ko'rib chiqadi va python nomli bajariladigan faylni qidiradi. Topsa — to'xtaydi va o'shani ishlatadi.

Topmasa:

text
'python' is not recognized as an internal or external command

yoki

text
command not found: python

Bu boshlovchilar duch keladigan eng birinchi xato. Sababi: Python o'rnatilgan, lekin PATH ga qo'shilmagan. Windows'da o'rnatishda "Add Python to PATH" katagini belgilash kerak — buni 2-qismda batafsil ko'ramiz.

Nozik jihat: PATH da bir nechta Python bo'lsa, birinchi topilgani ishlatiladi. Aynan shuning uchun ba'zida python --version kutilmagan versiyani ko'rsatadi. Virtual muhit ham shu mexanizmga tayanadi: u o'z papkasini PATH ning boshiga qo'yadi.

2.4. 5-bosqich: jarayon yaratiladi

OT python.exe faylini topgach:

  1. Uni diskdan RAM'ga yuklaydi
  2. Yangi jarayon (process) yaratadi
  3. Jarayonga o'z xotira sohasini ajratadi
  4. Unga argumentlarni uzatadi: ["python", "main.py"]
  5. Boshqaruvni Pythonga topshiradi

2-darsda ko'rganimizdek, jarayon xotirasi bo'linadi: kod, statik ma'lumot, heap, stack.

Har bir jarayon izolyatsiya qilingan. Sizning dasturingiz boshqa dasturning xotirasiga kira olmaydi. Bu xavfsizlik va barqarorlik uchun.

2.5. 6–7-bosqich: o'qish va kompilyatsiya

Python endi ishlayapti. U argumentga qaraydi: main.py.

Faylni o'qiydi. Fayl tizimidan baytlar ketma-ketligini oladi va UTF-8 sifatida matnga o'giradi.

Tahlil qiladi (parsing). Matnni tuzilmaga aylantiradi:

text
"print("Salom, dunyo!")"
         ↓
Tokenlar: [NAME:print] [LPAR:(] [STRING:"Salom, dunyo!"] [RPAR:)]
         ↓
AST (Abstrakt sintaksis daraxti):
    Call
    ├── func: Name(print)
    └── args: [Constant("Salom, dunyo!")]

AST (Abstract Syntax Tree) — kodning daraxt ko'rinishidagi tuzilmasi. Aynan shu bosqichda SyntaxError chiqadi: agar qavs yopilmagan bo'lsa, daraxt qurilmaydi.

Bytecode'ga o'giradi:

text
  LOAD_NAME     print
  PUSH_NULL
  LOAD_CONST    'Salom, dunyo!'
  CALL          1
  POP_TOP
  RETURN_CONST  None

Bu — 2 va 4-darslarda ko'rgan bytecode.

Eslatma: main.py uchun .pyc fayli saqlanmaydi. Python faqat import qilingan modullar uchun __pycache__ yaratadi. Sababi: asosiy faylni har safar qayta o'qish baribir kerak.

2.6. 8-bosqich: virtual mashina bajaradi

Endi PVM (Python Virtual Machine) bytecode'ni buyruq-buyruq bajaradi.

LOAD_NAME print — "print" nomini qidiradi:

text
1. Mahalliy o'zgaruvchilar orasida bormi?     yo'q
2. Global o'zgaruvchilar orasida bormi?       yo'q
3. Ichki (builtins) funksiyalar orasida?      HA — topildi

Bu tartib LEGB deb ataladi va uni 7-qismda batafsil o'rganamiz. Agar hech qayerdan topilmasa — NameError.

LOAD_CONST 'Salom, dunyo!' — satr obyektini stekka qo'yadi. Diqqat: satr allaqachon xotirada mavjud, u kompilyatsiya paytida yaratilgan.

CALL 1 — funksiyani bitta argument bilan chaqiradi.

Endi eng qiziq qismi boshlanadi — print ning ichi.

2.7. 9-bosqich: print aslida nima qiladi

print sodda ko'rinadi, lekin u bir necha ish bajaradi:

text
1. Argumentni matnga o'giradi (str() chaqiriladi)
2. Ajratgichlarni qo'shadi (bir nechta argument bo'lsa — bo'sh joy)
3. Oxiriga qator tashlash belgisini qo'shadi (\n)
4. Natijani sys.stdout ga yozadi

sys.stdout — "standart chiqish" (standard output). Bu fayl kabi obyekt. Odatda u terminalga ulangan, lekin uni o'zgartirish mumkin:

bash
python main.py > natija.txt     # chiqish faylga ketadi
python main.py | grep "Salom"   # chiqish boshqa dasturga ketadi

Dasturingiz o'zgarmaydi — u baribir stdout ga yozadi. Faqat stdout qayerga ulangani o'zgaradi. Bu Unix falsafasining asosiy g'oyasi.

Buferlash — muhim nozik jihat.

stdout har bir belgini darhol yubormaydi. U buferga to'playdi va to'lgach yoki qator tugagach yuboradi. Sababi — samaradorlik: har belgi uchun alohida tizim chaqiruvi qilish qimmat.

Bu ba'zida chalkashtiradi:

python
import time

print("Boshlandi", end="")   # qator tashlash yo'q
time.sleep(5)                # 5 soniya kutish
print(" — tugadi")

# Ba'zi holatda "Boshlandi" darhol ko'rinmaydi,
# ikkalasi 5 soniyadan keyin birga chiqadi

Yechim:

python
print("Boshlandi", end="", flush=True)   # buferni majburan bo'shatish

Bu bilim uzoq ishlaydigan dasturlarda (progress ko'rsatish) va loglashda muhim.

2.8. 10-bosqich: tizim chaqiruvi va ekran

stdout ga yozish oxir-oqibat tizim chaqiruviga (system call) aylanadi.

Tizim chaqiruvi — dasturning operatsion tizimdan xizmat so'rashi. Dastur o'zi ekranga yoza olmaydi — bu imtiyozli amal. U OT dan so'raydi:

text
Python jarayoni
      │
      │  write(1, "Salom, dunyo!\n", 14)
      │  (1 = stdout, matn, uzunlik)
      ↓
Operatsion tizim yadrosi (kernel)
      │
      ↓
Terminal dasturi
      │
      ↓
Grafik tizim → video karta → ekran

Nega dastur to'g'ridan-to'g'ri ekranga yoza olmaydi? Xavfsizlik uchun. Aks holda har qanday dastur boshqasining oynasiga yozishi mumkin bo'lardi.

Terminal matnni oladi, shriftga qarab har bir harfning shaklini aniqlaydi, piksellarga aylantiradi va ekranga chizadi.

Va nihoyat siz "Salom, dunyo!" ni ko'rasiz.

2.9. Butun zanjir — bir joyda

text
┌─────────────────────────────────────────────────────────┐
│  1. Siz yozasiz: print("Salom, dunyo!")                 │
│                          ↓                              │
│  2. Muharrir faylga saqlaydi (UTF-8, disk)              │
│                          ↓                              │
│  3. Terminal: python main.py                            │
│                          ↓                              │
│  4. OT PATH dan python ni topadi                        │
│                          ↓                              │
│  5. Jarayon yaratiladi, Python RAM'ga yuklanadi         │
│                          ↓                              │
│  6. Python faylni o'qiydi (disk → RAM)                  │
│                          ↓                              │
│  7. Tahlil → AST → bytecode                             │
│                          ↓                              │
│  8. PVM bytecode'ni bajaradi                            │
│                          ↓                              │
│  9. print → str() → bufer → sys.stdout                  │
│                          ↓                              │
│ 10. Tizim chaqiruvi → OT → terminal → ekran             │
└─────────────────────────────────────────────────────────┘

Bularning hammasi millisekundlarda sodir bo'ladi.

2.10. Xato qayerda bo'lishi mumkin — diagnostika jadvali

Endi eng amaliy qism. Har bosqichda o'ziga xos xato bo'ladi:

Bosqich Xato Nima demak
3–4 'python' is not recognized PATH da yo'q. Qayta o'rnatish yoki PATH ga qo'shish
6 No such file or directory Fayl nomi noto'g'ri yoki boshqa papkadasiz
6 SyntaxError: invalid character Fayl kodlashi noto'g'ri
7 SyntaxError Yozuv xatosi — qavs, ikki nuqta, tirnoq
7 IndentationError Chekinish noto'g'ri
8 NameError Nom topilmadi (LEGB bo'yicha)
8 TypeError, ValueError Amal noto'g'ri turda
9 UnicodeEncodeError Terminal belgini ko'rsata olmaydi
9 Chiqish ko'rinmaydi Buferlash — flush=True kerak

Bu jadval — dasturchining diagnostika vositasi. Xato ko'rganingizda "bu qaysi bosqich?" deb so'rang — javob sizni to'g'ri yo'nalishga olib boradi.


3. Tez ma'lumotnoma

O'n bosqich

text
yozish → saqlash → buyruq → PATH → jarayon →
o'qish → bytecode → PVM → stdout → ekran

Asosiy tushunchalar

text
PATH             — OT dasturlarni qidiradigan papkalar ro'yxati
Jarayon          — ishlab turgan dastur, o'z xotirasi bilan
AST              — kodning daraxt ko'rinishi
stdout           — standart chiqish (terminal yoki fayl)
Tizim chaqiruvi  — OT dan xizmat so'rash
Buferlash        — chiqishni to'plab yuborish

Buferni bo'shatish

python
print("matn", flush=True)

4. Batafsil misollar

Bu misollarni 2-qismda Python o'rnatgach sinab ko'rasiz.

Misol 1 — Zanjirni o'z ko'zingiz bilan ko'rish

python
import sys
import os

# 4-bosqich: qaysi Python ishlayapti
print("Python joylashuvi:", sys.executable)
# C:\Python312\python.exe

# 5-bosqich: jarayon ma'lumoti
print("Jarayon ID (PID):", os.getpid())
# 15432

# 3-bosqich: buyruq argumentlari
print("Argumentlar:", sys.argv)
# ['main.py']

# 9-bosqich: chiqish qayerga ulangan
print("stdout terminalgami:", sys.stdout.isatty())
# True  — terminalga
# False — faylga yoki boshqa dasturga yo'naltirilgan

Nima ko'rsatdi: 2.3–2.7-bo'limlar. isatty() ayniqsa qiziq: uni sinab ko'ring, keyin python main.py > natija.txt deb ishga tushiring va farqni ko'ring.

Misol 2 — Bytecode'ni ko'rish (7-bosqich)

python
import dis

kod = 'print("Salom, dunyo!")'

# Kompilyatsiya qilib, bytecode'ni ko'rsatish
dis.dis(compile(kod, "<misol>", "exec"))

Natija (Python 3.12):

text
  0           RESUME                   0
  1           LOAD_NAME                0 (print)
              PUSH_NULL
              LOAD_CONST               0 ('Salom, dunyo!')
              CALL                     1
              POP_TOP
              RETURN_CONST             1 (None)

Nima ko'rsatdi: 2.5 va 2.6-bo'limlar. LOAD_NAME print — bu 2.6-bo'limdagi LEGB qidiruvi. CALL 1 — funksiyani bitta argument bilan chaqirish.

Misol 3 — Buferlash muammosini ko'rish va hal qilish

python
import time

print("=== Buferlashsiz ===")
for i in range(5):
    print(f"Qadam {i+1}...", end=" ")
    time.sleep(1)
print()

# Ba'zi tizimda hammasi 5 soniyadan keyin BIRGA chiqadi

print("\n=== flush bilan ===")
for i in range(5):
    print(f"Qadam {i+1}...", end=" ", flush=True)
    time.sleep(1)
print()

# Endi har soniyada bittadan chiqadi

Nima ko'rsatdi: 2.7-bo'lim. Bu farq uzoq ishlaydigan dasturlarda muhim: foydalanuvchi dastur qotib qolgan deb o'ylamasligi kerak.

Misol 4 — stdout ni yo'naltirish (9-bosqich)

python
import sys

# Odatdagi chiqish
print("Bu terminalga chiqadi")

# stdout ni faylga yo'naltirish
with open("natija.txt", "w", encoding="utf-8") as fayl:
    eski_stdout = sys.stdout
    sys.stdout = fayl

    print("Bu faylga yoziladi")
    print("Bu ham faylga")

    sys.stdout = eski_stdout      # qaytaramiz

print("Bu yana terminalga chiqadi")

# natija.txt ichida ikkita qator bo'ladi

Xuddi shu narsani terminaldan ham qilish mumkin — kodni o'zgartirmasdan:

bash
python main.py > natija.txt        # chiqishni faylga
python main.py 2> xatolar.txt      # xatolarni faylga
python main.py | grep "Salom"      # boshqa dasturga

Nima ko'rsatdi: 2.7-bo'limdagi asosiy g'oya — print ekranga yozmaydi, u stdout ga yozadi. stdout qayerga ulangani dasturdan tashqarida hal qilinadi.


5. To'g'ri va noto'g'ri tushunishlar

Noto'g'ri fikr To'g'risi
"print ekranga yozadi" print sys.stdout ga yozadi. U terminalga, faylga yoki boshqa dasturga ulangan bo'lishi mumkin
"Dastur to'g'ridan-to'g'ri ekranga chizadi" Yo'q, OT dan tizim chaqiruvi orqali so'raydi. Bu xavfsizlik uchun
".py kengaytmasi faylni Python fayli qiladi" Kengaytma — faqat nom. Ichida oddiy matn
"python buyrug'i doim bir xil Pythonni ishlatadi" PATH dagi birinchi topilganini. Virtual muhit shuni o'zgartiradi
"print darhol chiqaradi" Buferlash bor. Kerak bo'lsa flush=True
"main.py uchun ham .pyc yaratiladi" Yo'q, faqat import qilingan modullar uchun
"Xato — bitta narsa" Xato qaysi bosqichda yuz berganiga qarab turlicha. 2.10-jadvalga qarang

6. Keng tarqalgan xatolar va yechimlari

1. 'python' is not recognized

Bosqich: 4 (PATH)

Sabab: Python o'rnatilmagan yoki PATH ga qo'shilmagan.

Yechim: qayta o'rnatishda "Add Python to PATH" ni belgilang. Windows'da py buyrug'ini ham sinab ko'ring.

2. No such file or directory: 'main.py'

Bosqich: 6 (fayl o'qish)

Sabab: siz boshqa papkadasiz yoki fayl nomida xato bor.

Yechim: dir (Windows) yoki ls (Linux/Mac) bilan joriy papkani tekshiring. cd bilan to'g'ri papkaga o'ting.

3. Chiqish ko'rinmayapti yoki kech ko'rinadi

Bosqich: 9 (buferlash)

Yechim: print(..., flush=True) yoki python -u main.py (buferlashsiz rejim).

4. O'zbekcha harflar buzilib chiqadi

Bosqich: 2 yoki 9 (kodlash)

Sabab: fayl UTF-8 da emas yoki terminal UTF-8 ni qo'llab-quvvatlamaydi.

Yechim: muharrirda UTF-8 ni tanlang. Windows terminalida chcp 65001 buyrug'i yordam berishi mumkin.

5. Xato xabarini o'qimasdan tuzatishga urinish

Bosqich: har qanday

Yechim: 2.10-jadvalga qarang. Xato turi sizga qaysi bosqichda muammo borligini aytadi.


7. Integratsiya — bu bilim qayerda kerak bo'ladi

  • 2-qism (Muhit): PATH, terminal, birinchi dastur — bu darsning amaliyoti
  • 3-qism (Asoslar): print() ning to'liq imkoniyatlari
  • 7-qism (Funksiyalar): LEGB qoidasi — LOAD_NAME qanday ishlaydi
  • 9-qism (Xatolar): har bosqichdagi xatolarni ushlash
  • 12-qism (CPython): AST, bytecode, PVM — bu darsning chuqur davomi
  • 15-qism (Standart kutubxona): sys, os, subprocess
  • 16-qism (Fayllar): kodlash va buferlash batafsil

8. Eng yaxshi amaliyotlar

  1. Xato ko'rganingizda "bu qaysi bosqich?" deb so'rang. 2.10-jadval — sizning diagnostika vositangiz.

  2. Uzoq ishlaydigan dasturda flush=True ishlating. Foydalanuvchi dastur ishlab turganini ko'rishi kerak.

  3. Fayllarni doim UTF-8 da saqlang. Muharrirni shunga sozlang va unuting.

  4. print o'rniga logging ni o'rganing (15-qism). Jiddiy dasturda print bilan nosozlik izlash noqulay.

  5. sys.executable ni tekshirishni biling. "Qaysi Python ishlayapti?" degan savol tez-tez chiqadi, ayniqsa virtual muhit bilan.

  6. Zanjirni eslab qoling. U ko'p muammoni tez yechishga yordam beradi.


9. Amaliy topshiriq

Vazifa 1: Zanjirni tiklash

Xotiradan (jadvalga qaramasdan) python main.py yozganingizdan ekranda matn chiqqunicha bo'lgan bosqichlarni yozing. Kamida oltitasini eslashga harakat qiling, keyin 2.9-bo'lim bilan solishtiring.

Vazifa 2: Xatoni bosqichga bog'lash

Quyidagi xatolar zanjirning qaysi bosqichida yuz beradi?

text
1.  'python' is not recognized as an internal or external command
2.  SyntaxError: '(' was never closed
3.  NameError: name 'pirnt' is not defined
4.  FileNotFoundError: [Errno 2] No such file or directory: 'main.py'
5.  IndentationError: unexpected indent
6.  UnicodeEncodeError: 'charmap' codec can't encode character
Javoblar
  1. 4-bosqich — PATH. OT python ni topa olmadi
  2. 7-bosqich — kompilyatsiya. AST qurilmadi, dastur umuman ishga tushmadi
  3. 8-bosqich — bajarilish. PVM pirnt nomini LEGB bo'yicha qidirdi va topmadi
  4. 6-bosqich — fayl o'qish. Python ishga tushdi, lekin faylni topa olmadi
  5. 7-bosqich — kompilyatsiya. Chekinish sintaksisning bir qismi
  6. 9-bosqich — chiqish. Terminal belgini ko'rsata olmaydi (kodlash muammosi)

Vazifa 3: Tajriba (2-qismdan keyin)

Python o'rnatgach quyidagilarni sinab ko'ring va natijani yozing:

  1. main.py yarating, ichiga print("Salom") yozing, ishga tushiring
  2. python main.py > natija.txt deb ishga tushiring. Ekranda nima ko'rindi? Faylda nima bor?
  3. 1-misoldagi sys.stdout.isatty() ni ikkala holatda sinab ko'ring
  4. 3-misoldagi buferlash tajribasini o'tkazing. Sizning tizimingizda farq bormi?

Vazifa 4: O'ylash

print ekranga emas, stdout ga yozishi qanday amaliy foyda beradi? Uchta misol o'ylab toping.

Mumkin bo'lgan javoblar
  1. Dastur chiqishini faylga saqlash — kodni o'zgartirmasdan: python main.py > log.txt
  2. Dasturlarni zanjirlash — birining chiqishi ikkinchisiga kirish: python main.py | grep "xato"
  3. Test qilish — test dasturi stdout ni ushlab, dastur to'g'ri chiqarganini tekshiradi (17-qism)
  4. Serverda ishlash — terminal yo'q, chiqish jurnal tizimiga yo'naltiriladi

Nimani mustahkamlaydi: butun dars — 1-qismning yakuniy takrori.


Xulosa

Bu darsda print("Salom, dunyo!") ortidagi butun zanjirni ko'rdik.

Eng muhim uch fikr:

  1. Sodda ko'ringan narsa ortida o'nlab bosqich turadi. PATH, jarayon, AST, bytecode, PVM, tizim chaqiruvi — hammasi millisekundlarda.

  2. Har bosqichning o'z xatosi bor. Xato turini bosqichga bog'lash — dasturchining eng foydali diagnostika ko'nikmasi.

  3. print ekranga yozmaydi. U stdout ga yozadi, u esa terminalga, faylga yoki boshqa dasturga ulangan bo'lishi mumkin. Bu Unix falsafasi va u sizga katta moslashuvchanlik beradi.


1-QISM YAKUNLANDI

Siz sakkizta darsni tugatdingiz va endi quyidagilarni bilasiz:

Dars Nima o'rgandingiz
1.1 Kompyuter faqat 0 va 1 bilan ishlaydi; xotira ierarxiyasi
1.2 Dastur — buyruqlar ketma-ketligi; xatolarning uch turi
1.3 Tillar nega ko'p; Python dinamik va kuchli turlashga ega
1.4 AOT, bytecode+VM, JIT, transpiler; Python nega sekin
1.5 Guido, Zen, PEP; nega bo'sh joy bilan bloklanadi
1.6 Python qayerda ishlatiladi va qayerda ishlatilmaydi
1.7 Versiyalar, PyPI, xavfsizlik, kutubxona tanlash
1.8 Kod bajarilishining to'liq zanjiri

Hali bitta ham kod yozmadingiz — va bu ataylab shunday. Endi siz kod yozganingizda nima sodir bo'layotganini tushunasiz, ko'r-ko'rona yodlamaysiz.

Keyingi qism: 2-QISM — MUHIT VA VOSITALAR. U yerda Pythonni o'rnatamiz, VS Code ni sozlaymiz va nihoyat birinchi dasturingizni yozasiz.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
1.8-dars: "Salom, dunyo!" ortidagi jarayon — klaviaturadan ekrangacha — IlmHamroh