decimal moduli - Suzuvchi nuqtali sonlar bilan ishlashda hisoblash natijasining to’g’iri emasligiga duch kelamiz:
x = 0.1
y = 0.1
z = 0.1
s = x + y + z
print(s)
Javib: 0,30000000000000004
round() funksiyasini soni yaxlitlash qo’llash yordamida bu muammoni yechishi mumkin. Bundan tashqari decimal ichki modulini ishlatish orqali ham bu muammoni yechish mumkin.
Bu moduldagi Decimal sinfi asosiy sonlar bilan ishlash kompanentasi hisoblanadi. Bu sinfni qo’llash uchun Decimal konstruktori yordamida uning obyektini yaratish zarur. Konstruktorga argument sifatida sonning satrdagi ifodasi uzatiladi:
Bundan so’ng Decimal obyektini arifimetik amallarda ishlatish mumkin:
import decimal
from decimal import Decimal
x = Decimal('0.1')
y = Decimal('0.1')
z = Decimal('0.1')
s = x + y + z
print(s)
Javob: 0.3
import decimal
from decimal import Decimal
s=Decimal('0.1') + Decimal('0.1') + Decimal('0.1') - Decimal('0.3')
print(s)
Javob: 0.0
Decimal bilan amallarda butun sonlarni ham ishlatish mumkin:
import decimal
from decimal import Decimal
x = Decimal('0.1')
s = x + 2
print(s)
Javob: 2.1
Ammo, kasrli amalarda float va Decimal aralashtirmaslik zarur:
import decimal
from decimal import Decimal
x = Decimal('0.1')
s = x + 0.1
print(s)
Traceback (most recent call last):
File "C:/Users/ADMIN/Desktop/Новая папка/1-misol.py", line 6, in
s = x + 0.1
TypeError: unsupported operand type(s) for +: 'decimal.Decimal' and 'float'
Haqiqatdan ham hatolik yuz berdi.
Sonning kasr qismdagi raqamlar nechta bo’lishini quyidagicha aniqlash mummkin:
import decimal
from decimal import Decimal
x = Decimal('0.1')
s = 3 * x
print(s)
Javob: 0.30
"0.10" satr sonning kasr qismida ikkita belgi bo’lishini ko’rsatadi, agarda oxirgi belgilar nol bo’lsa ham. Mos ravishda "0.100" satr sonning kasr qismida 3 belgi bo’lishini anglatadi.
Decimal obyektlari sonlarni yaxlitlaydigan quantize() metodiga ega. Bu metodning birinchi argumenti sifatida sonning yaxlitlash formatini ko’rsatadigan Decimal obyekti uzatiladi:
import decimal
from decimal import Decimal
x = Decimal('0.444')
s = x.quantize(Decimal('1.00'))
print(s)
Javob: 0.44
import decimal
from decimal import Decimal
x = Decimal('0.555678')
s=x.quantize(Decimal('1.00'))
print(s)
Javob: 0.56
import decimal
from decimal import Decimal
x = Decimal('0.999')
s=x.quantize(Decimal('1.00'))
print(s)
Javob: 1.00
Foydalanilayotgan "1.00" satr sonning kasr qismidagi belgilar soni ikkita belgigacha yaxlitlanishini ko’rsatadi.
Kelishuv bo’yicha ROUND_HALF_EVEN o’zgarmasi soni yuqori tomonga yaxlitlashni anglatadi, agarda son juft bo’lmasa va keyingisi 4 dan katta bo’lsa, masalan:
import decimal
from decimal import Decimal,ROUND_HALF_EVEN
x = Decimal('10.025')
s=x.quantize(Decimal('1.00')),ROUND_HALF_EVEN
print(s)
javobi: (Decimal('10.02'), 'ROUND_HALF_EVEN')
import decimal
from decimal import Decimal,ROUND_HALF_EVEN
x = Decimal('10.035')
s=x.quantize(Decimal('1.00')),ROUND_HALF_EVEN
print(s)
javob: (Decimal('10.04'), 'ROUND_HALF_EVEN')
Bu erda yaxlitlash tartibi quantize() funksiyasiga ikkinchi parametr sifatida uzatilgan. "1.00" satri sonning kasr qismini yaxlitlash ikkita belgigacha bo’lishini anglatadi. Lekin, birinchi holda, "10.025" kasr qismdagi ikkinchi son-2 juft, shuning uchun, keyingi son 5 bo’lishiga qaramasdan, ikki uchga yaxlitlanmayapti. Ikkinchi holda, "10.025" ikkinchi son-3 juft emas, shuning uchun ham 4 ga yaxlitlanayapti.
Bunday yaxlitlashdagi tartib har doim ham foydali bo’lmasligi mumkin, shu sababli ham, quyidagi o’zgamaslardan foydalanish orqali tartibni qayta aniqlash mumkin:
ROUND_HALF_UP – soni yuqori tomonga yaxlitlaydi, agarda undan keyingi son 5 yoki 5 dan katta bo’lsa;
ROUND_HALF_DOWN – soni yuqori tomonga yaxlitlaydi, agarda undan keyingi son 5 dan katta bo’lsa:
import decimal
from decimal import Decimal,ROUND_HALF_DOWN
x = Decimal('10.026')
s=(x.quantize(Decimal('1.00')),ROUND_HALF_DOWN)
print(s)
javob: (Decimal('10.03'), 'ROUND_HALF_DOWN')
import decimal
from decimal import Decimal,ROUND_HALF_DOWN
x = Decimal('10.025')
s=(x.quantize(Decimal('1.00')),ROUND_HALF_DOWN)
print(s)
javob: (Decimal('10.02'), 'ROUND_HALF_DOWN')
ROUND_05UP – faqat 0 ni birga yaxlitlaydi, agarda undan keyin 5 kelsa:
import decimal
from decimal import Decimal,ROUND_05UP
x = Decimal('10.025')
s=(x.quantize(Decimal('1.00')),ROUND_05UP)
print(s)
jabob: (Decimal('10.02'), 'ROUND_05UP')
ROUND_CEILING – keyingi son qanday bo’lishidan qa’tiy nazar soni yuqori tomonga yaxlitlaydi:
ROUND_FLOOR – keyingi son qanday bo’lishdan qa’tiy nazar soni yaxlitlamayadi:
import decimal
from decimal import Decimal,ROUND_FLOOR
x = Decimal('10.021')
s=(x.quantize(Decimal('1.00')),ROUND_FLOOR)
print(s)
javob: (Decimal('10.02'), 'ROUND_FLOOR')
import decimal
from decimal import Decimal,ROUND_FLOOR
x = Decimal('10.025')
s=(x.quantize(Decimal('1.00')),ROUND_FLOOR)
print(s)
javob: (Decimal('10.02'), 'ROUND_FLOOR')
XULOSA
Men ohirgi xulosamda pythoning foydalanish holatlari, xususiyatlati, afzalliklari, moslashuvchanligi va unchalik kata bo’lmagan qisimlari haqisa ma’lumot berish bilan tugatmoqchiman.
Serverda veb-ilovalarni yaratish;
Dasturiy ta'minot bilan birgalikda ishlatilishi mumkin bo'lgan ish oqimlarini yaratish;
Ma'lumotlar bazasi tizimlariga ulanish;
Fayllarni o'qish va o'zgartirish;
Murakkab matematikani bajarish;
Katta ma'lumotlarni qayta ishlash;
Tez prototiplash;
Ishlab chiqarishga tayyor dasturiy ta'minotni ishlab chiqish;
Professional ravishda Python veb-saytlarni ishlab chiqish, ma'lumotlarni tahlil qilish, sun'iy intellekt va ilmiy hisoblash uchun juda yaxshi . Ishlab chiquvchilar Python-dan unumdorlik vositalari, o'yinlar va ish stoli ilovalarini yaratish uchun ham foydalanadilar.
HiWindows, Mac, Linux, Raspberry Pi va boshqalar kabi turli platformalar bilan mos keladi. Ingliz tili bilan taqqoslanadigan oddiy sintaksisdan foydalanadi, bu esa ishlab chiquvchilarga boshqa dasturlash tillariga qaraganda kamroq qatorlardan foydalanish imkonini beradi. Kodni zudlik bilan bajarishga imkon beruvchi tarjimon tizimida ishlaydi, tezkor prototip yaratish. Protsessual, ob'ektga yo'naltirilgan yoki funktsional tarzda ishlov berilishi mumkin.
Python, dinamik ravishda terilgan til, ayniqsa, moslashuvchan bo'lib, xususiyatlarni yaratish uchun qattiq qoidalarni yo'q qiladi va turli usullar bilan muammolarni hal qilishda ko'proq moslashuvchanlikni taklif qiladi. Shuningdek, u foydalanishga dasturlarni muammoli sohaga qadar kompilyatsiya qilish va ishga tushirish imkonini beradi, chunki u kompilyatsiya vaqtini tekshirishdan ko'ra ish vaqti turini tekshirishdan foydalanadi.
Pastki tomondan Python-ni saqlash oson emas. Bitta buyruq kontekstga qarab bir nechta ma'noga ega bo'lishi mumkin, chunki Python dinamik ravishda terilgan tildir. Va Python ilovasining hajmi va murakkabligi oshib borishi bilan uni saqlab qolish, ayniqsa xatolarni topish va tuzatish tobora qiyinlashishi mumkin.
Foydalanuvchilarga texnik xizmat ko'rsatishni osonlashtiradigan kodni ishlab chiqish yoki birlik testlarini yozish uchun tajriba kerak bo'ladi. Tezlik Pythondagi yana bir zaiflikdir. Uning moslashuvchanligi, dinamik ravishda terilganligi sababli, to'g'ri ta'rifga ega bo'lish uchun sezilarli miqdordagi havolalarni talab qiladi va ishlashni sekinlashtiradi. Buni Pythonning muqobil ilovasi (masalan, PyPy) yordamida yumshatish mumkin.
FOYDALANILGAN ADABIYOTLAR
Python dasturlash asoslari -Anvar Narzullayev Toshkent -2021
http://cppstudio.com –Python tilida programmalash bo‘yicha namunalar izoxlari bilan keltirilgan
http://cplusplus.com – Python tilida mavjud konstruksiyalar ta’rifi, ishlatish namunalari bilan keltirilgan.
http://www.compteacher.ru/programming - dasturlash bo‘yicha video darsliklar mavjud.
http://www.intuit.ru – internet universitet, dasturlash bo‘yicha yozma va video ma’ruzalar o‘qish, test sinovlaridan o‘tish va sertifikat olish imkoniyati mavjud.
http://www.metanit.com – Python dasturlash tillari, Django texnologiyasi bo‘yicha ma’ruzalar, dasturlar namunasini olish mumkin.
http://www.ziyonet.uz – dasturlash asoslari bo‘yicha referatlar topish mumkin.
http://www.tami.uz/kitob.php – dasturlash bo‘yicha yozma va video ma’ruzalar o‘qish va kitobni yuklab olish imkoniyati mavjud.
ILOVA
x = 0.1
y = 0.1
z = 0.1
s = x + y + z
print(s)
import decimal
from decimal import Decimal
x = Decimal('0.1')
y = Decimal('0.1')
z = Decimal('0.1')
s = x + y + z
import decimal
from decimal import Decimal
s=Decimal('0.1') + Decimal('0.1') + Decimal('0.1') - Decimal('0.3')
print(s)
import decimal
from decimal import Decimal
x = Decimal('0.1')
s = x + 0.1
print(s)
Do'stlaringiz bilan baham: |