Tip çevrilmələri

Proqramlaşdırmada bəzən bir tipdə olan məlumatı başqa bir tipə çevirmək lazım gəlir. Hər bir proqramlaşdırma dilində olduğu kimi Python dilində də tip çevrilmələrini həyata keçirən funksiyalar mövcuddur. Bu dərsdə bu funksiyalardan bir neçəsini nəzərdən keçirəcəyik.

int()

Bu funksiya verilən qiyməti int (tam ədəd) tipinə çevirir. Əgər çevrilmə mümkün deyilsə istisna hal qeydə alınır.

>>> int("2015")
2015
>>> int("Salam")
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    int("Salam")
ValueError: invalid literal for int() with base 10: 'Salam'
>>> int(3.9)
3
>>> int(-2.3)
-2
>>> 

Gəlin nümunələri incələyək. Əvvəlcə biz sətir tipində olan “2015” qiymətini tam ədəd tipinə çevirdik. Çevrilmə baş verdi və növbəti sətirdə tam ədəd tipində 2015 qiymətini əldə etdik.

Sonra biz yenə sətir tipində olan “Salam” qiymətini tam ədəd tipinə çevirməyə cəhd etdik. Çevrilmə baş vermədiyinə görə istisna hal qeydə alındı. 

Növbəti misallarda isə biz həqiqi ədəd tipindəki qiymətlərin (3.9-2.3) tam ədəd tipinə çevrilməsini istədik. Bunu həyata keçirən int() funksiyası qiymətlərin kəsr hissəsini atıb tam hissəsini saxladı.

float()

Bu funksiya verilən qiyməti float (həqiqi ədəd) tipinə çevirir. Əgər çevrilmə mümkün deyilsə istisna hal qeydə alınır.

>>> float(32)
32.0
>>> float("5.45")
5.45
>>> float("Kitab")
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    float("Kitab")
ValueError: could not convert string to float: 'Kitab'
>>> 

Gəlin nümunələri incələyək. Əvvəlcə biz tam ədəd tipində olan 32 qiymətini həqiqi ədəd tipinə çevirdik. Çevrilmə baş verdi və növbəti sətirdə həqiqi ədəd tipində 32.0 qiymətini əldə etdik.

Sonra biz sətir tipində olan “5.45” qiymətinin həqiqi ədəd tipinə çevrilməsini istədik. Buna həyata keçirən float() funksiyası növbəti sətirdə bizə həqiqi ədəd tipində 5.45 qiymətini verdi.

Daha sonra biz sətir tipində olan “Kitab” qiymətini həqiqi ədəd tipinə çevirməyə cəhd etdik. Çevrilmə baş vermədiyinə görə istisna hal qeydə alındı.

str()

Bu funksiya verilən qiyməti str (sətir) tipinə çevirir.

>>> str(1978)
'1978'
>>> str(7.62)
'7.62'
>>> 

Nümunələrdən də gördüyünüz kimi str funksiyası verilən tam və həqiqi ədəd tipindəki qiymətləri sətir tipinə çevirir.

Onu da qeyd edim ki, Python dilində tip çevrilmələrini həyata keçirən digər funksiyalar da mövcuddur. Biz onlar haqqında gələcək dərslərimizdə bəhs edəcəyik.

İndi isə daha maraqlı bir proqram üzərində işləyək. Daha öncə yazdığımız iki ədədi toplayan proqramı xatırlayırsınız?

>>> a = 15
>>> b = 20
>>> c = a + b
>>> print(c)
35
>>>

Bu proqram yalnız əvvəlcədən verilən ədədləri toplayırdı. Amma daha yaxşı olardı ki, biz elə bir proqram yazaq ki, o istifadəçinin verdiyi ədədləri toplaya bilsin. Yəni hər bir istifadəçi toplamaq istədiyi ədədləri klaviaturdan özü daxil edə bilsin. Yəgin ki, anladınız. Biz burda qiymətlərin input() funksiyasından istifadə etməklə klaviaturdan daxil edilməsini nəzərdə tuturuq.

O zaman toplama proqramını aşağıdakı kimi yazmalıyıq:

>>> a = input("1-ci ədədi daxil edin: ")
1-ci ədədi daxil edin: 22
>>> b = input("2-ci ədədi daxil edin: ")
2-ci ədədi daxil edin: 33
>>> c = a + b
>>> print("Ədədlərin cəmi: ",c)
Ədədlərin cəmi: 2233
>>>

Gəlin bu proqramı incələyək. Biz burada ab dəyişənlərinə istifadəçinin klaviaturdan daxil etdiyi 2233 qiymətlərini mənimsətdik. Bundan sonra ab dəyişənlərinin qiymətlərini toplayıb nəticəni c dəyişənində saxladıq və onu ekrana çapa verdik. Məntiqlə ekrana cavab kimi 55 çıxmalı idi, amma 2233 çıxdı. Burada semantik xəta baş verdi. Yəni proqram bizim ondan gözlədiyimiz nəticəni vermədi.

Sizcə niyə? Əgər xatırlayırsınızsa input() funksiyasını öyrənərkən qeyd etmişdik ki, bu funksiya çağrıldığı zaman istifadəçi məlumatı daxil edib enter düyməsinə vurduqda funksiya bu məlumatı  str (sətir) tipində özündə saxlayacaq. Deməli istifadəçinin daxil etdiyi 2233 qiymətləri ab dəyişənlərinə əslində “22”“33” kimi ötürülür. Yəni bu qiymətlərin tipi str (sətir) olduğuna görə ab dəyişənlərinin də tipi str (sətir) olacaq. Belə olduğu təqdirdə sətir tipində olan qiymətləri toplayanda onlar birləşdirilmiş (yan-yana gəlmiş) olacaq.

Bəs nə etməli? Axı bizə riyazi toplama lazımdır. Bax elə bu məqamda biz tip çevrilməsini həyata keçirən müvafiq funksiyadan istifadə etməliyik. Konkret olaraq bizə daxil edilən str (sətir) tipində məlumatı int (tam ədəd) tipinə çevirən int() funksiyası lazımdır. Yəni biz str tipində olan ab dəyişənlərinin tipini int olaraq dəyişməliyik.

Deyilənləri nəzərə alaraq toplama proqramında lazımi düzəlişləri edək:

>>> a = input("1-ci ədədi daxil edin: ")
1-ci ədədi daxil edin: 22
>>> b = input("2-ci ədədi daxil edin: ")
2-ci ədədi daxil edin: 33
>>> c = int(a) + int(b)
>>> print("Ədədlərin cəmi: ",c)
Ədədlərin cəmi: 55
>>>

Gördüyünüz kimi biz c = a + b ifadəsini c = int(a) + int(b) ifadəsi ilə dəyişdik. Yəni str tipində olan ab dəyişənlərinin tipini int olaraq dəyişdikdən sonra onları topladıq. Nəticədə ekrana 55 çıxdı.

Biz eyni proqramı aşağıdakı üsulla da yaza bilərdik:

>>> a = int(input("1-ci ədədi daxil edin: "))
1-ci ədədi daxil edin: 22
>>> b = int(input("2-ci ədədi daxil edin: "))
2-ci ədədi daxil edin: 33
>>> c = a + b
>>> print("Ədədlərin cəmi: ",c)
Ədədlərin cəmi: 55
>>>

Burada biz istifadəçinin input() funksiyası ilə daxil etdiyi qiymətləri int() funksiyasından istifadə edərək bir-başa int tipinə çevirib sonra dəyişənlərə mənsub etdik. Bundan sonra ab dəyişənlərini riyazi olaraq toplayıb yenə nəticəni c dəyişənində yadda saxladıq və ekrana çapa verdik.

Tiplər

   Hər bir proqramlaşdırma dilində olduğu kimi Python dilində də verilənlərin və eləcə də istifadə olunan dəyişənlərin tipi olur. Lakin Python dilində dəyişənlərin aşkar şəkildə tiplərini təyin etməyə ehtiyac yoxdur. Belə ki, biz bir dəyişənə müəyyən bir qiyməti mənimsədərkən, Python özü bu qiymətə əsasən dəyişənin tipini təyin edir. Əgər bundan sonra biz bu dəyişənə fərqli tipdə bir qiymət mənimsətsək, Python yenə bunu görəcək və dəyişənin tipini dəyişəcək.

Daha öncə yazdığımız Azərbaycan proqramını xatırlayırsınız?

>>> s1 = "Azərbaycan"
>>> s2 = "Bakı"
>>> n1 = 86.6
>>> n2 = 9600000
>>> print(s1)
Azərbaycan
>>> print(s2)
Bakı
>>> print(n1)
86.6
>>> print(n2)
9600000
>>>

Biz burada s1 s2 dəyişənlərinə sətir tipli məlumat mənimsətdiyimizə görə Python da bu dəyişənlərin tipini str (sətir) tipi olaraq təyin edəcək. Eynilə n1 dəyişəni həqiqi ədəd tipli qiymət aldığı üçün float tipində, n2 dəyişəni də tam ədəd tipli qiymət aldığı üçün int tipində qəbul ediləcək.

  Nəzərinizə çatdırım ki, Python proqramlaşdırma dilində int, floatstr tiplərindən başqa digər tiplər də var və onlar haqqında növbəti dərslərimizdə bəhs edəcəyik.

Tiplərin müəyyən edilməsi

   Bildiyiniz kimi proqramlarda istifadə edilən qiymət və dəyişənlər hökmən bir tipə aid olmalıdır. Bəzən bu verilənlərin hansı tipə mənsub olduğunu öyrənmək lazım gəlir. 

  Bunun üçün type() funksiyasından istifadə olunur:

>>> type("Salam Azərbaycan")
<class 'str'> 
>>> paytaxt = "Bakı"
>>> type(paytaxt) 
<class 'str'> 
>>> n = 9600000 
>>> type(n) 
<class 'int'> 
>>> n = 86.6 
>>> type(n) 
<class 'float'> 
>>>

   Gəlin nümunələri incələyək. Əvvəlcə biz “Salam Azərbaycan” qiymətinin tipini soruşduq. Növbəti sətirdə ekrana bu tipin str (sətir) olduğu haqda məlumat çıxdı. Sonra biz paytaxt dəyişəninə “Bakı” qiymətini mənimsətdik və bu dəyişənin tipini soruşduq. Məlum oldu ki, paytaxt dəyişəni də str tipindədir. Daha sonra biz n dəyişəninə 9600000 qiymətini verib onun tipini müəyyən etdik. Ekrana çıxan məlumatdan gördük ki, n dəyişəni int (tam ədəd) tipindədir. Və nəhayət ən sonda biz həmin n dəyişəninə bu dəfə 86.6 qiymətini mənimsətdik və tipini soruşduq. Bu dəfə məlum oldu ki, n dəyişəni öz tipini dəyişərək indi də float (həqiqi ədəd) tipinə mənsub olub. Bu ona görə baş verdi ki, n dəyişəninə ikinci dəfə qiymət olaraq həqiqi ədəd mənimsətmişdik.