در این قسمت تیم کدگیت را با آموزش تبدیل نوع داده در پایتون (type conversion) همراهی کنید. انواع data type در پایتون وجود دارد که از جمله آن میتوان به int، float، رشتهها، لیست و … اشاره نمود. در پیاده سازیهای مختلف زمانی پیش خواهد آمد که نیاز به تبدیل نوع داده داشته باشید. در این جلسه این گونه تبدیلات را معرفی خواهیم کرد. پیشنهاد میکنیم در صورت تمایل آموزشهای زیر را نیز مطالعه نمایید:
- تابع در پایتون
- دیکشنری در پایتون
- حلقه while در پایتون
- حلقه for در پایتون
- دستور if در پایتون
- لیست در پایتون
تبدیل نوع داده در پایتون
فرض کنید می خواهید برنامهای بنویسید که دو عدد را از کاربر دریافت کند و مجموع آن دو را در خروجی چاپ کند. اگر از دستور input برای دریافت ورودی کاربر استفاده کنیم، اعداد به صورت string یا رشته در اختیار ما قرار می گیرد. به مثال زیر دقت کنید:
a = input('Enter 1st number: ')
b = input('Enter 2nd number: ')
print(a+b)
a و b دو عددی هستند که از کاربر دریافت شدهاند. نوع آنها String می باشد. در درستور پرینت حاصل جمع این دو عدد را محاسبه کردهایم. اگر ورودی 2 و 3 را به کد بالا بدهیم خروجی زیر را دریافت خواهیم کرد:
Enter 1st number:
2
Enter 2nd number:
3
23
حاصل مجموع a و b برابر با 23 شده است که اشتباه است(حاصل جمع در خط آخر می باشد). به این دلیل که دو متغیر a و b از جنس String هستند وقتی عملگر + برای آنها استفاده میکنیم پایتون دو رشته را کنار یکدیگر میچسباند و در خروجی به ما تحویل میدهد. اما چگونه از این محاسبه اشتباه میتوان جلوگیری کرد؟ پاسخ ساده است استفاده از تبدیل یا type conversion!
تبدیل string به int
برای حل مسئله بالا می بایست تبدیل انجام داد. متغیرهای a و b از جنس String هستند و می خواهیم آنها را به int تبدیل کنیم. با کمک دستور ()int می توانیم این تبدیل را انجام دهیم. به کد زیر دقت کنید:
a = int(input('Enter 1st number: '))
b = int(input('Enter 2nd number: '))
print(a+b)
تبدیل متغیرهای a و b با کمک دستور int انجام گردید. خروجی کد بالا به صورت زیر خواهد بود:
Enter 1st number:
2
Enter 2nd number:
3
5
حاصل جمع اعداد 2 و 3 برابر با 5 است(حاصل جمع در خط آخر می باشد). حال با کمک تبدیل نوع دادهها توانستیم کد خود را اصلاح کنیم. اما سوال اینجاست که در پایتون چه تبدیلاتی وجود دارد؟ و چه نوع دادههایی را می توان به یکدیگر تبدیل کرد؟
انواع روش تبدیل نوع داده
حال که با تبدیل نوع داده آشنا شدیم جالب است بدانید که در پایتون دو روش برای این نوع تبدیلهای وجود دارد:
- تبدیل Implicit
- تبدیل Explicit
تبدیل Implicit
تبدیل Implicit به صورت خودکار توسط مفسر پایتون انجام میگیرد و هیچگونه دخالتی توسط ما در انجام تبدیلات انجام نمیگیرد. کد زیر را ببینید:
x = 10
print("x is of type:",type(x))
y = 10.6
print("y is of type:",type(y))
z = x + y
print(z)
print("z is of type:",type(z))
برای اینکه نوع یک متغیر را تشخیص دهیم از دستور ()type استفاده میکنیم. در کد بالا دو متغیر x و y تعریف کرده ایم که به ترتیب از جنس int و float هستند. متغیر z حاصل جمع این دو متغیر است. در خروجی نوع این متغیر را چاپ کردهایم. خروجی کد را با یکدیگر ببینیم:
x is of type: <class 'int'>
y is of type: <class 'float'>
20.6
z is of type: <class 'float'>
z از جنس float است و این تبدیل توسط پایتون به صورت اتوماتیک انجام گردیده است. در حالی که x از جنس int و y از جنس float است. پایتون به صورت اتوماتیک متغیر z را تبدیل به float می کند در صورتی که می تواند از جنس int باشد (یکی از متغیرهای حاصلجمع یعنی x از جنس int است). در چنین حالتی پایتون با توجه به اینکه ممکن است اطلاعاتی حذف شود نوع دادهای را انتخاب می کند که رنج وسیعتری از اعداد را در خود جای دهد. در اینجا float رنج بیشتری از اعداد را در خود جای می دهد و z نیز از این نوع خواهد بود. این نکته را توجه کنید اگر int انتخاب می گردید قسمت اعشاری حاصلجمع حذف می گردید یعنی بجای عدد 20.6 عدد 20 قرار میگرفت (آیا انتخاب پایتون منطقی است؟).
تبدیل Explicit
تبدیل Explicit کاملا به صورت دستی انجام میگیرد و هیچ فرآیند اتوماتیکی توسط پایتون در آن دخالتی ندارد. این نوع تبدیلات بر اساس نیاز توسط ما در کد انجام میگیرد. قسمت اول را به یاد دارید؟ مجبور شدیم یک string را به int تبدیل کنیم. این دقیقاً همین نوع تبدیل است. انواع روش تبدیل explicit به صورت زیر میباشد:
- int(a, base): تبدیل ورودی (هر گونه دیتایی) به integer. ورودی base مبنای عدد می باشد.
- ()float: این نوع تابع هر گونه دیتایی را به float تبدیل میکند.
- ()Ord: این تابع یک کاراکتر را به integer تبدیل می کند.
- ()Hex: اگر بخواهید یک integer را به هگزادسیمال تبدیل کنید از این تابع استفاده کنید.
- ()Oct: جهت تبدیل integer به اکتال می توان از oct() استفاده نمود.
- ()Tuple: برای تبدیل به tuple استفاده می شود
- ()Set: برای تبدیل ورودی به set استفاده می شود
- ()List: تبدیل دیتا به لیست
- ()Dict: اگر می خواهید tuple خود را تبدیل به دیکشنری کنید می توانید از این تابع استفاده نمایید.
- ()Str: تبدیل ورودی به string
- Complex(): تبدیل به اعداد مختلط
توابع بالا هر کدام در زمان خود مورد استفاده قرار خواهند گرفت و اطلاع از آنها برای پیاده سازیها بسیار مفید میباشد.
مثال تبدیل Explicit
مثال اول مربوط به تبدیل int به int، float به Complex و float به int می باشد. به این مثال توجه کنید:
x = 1 # int
y = 2.8 # float
z = 1j # complex
#convert from int to float:
a = float(x)
#convert from float to int:
b = int(y)
#convert from int to complex:
c = complex(x)
print(a)
print(b)
print(c)
print(type(a))
print(type(b))
print(type(c))
خروجی کد بالا به صورت زیر می باشد:
1.0
2
(1+0j)
<class 'float'>
<class 'int'>
<class 'complex'>
در مثال دوم تبدیل string به String، tuple به set و string به list را پیاده سازی میکنیم:
s = 'codegate'
c = tuple(s)
print ("After converting string to tuple : ",end="")
print (c)
c = set(s)
print ("After converting string to set : ",end="")
print (c)
c = list(s)
print ("After converting string to list : ",end="")
print (c)
خروجی کد بالا به صورت زیر است:
After converting string to tuple : ('c', 'o', 'd', 'e', 'g', 'a', 't', 'e')
After converting string to set : {'c', 'g', 't', 'a', 'o', 'e', 'd'}
After converting string to list : ['c', 'o', 'd', 'e', 'g', 'a', 't', 'e']