Asosiy qismga o'tish

math moduli: ildiz, π va trigonometriya

4-bob 35 kod bloki 3158 so'z

Bu bobda

  • modulni uch xil usulda import qilishni
  • sqrt, pi, floor, ceil, hypot, sin, cos, log kabi funksiyalarni
  • yaxlitlashning to'rt xil usulini farqlashni
  • math domain error nimani anglatishini
  • random bilan tasodifiy son olishni

Boshlanishiga: Toshkentdan Samarqandgacha necha km?

Ikki shaharning xaritadagi koordinatalarini (kenglik va uzunlik) bilsak (Toshkent: 41.3111, 69.2797; Samarqand: 39.6270, 66.9750), ular orasidagi to'g'ri chiziqli masofani hisoblay olamiz. Yer shar shaklida bo'lgani uchun bu yerda trigonometriya kerak bo'ladi. Formulani hozir yodlash shart emas, bob oxirida undagi har bir funksiyani tushunasiz.

python10 qator
import math

f1 = math.radians(41.3111)
l1 = math.radians(69.2797)
f2 = math.radians(39.6270)
l2 = math.radians(66.9750)

h = math.sin((f2 - f1) / 2) ** 2 + math.cos(f1) * math.cos(f2) * math.sin((l2 - l1) / 2) ** 2
masofa = 2 * 6371 * math.asin(math.sqrt(h))
print(f"Toshkent - Samarqand: {masofa:.0f} km (to'g'ri chiziq bo'yicha)")
Natija
Toshkent - Samarqand: 270 km (to'g'ri chiziq bo'yicha)

Yo'l bo'yicha masofa ko'proq (taxminan 300 km), chunki yo'l to'g'ri emas. Bu formula haversine deyiladi: navigatorlar, taksi va yetkazib berish ilovalari aynan shunday hisoblaydi.

Modul nima va uni qanday ulash kerak?

Modul — tayyor funksiyalar to'plami. Python bilan birga yuzlab modul keladi, math — shulardan biri. Uni ishlatishdan oldin import qilish kerak. Uch xil usul bor:

python2 qator
import math
print(math.sqrt(16))
Natija
4.0
python2 qator
from math import sqrt, pi
print(sqrt(16), pi)
Natija
4.0 3.141592653589793
python2 qator
from math import *
print(sqrt(16), floor(2.7))
Natija
4.0 2
Usul Qanday chaqiriladi Qachon yaxshi
import math math.sqrt(16) Tavsiya etiladi. Funksiya qayerdan kelgani aniq ko'rinadi
from math import sqrt sqrt(16) Bir-ikki funksiya ko'p ishlatilsa
from math import * sqrt(16) Faqat sinash uchun. Nomlar aralashib ketadi

Modul nomini xato yozish yoki import ni unutish

python1 qator
print(mat.sqrt(25))
Xato xabari
NameError: name 'mat' is not defined

mat emas, math. Python mat degan nomni topmadi. Agar import math qatorini umuman yozmasangiz, xuddi shu xato chiqadi: name 'math' is not defined. Jupyterda daftarni qayta ochganda import katagini birinchi bo'lib ishga tushiring.

Ildiz va daraja

python4 qator
import math
print(math.sqrt(49))
print(math.sqrt(2))
print(49 ** 0.5)
Natija
7.0
1.4142135623730951
7.0

math.sqrt() har doim float qaytaradi, hatto ildiz butun chiqsa ham (7.0). Butun ildiz kerak bo'lsa: math.isqrt(50) → 7 (kasrini tashlaydi).

Manfiy sondan ildiz olib bo'lmaydi:

python2 qator
import math
print(math.sqrt(-9))
Xato xabari
ValueError: math domain error

math domain error — "matematik aniqlanish sohasidan tashqari". Xuddi shunday xato math.log(0) va math.log(-1) da ham chiqadi.

π, e va boshqa konstantalar

python4 qator
import math
print(math.pi)
print(math.e)
print(math.tau)
Natija
3.141592653589793
2.718281828459045
6.283185307179586

math.tau = 2π. Mashqlarda π = 3.14 deb hisoblash so'ralsa, 3.14 yozing. Aks holda doim math.pi ishlating, u ancha aniq.

python4 qator
import math
r = 5
print("3.14 bilan:", 2 * 3.14 * r)
print("math.pi bilan:", 2 * math.pi * r)
Natija
3.14 bilan: 31.400000000000002
math.pi bilan: 31.41592653589793

Yaxlitlashning to'rt yo'li

Bu jadval ko'p savolga javob beradi. Ikki son: 2.7 va -2.7.

python5 qator
import math
x = 2.7
print(math.floor(x), math.ceil(x), math.trunc(x), int(x), round(x))
x = -2.7
print(math.floor(x), math.ceil(x), math.trunc(x), int(x), round(x))
Natija
2 3 2 2 3
-3 -2 -2 -2 -3

Chiqish tartibi: floor, ceil, trunc, int, round.

Funksiya Nima qiladi 2.7 -2.7
math.floor(x) pastga (kichik tomonga) 2 -3
math.ceil(x) yuqoriga (katta tomonga) 3 -2
math.trunc(x), int(x) kasrni tashlaydi (nol tomonga) 2 -2
round(x) eng yaqin butun songa 3 -3

ceil qayerda kerak?

45 ta talaba bor, avtobusga 20 kishi sig'adi. Nechta avtobus kerak?

python4 qator
import math
talaba = 45
print(talaba / 20)
print(math.ceil(talaba / 20), "ta avtobus")
Natija
2.25
3 ta avtobus

2.25 avtobus bo'lmaydi, 3 ta kerak. Bunday hollarda doim yuqoriga yaxlitlanadi.

Modul, faktorial, EKUB

python5 qator
import math
print(abs(-7.5))
print(math.factorial(5))
print(math.gcd(48, 36))
print(math.lcm(4, 6))
Natija
7.5
120
12
12
  • abs() — modul, math siz ham ishlaydi.
  • factorial(5) = 1·2·3·4·5 = 120.
  • gcd — eng katta umumiy bo'luvchi (EKUB), lcm — eng kichik umumiy karrali (EKUK).

Masofa va gipotenuza

To'g'ri burchakli uchburchakning katetlari 3 va 4 bo'lsa, gipotenuza √(3² + 4²) = 5. math.hypot() buni bitta chaqiruvda qiladi:

python3 qator
import math
print(math.sqrt(3 ** 2 + 4 ** 2))
print(math.hypot(3, 4))
Natija
5.0
5.0

Tekislikdagi ikki nuqta orasidagi masofa — xuddi shu formula: √((x₂−x₁)² + (y₂−y₁)²). Uni math.dist() ham hisoblaydi:

python3 qator
import math
print(math.hypot(4 - 1, 6 - 2))
print(math.dist((1, 2), (4, 6)))
Natija
5.0
5.0

Trigonometriya: radian va gradus

math.sin(), math.cos(), math.tan() burchakni radianda kutadi, gradusda emas. Bu eng ko'p uchraydigan xato:

python3 qator
import math
print(math.sin(30))
print(math.sin(math.radians(30)))
Natija
-0.9880316240928618
0.49999999999999994

sin(30°) = 0.5 bo'lishi kerak. Birinchi qatorda Python 30 radian ning sinusini hisobladi va -0.988 chiqdi. Ikkinchi qatorda burchak avval math.radians() bilan radianga o'girildi va 0.49999999999999994 chiqdi — bu 0.5, faqat kasr sonlarning kichik xatosi bilan (pastdagi eslatmaga qarang).

Teskarisi — math.degrees():

python3 qator
import math
print(math.radians(180))
print(math.degrees(math.pi / 2))
Natija
3.141592653589793
90.0

Nolga juda yaqin, lekin nol emas

python3 qator
import math
print(math.sin(math.pi))
print(round(math.sin(math.pi), 10))
Natija
1.2246467991473532e-16
0.0

sin(π) = 0 bo'lishi kerak, lekin π ning o'zi taqriban saqlangani uchun 1.22e-16 chiqadi (0.000...0122). Bu 3-bobdagi 0.1 + 0.2 bilan bir xil sabab. Chiqarishda yaxlitlang.

Logarifm va eksponenta

python5 qator
import math
print(math.log10(1000))
print(math.log2(1024))
print(math.log(math.e))
print(math.exp(1))
Natija
3.0
10.0
1.0
2.718281828459045

math.log(x) — natural logarifm (asosi e). Boshqa asos uchun ikkinchi qiymat beriladi: math.log(81, 3) = 4.0.

Kasrlarni to'g'ri solishtirish: isclose

3-bobda abs(x - 0.3) < 1e-9 deb yozgan edik. math da buning tayyor funksiyasi bor:

python3 qator
import math
print(0.1 + 0.2 == 0.3)
print(math.isclose(0.1 + 0.2, 0.3))
Natija
False
True

min, max, sum

Bular math ga kirmaydi, Pythonning o'zida bor, lekin hisob-kitobda ko'p kerak:

python3 qator
print(min(7, 3, 9))
print(max(7, 3, 9))
print(sum((7, 3, 9)))
Natija
3
9
19

sum() ga sonlarni qavs ichida to'plam sifatida beramiz. Ro'yxatlarni 9-bobda o'rganamiz.

random: tasodifiy sonlar

O'yinlar, test savollarini aralashtirish, tasodifiy g'olib tanlash uchun random moduli bor:

python6 qator
import random
random.seed(7)
print(random.randint(1, 6))
print(random.randint(1, 6))
print(random.random())
print(random.choice(("olma", "anor", "behi")))
Natija
3
2
0.3948234964231735
olma
  • randint(1, 6) — 1 dan 6 gacha (6 ham kiradi) butun son, xuddi o'yin kubigi.
  • random() — 0 va 1 orasida kasr son.
  • choice(...) — berilganlardan bittasini tanlaydi.
  • seed(7) — tasodifni takrorlanadigan qiladi. Kitobda natija har safar bir xil chiqishi uchun qo'ydik. O'zingiz sinab ko'rganda seed qatorini olib tashlang, har safar boshqacha chiqadi.

Kitoblarda

  • Python asoslari: "Pythonda matematika" 83–87-betlar (min, max, abs, pow, math funksiyalari ro'yxati, ceil, floor, pi); tasodifiy son (random) 20–21-betlar.
  • Python Crash Course: import haqida 8-bob, Storing Your Functions in Modules 150–153-betlar. Bu kitobda math moduli o'rgatilmaydi.

Kichik loyiha: kvadrat tenglama

ax² + bx + c = 0 tenglamani yechamiz. Diskriminant D = b² − 4ac, ildizlar x = (−b ± √D) / 2a.

python11 qator
import math

a = float(input("a = "))
b = float(input("b = "))
c = float(input("c = "))

d = b ** 2 - 4 * a * c
x1 = (-b + math.sqrt(d)) / (2 * a)
x2 = (-b - math.sqrt(d)) / (2 * a)
print(f"D = {d}")
print(f"x1 = {x1}, x2 = {x2}")
Natija
a = 1
b = -5
c = 6
D = 1.0
x1 = 3.0, x2 = 2.0

Tekshiramiz: x² − 5x + 6 = (x − 2)(x − 3), ildizlar 3 va 2. To'g'ri.

(2 * a) dagi qavsga e'tibor bering. Usiz / 2 * a bo'lib qoladi: avval 2 ga bo'linadi, keyin a ga ko'paytiriladi.

Endi D manfiy bo'lgan tenglamani beraylik:

python8 qator
import math

a = float(input("a = "))
b = float(input("b = "))
c = float(input("c = "))

d = b ** 2 - 4 * a * c
x1 = (-b + math.sqrt(d)) / (2 * a)
Natija
a = 1
b = 2
c = 5
Xato xabari
ValueError: math domain error

D = 4 − 20 = −16, manfiy sondan ildiz yo'q. Dastur yiqildi. To'g'ri dastur avval D ni tekshirib, "haqiqiy ildiz yo'q" deb javob berishi kerak. Buning uchun if kerak — 6-bobda shu dasturni tugatamiz.

Xulosa

  • import math, keyin math.funksiya(). Bu eng aniq usul.
  • sqrt, pi, hypot, dist — geometriya; sin, cos — radianda, radians() bilan o'giring.
  • floor pastga, ceil yuqoriga, trunc/int nol tomonga, round eng yaqiniga.
  • math domain error — manfiy sondan ildiz yoki nol/manfiy sondan logarifm.
  • math.isclose() — kasrlarni solishtirish uchun.
  • random.randint(a, b) — tasodifiy butun son.

Mashqlar

Bu bobda π uchun math.pi ishlating (varaqdagi π = 3.14 o'rniga). Tekshiruvchi aniq qiymat bilan solishtiradi.

Begin9

Ikkita manfiy bo'lmagan son a va b berilgan. Ularning o'rta geometrigini toping: √(a·b).

KirishKutilgan natija
4, 96
2, 84
3, 53.872983346207417
Yechimni ko'rish
python4 qator
import math
a = float(input())
b = float(input())
print(math.sqrt(a * b))
Begin12

To'g'ri burchakli uchburchakning katetlari a va b berilgan. Avval gipotenuzasi c ni, keyin perimetri P ni chiqaring: c = √(a² + b²), P = a + b + c.

KirishKutilgan natija
3, 45 12
6, 810 24
1, 11.4142135623730951 3.414213562373095
Yechimni ko'rish
python5 qator
import math
a = float(input())
b = float(input())
c = math.hypot(a, b)
print(c, a + b + c)
Begin13

Markazi umumiy bo'lgan ikkita doiraning radiuslari R₁ va R₂ berilgan (R₁ > R₂). Ularning yuzlari S₁, S₂ va oradagi halqaning yuzi S₃ ni chiqaring: S₁ = π·R₁², S₂ = π·R₂², S₃ = S₁ − S₂.

KirishKutilgan natija
2, 112.566370614359172 3.141592653589793 9.42477796076938
5, 378.53981633974483 28.274333882308138 50.26548245743669
10, 9314.1592653589793 254.46900494077323 59.690260418206094
Yechimni ko'rish
python6 qator
import math
r1 = float(input())
r2 = float(input())
s1 = math.pi * r1 ** 2
s2 = math.pi * r2 ** 2
print(s1, s2, s1 - s2)

Varaqdagi xato

Topshiriqlar varag'ida S₃ = π·(R₁ − R₂) deb yozilgan. Bu halqaning yuzi emas. To'g'risi: S₃ = S₁ − S₂ = π·(R₁² − R₂²).

Begin14

Aylananing uzunligi L berilgan. Uning radiusi R va doira yuzi S ni toping. L = 2·π·R dan: R = L / (2·π), keyin S = π·R².

KirishKutilgan natija
6.2831853071795861 3.141592653589793
31.415926535897935 78.53981633974483
101.5915494309189535 7.9577471545947684
Yechimni ko'rish
python4 qator
import math
l = float(input())
r = l / (2 * math.pi)
print(r, math.pi * r ** 2)
Begin15

Doiraning yuzi S berilgan. Avval diametri d ni, keyin radiusi R ni chiqaring. S = π·R² dan: R = √(S / π), d = 2·R.

KirishKutilgan natija
3.1415926535897932 1
78.5398163397448310 5
507.978845608028654 3.989422804014327
Yechimni ko'rish
python4 qator
import math
s = float(input())
r = math.sqrt(s / math.pi)
print(2 * r, r)
Begin20

Tekislikdagi ikki nuqta (x₁, y₁) va (x₂, y₂) berilgan. Ular orasidagi masofani toping: √((x₂−x₁)² + (y₂−y₁)²). Kiritish tartibi: x₁, y₁, x₂, y₂.

KirishKutilgan natija
0, 0, 3, 45
1, 2, 4, 65
-1, -1, 1, 12.8284271247461903
Yechimni ko'rish
python6 qator
import math
x1 = float(input())
y1 = float(input())
x2 = float(input())
y2 = float(input())
print(math.dist((x1, y1), (x2, y2)))
Begin21

Uchburchakning uchlari (x₁, y₁), (x₂, y₂), (x₃, y₃) berilgan. Avval tomonlarini Begin20 dagi formula bilan toping, keyin uchburchakning yuzi va perimetrini chiqaring. Yuz — Geron formulasi: S = √(p·(p−a)·(p−b)·(p−c)), bu yerda p = (a + b + c) / 2 — yarim perimetr. Kiritish tartibi: x₁, y₁, x₂, y₂, x₃, y₃.

KirishKutilgan natija
0, 0, 3, 0, 0, 46 12
0, 0, 4, 0, 0, 36 12
1, 1, 5, 1, 1, 46 12
Yechimni ko'rish
python12 qator
import math
x1 = float(input())
y1 = float(input())
x2 = float(input())
y2 = float(input())
x3 = float(input())
y3 = float(input())
a = math.dist((x1, y1), (x2, y2))
b = math.dist((x2, y2), (x3, y3))
c = math.dist((x1, y1), (x3, y3))
p = (a + b + c) / 2
print(math.sqrt(p * (p - a) * (p - b) * (p - c)), a + b + c)
Begin38

A·x + B = 0 chiziqli tenglama berilgan (A ≠ 0). Uning yechimi x ni toping: x = −B / A.

KirishKutilgan natija
2, -63
4, 2-0.5
-1, 55
Yechimni ko'rish
python3 qator
a = float(input())
b = float(input())
print(-b / a)
Begin39

A·x² + B·x + C = 0 kvadrat tenglama berilgan (A ≠ 0), diskriminanti musbat ekani ma'lum. Ildizlarni toping va avval kichigini, keyin kattasini chiqaring. D = B² − 4·A·C, x = (−B ± √D) / (2·A). Maslahat: min() va max().

KirishKutilgan natija
1, -5, 62 3
1, 0, -4-2 2
-1, 1, 6-2 3
Yechimni ko'rish
python8 qator
import math
a = float(input())
b = float(input())
c = float(input())
d = b ** 2 - 4 * a * c
x1 = (-b + math.sqrt(d)) / (2 * a)
x2 = (-b - math.sqrt(d)) / (2 * a)
print(min(x1, x2), max(x1, x2))
Begin40

Chiziqli tenglamalar sistemasi berilgan: A₁·x + B₁·y = C₁ va A₂·x + B₂·y = C₂. Determinant D = A₁·B₂ − A₂·B₁ noldan farqli. Yechimni toping: x = (C₁·B₂ − C₂·B₁) / D, y = (A₁·C₂ − A₂·C₁) / D. Kiritish tartibi: A₁, B₁, C₁, A₂, B₂, C₂.

KirishKutilgan natija
1, 1, 5, 1, -1, 13 2
2, 3, 13, 1, -1, -12 3
3, 0, 6, 0, 2, 82 4
Yechimni ko'rish
python8 qator
a1 = float(input())
b1 = float(input())
c1 = float(input())
a2 = float(input())
b2 = float(input())
c2 = float(input())
d = a1 * b2 - a2 * b1
print((c1 * b2 - c2 * b1) / d, (a1 * c2 - a2 * c1) / d)
4.1

Ichida N ta talaba bor guruh avtobusda sayohatga boradi. Bitta avtobusga K kishi sig'adi. Nechta avtobus kerak? (Ikkalasi butun son.)

KirishKutilgan natija
45, 203
40, 202
1, 501
Yechimni ko'rish
python4 qator
import math
n = int(input())
k = int(input())
print(math.ceil(n / k))
4.2

Burchak gradusda berilgan. Uning sinusi va kosinusini 4 xona aniqlikda chiqaring.

KirishKutilgan natija
300.5000 0.8660
901.0000 0.0000
00.0000 1.0000
Yechimni ko'rish
python4 qator
import math
g = float(input())
r = math.radians(g)
print(f"{math.sin(r):.4f} {math.cos(r):.4f}")

Bu bobni bepul o'qidingiz.

Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.

Telegramda yozish Narxlar