OzbekPython / Bob 04

input() va turlarni özgartiriş

Foydalanuvçidan maʼlumot oliş, satrni songa aylantiriş, notöğri kiritişni uşlaş va kiçik interaktiv dasturlar yoziş.

Boşlanğiç daraja18 daqiqa16 kod misoli4 / 24

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:

Python
ism = input("Ismingiz nima? ")
print(f"Tanişganimdan xursandman, {ism}!")

Natija:

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:

Python
yosh = input("Yoşingiz: ")
print(type(yosh))
print(yosh + yosh)

Natija:

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:

FunksiyaNimaga aylantiradiMisolNatija
int()butun sonint("42")42
float()kasr sonfloat("3.5")3.5
str()satrstr(100)"100"
bool()mantiqiy qiymatbool(0)False
Python
yosh = int(input("Yoşingiz: "))
print(f"10 yildan keyin siz {yosh + 10} yoşda bölasiz.")

Natija:

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

Python
print(int(" 42 "))
print(int(7.9), int(-7.9))
print(float("12650.5"))
print(float(3))
print(float("1e3"))

Natija:

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:

Python
xona = 305
print("Xona raqami: " + str(xona))
print(f"Xona raqami: {xona}")

Natija:

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:

Python
print(bool(0), bool(0.0), bool(""))
print(bool(5), bool(-1), bool("salom"))
print(bool("False"), bool(" "))

Natija:

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:

Python
print(int("12.5"))

Natija:

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:

Python
kiritilgan = "3,5"
son = float(kiritilgan.replace(",", "."))
print(son * 2)

Natija:

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)".

Python
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:

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ş.

Python
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:

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:

TMIBaholaş
18.5 dan kamvazn yetişmaydi
18.5 – 24.9meʼyorda
25 – 29.9ortiqça vazn
30 va undan köpsemizlik

Ş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):

Python
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:

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:

Python
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:

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çun False, qolganlar uçun True beradi.
  • Notöğri satrni songa aylantiriş ValueError beradi; vergulli kasrni replace(",", ".") bilan tuzatiş mumkin.
  • try / except ValueError dastur qulab tuşmasligi va foydalanuvçiga tuşunarli xabar beriş imkonini beradi.
  • Özgarmas qiymatlarni (kurs, joriy yil) katta harfli konstantalarga çiqaring.

Maşqlar

  1. Foydalanuvçidan ikki butun son sörang va ularning yiğindisi, ayirmasi, köpaytmasi va bölinmasini (ikki xonali kasr bilan) çiqaring.
Yeçim
Python
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}")
  1. 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
Python
km = float(input("Masofa (km): ").replace(",", "."))
metr = km * 1000
mil = km / 1.609
print(f"{km} km = {metr:,.0f} metr = {mil:.2f} mil")
  1. 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 / except yordamida tuşunarli xabar çiqaring.
Yeçim
Python
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")
  1. 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
Python
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")