Mundarija (23)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. print() — to'liq imzo
- 2.2. print va ko'p argument
- 2.3. f-satrlar — asosiy sintaksis
- 2.4. Format spetsifikatorlari
- 2.5. !r, !s, !a — aylantirish
- 2.6. = — nosozlik izlash (Python 3.8+)
- 2.7. Sana va maxsus turlar
- 2.8. input() — to'liq
- 2.9. Boshqa formatlash usullari
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — print ning barcha imkoniyati
- Misol 2 — Format spetsifikatorlari ma'lumotnomasi
- Misol 3 — Xavfsiz kiritish kutubxonasi
- Misol 4 — Progress ko'rsatgich va jonli chiqish
- 5. To'g'ri va noto'g'ri tushunishlar
- 6. Keng tarqalgan xatolar va yechimlari
- 7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 8. Eng yaxshi amaliyotlar
- 9. Amaliy topshiriq
- Xulosa
3.13-dars: input() va print() chuqur
3-QISM — ASOSLAR · 13-dars
1. Kirish va motivatsiya
print() va input() — birinchi kundan ishlatadigan ikki funksiya. Va aynan shuning uchun ular yuzaki o'rganiladi.
Aslida ularda ko'p imkoniyat bor:
print("a", "b", "c", sep=" | ", end=" ←\n") # a | b | c ←
print(*[1, 2, 3], sep="\n") # har biri yangi qatorda
print("xato!", file=sys.stderr) # xatolar oqimiga
print("yuklanmoqda...", end="", flush=True) # bufersizVa f-satrlar — Pythonning eng kuchli formatlash vositasi:
print(f"{1234567.891:>15,.2f}") # 1,234,567.89
print(f"{0.156:.1%}") # 15.6%
print(f"{42:08b}") # 00101010
print(f"{ism=}") # ism='Ali' ← nosozlik izlash
print(f"{sana:%d.%m.%Y}") # 07.09.2026Bu darsda ikkalasini to'liq o'rganamiz. Bu — kundalik ishda eng ko'p qaytib keladigan bilim.
2. Nazariya — chuqur tushuntirish
2.1. print() — to'liq imzo
print(*obyektlar, sep=" ", end="\n", file=sys.stdout, flush=False)| Parametr | Sukut | Nima qiladi |
|---|---|---|
*obyektlar |
— | Istalgancha argument |
sep |
" " |
Argumentlar orasidagi ajratgich |
end |
"\n" |
Oxiridagi belgi |
file |
sys.stdout |
Qayerga yozish |
flush |
False |
Buferni darhol bo'shatish |
sep — ajratgich:
print("a", "b", "c") # a b c
print("a", "b", "c", sep="") # abc
print("a", "b", "c", sep=" | ") # a | b | c
print("2026", "09", "07", sep="-") # 2026-09-07
print(*range(5), sep=", ") # 0, 1, 2, 3, 4end — oxiri:
print("Yuklanmoqda", end="")
print("...", end="")
print(" tayyor!") # Yuklanmoqda... tayyor!
for i in range(5):
print(i, end=" ") # 0 1 2 3 4
print() # yangi qatorfile — qayerga:
import sys
print("Oddiy xabar") # stdout
print("Xato xabari", file=sys.stderr) # stderrNega muhim? 2.4-darsda o'rgandik:
python3 main.py > natija.txt # faqat stdout faylga
python3 main.py 2> xatolar.txt # faqat stderr faylgaLoglar va xatolarni ajratish uchun stderr ishlating.
Faylga yozish:
with open("hisobot.txt", "w", encoding="utf-8") as f:
print("Sarlavha", file=f)
print("Ma'lumot", file=f)flush — bufersiz:
1.8-darsda o'rgandik: stdout buferlanadi.
import time
for i in range(5):
print(f"\rQadam {i+1}/5", end="", flush=True)
time.sleep(1)
print("\nTayyor!")\r — qator boshiga qaytish. flush=True bo'lmasa progress ko'rinmaydi.
2.2. print va ko'p argument
ism, yosh = "Ali", 25
print("Ism:", ism, "Yosh:", yosh) # Ism: Ali Yosh: 25print har bir argumentga str() qo'llaydi — shuning uchun sonni aylantirish shart emas:
print("Yosh: " + yosh) # ❌ TypeError
print("Yosh:", yosh) # ✅ Yosh: 25
print(f"Yosh: {yosh}") # ✅ eng yaxshiYoyish operatori *:
sonlar = [1, 2, 3]
print(sonlar) # [1, 2, 3]
print(*sonlar) # 1 2 3
print(*sonlar, sep="\n") # har biri yangi qatordaRo'yxatni chiroyli chiqarish:
mevalar = ["olma", "anor", "uzum"]
print(mevalar) # ['olma', 'anor', 'uzum']
print(", ".join(mevalar)) # olma, anor, uzum
print(*mevalar, sep=", ") # olma, anor, uzum
print("\n".join(f"• {m}" for m in mevalar))• olma
• anor
• uzum2.3. f-satrlar — asosiy sintaksis
ism = "Ali"
yosh = 25
print(f"Salom, {ism}!") # Salom, Ali!
print(f"Keyingi yil: {yosh + 1}") # ifoda ham mumkin
print(f"Katta: {ism.upper()}") # metod chaqiruvi
print(f"Uzunlik: {len(ism)}") # funksiya
print(f"{'katta' if yosh > 18 else 'kichik'}") # shartli ifodaQavslarni chiqarish:
print(f"{{bu qavs ichida}}") # {bu qavs ichida}
print(f"{{{ism}}}") # {Ali}Tirnoqlar (Python 3.12 gacha):
lugat = {"ism": "Ali"}
# Python 3.12 gacha — turli tirnoq kerak
print(f"{lugat['ism']}") # ✅
# print(f"{lugat["ism"]}") # ❌ 3.12 gacha SyntaxError
# Python 3.12+ — ikkalasi ham ishlaydiKo'p qatorli f-satr:
matn = f"""
Ism: {ism}
Yosh: {yosh}
"""
print(matn)Yonma-yon:
xabar = (
f"Salom, {ism}! "
f"Siz {yosh} yoshdasiz."
)Har bir qismga f qo'yish kerak.
2.4. Format spetsifikatorlari
Sintaksis: {qiymat:format}
{qiymat:[[to'ldirish]tekislash][ishora][#][0][kenglik][guruh][.aniqlik][tur]}Kenglik va tekislash:
print(f"{'chap':<10}|") # chap |
print(f"{'markaz':^10}|") # " markaz |"
print(f"{'ong':>10}|") # ong|
print(f"{42:5}|") # 42| — sonlar o'ngga
print(f"{'ab':5}|") # ab | — satrlar chapga| Belgi | Tekislash |
|---|---|
< |
Chapga |
> |
O'ngga |
^ |
Markazga |
= |
Ishoradan keyin to'ldirish (faqat sonlar) |
To'ldirish belgisi:
print(f"{42:*>8}") # ******42
print(f"{42:0>8}") # 00000042
print(f"{42:08}") # 00000042 — qisqa shakl
print(f"{'menyu':-^20}") # -------menyu--------
print(f"{'':=^30}") # ==============================Sonlar:
son = 1234567.891
print(f"{son:.2f}") # 1234567.89
print(f"{son:,.2f}") # 1,234,567.89
print(f"{son:_.2f}") # 1_234_567.89
print(f"{son:e}") # 1.234568e+06
print(f"{son:.3e}") # 1.235e+06
print(f"{son:g}") # 1.23457e+06
print(f"{son:15,.2f}") # 1,234,567.89Butun sonlar:
print(f"{42:d}") # 42
print(f"{42:b}") # 101010 ikkilik
print(f"{42:o}") # 52 sakkizlik
print(f"{42:x}") # 2a o'n oltilik
print(f"{42:X}") # 2A
print(f"{42:#x}") # 0x2a prefiks bilan
print(f"{42:08b}") # 00101010
print(f"{42:,}") # 42
print(f"{1234567:,}") # 1,234,567Foiz:
print(f"{0.156:.1%}") # 15.6%
print(f"{0.156:.0%}") # 16%
print(f"{1.5:.1%}") # 150.0%% qiymatni 100 ga ko'paytiradi va belgi qo'shadi.
Ishora:
print(f"{5:+}") # +5
print(f"{-5:+}") # -5
print(f"{5:-}") # 5 (sukut)
print(f"{5: }") # " 5" — musbatga bo'sh joyIshora bilan tekislashda = foydali:
print(f"{-42:08}") # -0000042 ← ishora oldinda
print(f"{-42:=8}") # - 42Aniqlik satrlar uchun — qisqartirish:
print(f"{'juda uzun matn':.5}") # juda
print(f"{'qisqa':.10}") # qisqa2.5. !r, !s, !a — aylantirish
matn = "salom\n"
print(f"{matn}") # salom + yangi qator
print(f"{matn!r}") # 'salom\n'
print(f"{matn!s}") # salom + yangi qator (sukut)
print(f"{'oʻzbek'!a}") # 'oʻzbek' — ASCII| Belgi | Chaqiradi | Qachon |
|---|---|---|
!s |
str() |
Sukut |
!r |
repr() |
Nosozlik izlashda |
!a |
ascii() |
ASCII kafolat kerak bo'lsa |
!r nosozlik izlashda majburiy:
qiymat = "42"
print(f"Qiymat: {qiymat}") # Qiymat: 42 ← son yoki satr?
print(f"Qiymat: {qiymat!r}") # Qiymat: '42' ← aniq: satr2.6. = — nosozlik izlash (Python 3.8+)
a, b = 5, 10
print(f"{a=}") # a=5
print(f"{b=}") # b=10
print(f"{a + b=}") # a + b=15
print(f"{a=}, {b=}") # a=5, b=10Ifodaning matni ham chiqadi. Bu — nosozlik izlashning eng tez usuli.
Format bilan birga:
narx = 1234.5678
print(f"{narx=:.2f}") # narx=1234.57
print(f"{narx=!r}") # narx=1234.5678Bo'sh joy saqlanadi:
print(f"{a = }") # a = 5Bu —
print(f"a={a}")ni almashtiruvchi. Nom o'zgarganda qo'lda tuzatish kerak emas.
2.7. Sana va maxsus turlar
from datetime import datetime, date
hozir = datetime(2026, 9, 7, 14, 30, 45)
print(f"{hozir:%d.%m.%Y}") # 07.09.2026
print(f"{hozir:%H:%M}") # 14:30
print(f"{hozir:%d.%m.%Y %H:%M:%S}") # 07.09.2026 14:30:45
print(f"{hozir:%A, %d %B %Y}") # Monday, 07 September 2026
print(f"{hozir:%Y-%m-%dT%H:%M:%S}") # ISO formatAsosiy kodlar:
| Kod | Ma'nosi | Misol |
|---|---|---|
%Y |
Yil (4 raqam) | 2026 |
%m |
Oy (01-12) | 09 |
%d |
Kun (01-31) | 07 |
%H |
Soat (00-23) | 14 |
%M |
Daqiqa | 30 |
%S |
Soniya | 45 |
%A |
Hafta kuni (to'liq) | Monday |
%B |
Oy nomi | September |
O'zbek tili uchun:
%Ava%Btizim tiliga bog'liq va ko'p muhitda ingliz tilida chiqadi. O'zbekcha kerak bo'lsa — qo'lda jadval tuzing (bu Wisar loyihasida ham shunday qilingan).
Decimal bilan:
from decimal import Decimal
narx = Decimal("1234.5678")
print(f"{narx:,.2f}") # 1,234.572.8. input() — to'liq
input(prompt="")Asosiy qoidalar:
- Doim
strqaytaradi — hatto raqam kiritilsa ham - Yangi qator belgisi (
\n) kirmaydi prompt—stdoutga yoziladi, buferlanmaydi
ism = input("Ismingiz: ")
print(f"Salom, {ism}!")
print(type(ism)) # <class 'str'>Aylantirish majburiy:
yosh = input("Yosh: ") # '25'
print(yosh + 1) # ❌ TypeError
print(int(yosh) + 1) # ✅ 26Ammo bu ham xavfli:
yosh = int(input("Yosh: ")) # foydalanuvchi "abc" yozsa → ValueErrorXavfsiz usul (3.9-darsdan):
def son_sora(savol: str) -> int:
while True:
try:
return int(input(savol).strip())
except ValueError:
print(" ⚠️ Butun son kiriting.").strip() — deyarli doim kerak:
javob = input("Ha yoki yo'q: ").strip().lower()
if javob in {"ha", "h", "y"}:
...Ko'p qiymat bir qatorda:
kirish = input("Uch son (bo'sh joy bilan): ")
a, b, c = map(int, kirish.split())Yoki xavfsizroq:
sonlar = [int(x) for x in input().split()]Ko'p qator o'qish:
qatorlar = []
print("Matn kiriting (bo'sh qator — tugatish):")
while (qator := input()) != "":
qatorlar.append(qator)Morj operatori bilan (3.12-dars).
Faylga yo'naltirilganda:
python3 main.py < kirish.txtinput() fayldan o'qiydi. Fayl tugasa — EOFError:
try:
while True:
qator = input()
print(f"O'qildi: {qator}")
except EOFError:
print("Fayl tugadi")Parol o'qish — input() emas:
import getpass
parol = getpass.getpass("Parol: ") # ekranda ko'rinmaydiinput() yozilganini ko'rsatadi — parol uchun yaramaydi.
2.9. Boshqa formatlash usullari
f-satr ( zamonaviy, Python 3.6+):
print(f"Salom, {ism}! Yosh: {yosh}").format() (eski, lekin hali ishlatiladi):
print("Salom, {}! Yosh: {}".format(ism, yosh))
print("Salom, {0}! Yosh: {1}".format(ism, yosh))
print("Salom, {n}! Yosh: {y}".format(n=ism, y=yosh))
print("{:,.2f}".format(1234.5))Qachon kerak? Shablon oldindan tayyor bo'lsa:
SHABLON = "Salom, {}! Sizga {} xabar bor."
print(SHABLON.format(ism, 5))% (juda eski, C uslubi):
print("Salom, %s! Yosh: %d" % (ism, yosh))
print("%.2f" % 3.14159)Yangi kodda ishlatmang. Lekin loglashda uchraydi:
import logging
logging.info("Foydalanuvchi %s kirdi", ism) # ✅ shunday yozing
logging.info(f"Foydalanuvchi {ism} kirdi") # ⚠️ har doim hisoblanadilogging da % uslubi afzal — chunki xabar chiqarilmasa, format hisoblanmaydi.
string.Template (xavfsizlik uchun):
from string import Template
shablon = Template("Salom, $ism!")
print(shablon.substitute(ism="Ali"))Foydalanuvchi shablon berganda xavfsizroq — f-satr kod bajaradi, Template yo'q.
Solishtirish jadvali:
| Usul | Tezlik | O'qish | Qachon |
|---|---|---|---|
| f-satr | Eng tez | Eng oson | Deyarli doim |
.format() |
O'rtacha | Yaxshi | Tayyor shablon |
% |
O'rtacha | Yomon | logging |
Template |
Sekin | Yaxshi | Foydalanuvchi shabloni |
3. Tez ma'lumotnoma
print
print(*obyektlar, sep=" ", end="\n", file=sys.stdout, flush=False)
print("a", "b", sep=" | ") a | b
print("x", end="") qator tashlashsiz
print(*royxat, sep="\n") har biri yangi qatorda
print("xato", file=sys.stderr) xatolar oqimiga
print("...", flush=True) bufersizf-satr formatlari
{x:<10} {x:^10} {x:>10} tekislash
{x:*>10} {x:08} to'ldirish
{x:.2f} {x:,.2f} {x:e} kasr
{x:b} {x:o} {x:x} {x:X} {x:#x} sanoq tizimlari
{x:.1%} foiz
{x:+} ishora
{x!r} {x!s} {x!a} aylantirish
{x=} nosozlik izlash
{sana:%d.%m.%Y} sanainput
matn = input("Savol: ") DOIM str qaytaradi
matn = input().strip() .strip() deyarli doim kerak
son = int(input()) ⚠️ ValueError xavfi
a, b = map(int, input().split())
getpass.getpass("Parol: ") ko'rinmas kiritishXavfsiz naqsh
while True:
try:
return int(input(savol).strip())
except ValueError:
print("Son kiriting")4. Batafsil misollar
Misol 1 — print ning barcha imkoniyati
import sys
print("=== 1. sep ===")
print(" ", end="")
print("2026", "09", "07", sep="-")
print(" ", end="")
print("a", "b", "c", sep="")
print(" ", end="")
print(*range(5), sep=" → ")
print("\n=== 2. end ===")
print(" Yuklanmoqda", end="")
for _ in range(3):
print(".", end="")
print(" tayyor!")
print("\n=== 3. Ro'yxatni chiqarish ===")
mevalar = ["olma", "anor", "uzum"]
print(f" Oddiy: {mevalar}")
print(f" join: {', '.join(mevalar)}")
print(" Yoyish: ", end="")
print(*mevalar, sep=", ")
print(" Ro'yxat:")
print("\n".join(f" • {m}" for m in mevalar))
print("\n=== 4. Jadval ===")
malumot = [
("Mahsulot", "Narx", "Soni"),
("Non", 4000, 2),
("Sut", 12000, 1),
("Guruch", 18000, 3),
]
for qator in malumot:
nom, narx, soni = qator
if isinstance(narx, str):
print(f" {nom:<12} {narx:>10} {soni:>6}")
print(f" {'─' * 30}")
else:
print(f" {nom:<12} {narx:>10,} {soni:>6}")
print("\n=== 5. stderr ===")
print(" Bu stdout ga ketadi")
print(" Bu stderr ga ketadi", file=sys.stderr)
print(" (terminalda ikkalasi ko'rinadi, lekin > bilan ajraladi)")
print("\n=== 6. Faylga yozish ===")
with open("sinov_hisobot.txt", "w", encoding="utf-8") as f:
print("HISOBOT", file=f)
print("=" * 20, file=f)
for nom, narx, soni in malumot[1:]:
print(f"{nom:<12} {narx * soni:>10,}", file=f)
print(" sinov_hisobot.txt yozildi")
with open("sinov_hisobot.txt", encoding="utf-8") as f:
print(" Mazmuni:")
for qator in f:
print(f" {qator.rstrip()}")
import os
os.remove("sinov_hisobot.txt")=== 1. sep ===
2026-09-07
abc
0 → 1 → 2 → 3 → 4
=== 2. end ===
Yuklanmoqda... tayyor!
=== 3. Ro'yxatni chiqarish ===
Oddiy: ['olma', 'anor', 'uzum']
join: olma, anor, uzum
Yoyish: olma, anor, uzum
Ro'yxat:
• olma
• anor
• uzum
=== 4. Jadval ===
Mahsulot Narx Soni
──────────────────────────────
Non 4,000 2
Sut 12,000 1
Guruch 18,000 3
=== 5. stderr ===
Bu stdout ga ketadi
Bu stderr ga ketadi
(terminalda ikkalasi ko'rinadi, lekin > bilan ajraladi)
=== 6. Faylga yozish ===
sinov_hisobot.txt yozildi
Mazmuni:
HISOBOT
====================
Non 8,000
Sut 12,000
Guruch 54,000Nima ko'rsatdi: 2.1, 2.2-bo'limlar.
Misol 2 — Format spetsifikatorlari ma'lumotnomasi
"""Barcha format varianti — bir joyda."""
from datetime import datetime
print("=== Tekislash ===")
for tekislash, nom in [("<", "chap"), ("^", "markaz"), (">", "o'ng")]:
print(f" {tekislash!r:>4} |{'matn':{tekislash}14}| {nom}")
print("\n=== To'ldirish ===")
namunalar = [
("{:*>10}", "* bilan o'ngga"),
("{:0>10}", "0 bilan o'ngga"),
("{:010}", "qisqa shakl (sonlar)"),
("{:-^20}", "- bilan markazga"),
("{:.^20}", ". bilan markazga"),
]
for shablon, izoh in namunalar:
print(f" {shablon:<12} → |{shablon.format(42)}| {izoh}")
print("\n=== Kasr sonlar ===")
son = 1234567.891234
formatlar = [
(".2f", "ikki xona"),
(".0f", "butun"),
(",.2f", "mingliklar bilan"),
("_.2f", "pastki chiziq bilan"),
("e", "ilmiy"),
(".3e", "ilmiy, 3 xona"),
("g", "avtomatik"),
("15,.2f", "kenglik 15"),
(">20,.2f", "o'ngga, kenglik 20"),
]
for f, izoh in formatlar:
print(f" {{:{f}}}".ljust(14) + f" → |{son:{f}}| {izoh}")
print("\n=== Butun sonlar ===")
n = 255
for f, izoh in [("d", "o'nlik"), ("b", "ikkilik"), ("08b", "ikkilik, 8 xona"),
("o", "sakkizlik"), ("x", "o'n oltilik"), ("X", "katta harfda"),
("#x", "prefiks bilan"), (",", "mingliklar")]:
print(f" {{:{f}}}".ljust(12) + f" → {n:{f}} {izoh}")
print("\n=== Foiz va ishora ===")
print(f" {{:.1%}} → {0.1567:.1%}")
print(f" {{:.0%}} → {0.1567:.0%}")
print(f" {{:+}} → {42:+}")
print(f" {{:+}} → {-42:+}")
print(f" {{: }} → |{42: }|")
print("\n=== Aylantirish ===")
matn = "salom\n"
print(f" {{}} → {matn!s}".rstrip())
print(f" {{!r}} → {matn!r}")
print("\n=== Nosozlik izlash (=) ===")
a, b = 5, 10
narx = 1234.5678
print(f" {a=}")
print(f" {a + b=}")
print(f" {narx=:.2f}")
print(f" {a = }")
print("\n=== Sana ===")
hozir = datetime(2026, 9, 7, 14, 30, 45)
for f, izoh in [("%d.%m.%Y", "o'zbekcha sana"),
("%Y-%m-%d", "ISO sana"),
("%H:%M", "vaqt"),
("%d.%m.%Y %H:%M:%S", "to'liq"),
("%Y-%m-%dT%H:%M:%S", "ISO to'liq")]:
print(f" {f:<22} → {hozir:{f}} {izoh}")Natijaning muhim qismi:
=== Kasr sonlar ===
{:.2f} → |1234567.89| ikki xona
{:,.2f} → |1,234,567.89| mingliklar bilan
{:e} → |1.234568e+06| ilmiy
{:>20,.2f} → | 1,234,567.89| o'ngga, kenglik 20
=== Butun sonlar ===
{:b} → 11111111 ikkilik
{:08b} → 11111111 ikkilik, 8 xona
{:x} → ff o'n oltilik
{:#x} → 0xff prefiks bilan
=== Nosozlik izlash (=) ===
a=5
a + b=15
narx=1234.57
a = 5Nima ko'rsatdi: 2.4, 2.5, 2.6, 2.7-bo'limlar.
Misol 3 — Xavfsiz kiritish kutubxonasi
"""Foydalanuvchi kiritmasini xavfsiz olish."""
from datetime import date, datetime
def matn_sora(savol: str, majburiy: bool = True, sukut: str = "") -> str:
"""Matn so'raydi."""
while True:
javob = input(f"{savol}: ").strip()
if javob:
return javob
if not majburiy:
return sukut
print(" ⚠️ Bo'sh qoldirmang.")
def son_sora(savol: str, minimal: int | None = None,
maksimal: int | None = None) -> int:
"""Butun son so'raydi."""
chegara = ""
if minimal is not None and maksimal is not None:
chegara = f" ({minimal}–{maksimal})"
elif minimal is not None:
chegara = f" (≥{minimal})"
elif maksimal is not None:
chegara = f" (≤{maksimal})"
while True:
kirish = input(f"{savol}{chegara}: ").strip()
try:
son = int(kirish)
except ValueError:
print(f" ⚠️ {kirish!r} — butun son emas.")
continue
if minimal is not None and son < minimal:
print(f" ⚠️ Kamida {minimal} bo'lishi kerak.")
continue
if maksimal is not None and son > maksimal:
print(f" ⚠️ Ko'pi bilan {maksimal} bo'lishi kerak.")
continue
return son
def kasr_sora(savol: str) -> float:
"""Kasr son so'raydi (vergul ham qabul qilinadi)."""
while True:
kirish = input(f"{savol}: ").strip().replace(",", ".")
try:
return float(kirish)
except ValueError:
print(f" ⚠️ {kirish!r} — son emas.")
def ha_yoq(savol: str, sukut: bool | None = None) -> bool:
"""Ha/yo'q savoli."""
ROST = {"ha", "h", "yes", "y", "1", "true"}
YOLGON = {"yo'q", "yoq", "no", "n", "0", "false"}
if sukut is True:
belgi = "[Ha/yo'q]"
elif sukut is False:
belgi = "[ha/Yo'q]"
else:
belgi = "[ha/yo'q]"
while True:
javob = input(f"{savol} {belgi}: ").strip().lower()
if not javob and sukut is not None:
return sukut
if javob in ROST:
return True
if javob in YOLGON:
return False
print(" ⚠️ 'ha' yoki 'yo'q' deb javob bering.")
def sana_sora(savol: str) -> date:
"""Sana so'raydi (kk.oo.yyyy)."""
while True:
kirish = input(f"{savol} (kk.oo.yyyy): ").strip()
try:
return datetime.strptime(kirish, "%d.%m.%Y").date()
except ValueError:
print(f" ⚠️ {kirish!r} — noto'g'ri format. Masalan: 07.09.2026")
def tanlov(savol: str, variantlar: list[str]) -> str:
"""Ro'yxatdan tanlash."""
print(f"\n{savol}")
for i, v in enumerate(variantlar, 1):
print(f" {i}. {v}")
raqam = son_sora("Tanlang", 1, len(variantlar))
return variantlar[raqam - 1]
# ─── Namoyish ───
if __name__ == "__main__":
print("╔═══════════════════════════════════╗")
print("║ RO'YXATDAN O'TISH ║")
print("╚═══════════════════════════════════╝\n")
ism = matn_sora("Ismingiz")
yosh = son_sora("Yoshingiz", 1, 120)
boy = kasr_sora("Bo'yingiz (m)")
tugilgan = sana_sora("Tug'ilgan sana")
shahar = tanlov("Shahringiz:", ["Toshkent", "Samarqand", "Buxoro", "Boshqa"])
obuna = ha_yoq("\nYangiliklarga obuna bo'lasizmi?", sukut=True)
print("\n╔═══════════════════════════════════╗")
print("║ MA'LUMOTLARINGIZ ║")
print("╠═══════════════════════════════════╣")
print(f"║ Ism: {ism:<24}║")
print(f"║ Yosh: {yosh:<24}║")
print(f"║ Bo'y: {boy:<24.2f}║")
print(f"║ Tug'ilgan:{tugilgan:%d.%m.%Y} ║")
print(f"║ Shahar: {shahar:<24}║")
print(f"║ Obuna: {'Ha' if obuna else 'Yoʻq':<24}║")
print("╚═══════════════════════════════════╝")Namunaviy seans:
╔═══════════════════════════════════╗
║ RO'YXATDAN O'TISH ║
╚═══════════════════════════════════╝
Ismingiz:
⚠️ Bo'sh qoldirmang.
Ismingiz: Sarvarbek
Yoshingiz (1–120): 200
⚠️ Ko'pi bilan 120 bo'lishi kerak.
Yoshingiz (1–120): 25
Bo'yingiz (m): 1,78
Tug'ilgan sana (kk.oo.yyyy): 15.03.2001
Shahringiz:
1. Toshkent
2. Samarqand
3. Buxoro
4. Boshqa
Tanlang (1–4): 1
Yangiliklarga obuna bo'lasizmi? [Ha/yo'q]:
╔═══════════════════════════════════╗
║ MA'LUMOTLARINGIZ ║
╠═══════════════════════════════════╣
║ Ism: Sarvarbek ║
║ Yosh: 25 ║
║ Bo'y: 1.78 ║
║ Tug'ilgan:15.03.2001 ║
║ Shahar: Toshkent ║
║ Obuna: Ha ║
╚═══════════════════════════════════╝Kodda ko'rish kerak:
- Har bir funksiya
while True+try/except(EAFP — 3.8-dars) .strip()doim.replace(",", ".")— o'zbekcha kasr uchunsukut: bool | None— uch holat:True,False, "berilmagan" (3.6-dars){ism:<24}— jadval tekislash
Nima ko'rsatdi: 2.8-bo'lim, 3.6, 3.8, 3.9-darslar birgalikda.
Misol 4 — Progress ko'rsatgich va jonli chiqish
"""Buferlash va \\r bilan jonli chiqish."""
import sys
import time
def progress(joriy: int, jami: int, kenglik: int = 40) -> None:
"""Progress chizig'ini chizadi."""
foiz = joriy / jami
toldirilgan = int(kenglik * foiz)
chiziq = "█" * toldirilgan + "░" * (kenglik - toldirilgan)
print(f"\r [{chiziq}] {foiz:>6.1%} ({joriy}/{jami})", end="", flush=True)
def spinner_bilan_kutish(soniya: float, xabar: str) -> None:
"""Aylanuvchi belgi bilan kutish."""
belgilar = "⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏"
boshlandi = time.time()
i = 0
while time.time() - boshlandi < soniya:
print(f"\r {belgilar[i % len(belgilar)]} {xabar}", end="", flush=True)
time.sleep(0.08)
i += 1
print(f"\r ✅ {xabar} — tayyor" + " " * 10)
print("=== 1. Progress chizig'i ===")
JAMI = 50
for i in range(JAMI + 1):
progress(i, JAMI)
time.sleep(0.02)
print("\n")
print("=== 2. Spinner ===")
spinner_bilan_kutish(1.5, "Ma'lumot yuklanmoqda")
spinner_bilan_kutish(1.0, "Qayta ishlanmoqda")
print("\n=== 3. flush farqi ===")
print(" flush=False bilan (hammasi birga chiqishi mumkin):")
for i in range(3):
print(f" Qadam {i+1}", end=" ")
time.sleep(0.4)
print()
print(" flush=True bilan (har biri darhol):")
for i in range(3):
print(f" Qadam {i+1}", end=" ", flush=True)
time.sleep(0.4)
print()
print("\n=== 4. Ko'p qatorli jonli yangilanish ===")
holatlar = ["Ulanish", "Autentifikatsiya", "Ma'lumot olish", "Saqlash"]
natijalar = ["⏳"] * len(holatlar)
for i in range(len(holatlar)):
natijalar[i] = "⏳"
# Oldingi chiqishni o'chirish
if i > 0:
print(f"\033[{len(holatlar)}A", end="")
for h, n in zip(holatlar, natijalar):
print(f" {n} {h:<20}")
time.sleep(0.5)
natijalar[i] = "✅"
print(f"\033[{len(holatlar)}A", end="")
for h, n in zip(holatlar, natijalar):
print(f" {n} {h:<20}")
print("\n=== 5. stderr ga log ===")
def log(daraja: str, xabar: str) -> None:
belgilar = {"INFO": "ℹ️ ", "OGOH": "⚠️ ", "XATO": "❌"}
print(f"{belgilar.get(daraja, ' ')} [{daraja}] {xabar}", file=sys.stderr)
log("INFO", "Dastur ishga tushdi")
log("OGOH", "Fayl topilmadi, sukut qiymat ishlatildi")
log("XATO", "Ulanish uzildi")
print(" (Bu xabarlar stderr ga ketdi — 2> bilan ajratish mumkin)")Diqqat: \033[NA — ANSI ketma-ketligi, kursorni N qator yuqoriga ko'taradi. Windows Terminal, macOS va Linux terminallarida ishlaydi; eski cmd da ishlamasligi mumkin.
Nima ko'rsatdi: 2.1-bo'limdagi end, flush, file parametrlari va 1.8-darsdagi buferlash.
5. To'g'ri va noto'g'ri tushunishlar
| Noto'g'ri fikr | To'g'risi |
|---|---|
"input() son qaytarishi mumkin" |
Doim str. Aylantirish majburiy |
"print faqat bitta argument oladi" |
Istalgancha. sep bilan ajratiladi |
"print("a" + 5) ishlaydi" |
TypeError. print("a", 5) yoki f-satr |
"f"{x}" va f"{x!r}" bir xil" |
!r — repr(), tirnoqlarni ko'rsatadi |
"% formatlash eskirgan, ishlatmaslik kerak" |
logging da hali ham afzal |
"print darhol chiqaradi" |
Buferlanadi. flush=True kerak bo'lishi mumkin |
"input() ni int() ga o'rash yetarli" |
ValueError xavfi. try/except kerak |
| "f-satr sekin" | Eng tez formatlash usuli |
"{x=} faqat nosozlik uchun" |
Ha, lekin juda foydali — nom o'zgarsa avtomatik yangilanadi |
6. Keng tarqalgan xatolar va yechimlari
1. TypeError: can only concatenate str
print("Yosh: " + yosh) # ❌ yosh — int
print("Yosh:", yosh) # ✅
print(f"Yosh: {yosh}") # ✅2. ValueError — int(input())
yosh = int(input("Yosh: ")) # ❌ "abc" → ValueError
while True: # ✅
try:
yosh = int(input("Yosh: "))
break
except ValueError:
print("Son kiriting")3. .strip() ni unutish
if input("Ha? ") == "ha": # ❌ " ha" ishlamaydi
if input("Ha? ").strip().lower() == "ha": # ✅4. f-satrda tirnoq to'qnashuvi (3.12 gacha)
print(f"{lugat["kalit"]}") # ❌ SyntaxError (3.12 gacha)
print(f"{lugat['kalit']}") # ✅5. f harfini unutish
print("Salom, {ism}!") # ❌ 'Salom, {ism}!'
print(f"Salom, {ism}!") # ✅Ruff bu xatoni topadi: F541.
6. Progress ko'rinmaydi
print(f"\r{i}", end="") # ❌ buferlangan
print(f"\r{i}", end="", flush=True) # ✅7. logging da f-satr
logging.debug(f"Qiymat: {qimmat_hisob()}") # ⚠️ doim hisoblanadi
logging.debug("Qiymat: %s", qimmat_hisob()) # ✅ faqat kerak bo'lsa8. Parolni input() bilan so'rash
parol = input("Parol: ") # ❌ ekranda ko'rinadi
import getpass
parol = getpass.getpass("Parol: ") # ✅9. Foizni ikki marta ko'paytirish
foiz = 0.156
print(f"{foiz * 100:.1f}%") # 15.6% — ishlaydi
print(f"{foiz:.1%}") # 15.6% — soddaroq
print(f"{foiz * 100:.1%}") # ❌ 1560.0%7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 3.14-dars: PEP 8 — qator uzunligi, f-satr uslubi
- 4-QISM: satrlar chuqur — formatlashning barcha nozikligi
- 5-qism: sikllarda progress ko'rsatish
- 9-qism:
ValueErrorni ushlash,inputbilan xatolar - 15-qism:
logging—printo'rniga to'g'ri usul - 16-qism: fayllarga yozish (
file=parametri) - 19-qism: CLI dasturlar,
argparse,richkutubxonasi - Har bir dasturda: foydalanuvchi bilan muloqot
8. Eng yaxshi amaliyotlar
f-satrlarni ishlating. Eng tez, eng o'qiladigan.
%va.format()— faqat maxsus holatlarda.input()natijasini doim.strip()qiling. Foydalanuvchi kiritmasida ortiqcha bo'sh joy — norma.int(input())ni himoyalang.try/except ValueErroryoki tayyor funksiya.Nosozlik izlashda
{x=}va!rishlating.f"{qiymat=!r}"— nom, qiymat va tur haqida hammasini aytadi.Xato xabarlarini
stderrga yozing.print(..., file=sys.stderr).Progress uchun
flush=True. Aks holda foydalanuvchi dastur qotib qolgan deb o'ylaydi.loggingda%uslubini ishlating.logging.info("Foydalanuvchi %s", ism)— f-satr emas.Parol uchun
getpass.input()yozilganini ekranda ko'rsatadi.
9. Amaliy topshiriq
Vazifa 1: Format natijalari
son = 1234.5678
matn = "salom"
1. f"{son:.2f}"
2. f"{son:,.2f}"
3. f"{son:>15,.2f}"
4. f"{son:e}"
5. f"{42:08b}"
6. f"{255:#x}"
7. f"{0.156:.1%}"
8. f"{matn:*^15}"
9. f"{matn!r}"
10. f"{son=:.1f}"Javoblar
'1234.57''1,234.57'' 1,234.57''1.234568e+03''00101010''0xff''15.6%''*****salom*****'"'salom'"'son=1234.6'
Vazifa 2: Chek chiqarish
Do'kon chekini formatlang:
╔══════════════════════════════════╗
║ WISAR MARKET ║
╠══════════════════════════════════╣
║ Non 4,000 × 2 8,000 ║
║ Sut 12,000 × 1 12,000 ║
║ Guruch 18,000 × 3 54,000 ║
╠══════════════════════════════════╣
║ Summa 74,000 ║
║ QQS (12%) 8,880 ║
║ JAMI 82,880 ║
╚══════════════════════════════════╝
07.09.2026 14:30Vazifa 3: Xavfsiz kiritish
3-misoldagi kutubxonaga qo'shing:
email_sora()—@va.borligini tekshirsintelefon_sora()—+998XXXXXXXXXformatini tekshirsinparol_sora()—getpassbilan, kuchini tekshirsin (3.5-darsdagi funksiya)
Vazifa 4: Progress ko'rsatgich
progress_bar(joriy, jami) funksiyasini yozing:
- Foiz, chiziq va qolgan vaqtni ko'rsatsin
- Tugagach
✅ Tayyor (X soniya)yozsin - Terminal kengligiga moslashsin (
shutil.get_terminal_size())
Vazifa 5: print bilan jadval
Funksiya yozing: lug'atlar ro'yxatidan avtomatik jadval chizsin.
malumot = [
{"ism": "Ali", "yosh": 25, "shahar": "Toshkent"},
{"ism": "Sarvarbek", "yosh": 30, "shahar": "Samarqand"},
]
jadval(malumot)Ustun kengligi eng uzun qiymatga moslashsin.
Yechim
def jadval(qatorlar: list[dict]) -> None:
if not qatorlar:
print("(bo'sh)")
return
ustunlar = list(qatorlar[0].keys())
kengliklar = {
u: max(len(str(u)), max(len(str(q[u])) for q in qatorlar))
for u in ustunlar
}
sarlavha = " │ ".join(f"{u:<{kengliklar[u]}}" for u in ustunlar)
chiziq = "─┼─".join("─" * kengliklar[u] for u in ustunlar)
print(sarlavha)
print(chiziq)
for q in qatorlar:
print(" │ ".join(f"{str(q[u]):<{kengliklar[u]}}" for u in ustunlar)){u:<{kengliklar[u]}} — kenglik ham o'zgaruvchi bo'lishi mumkin (2.4-bo'lim).
Vazifa 6: = bilan nosozlik izlash
Quyidagi kodni {x=} yordamida qayta yozing:
a, b = 5, 10
print("a =", a)
print("b =", b)
print("a + b =", a + b)
print("a / b =", round(a / b, 3))Javob
a, b = 5, 10
print(f"{a=}")
print(f"{b=}")
print(f"{a + b=}")
print(f"{a / b=:.3f}")Vazifa 7: O'ylash
Nega logging da f-satr o'rniga % uslubi tavsiya etiladi?
Javob
Dangasa hisoblash.
logging.debug(f"Natija: {qimmat_hisob()}")Bu yerda qimmat_hisob() har doim chaqiriladi — hatto DEBUG darajasi o'chirilgan bo'lsa ham. Chunki f-satr logging.debug chaqirilishidan oldin hisoblanadi.
logging.debug("Natija: %s", qimmat_hisob())Bu ham qimmat_hisob() ni chaqiradi (argument sifatida). Lekin:
logging.debug("Natija: %s", qimmat_obyekt)Bu yerda qimmat_obyekt.__str__() faqat xabar chiqariladigan bo'lsa chaqiriladi.
Ishlab chiqarishda DEBUG odatda o'chirilgan bo'ladi va bunday minglab chaqiruv bo'lishi mumkin — farq sezilarli.
15-qismda batafsil.
Nimani mustahkamlaydi: 2.1, 2.4, 2.5, 2.6, 2.8, 2.9-bo'limlar.
Xulosa
Bu darsda print() va input() ni to'liq o'rgandik.
Eng muhim uch fikr:
input()doimstrqaytaradi. Aylantirish majburiy va uValueErrorberishi mumkin —try/exceptbilan himoyalang..strip()deyarli doim kerak.f-satrlar juda kuchli.
{qiymat:>15,.2f}bitta ifodada tekislash, kenglik, mingliklar va aniqlikni beradi.{x=}esa nosozlik izlashning eng tez usuli.printning to'rt parametri bor:sep,end,file,flush. Ular jadval chizish, progress ko'rsatish, xatolarni ajratish uchun zarur.
Keyingi darsda — 3-qismning yakuni — izohlar, docstring va PEP 8 ni o'rganamiz. Kodni faqat ishlaydigan emas, o'qiladigan qilishning qoidalari.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!