IlmHamroh
Python kursi/Muhit va vositalar5/9-dars13 daqiqa
Mundarija (24)

2.5-dars: REPL — interaktiv rejim

2-QISM — MUHIT VA VOSITALAR · 5-dars


1. Kirish va motivatsiya

Shu paytgacha biz kodni faylga yozib, keyin ishga tushirdik. Bu — normal ish usuli, lekin o'rganish uchun sekin.

Tasavvur qiling: len("salom") nima qaytarishini bilmoqchisiz. Fayl yaratish, yozish, saqlash, terminalga o'tish, ishga tushirish — beshta qadam. Bitta savolga.

REPL buni bir qadamga qisqartiradi:

text
>>> len("salom")
5

REPL — Read (o'qi), Eval (hisobla), Print (chiqar), Loop (takrorla). Siz yozasiz, u darhol javob beradi. Cheksiz.

Bu — Pythonning eng kuchli o'rganish vositasi. Tajribali dasturchilar ham uni har kuni ishlatadi:

  • yangi kutubxonani sinash
  • funksiya nima qaytarishini tekshirish
  • kichik hisob-kitob
  • xato sababini topish

Bu darsda REPL'ni to'liq o'zlashtiramiz: sirli _ o'zgaruvchisidan tortib, help() va dir() gacha. Va nihoyat — birinchi haqiqiy kodingizni yozasiz.


2. Nazariya — chuqur tushuntirish

2.1. REPL nima va u qanday ishlaydi

REPL — bu Pythonning interaktiv rejimi. Faylsiz ishlaydi.

Ishga tushirish:

text
Windows:        py
macOS / Linux:  python3

Ko'rasiz:

text
Python 3.12.7 (main, Oct  1 2026, 11:22:33) [Clang 15.0.0] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

>>> — taklif belgisi (prompt). U "kod kutyapman" degani.

Ichkarida nima bo'ladi? 1.8-darsdagi zanjirning qisqartirilgan varianti:

text
Siz qator yozasiz
      ↓
Python uni TAHLIL qiladi (parsing)
      ↓
BYTECODE ga o'giradi
      ↓
PVM BAJARADI
      ↓
Natija bo'lsa — CHIQARADI
      ↓
Yana >>> ko'rsatadi

Farqi: fayl bilan ishlaganda butun fayl bir marta kompilyatsiya qilinadi. REPL'da har qator alohida.

2.2. Ifoda va buyruq — REPL nimani ko'rsatadi

Bu — REPL'ning eng chalkashtiradigan jihati.

text
>>> 2 + 3
5

>>> x = 10
>>>

Nega birinchisi javob berdi, ikkinchisi bermadi?

Ifoda (expression) — qiymatga ega. REPL uni hisoblab, natijasini ko'rsatadi:

text
>>> 2 + 3
5
>>> "salom"
'salom'
>>> len("salom")
5

Buyruq (statement) — amal bajaradi, qiymat qaytarmaydi. REPL hech narsa ko'rsatmaydi:

text
>>> x = 10          # o'zlashtirish — buyruq
>>> import math     # import — buyruq

Qiymatni ko'rish uchun nomni yozing:

text
>>> x
10

Muhim farq — faylda bunday bo'lmaydi:

python
# main.py
2 + 3           # hisoblaydi, lekin HECH NARSA ko'rsatmaydi
print(2 + 3)    # 5 — chiqadi

Faylda natijani ko'rish uchun print majburiy. REPL'da esa avtomatik.

Bu farqni tushunmaslik boshlovchilarni ko'p adashtiradi: "REPL'da ishladi, faylda ishlamayapti."

2.3. _ — oxirgi natija

REPL'da maxsus o'zgaruvchi bor: pastki chiziq _. U oxirgi ifodaning natijasini saqlaydi.

text
>>> 10 * 5
50
>>> _
50
>>> _ + 25
75
>>> _ * 2
150

Bu kalkulyator sifatida juda qulay:

text
>>> 1500 * 12
18000
>>> _ * 0.13          # 13% soliq
2340.0
>>> 18000 - _
15660.0

Diqqat: _ faqat REPL'da mavjud. Faylda u oddiy o'zgaruvchi (odatda "kerak emas qiymat" ma'nosida ishlatiladi — 6-qismda ko'ramiz).

2.4. Ko'p qatorli kod

Sikl yoki shart yozsangiz, REPL taklif belgisini o'zgartiradi:

text
>>> for i in range(3):
...     print(i)
...
0
1
2

... — "davomini kutyapman" degani.

Uch qoida:

  1. Ikki nuqtadan (:) keyin REPL avtomatik ... ga o'tadi
  2. Ichki qatorlarni chekintiring (4 bo'sh joy)
  3. Blokni tugatish uchun bo'sh qator kiriting (Enter)
text
>>> son = 7
>>> if son > 5:
...     print("Katta")
... else:
...     print("Kichik")
...
Katta

Bu — REPL'da eng ko'p xato keltiradigan joy. Bo'sh qatorni unutmang.

2.5. help() — o'rnatilgan qo'llanma

Python o'z hujjatlarini ichida olib yuradi.

text
>>> help(len)
Help on built-in function len in module builtins:

len(obj, /)
    Return the number of items in a container.
text
>>> help(str.upper)
Help on method_descriptor:

upper(self, /)
    Return a copy of the string converted to uppercase.

Interaktiv rejim:

text
>>> help()

Welcome to Python 3.12's help utility!
...
help> keywords          # barcha kalit so'zlar
help> str               # str turi haqida to'liq
help> quit              # chiqish

Bu — internetdan qidirishdan tezroq. Va oflayn ishlaydi.

2.6. dir() — obyekt nimalar qila oladi

text
>>> dir(str)
['__add__', '__class__', ..., 'capitalize', 'casefold', 'center',
 'count', 'encode', 'endswith', ..., 'upper', 'zfill']

Ikki pastki chiziqli nomlar (__add__) — ichki metodlar (8-qismda o'rganamiz). Qolganlari — siz ishlatadigan metodlar.

Faqat foydalilarini ko'rish:

text
>>> [m for m in dir(str) if not m.startswith("_")]
['capitalize', 'casefold', 'center', 'count', 'encode', ...]

O'zgaruvchi ustida ham ishlaydi:

text
>>> matn = "salom"
>>> dir(matn)          # str bilan bir xil ro'yxat

help() + dir() birgalikda — kashfiyot vositasi:

text
>>> dir(matn)                  # nimalar bor?
>>> help(matn.center)          # bu nima qiladi?

2.7. type() — bu nima

text
>>> type(42)
<class 'int'>
>>> type(3.14)
<class 'float'>
>>> type("salom")
<class 'str'>
>>> type(True)
<class 'bool'>
>>> type([1, 2, 3])
<class 'list'>
>>> type(None)
<class 'NoneType'>

1.3-darsda Pythonning dinamik turlashi haqida gapirgandik. type() — buni o'z ko'zingiz bilan ko'rish usuli.

text
>>> x = 10
>>> type(x)
<class 'int'>
>>> x = "endi satr"
>>> type(x)
<class 'str'>

Bir xil o'zgaruvchi, turli tur. Bu — dinamik turlash.

2.8. REPL'dan chiqish va tarix

Chiqish:

text
>>> exit()
>>> quit()

yoki tugmalar:

text
Ctrl + D        macOS / Linux
Ctrl + Z, Enter Windows

Tarix:

  • ↑ / ↓ — oldingi buyruqlar
  • Ctrl + R — tarixdan qidirish (Unix)
  • Tarix seanslar orasida saqlanadi (~/.python_history)

Ekranni tozalash:

text
Ctrl + L                        # Unix
>>> import os; os.system("cls") # Windows

2.9. python -i — faylni ishga tushirib, REPL'da qolish

Bu — kam ma'lum, lekin juda foydali imkoniyat.

bash
python3 -i main.py

Bu:

  1. main.py ni to'liq bajaradi
  2. Keyin REPL'ni ochadi — fayldagi barcha o'zgaruvchi va funksiya qo'lda
python
# main.py
ismlar = ["Ali", "Vali", "Guli"]

def salomlash(ism):
    return f"Salom, {ism}!"
bash
python3 -i main.py
text
>>> ismlar
['Ali', 'Vali', 'Guli']
>>> salomlash("Ali")
'Salom, Ali!'
>>> len(ismlar)
3

Bu — nosozlik izlash uchun ajoyib usul. Dastur nima holatda tugaganini ko'rish mumkin.

2.10. Yaxshiroq REPL: IPython

Standart REPL sodda. IPython — uning kuchaytirilgan varianti.

bash
python3 -m pip install ipython
ipython

Nima beradi:

Imkoniyat Standart REPL IPython
Rangli kod yo'q bor
Tab bilan to'ldirish cheklangan to'liq
? bilan yordam yo'q len?
Ko'p qatorli tahrirlash qiyin qulay
Sehrli buyruqlar yo'q %timeit, %run
text
In [1]: len?
Signature: len(obj, /)
Docstring: Return the number of items in a container.

In [2]: %timeit sum(range(1000))
8.42 µs ± 132 ns per loop

Boshlovchiga kerakmi? Hozir emas — standart REPL yetarli. Lekin bir necha haftadan keyin sinab ko'ring, orqaga qaytmaysiz.


3. Tez ma'lumotnoma

Kirish va chiqish

text
py  /  python3          ishga tushirish
exit()  /  quit()       chiqish
Ctrl+D (Unix)           chiqish
Ctrl+Z, Enter (Win)     chiqish

Taklif belgilari

text
>>>     yangi buyruq kutilyapti
...     davomi kutilyapti (bo'sh qator — tugatish)

Maxsus

text
_               oxirgi natija
help(x)         x haqida qo'llanma
dir(x)          x ning metodlari
type(x)         x ning turi

Foydali

text
python3 -i fayl.py      faylni bajarib, REPL'da qolish
python3 -c "kod"        bitta buyruqni bajarish

Farq

text
REPL'da:  2 + 3        →  5 chiqadi
Faylda:   2 + 3        →  hech narsa
Faylda:   print(2 + 3) →  5 chiqadi

4. Batafsil misollar

Misol 1 — REPL bilan tanishuv

text
>>> 2 + 3
5
>>> 10 / 3
3.3333333333333335
>>> 10 // 3
3
>>> 10 % 3
1
>>> 2 ** 10
1024
  • / — oddiy bo'lish, doim float qaytaradi
  • // — butun bo'lish
  • % — qoldiq
  • ** — daraja

E'tibor bering: 10 / 3 natijasi 3.3333333333333335 — oxirida 5. Bu xato emas, bu kompyuterda kasr sonlar qanday saqlanishining natijasi. 3.4-darsda buni batafsil o'rganamiz.

text
>>> "Salom" + ", dunyo!"
'Salom, dunyo!'
>>> "ha" * 3
'hahaha'
>>> len("Salom")
5

Satrlarda + — ulash, * — takrorlash.

Nima ko'rsatdi: 2.2-bo'lim. Har bir ifoda darhol natija beradi.

Misol 2 — _ bilan hisob-kitob

Oylik maoshdan soliq hisoblash:

text
>>> 5_000_000
5000000

Pythonda katta sonlarda _ ajratgich sifatida ishlatiladi — o'qish oson. Bu qiymatga ta'sir qilmaydi.

text
>>> 5_000_000 * 0.12          # 12% daromad solig'i
600000.0
>>> 5_000_000 - _             # qo'lga tegadigan summa
4400000.0
>>> _ / 12000                 # dollarga (shartli kurs)
366.6666666666667
>>> round(_, 2)
366.67

round(son, 2) — ikki xonagacha yaxlitlash.

Nima ko'rsatdi: 2.3-bo'lim. REPL — kuchli kalkulyator.

Misol 3 — dir() va help() bilan kashfiyot

Satr nimalar qila olishini bilmaymiz. Kashf qilamiz:

text
>>> matn = "salom dunyo"
>>> [m for m in dir(matn) if not m.startswith("_")][:10]
['capitalize', 'casefold', 'center', 'count', 'encode',
 'endswith', 'expandtabs', 'find', 'format', 'format_map']

title degan metod bormi?

text
>>> "title" in dir(matn)
True
>>> help(matn.title)
Help on built-in function title:

title() method of builtins.str instance
    Return a version of the string where each word is titlecased.

Sinab ko'ramiz:

text
>>> matn.title()
'Salom Dunyo'
>>> matn.upper()
'SALOM DUNYO'
>>> matn.replace("dunyo", "olam")
'salom olam'
>>> matn.split()
['salom', 'dunyo']

Muhim: asl matn o'zgarmadi:

text
>>> matn
'salom dunyo'

Satrlar o'zgarmas (immutable). Metodlar yangi satr qaytaradi. Bu — 4-qismning asosiy mavzularidan biri.

Nima ko'rsatdi: 2.5 va 2.6-bo'limlar. Internetsiz o'rganish usuli.

Misol 4 — Ko'p qatorli kod va python -i

REPL'da sikl:

text
>>> ismlar = ["Ali", "Vali", "Guli"]
>>> for ism in ismlar:
...     print(f"Salom, {ism}!")
...
Salom, Ali!
Salom, Vali!
Salom, Guli!

f"..." — f-satr. Ichidagi {ism} o'zgaruvchi qiymatiga almashadi. 3.13-darsda batafsil.

Endi -i bayrog'i. hisob.py faylini yarating:

python
narxlar = [12000, 45000, 8000, 23000]

def jami(ro_yxat):
    return sum(ro_yxat)

def ortacha(ro_yxat):
    return sum(ro_yxat) / len(ro_yxat)

print("Fayl bajarildi. Jami:", jami(narxlar))
bash
python3 -i hisob.py
text
Fayl bajarildi. Jami: 88000
>>> narxlar
[12000, 45000, 8000, 23000]
>>> ortacha(narxlar)
22000.0
>>> max(narxlar)
45000
>>> min(narxlar)
8000
>>> sorted(narxlar)
[8000, 12000, 23000, 45000]
>>> narxlar.append(30000)
>>> jami(narxlar)
118000

Fayl bajarilgach, uning butun holati REPL'da qo'lingizda qoldi.

Nima ko'rsatdi: 2.4 va 2.9-bo'limlar. Bu — nosozlik izlashning eng qulay usullaridan biri.


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

Noto'g'ri fikr To'g'risi
"REPL — o'yinchoq, jiddiy emas" Tajribali dasturchilar uni har kuni ishlatadi
"REPL'da ishlagan kod faylda ham ishlaydi" Odatda ha, lekin print masalasi bor (2.2-bo'lim)
"REPL'da print shart emas" Ifoda uchun — shart emas. Sikl ichida — shart
"_ — oddiy o'zgaruvchi" REPL'da u maxsus: oxirgi natijani saqlaydi
"REPL'dagi o'zgaruvchilar saqlanadi" Yo'q — chiqqanda hammasi yo'qoladi
"Yordam uchun internetga kirish kerak" help() va dir() oflayn ishlaydi va tezroq
"Ko'p qatorli kod REPL'da ishlamaydi" Ishlaydi. Faqat oxirida bo'sh qator kerak

6. Keng tarqalgan xatolar va yechimlari

1. IndentationError: expected an indented block

text
>>> for i in range(3):
... print(i)
  File "<stdin>", line 2
    print(i)
    ^
IndentationError: expected an indented block

Sabab: ikki nuqtadan keyingi qator chekintirilmagan.

Yechim: ... dan keyin 4 bo'sh joy qo'ying.

2. Blok tugamayapti, ... qolib ketdi

Sabab: bo'sh qator kiritilmagan.

Yechim: Enter bosing (bo'sh qator). Yoki Ctrl+C bilan bekor qiling.

3. SyntaxError: unexpected EOF while parsing

Sabab: qavs yopilmagan.

text
>>> print("salom"
... 

Yechim: qavsni yoping yoki Ctrl+C bilan bekor qilib, qaytadan yozing.

4. REPL'da ishladi, faylda hech narsa chiqmaydi

Sabab: 2.2-bo'lim. Faylda print kerak.

python
2 + 3           # hech narsa
print(2 + 3)    # 5

5. Uzun kodni REPL'ga nusxaladim, xato chiqdi

Sabab: standart REPL ko'p qatorli nusxalashni yaxshi qabul qilmaydi (bo'sh qatorlar blokni tugatadi).

Yechim: faylga yozing va python3 -i fayl.py qiling. Yoki IPython ishlating.

6. O'zgaruvchilar yo'qoldi

Sabab: REPL'dan chiqdingiz.

Yechim: normal holat. Saqlash kerak bo'lsa — faylga yozing.

7. Windows'da exit yozdim, chiqmadi

Sabab: exit — obyekt, exit() — chaqiruv.

text
>>> exit
Use exit() or Ctrl-Z plus Return to exit
>>> exit()

7. Integratsiya — bu bilim qayerda kerak bo'ladi

  • 3-qism: har bir yangi tur va operatorni REPL'da sinash
  • 4-qism: satr metodlarini dir() bilan kashf qilish
  • 7-qism: funksiyalarni tez sinash
  • 9-qism: xatolarni REPL'da qayta hosil qilish
  • 18-qism: yangi kutubxonani o'rnatgach, birinchi ish — REPL'da sinash
  • 15-qism: standart kutubxonani help() bilan o'rganish
  • Har kuni: "bu funksiya nima qaytaradi?" degan savolga eng tez javob

8. Eng yaxshi amaliyotlar

  1. REPL'ni doim ochiq tuting. Ikkinchi terminal oynasida. Savol tug'ilganda — darhol sinang.

  2. Yangi kutubxonani birinchi bo'lib REPL'da sinang. Hujjat o'qishdan oldin dir() va help().

  3. help() ni internetdan oldin ishlating. Tezroq, aniqroq, oflayn.

  4. Uzun kodni REPL'da yozmang. 5 qatordan oshsa — faylga o'ting.

  5. python -i ni eslab qoling. Dastur nima holatda tugaganini ko'rishning eng oson usuli.

  6. Bir necha haftadan keyin IPython'ga o'ting. Farqni darhol sezasiz.

  7. REPL — sinov maydoni, ishlab chiqarish emas. Muhim kod faylda bo'lsin.


9. Amaliy topshiriq

Vazifa 1: Birinchi seans

REPL'ni oching va bajaring:

text
>>> 2 + 2
>>> "Salom" + " " + "dunyo"
>>> len("Python")
>>> 17 // 5
>>> 17 % 5
>>> 2 ** 8

Har birining natijasini yozing. 17 // 5 va 17 % 5 nimani anglatadi?

Vazifa 2: _ bilan hisob

Kalkulyator sifatida ishlating. Do'kondan xarid:

text
Non:        4000 so'm × 2
Sut:       12000 so'm × 1
Guruch:    18000 so'm × 3
  1. Jami summani _ yordamida hisoblang
  2. 10% chegirma qo'llang
  3. Natijani round() bilan yaxlitlang

Vazifa 3: Kashfiyot

text
>>> son = 42
>>> type(son)
>>> dir(son)

Savollar:

  1. son qanday turga tegishli?
  2. bit_length degan metod bormi? help() bilan nima qilishini biling
  3. son.bit_length() nima qaytaradi? Nega?
Javoblar
  1. <class 'int'>
  2. Ha. help(son.bit_length) — "Number of bits necessary to represent self in binary"
  3. 6. Chunki 42 ikkilikda 101010 — olti raqam. Bu 1.1-darsdagi ikkilik sanoq tizimi

Vazifa 4: Ko'p qatorli kod

REPL'da yozing:

text
>>> for i in range(1, 6):
...     print(i, "ning kvadrati:", i * i)
...

Keyin o'zgartiring: faqat juft sonlarni chiqarsin.

Javob
text
>>> for i in range(1, 11):
...     if i % 2 == 0:
...         print(i, "ning kvadrati:", i * i)
...

Ikki darajali chekinish — if for ichida.

Vazifa 5: python -i bilan tajriba

4-misoldagi hisob.py ni yarating va -i bilan ishga tushiring. Keyin REPL'da:

  1. Ro'yxatga yangi narx qo'shing
  2. Yangi o'rtachani hisoblang
  3. Ro'yxatni kamayish tartibida saralang
Javob
text
>>> narxlar.append(50000)
>>> ortacha(narxlar)
>>> sorted(narxlar, reverse=True)

Vazifa 6: Farqni ko'rish

sinov.py faylini yarating:

python
2 + 3
"salom"
len("Python")
print("Faqat bu ko'rinadi")

Ishga tushiring. Nechta qator chiqdi va nega?

Javob

Faqat bitta: Faqat bu ko'rinadi.

Birinchi uch qator hisoblanadi, lekin faylda natija avtomatik chiqarilmaydi (2.2-bo'lim). REPL'da esa uchalasi ham javob berardi.

Bu farqni tushunish muhim: faylda print majburiy.

Nimani mustahkamlaydi: 2.2, 2.3, 2.4, 2.5, 2.6, 2.9-bo'limlar.


Xulosa

Bu darsda Pythonning interaktiv rejimini — REPL'ni o'rgandik.

Eng muhim uch fikr:

  1. REPL — o'rganishning eng tez yo'li. Savol tug'ildi, yozdingiz, javob oldingiz. Fayl, saqlash, ishga tushirish yo'q.

  2. Faylda print majburiy, REPL'da yo'q. Bu farqni tushunmaslik boshlovchilarni ko'p adashtiradi.

  3. help(), dir(), type() — kashfiyot uchligi. Ular bilan internetsiz, hujjatsiz, o'z terminalingizda o'rganasiz.

Keyingi darsda VS Code ni o'rnatamiz — professional kod muharriri. REPL tez savollar uchun, VS Code esa haqiqiy loyihalar uchun. Ikkalasi birgalikda sizning ish maydoningizni tashkil qiladi.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
2.5-dars: REPL — interaktiv rejim — IlmHamroh