10-bob: Sonlar: butun, haqiqiy hamda kompleks sonlar
Python 3 da quyidagi ko‘rinishdagi sonlar mavjud: butun, haqiqiy va kompleks. Sonlar bilan ish-lash va ular ustida amallarni bajarish.
Butun sonlar (int)
Python 3 dagi sonlar boshqa sonlardan hech qanday farq qilmaydi. Ular ustida eng oddiy matem-atik amallarning barchasini bajarish mumkin:
Operator
|
Ma’nosi
|
|
|
x + y
|
qo‘shish
|
x – y
|
ayirish
|
x * y
|
ko‘paytirish
|
x / y
|
bo‘lish
|
x // y
|
bo‘lish natijasining butun qismi
|
x % y
|
bo‘lish natijasining qoldiq qismi
|
–x
|
sonning ishorasini almashtirish
|
abs(x)
|
sonning moduli
|
divmod(x, y)
|
(x // y va x % y) juftligi
|
x ** y
|
darajaga ko‘tarish
|
pow(x, y [, z])
|
xy modul bo‘yicha (modul ko‘rsatilgan bo‘lsa)
|
Bundan tashqari Python 3 da ko‘plab boshqa daturlash tillaridan farqli ravishda uzun sonlar arif-metikasi ham mavjud (lekin bu xotira sarfini oshiradi).
10
6.666666666666667
6
2
81
81
0
369988485035126972924700782451696644186473100389722973815184405301748
249
28
Bitli operatsiyalar
Bundan tashqari, butun sonlar ustida bitli amallarni ham bajarish mumkin:
Operator
|
Ma’nosi
|
|
|
x | y
|
bitli yoki
|
x ^ y
|
bitli boshqasini inkor etuvchi yoki
|
x & y
|
bitli va
|
x << y
|
bitli chapga siljish
|
x >> y
|
bitli o‘ngga siljish
|
~ x
|
bitlar inversiyasi
|
Qo‘simcha metodlar
int.bit_length() — ishora va boshidagi nollarni hisobga olmagan holda sonni ikkilik sanoq tizimida tasvirlash uchun kerakli bitlar soni.
for i in 'hello world': if i == 'o':
break
print(i * 2, end='')
hheellll
int.to_bytes(length, byteorder, *, signed=False) – shu sonni tasvirlaydigan baytlar satrini qaytaradi.
(1024).to_bytes(2, byteorder='big') b'\x04\x00'
(1024).to_bytes(10, byteorder='big') b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00'
(-1024).to_bytes(10, byteorder='big', signed=True) b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00'
x.to_bytes((x.bit_length() // 8) + 1, byteorder='little') b'\xe8\x03'
int.from_bytes(bytes, byteorder, *, signed=False) classmetodi – shu baytlar satridagi son-ni qaytaradi.
int.from_bytes(b'\x00\x10', byteorder='big')
16
int.from_bytes(b'\x00\x10', byteorder='little') 4096
int.from_bytes(b'\xfc\x00', byteorder='big', signed=True) -1024
29
int.from_bytes(b'\xfc\x00', byteorder='big', signed=False) 64512
int.from_bytes([255, 0, 0], byteorder='big')
16711680
Sanoq tizimlari
Maktabda “Informatika” fanidan saboq olganlar sonlar 10 lik sanoq tizimidan boshqa tizimlarda ham tasvirlanishi mumkinligini yaxshi biladi. Masalan, kompyuterda 2 lik sanoq tizimidan foydal-aniladi, masalan, 19 soni ikkilik sanoq tizimida 10011 ko‘rinishda bo‘ladi. Bundan tashqari, ba’zan sonlarni bir sanoq tizimidan boshqasiga o‘tkazishga ham to‘g‘ri kelishi mumkin. Pyhtonda buning uchun bir nechta funksiyalar mavjud:
int([object], [sanoq tizimi asosi]) – 10 lik sanoq tizimidagi butun songa aylantirish. Boshqa ko‘rsatma berilmasa, sanoq tizimi 10 lik deb qaraladi, lekin, 2 likdan 36 lik sanoq tizimlarigacha ko‘rsatish ham mumkin.
bin(x) – butun sonni 2 lik sanoq tizimidagi satrga aylantirish.
hex(x) – butun sonni 16 lik sanoq tizimidagi satrga aylantirish.
oct(x) – butun sonni 8 lik sanoq tizimidagi satrga aylantirish.
Misollar
a = int('19') # satrni songa aylantiramiz
b = int('19.5') # Satr butun son emas Traceback (most recent call last):
File "", line 1, in
ValueError: invalid literal for int() with base 10: '19.5'
c = int(19.5) # Kasr songa nisbatan qo‘llanilganda uning kasr
qismini kesib tashlaydi.
'0b10011'
0b10011 # Sonli o‘zgarmaslar (konstantalar)ni shunday ko‘rinishda ham yozish mumkin
19
19
19
30
Haqiqiy sonlar (float)
Haqiqiy sonlar bilan ham butun sonlar bilan bajarish mumkin bo‘lgan barcha amallarni bajarish mumkin. Lekin (kompyuterda sonlarning tasvirlanish metodlari sababli) haqiqiy sonlar unchalik aniq emas va bunday holat ayrim xatoliklarga olib kelishi mumkin.
0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 0.9999999999999999
Aniqroq hisob-kitoblar uchun boshqa obyektlar qo‘llaniladi (masalan, Decimal va Fraction). Bun-dan tashqari, haqiqiy sonlar bilan ishlaganda, uzun sonlar imkoniyati qollanilmaydi.
Traceback (most recent call last):
File "", line 1, in
OverflowError: int too large to convert to float
Do'stlaringiz bilan baham: |