Ma’lumot tipini o’zgartirish
Oldingi mavzudan bialsizku Pythonda turlar dinamikdir. O’zgaruvchiga qiymat o’zlashtirilgach unda obyekt emas balki, aniqlagan turdagi obyektga havola saqlanadi. Agar keyin o’zgaruvchiga boshqa turdagi qiymat o’zlashtiriladigan bo’lsa, o’zgaruvchi endi unga mos turdagi boshqa obyektga havola saqlaydi. Pythondagi shu tarzdagi ma’lumot turi bu o’zgaruvchining emas, obyektning tavsifidir. O’zgaruvchi faqat o’zida obyektga havloni saqlaydi.
O’zgaruvchiga qiymat o’zlashtirilgach o’zgaruvchi o’zlashtirilgan qiymat turiga mos amallarni bajarishi mumkin bo’ladi. Masalan, satr o’zgaruvchisiga son o’zgaruvchisini qo’shish mumkin emas va bu quyidagicha xatolik keltirib chiqaradi:
>>> 2 + "2511"
Traceback (most recent ca ll last ) :
File 11
11, line 1, in
2 + “25”
TypeError: unsupported operand type (s) for +: 'int' and 'str '
Quyidagi funksiyalar ma’lumotlar turii o’zgartirish uchun mo’ljallangan:
bool([]) - obyektni mantiqiy turga o’zgartiradi. Masalan :
>>> bооl(0) , bool (l) , bool (" ") , bооl (“Satr”), bool ([ l, 2] ), bool ([ ])
(False, True, False, True, True, False)
int ([ [, ] ] ) – obyektni songa o’zgartiradi. Ikkinchi parameter sifatida sanoq sistemasii ko’rsatish mumkin. (agar ko’rsatilmasa 10 lik sanoq sistemasi deb hisoblanadi). Masalan:
>>> int(7. 5), int ("71" )
(7, 71)
>>> int ("71", 10) , int ("71", 8) , int ("0071", 8) , int ("A" , 16)
(71, 57, 57, 10)
Agar o’tkazishga imkon bo’lmasa, istisni haqida habar beriladi:
>>> int ("7ls")
Traceback (most recent call last ) :
File "
" , line 1, in
int ("71s")
ValueError: invalid literal for int () with base 10: '7ls'
float ( [] ) - butu son yoki satrni haqiyqiy (suzuvchi vergulli) songa o’tkazadi. Masalan:
>>> float (7) , float ("7. l")
(7.0, 7.1 )
>>> float ("Infinity"), float ("-inf")
(inf, -inf )
>>> float ("Infinity") + float ("-inf" )
nan
str ([]) - Obyektni satrga o’tkazadi. Masalan:
>>> str (125), str( [l, 2, 3] )
('125', '[1, 2, 3] ')
>>> str( (l , 2, 3) ), str ({" x" : 5, "у" : 10 })
(' (1, 2, 3) ', "{ 'у ' : 10, 'х' : 5) ")
>>> str (bytes("satr" , "utf-8 ") )
"b'\\xd1\\x81\\xdl\\x82\\xdl\\x80\\xd0\\xbe\\xd0\\xba\\xd0\\хb0'"
>>> str(bytearray("satr", "utf-8 "))
"bytearray (b'\\xdl \\x81\\xdl \\x82\ \xdl \\x80\ \xd0\ \xbe\ \xd0\\хbа\\хd0\\хb0 ')"
str ([, [, ]]) - bytes yoki bytearray turidagi obyektni satrga o’tkazish. Uchnchi parameter sifatida "strict", "replace " yoki "ignore " lardan birini berish mumkin. Masalan:
>>> objl = bytes ("1-satr", "utf- 8 ")
>>> obj2 = bytearray ("2-satr", "utf- 8")
>>> str (objl, "utf- 8") , str (obj2, "utf- 8")
('1-satr', '2-satr ')
>>> str(objl, "ascii ", "strict" )
Traceback (most recent call last):
File "
" , line 1, in
str (objl, "ascii ", "strict" )
Uni code DecodeError : 'ascii ' codec can 't decode byte
Oxdl in position 0: ordinal not in range (1 28)
>>> str (objl, "ascii", "ignore")
'1'
bytes (, [, ]) - satrni bytes tutidagi obyektga o’tkazish. Uchnchi parameter sifatida "strict " (odatiy qiymaat), "replace" yoki "ignore" ni ko’rsatish mumkin.
Masalan:
>>> bуtеs ("satr", "ср1251")
b' \xfl \xf2\xf0 \xee\xea\xe0'
>>> bуtеs ("satr123", "ascii", "ignore" )
b'123 '
Misol sifatida foydalanuvchi tomonidan kiritilgan ikki soni qo’shish masalasini ko’rib chiqaylik
2.4-misol. Ma’lumot kiritish va natija olish
# -*- coding: utf-8 -*-
х = input ("х=") # 5 ni kiritamiz
у = input ("у=") # 12 ni kiritamiz
print (х + у)
input ()
Ushbu dastur natijasini olsak “512” chiqadi. Chunki input() funksiyasi natija sifatida satri qaytaradi. Agar bu sonlar yig’indisini olishni hoxlasak ularni son turiga o’tkazish kerak (2.5-misol)
2.5-misol. Satrni songa o’tkazish
# -*- coding: utf-8 -*-
х = int (input ("х=")) # 5 ni kiritamiz
у = int (input ("у=")) # 12 ni kiritamiz
print (х + у)
input ()
Bu dastur natijasi 17 bo’ladi. Biroq foydalanuvchi son o’rniga satr kiritsa, xatolik kelib chiqadi. Bu xatolikni qayta ishlashni biz keyinroq ko’rib chiqamiz.
Do'stlaringiz bilan baham: |