• تمرین عملی | تابع ( )type و type conversion
در جلسه سوّم از فصل سوّم این دوره، مثل همیشه وارد محیط جوپیتر نوتبوک شدیم و بهصورت عملی با تابع type در پایتون کار کردیم. در ادامه این جلسه نیز برای درک عمیقتر موضوع type conversion در پایتون، چندین مثال مختلف را باهم پیادهسازی کردیم.
🔸کارکردن با تابع ( )type در پایتون
اگر بخواهیم که نوع یک داده را در پایتون تشخیص دهیم، پایتون یک تابع داخلی بهنام type را در اختیارمان قرار دادهاست. برای تشخیص نوع یک داده کافیست که آبجکت موردنظر را بهعنوان ورودی به تابع type بدهیم تا بهعنوان خروجی نوع داده موردنظر را دریافت کنیم. به مثال زیر توجه کنید.
در مثال بالا، در متغیّر my_int، عددصحیح 5 ذخیره شدهاست. و در خط این متغیّر بهعنوان ورودی به تابع type پاس دادهشد و خروجی آن بهعنوان ورودی به تابع print دادهشد تا خروجی در صفحه نمایشگر نشان دادهشود. پس از اجراءشدن قطعه کُد بالا، خروجی int را مشاهده خواهیم کرد که نشان میدهد در داخل my_int یک عدد صحیح ذخیره شدهاست.
🔸 یک مثال چالشیتر
اجازه دهید با نوشتن قطعه کد زیر کمی شما را به چالش بکشیم. بهنظر شما بعد از اجراءشدن قطعه کُد زیر خروجی نهایی چه خواهد بود؟
ممکن است حدس زدهباشید که خروجی نهایی از جنس عدد اعشاری یا float است. امّا نکتهای که احتمالاً فراموش کردید که بهآن دقت کنید این است که عدد 3.1415 درنهایت در داخل سینگل کوتِیشن (‘ ‘) قرار گرفتهاست. و زمانی که هر آبجکتی در داخل سینگل / دابِل کوتِیشن قرار بگیرد برای پایتون بهصورت رشتهکارکتر یا استرینگ ترجمه میشود. به بیانی دیگر؛ پایتون با ‘3.1415’ بهصورت یک عدد برخورد نمیکند بلکه جنس آن بهصورت متن (text – string) درنظر میگیرد. بنابراین درآخر با اجرای کُد؛ خروجیِ str را دریافت خواهیم کرد.
🔸کارکردن با مفهوم type conversion در پایتون
در زبان پایتون این امکان برای ما فراهم شدهاست که در صورت لزوم، انواع دادههای مختلف را (در صورت امکان) به یکدگیر تبدیل کنیم. به این عمل در برنامهنویسی اصطلاحاً type conversion یا type casting گفته میشود. مجدداً تاکید میکنم که امکان تبدیل دادهها به هم در صورت ممکن بودن قابل اجرا است.
🔸 تبدیل عددصحیح به عدد اعشاری
در پایتون با استفاده از تابع داخلی ( )float میتوانیم دادههای مختلف را به عدد اعشاری تبدیل کنیم. در این مثال قصد داریم تا عددصحیح 5 را به عدد اعشاری 5.0 تبدیل (convert) کنیم. به مثال زیر توجه کنید.
با اجراءشدن کُد بالا عددصحیح 5، با استفاده از تابع float به عدد اعشاری 5.0 تبدیل (convert) به این مفهوم type conversion یا تبدیل از یک نوع به نوعی دیگر گفته میشود.
🔸تبدیل متن به عدد اعشاری
در پایتون با استفاده از تابع داخلی ( )float میتوانیم دادههای مختلف را به عدد اعشاری تبدیل کنیم. در این مثال قصد داریم تا رشته کارکتر ‘3.1415’ را به عدد اعشاری3.1415 تبدیل (convert) کنیم. به مثال زیر توجه کنید.
همانطور که از مثال بالا مشخص شد، با استفاده از مفهوم type conversion در پایتون توانستیم متن یا استرینگ ‘3.1415’ را به عدد اعشاری 3.1415 تبدیل (convert) کنیم. امّا ممکن است در این لحظه این سوال برایتان ایجاد شود که اصلا چه نیازی به انجام چنین تبدیلی بود؟ و از همان استرینگ ‘3.1415’ در طول کُدنویسی خود استفاده میکردیم! اجازه دهید تا جواب این سوال را با نوشتن یک کُد ساده توضیح دهیم. به قطعه کُد زیر توجه کنید.
بعد از اجراءشدن قطعه کُد بالا در پنجره خروجی، خطای TypeError دریافت کردیم. این خطا میگوید که؛ امکان چسباندنِ یک استرینگ (concatenate) به یک عدد صحیح (int) وجود ندارد! به بیان دیگر؛ نمیتوان دادهای که از جنس متن (str) هست را با دادهای که از جنس عدد هست، جمع نمود. برای رفع این خطا نیاز هست تا دادهای که بهصورت متن ذخیره شدهاست را به عدد تبدیل (convert) کنیم.
لازم به توضیح است که درباره مفهوم string concatenation که در متن خطا مشاهده کردیم در فصل ششم این دوره که درباره استرینگها است صحبت خواهیم کرد. به قطعه کُد اصلاحشده زیر دقت کنید.
در خط سوّم با تبدیل رشتهکارکتر ‘3.1415’ به عدد اعشاری 3.1415 و ذخیرهکردن مجدّد آن در متغیّر my_number، حالا میتوانیم از اُپراتور جمع (+) بر روی آن استفاده کنیم و عدد 5 را به آن اضافه کنیم و خروجی 8.1415 را دریافت نماییم.
🔸 هر تبدیلی ممکن نیست!
درنهایت توجه داشتهباشید که نمیتوان هر تبدیلی را در پایتون انجام داد. تبدیل موردنظر بایستی از لحاظ منطق برنامهنویسی (programming logic) قابل پیادهسازی باشد. یعنی چی؟ اجازه بدید که با نوشتن یک قطعه کُد این مورد را توضیح بدهم. به مثال زیر توجه کنید.
در قطعه کُد بالا در خط پنجم، خواستیم تا استرینگ ” با استفاده از تابع int به عددصحیح 28 تبدیل نماییم تا در آینده بر روی آن محاسبات مربوط را انجام دهیم. امّا نکتهای که به آن دقّت نکردیم این است که استرینگ ” دارای یک کارکتر غیرعددی (نماد $) است. طبیعتاً ازمنظر منطق برنامهنویسی نمیتوان کارکتری که غیرعددی (non-numeric) هست را به یک عدد تبدیل کرد! بههمین دلیل است که پس از اجرای چنین کُدی در پایتون خطای ValueError خواهیم گرفت.
🔸 اختیاری : رفع خطای بالا!
قطعه کُدی که در ادامه خواهید دید جزء موضوعات فصل ششم این دوره است و نیازی نیست که با جزئیات به آن بپردازید. ( در این لحظه؛ در حال چیدن آجرهای اولیه برای این دوره هستیم) این خطا را میتوان به چند روش حل کرد که در ادامه یکی از این روشها را استفاده کردیم.
🔸ارزیابی شما
پس از اجراءشدن قطعه کُد زیر، خروجی نهایی به چه صورت خواهد بود؟ (حتماً کُد را نوشته و جواب خود را مقایسه کنید! علّت این خطا چیست؟)
قطعه کُد اوّل :
قطعه کُد دوّم :
خروجی هر کدام از قطعه کدهای بالا را با علّت در قست دیدگاههای این جلسه وارد نمایید.
2 دیدگاه. ارسال دیدگاه جدید
با سلام
قطعه کد اول:
print(int(‘3.14’)) —-> ValueError
قطعه کد دوم:
print(float(‘3.14’)) —-> 3.14
راه حل ٍError قطعه کد اول:
print(int(float(‘3.14’))) —-> 3
با عرض سلام خدمت شما دانشجوی گرامی
از مشارکت شما سپاسگزارم
قطعه کُد شما کاملا درست است.