Ma'lumot turlari va o'girish
Bu bobda
int,float,str,boolturlari bilan ishlashniinput()dan kelgan matnni songa o'girishniint()kasrni qanday kesishini varound()qanday yaxlitlashini- sonlarni chiroyli chiqarishni:
f"{x:.2f}"
Muammo: "5" + "3" = "53"
O'tgan bobda input() har doim matn qaytarishini ko'rdik. Endi bu nimaga olib kelishini ko'ramiz:
a = input("a = ") b = input("b = ") print(a + b)
a = 5 b = 3 53
8 emas, 53. Chunki ikkita matnni + bilan qo'shish ularni yopishtiradi (concatenation): "5" + "3" → "53". Python bu yerda xato qilmadi, u aynan aytilganini bajardi.
Matnni songa ko'paytirish ham ishlaydi, lekin u matnni takrorlaydi:
print("ha" * 3) print("-" * 20)
hahaha --------------------
Matnga sonni qo'shib bo'lmaydi. Python bu ikki turni qanday qo'shishni bilmaydi:
yosh = "20" print(yosh + 1)
TypeError: can only concatenate str (not "int") to str
int() va float(): matnni songa o'girish
Yechim: matnni songa o'girish (type conversion). int() butun songa, float() kasr songa o'giradi:
a = int(input("a = ")) b = int(input("b = ")) print(a + b)
a = 5 b = 3 8
int(input(...)) ni ichkaridan tashqariga o'qing: avval input() matn oladi, keyin int() uni songa aylantiradi, so'ng natija a ga bog'lanadi.
Agar foydalanuvchi kasr son kiritishi mumkin bo'lsa, float() ishlating:
narx = float(input("1 kg narxi: ")) kg = float(input("Necha kg: ")) print("Jami:", narx * kg)
1 kg narxi: 2.5 Necha kg: 4 Jami: 10.0
int() ga kasr matnini berish
int() faqat butun son yozilgan matnni tushunadi. "2.5" ni bersangiz, xato beradi:
son = int("2.5")
ValueError: invalid literal for int() with base 10: '2.5'
Agar kasr kelishi mumkin bo'lsa, float() ishlating. Agar baribir butun son kerak bo'lsa, ikki bosqichda: int(float("2.5")).
Sondan matnga o'girish uchun str():
yosh = 20 xabar = "Men " + str(yosh) + " yoshdaman" print(xabar)
Men 20 yoshdaman
Lekin buni f-string bilan yozish ancha qulay, o'girish o'zi bo'ladi: f"Men {yosh} yoshdaman".
int va float: farqi nima?
int |
float |
|
|---|---|---|
| Nima | butun son | kasr son |
| Misol | 7, -3, 1000000 |
7.0, -3.5, 0.25 |
| Aniqlik | har doim aniq, istalgancha katta | taxminan 15–16 xona |
Python butun sonlarni istalgancha katta saqlay oladi:
print(2 ** 100)
1267650600228229401496703205376
Uzun sonlarni o'qish oson bo'lishi uchun xonalarni _ bilan ajratish mumkin. Python _ ni e'tiborga olmaydi:
aholi = 37_000_000 print(aholi)
37000000
Bitta float qatnashsa, natija ham float bo'ladi. / bilan bo'lish esa har doim float beradi, hatto qoldiqsiz bo'linsa ham:
print(2 + 3.0) print(4 / 2) print(type(4 / 2))
5.0 2.0 <class 'float'>
int() kasrni kesadi, yaxlitlamaydi
Bu juda muhim va ko'p adashtiradigan joy. int() kasr qismini shunchaki tashlab yuboradi:
print(int(2.8)) print(int(2.2)) print(int(-2.8))
2 2 -2
2.8 dan 3 emas, 2 chiqdi. Manfiy sonda ham kasr tashlanadi, shuning uchun -2.8 dan -2 chiqdi.
Kasrlarni qo'shib, keyin int() qilish
a = float(input("a = ")) b = float(input("b = ")) print(int(a + b))
a = 2.4 b = 2.4 4
2.4 + 2.4 = 4.8, lekin ekranda 4. Foydalanuvchi buni xato deb o'ylaydi va haqli bo'ladi. Natijani kesish kerak bo'lmasa, int() qilmang.
Kitobdagi misolga e'tibor bering
"Python asoslari" kitobining 20-betida "float turidan intga o'tkazish" deb b = int(x) yozilgan. Lekin u yerda x = 1, ya'ni x allaqachon int. Aslida b = int(y) bo'lishi kerak edi (y = 2.8). Unda natija 1 emas, 2 bo'ladi va int() kasrni kesishi ko'rinadi.
round(): yaxlitlash
Yaxlitlash uchun round() bor. Ikkinchi qiymat — verguldan keyin nechta xona qolishi:
print(round(2.8)) print(round(3.14159, 2)) print(round(1234.5678, 1))
3 3.14 1234.6
Kutilmagan natija
print(round(2.5)) print(round(3.5)) print(round(4.5))
2 4 4
Maktabda 2.5 → 3 deb o'rganganmiz. Python esa .5 bo'lganda eng yaqin juft songa yaxlitlaydi: 2.5 → 2, 3.5 → 4, 4.5 → 4. Bu "bankir yaxlitlashi" (banker's rounding) deyiladi: ko'p sonlarni yaxlitlaganda xato bir tomonga to'planib qolmasligi uchun.
f-string bilan sonlarni chiroyli chiqarish
Hisob-kitobda ko'pincha juda uzun kasr chiqadi:
narx = 10 / 3 print(narx)
3.3333333333333335
f-string ichida : dan keyin format yozish mumkin. .2f — "verguldan keyin 2 xona":
narx = 10 / 3 print(f"Narx: {narx:.2f} so'm") print(f"Narx: {narx:.0f} so'm")
Narx: 3.33 so'm Narx: 3 so'm
Katta sonlarni xonalarga ajratish uchun , yoki _:
maosh = 7500000 print(f"{maosh:,} so'm") print(f"{maosh:_} so'm")
7,500,000 so'm 7_500_000 so'm
| Format | Ma'nosi | x = 1234.5678 bo'lsa |
|---|---|---|
{x:.2f} |
2 xona kasr | 1234.57 |
{x:.0f} |
kasrsiz | 1235 |
{x:,.1f} |
xonalarga ajratib, 1 xona | 1,234.6 |
{x:10.2f} |
10 belgi joy, o'ngga tekislab | 1234.57 |
bool: rost yoki yolg'on
bool turida faqat ikkita qiymat bor: True va False. Ular taqqoslashdan chiqadi:
print(5 > 3) print(10 == 7) print(type(5 > 3))
True False <class 'bool'>
Istalgan qiymatni bool() ga bersa bo'ladi. Qoida oddiy: bo'sh yoki nol bo'lsa False, qolgan hamma narsa True:
print(bool(0), bool(0.0), bool("")) print(bool(5), bool(-1), bool("salom")) print(bool("0"), bool(" "))
False False False True True True True True
Oxirgi qatorga qarang: "0" va " " — bo'sh emas, ichida belgi bor. Shuning uchun True. Buni 6-bobda shartlar bilan ishlaganda ko'p ishlatamiz.
Kitoblarda
- Python asoslari: ma'lumot turlari 16-bet, sonlar 17–19-betlar, sonlarni o'girish 20-bet.
- Python Crash Course: 2-bob, Integers, Floats, Integers and Floats, Underscores in Numbers 26–28-betlar.
Xulosa
input()matn beradi; hisoblash uchunint()yokifloat()bilan o'giring."5" + "3"="53","ha" * 3="hahaha","20" + 1esa xato.int()kasrni kesadi,round()yaxlitlaydi (.5 da juft tomonga)./har doimfloatberadi.f"{x:.2f}"— 2 xona bilan chiqarish,f"{x:,}"— xonalarga ajratish.- Bo'sh va nol qiymatlar
False, qolganlariTrue.
Mashqlar
Qiymatlarni float(input()) bilan oling. Kasr natijani yaxlitlamasangiz ham bo'ladi, tekshiruvchi sonlarni o'zi solishtiradi.
Kvadratning tomoni a berilgan. Uning perimetrini toping: P = 4·a.
| Kirish | Kutilgan natija |
|---|---|
| 5 | 20 |
| 2.5 | 10 |
| 0.1 | 0.4 |
Yechimni ko'rish
a = float(input()) print(4 * a)
Kvadratning tomoni a berilgan. Uning yuzini toping: S = a·a.
| Kirish | Kutilgan natija |
|---|---|
| 5 | 25 |
| 1.5 | 2.25 |
| 10 | 100 |
Yechimni ko'rish
a = float(input()) print(a * a)
To'g'ri to'rtburchakning tomonlari a va b berilgan. Avval yuzini, keyin perimetrini chiqaring: S = a·b, P = 2·(a + b).
| Kirish | Kutilgan natija |
|---|---|
| 3, 4 | 12 14 |
| 2.5, 2 | 5 9 |
| 10, 1 | 10 22 |
Yechimni ko'rish
a = float(input()) b = float(input()) print(a * b, 2 * (a + b))
Kubning qirrasi a berilgan. Avval hajmini, keyin to'la sirtini chiqaring: V = a·a·a, S = 6·a·a.
| Kirish | Kutilgan natija |
|---|---|
| 2 | 8 24 |
| 3 | 27 54 |
| 1.5 | 3.375 13.5 |
Yechimni ko'rish
a = float(input()) print(a * a * a, 6 * a * a)
Parallelepipedning qirralari a, b, c berilgan. Avval hajmini, keyin to'la sirtini chiqaring: V = a·b·c, S = 2·(a·b + b·c + a·c).
| Kirish | Kutilgan natija |
|---|---|
| 2, 3, 4 | 24 52 |
| 1, 1, 1 | 1 6 |
| 1.5, 2, 3 | 9 27 |
Yechimni ko'rish
a = float(input()) b = float(input()) c = float(input()) print(a * b * c, 2 * (a * b + b * c + a * c))
Ikkita son a va b berilgan. Ularning o'rta arifmetigini toping: (a + b) / 2.
| Kirish | Kutilgan natija |
|---|---|
| 4, 6 | 5 |
| 3, 4 | 3.5 |
| -2, 2 | 0 |
Yechimni ko'rish
a = float(input()) b = float(input()) print((a + b) / 2)
Foydalanuvchi tug'ilgan yilini kiritadi. 2026-yilda u necha yoshga to'lishini chiqaring. Javob butun son bo'lsin.
| Kirish | Kutilgan natija |
|---|---|
| 2000 | 26 |
| 2010 | 16 |
| 1990 | 36 |
Yechimni ko'rish
yil = int(input()) print(2026 - yil)
Mahsulot narxi (so'mda, butun son) va soni berilgan. Jami summani xonalarga ajratib, Jami: 1,250,000 so'm ko'rinishida chiqaring.
| Kirish | Kutilgan natija |
|---|---|
| 250000, 5 | Jami: 1,250,000 so'm |
| 12500, 3 | Jami: 37,500 so'm |
Yechimni ko'rish
narx = int(input()) soni = int(input()) print(f"Jami: {narx * soni:,} so'm")
Bu bobni bepul o'qidingiz.
Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.