Dastur foydalanuvçi bilan gaplaşadi
Hozirgaça yozgan dasturlarimiz har safar bir xil natija berardi, çunki barça qiymatlar kod içida yozilgan edi. Haqiqiy dasturlar esa foydalanuvçidan maʼlumot oladi: ism, yoş, summa, tanlov. Şu maʼlumotga qarab natija ham özgaradi.
Pythonda klaviaturadan maʼlumot oliş uçun input() funksiyasi işlatiladi. Bu bobda u bilan işlaşni, olingan maʼlumotni kerakli turga aylantirişni va foydalanuvçi notöğri narsa kiritganda dastur buzilib qolmasligini taʼminlaşni örganamiz.
input() funksiyasi
input() dasturni töxtatib, foydalanuvçi biror narsa yozib Enter tugmasini bosişini kutadi. Qavs içiga yozilgan matn savol sifatida körsatiladi:
ism = input("Ismingiz nima? ")
print(f"Tanişganimdan xursandman, {ism}!")
Natija:
Ismingiz nima? Şahzod
Tanişganimdan xursandman, Şahzod!
Savol matni oxirida böş joy qoldiriş odat tusiga kirgan — aks holda foydalanuvçi kiritgan javob savolga yopişib qoladi.
input() har doim satr qaytaradi
Bu bobdagi eng muhim qoida: foydalanuvçi nima kiritmasin — son, kasr yoki True sözi — input() uni satr (str) sifatida qaytaradi. Keling, tekşiramiz:
yosh = input("Yoşingiz: ")
print(type(yosh))
print(yosh + yosh)
Natija:
Yoşingiz: 25
<class 'str'>
2525
25 + 25 ning 50 emas, 2525 çiqqaniga eʼtibor bering. Python ikki satrni yonma-yon ulab qöydi. Agar satrga son qöşmoqçi bölsak, TypeError xatosi çiqadi — buni 1-bobda körgan edik.
Nega Python bunday qiladi? Çunki u foydalanuvçi nima kiritişini oldindan bilmaydi. 25 son bölişi mumkin, +998 90 123 45 67 esa telefon raqami — uni qöşiş yoki köpaytiriş maʼnosiz. Şuning uçun turni aniqlaş vazifasi dasturçiga, yaʼni sizga qoldirilgan.
Turlarni özgartiriş
Bir turdagi qiymatni boşqa turga aylantiriş uçun tur nomi bilan ataladigan funksiyalar bor:
| Funksiya | Nimaga aylantiradi | Misol | Natija |
|---|---|---|---|
int() | butun son | int("42") | 42 |
float() | kasr son | float("3.5") | 3.5 |
str() | satr | str(100) | "100" |
bool() | mantiqiy qiymat | bool(0) | False |
yosh = int(input("Yoşingiz: "))
print(f"10 yildan keyin siz {yosh + 10} yoşda bölasiz.")
Natija:
Yoşingiz: 25
10 yildan keyin siz 35 yoşda bölasiz.
Bu yerda ikki funksiya içma-iç çaqirilgan: avval input() satrni oladi, keyin int() uni butun songa aylantiradi. Bu juda keng tarqalgan usul.
int() va float() ning xususiyatlari
print(int(" 42 "))
print(int(7.9), int(-7.9))
print(float("12650.5"))
print(float(3))
print(float("1e3"))
Natija:
42
7 -7
12650.5
3.0
1000.0
Bir neçta muhim jihat:
int()satr atrofidagi böş joylarni özi olib taşlaydi.int()kasr sonni yaxlitlamaydi, balki kasr qismini şunçaki kesib taşlaydi:7.9→7. Yaxlitlaş kerak bölsa,round()işlating.float()ilmiy yozuvni ham tuşunadi:"1e3"→1000.0.
str() — songa matn qöşiş
Son va matnni + bilan ulamoqçi bölsangiz, sonni avval satrga aylantiriş kerak:
xona = 305
print("Xona raqami: " + str(xona))
print(f"Xona raqami: {xona}")
Natija:
Xona raqami: 305
Xona raqami: 305
Ikkinçi usul — f-satr — qulayroq, çunki u turni özi özgartiradi.
bool() va "böş" qiymatlar
bool() qiymatni True yoki False ga aylantiradi. Qoida oddiy: böş yoki nol qiymatlar False, qolgan hammasi True:
print(bool(0), bool(0.0), bool(""))
print(bool(5), bool(-1), bool("salom"))
print(bool("False"), bool(" "))
Natija:
False False False
True True True
True True
Oxirgi qator köplarni çalğitadi: "False" satri böş emas, uning içida beşta harf bor, şuning uçun u True böladi. Bitta böş joydan iborat satr ham böş emas. Demak, foydalanuvçining "ha/yöq" javobini bool(input()) bilan tekşiriş notöğri — javobni satr sifatida soliştiriş kerak (buni şartlar bobida köramiz).
Notöğri kiritiş: ValueError
Foydalanuvçilar har doim siz kutgan narsani kiritavermaydi. Yoş söralganda "yigirma" deb yozişi yoki kasr sonni vergul bilan kiritişi mumkin. Bunday holda turni özgartiriş funksiyasi ValueError xatosini beradi:
print(int("12.5"))
Natija:
Traceback (most recent call last):
File "<string>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '12.5'
Xabar int() funksiyasi '12.5' satrini butun son sifatida tuşuna olmaganini aytyapti. Kasrli satrni butun songa aylantiriş uçun uni avval float() ga, keyin int() ga beriş kerak: int(float("12.5")).
Özbekistonda kasr qismini vergul bilan yoziş odatiy (3,5), Python esa faqat nuqtani tuşunadi. Buni replace() bilan osongina hal qiliş mumkin:
kiritilgan = "3,5"
son = float(kiritilgan.replace(",", "."))
print(son * 2)
Natija:
7.0
Kiçik tanişuv: try / except
Xato çiqqanda dastur töxtab qolmasligi uçun Pythonda try / except qurilmasi bor. Uni keyinroq alohida bobda batafsil örganamiz, hozir esa faqat ğoyasi bilan tanişamiz: "mana bu kodni bajarib kör (try), agar ValueError çiqsa, örniga buni bajar (except)".
matn = input("Neça dona olasiz? ")
try:
soni = int(matn)
print(f"Jami: {soni * 4500} söm")
except ValueError:
print(f"'{matn}' — son emas. Iltimos, raqam kiriting.")
Natija:
Neça dona olasiz? önta
'önta' — son emas. Iltimos, raqam kiriting.
Agar foydalanuvçi 10 deb yozsa, dastur Jami: 45000 soʻm deb çiqaradi. Muhimi — har ikki holatda ham dastur qulab tuşmaydi va foydalanuvçiga tuşunarli xabar beradi.
Amaliy dasturlar
Endi örganganlarimizni birlaştirib, uçta kiçik interaktiv dastur yozamiz.
Tana massasi indeksi (TMI) kalkulyatori
Tana massasi indeksi (inglizça BMI) vaznning böy uzunligiga mosligini baholaydi. Formula: vazn (kg) ni böyning (metr) kvadratiga böliş.
vazn = float(input("Vazningiz (kg): "))
boy_sm = float(input("Böyingiz (sm): "))
boy_m = boy_sm / 100
tmi = vazn / boy_m ** 2
print(f"Sizning TMI: {tmi:.1f}")
Natija:
Vazningiz (kg): 68
Böyingiz (sm): 175
Sizning TMI: 22.2
Böyni santimetrda söradik, çunki odamlar uni şunday biladi — "1.75" dan köra "175" deb yoziş qulayroq. Hisoblaşdan oldin metrga ötkazdik. Natijani taqqoslaş uçun umumqabul qilingan oraliqlar:
| TMI | Baholaş |
|---|---|
| 18.5 dan kam | vazn yetişmaydi |
| 18.5 – 24.9 | meʼyorda |
| 25 – 29.9 | ortiqça vazn |
| 30 va undan köp | semizlik |
Şartlar bobini örgangaç, dastur bu baholaşni ham özi çiqaradigan qilamiz.
Valyuta konvertori
Bu dastur sömni dollarga va dollarni sömga ötkazadi. Kursni özgarmas qiymat sifatida dastur boşida saqlaymiz (bu yerdagi kurs — misol uçun olingan son, haqiqiy kursni bankdan tekşiring):
DOLLAR_KURSI = 12_650 # 1 dollar neça söm (misol)
som = float(input("Neça söm almaştirasiz? "))
dollar = som / DOLLAR_KURSI
print(f"{som:,.0f} söm = {dollar:,.2f} dollar")
dollar2 = float(input("Neça dollar almaştirasiz? "))
som2 = dollar2 * DOLLAR_KURSI
print(f"{dollar2:,.2f} dollar = {som2:,.0f} söm")
Natija:
Neça söm almaştirasiz? 1000000
1,000,000 söm = 79.05 dollar
Neça dollar almaştirasiz? 250
250.00 dollar = 3,162,500 söm
Kursni alohida konstantaga çiqarib qöyganimiz bejiz emas: ertaga kurs özgarsa, faqat bitta qatorni tahrirlaş kifoya. Nomni katta harflarda yoziş (DOLLAR_KURSI) esa bu qiymat dastur davomida özgarmasligini bildiradi.
Yoş kalkulyatori
Foydalanuvçining tuğilgan yilidan uning yoşini va taxminan neça kun yaşaganini hisoblaymiz:
JORIY_YIL = 2026
ism = input("Ismingiz: ")
tugilgan_yil = int(input("Tuğilgan yilingiz: "))
yosh = JORIY_YIL - tugilgan_yil
kunlar = yosh * 365
print(f"{ism}, siz bu yil {yosh} yoşga tölasiz.")
print(f"Bu taxminan {kunlar:,} kun degani!")
print(f"{tugilgan_yil + 100}-yilda 100 yoşga tölasiz.")
Natija:
Ismingiz: Gulnora
Tuğilgan yilingiz: 2001
Gulnora, siz bu yil 25 yoşga tölasiz.
Bu taxminan 9,125 kun degani!
2101-yilda 100 yoşga tölasiz.
Xulosa
input()foydalanuvçidan maʼlumot oladi va uni har doim satr (str) sifatida qaytaradi.- Turni özgartiriş funksiyalari:
int(),float(),str(),bool(). Odatiy usul:int(input("...")). int()kasrni yaxlitlamaydi, balki kesadi;bool()böş va nol qiymatlar uçunFalse, qolganlar uçunTrueberadi.- Notöğri satrni songa aylantiriş
ValueErrorberadi; vergulli kasrnireplace(",", ".")bilan tuzatiş mumkin. try/except ValueErrordastur qulab tuşmasligi va foydalanuvçiga tuşunarli xabar beriş imkonini beradi.- Özgarmas qiymatlarni (kurs, joriy yil) katta harfli konstantalarga çiqaring.
Maşqlar
- Foydalanuvçidan ikki butun son sörang va ularning yiğindisi, ayirmasi, köpaytmasi va bölinmasini (ikki xonali kasr bilan) çiqaring.
Yeçim
a = int(input("Birinçi son: "))
b = int(input("Ikkinçi son: "))
print(f"{a} + {b} = {a + b}")
print(f"{a} - {b} = {a - b}")
print(f"{a} * {b} = {a * b}")
print(f"{a} / {b} = {a / b:.2f}")
- Foydalanuvçidan kilometrda masofa sörang (kasr bölişi mumkin, vergul bilan ham kiritilişi mumkin) va uni metr va milga aylantiring. 1 mil = 1.609 km.
Yeçim
km = float(input("Masofa (km): ").replace(",", "."))
metr = km * 1000
mil = km / 1.609
print(f"{km} km = {metr:,.0f} metr = {mil:.2f} mil")
- Taksi narxini hisoblovçi dastur yozing: çaqiriş narxi 5 000 söm, har bir kilometr 2 500 söm. Foydalanuvçidan masofani sörang. Agar u son bölmagan narsa kiritsa,
try/exceptyordamida tuşunarli xabar çiqaring.
Yeçim
CHAQIRISH = 5_000
KM_NARXI = 2_500
matn = input("Masofa (km): ")
try:
km = float(matn)
narx = CHAQIRISH + km * KM_NARXI
print(f"Tölov: {narx:,.0f} söm")
except ValueError:
print("Masofani son bilan kiriting, masalan: 7.5")
- Restoran hisobini böluvçi dastur yozing: umumiy summa, çoyçaqa foizi va odamlar soni söralsin. Har bir kişi qança tölaşi kerakligini butun sömgaça yaxlitlab çiqaring.
Yeçim
summa = float(input("Hisob summasi (söm): "))
foiz = float(input("Çoyçaqa (%): "))
odamlar = int(input("Neça kişi? "))
jami = summa * (1 + foiz / 100)
har_biri = jami / odamlar
print(f"Jami: {jami:,.0f} söm")
print(f"Har bir kişiga: {round(har_biri):,} söm")