فرض کنیم بهطور تصادفی به سناریویی برخورد کردیم که در طول آن باید عملیات ریاضی بر روی دادهها انجام دهیم. اما دادههای در دسترس، از نوع داده رشته در پایتون هستند. Integer-ها بهطور کامل از جنس عدد هستند. به عبارت دیگر هیچ قسمت اعشاری در این اعداد وجود ندارد. دو نوع داده در پایتون که میتوانند این شکل از اعداد را در خود ذخیره کنند، نوع دادههای «int | Integer» و «str | String» هستند. یعنی ممکن است در برنامهای اعداد صحیح را بهصورت String در دست داشته باشیم. مخصوصا در برنامههایی که دادهها را از کاربر دریافت میکنیم. بنابراین برای پیادهسازی بسیاری از برنامهها و استفاده از اعداد صحیح نیاز به تبدیل رشته به عدد در پایتون داریم. در این نوع از مسائل، پایتون به برنامهنویس کمک میکند. سیستم تبدیل نوع دادهی کاربرپسند و منعطف پایتون به برنامهنویسان کمک میکند که وظایف مربوط به کار با دادهها را به آسانی انجام دهند.
در این مطلب از مجله فرادرس، راهنمای جامع و کاملی برای اجرای عملیات تبدیل رشته به عدد در پایتون فراهم کردهایم. در طول این مطلب، تمام مراحل پردازش را راهنمایی کردهایم. مشکلات احتمالی را نشان دادیم و راه حلهایی را برای مدیریت این مشکلات ارائه دادهایم.
چگونه نوع داده رشته را در پایتون به عدد صحیح تبدیل کنیم؟
پایتون تابع «درونی» (Built-In) به نام int()
دارد که برای تبدیل نوع داده String به نوع داده Integer استفاده میشود. اگر میخواهید مراحل مقدماتی پایتون را یاد بگیرید، مشاهده فیلم آموزش مقدماتی پایتون فرادرس که لینک آن در زیر آمده را پیشنهاد میکنیم.
برای مثال به کد زیر نگاه کنید.
1number_string = '123'
2number_int = int(number_string)
3print(number_int)
4# Output: 123
این کد خروجی 123
را به صورت عدد صحیح بر میگرداند. اگرچه که این متدی پایهای و ساده است اما میتوانید برای گرفتن اطلاعات درباره تکنیکهای پیشرفتهتر، مشکلات احتمالی و روشهای جلوگیری از این مشکلات به ادامه مطلب توجه کنید.
تبدیل کردن رشته ها به اعداد صحیح
تابع درونی int()
در پایتون برای تبدیل رشته به عدد صحیح سازگار شده است. با مثال سادهای از کار با این تابع، مطلب را ادامه میدهیم.
1number_string = '123'
2number_int = int(number_string)
3print(number_int)
در مورد بالا رشته ‘123’
را با استفاده از تابع int()
به عدد صحیح تبدیل کردیم. خروجی متغیر number_int
برابر با 123
است. اما این 123
از نوع اعداد صحیح است و نه از نوع رشته.
مدیریت خطا
تابع درونی int()
بسیار شفاف و موثر عمل میکند. هر چند این تابع نیز در معرض بعضی از خطرها قرار دارد. مثال آمده پایین را در نظر بگیرید.
1number_string = '123a'
2number_int = int(number_string)
3print(number_int)
در این مثال، اجرای کد باعث بروز خطای ValueError
میشود. متن کامل خطا به شکل زیر است.
ValueError: invalid literal for int() with base 10: '123a'
تابع int()
فقط میتواند رشتههایی را تبدیل کند که نماینده مقدار متناظر یک رقم معتبر از اعداد باشند. در این مثال خطای ValueError
به همین علت ایجاد شده است. میتوان گفت که در مورد این مثال، رشته ‘123a’
از نوع اعداد معتبر نیست از این رو اجرای برنامه منجر به بروز خطا میشود.
این اتفاق بر اهمیت زیاد مدیریت خطا در عملیات مربوط به تبدیل نوع دادهها اشاره میکند. برای پیشگیری از بروز چنین خطاهایی میتوانیم از بلاک try/except
برای در نظر گرفتن احتمال بروز خطای ValueError
و مدیریت مناسب این خطا استفاده کنیم.
به کدی که در ادامه آمده توجه کنید. در این کد مثالی درباره استفاده از بلاک try/except
میبینید.
1try:
2 number_int = int(number_string)
3except ValueError:
4 print('Invalid integer')
الان در این کد در عوض اینکه برنامه دچار کرش شود پیغام Invalid Integer
به کاربر در خروجی نمایش داده میشود. سپس برنامه به اجرا کدهای باقی مانده ادامه میدهد.
در پایین مثالی از بلاک try/except
میبینید. در این مثال عدد صحیح معتبری را برنامه دریافت کرده است.
1try:
2 number_string = '123'
3 number_int = int(number_string)
4 print(number_int)
5except ValueError:
6 print('Invalid integer')
خروجی برنامه بالا عدد صحیح 123
است.
وقتی که برنامه درحال خواندن داده ورودی از کاربر یا فایلی باشد همیشه این احتمال وجود دارد که داده دریافت شده از نوع دادهی مورد انتظار نباشد. در چنین مواردی داشتن مهارت در تبدیل نوع داده و مدیریت خطاها میتواند از بروز خطاهای غیر منتظره پیشگیری کند. استحکام و قابلیت اطمینانپذیری برنامه را نیز به میزان زیاد افزایش میدهد.
چطور در پایتون حرفهای تر شویم؟
در صورتی که در مراحل اولیه آشنایی نسبت به زبان برنامهنویسی پایتون هستید، وبسایت آموزشی فرادرس فیلمهای خوبی از دورههای مختلف برای آموزش پایتون فراهم کرده است. این دورههای آموزشی میتوانند مهارتهای سطح مبتدی، متوسط و حرفهای را بهخوبی به هر دانشآموزی آموزش دهند. دروههای که در ادامه آمدهاند بیشتر مناسب افراد مبتدی هستند.
اما در صورتی که با زبان برنامهنویسی پایتون آشنایی اولیه را دارید. پس میتوانید برای حرفهایتر شدن در برنامهنویسی پایتون به عنوان نمونه به دورههای زیر سر بزنید.
تکنیک های تبدیل نوع داده پیشرفته در پایتون
در حالی که تبدیل کردن ارقام رشته به نوع داده عدد صحیح در پایتون کار بسیار سادهای است، در سناریوهای دنیای واقعی اغلب با عملیات تبدیل پیچیدهتری روبهرو هستیم. در ادامه مطلب بهصورت عمیقتری به قلمرو عملیات تبدیل دادهها در پایتون پرداختهایم.
تبدیل کردن اعداد ممیز دار و اعشاری | Floating-Point Numbers
سناریویی را تصور کنید که در این سناریو رشتهای در اختیار دارید. رشته مورد نظر، مقدار متناظر «عدد اعشاری» (Floating-Point) مانند ‘123.45’
است و میخواهیم که این کاراکترهای رقمی را به عدد صحیح تبدیل کنیم. به کد زیر نگاه کنید. در این کد اجرای این عملیات را با استفاده از تابع int()
نمایش دادهایم.
1number_string = '123.45'
2number_int = int(number_string)
3print(number_int)
خروجی حاصل از اجرای کد بالا خطای ValueError
را نشان میدهد و پیغامی به شکل زیر را بر میگرداند.
ValueError: invalid literal for int() with base 10: '123.45'
برگشت داده شدن خطا به دلیل این است که تابع int()
فقط میتواند رشتههایی را به عدد تبدیل کند که حاوی کاراکترهای خاصی باشند. این کاراکترها مقدار متناظر رقمهای اعداد صحیح هستند و رشته ‘123.45’
از این نوع رشتهها نیست.
راه حل چنین مسئلهای این است که اول از همه رشته را به نوع داده Float در پایتون تبدیل کنیم. بعد از آن نوع داده Float را به نوع داده Integer تبدیل میکنیم. نمونه پیادهسازی این راه حل را در کد زیر میبینید.
1number_string = '123.45'
2number_float = float(number_string)
3number_int = int(number_float)
4print(number_int)
5# Output: 123
الان خروجی برنامه بالا برابر با مقدار 123
است. به این نکته توجه کنید که تابع int()
فقط قسمت اعشاری عدد را حذف میکند و کاری به رند کردن عدد به سمت بالا، پایین یا نزدیکترین عدد صحیح ندارد.
تبدیل کردن رشته هایی که نماینده اعداد مرکب هستند
پایتون این توانایی را دارد که با اعداد مرکب هم کار کند. تبدیل کردن رشته به عدد در پایتون نیز شامل این قاعده میشود. اما با این وجود نیز هر تلاشی برای تبدیل کردن رشتهای که برابر با مقدار متناظر عدد مرکبی باشد به عدد صحیح منجر به بروز خطای ValueError
میشود.
به کد پایین برای تبدیل رشته عدد مرکب با استفاده از تابع int()
، توجه کنید.
1number_string = '1+2j'
2number_int = int(number_string)
3print(number_int)
خروجی کد بالا حاوی خطای ValueError
خواهد بود. برای این که با این مسئله مقابله کنیم میتوانیم از تابع complex()
برای تبدیل کردن رشتهها به عدد مرکب استفاده کنیم.
در کد پایین مثالی از استفاده تابع complex()
را پیادهسازی کردهایم.
1number_string = '1+2j'
2number_complex = complex(number_string)
3print(number_complex)
اکنون خروجی کد بالا برابر با مقدار (1+2j)
میشود.
در کد پایین ادامه برنامه بالا را نمایش دادهایم. در این کد تلاش کردیم که عدد مرکب بدست آمده را به نوع داده عدد صحیح تبدیل کنیم. البته در کد زیر برای مدیریت مناسب خطا از بلاک try/except
استفاده کردیم.
1try:
2 number_int = int(number_complex)
3 print(number_int)
4except TypeError:
5 print('Cannot convert complex number to integer')
خروجی کد بالا حای پیغام زیر خواهد بود. این پیغام به معنی این است که عدد مرکب را نمیتوان با استفاده از تابع int()
به نوع داده عدد صحیح تبدیل کرد.
Cannot convert complex number to integer.
اگر در ابتدای کار با زبان برنامهنویسی پایتون هستید، جایی برای نگرانی نیست. میتوانید در فرادرس فیلم آموزشی مخصوص نصب پایتون در ویندوز بهصورت رایگان فرادرس را ببینید. بعد از آن نیز میتوانید با دوره رایگان برنامه نویسی سریع و آسان با پایتون در فرادرس قدمهای اولیه خود را در دنیای پایتون بهصورت دقیق و حساب شده بگذارید و از کدنویسی خود لذت برید.
تبدیل نوع داده، اصلی بسیار مهم درباره کار با داده های پایتون
تبدیل انواع داده به یکدیگر مانند تبدیل رشته به عدد در پایتون بخش مهمی از تواناییهای لازم برای کار با دادهها است. همانطور که بررسی کردیم، پایتون چندین تابع «درونی» (Built-In) مختلف مانند int()
و str()
و float()
و complex()
را برای تبدیل انواع داده از نوعی به نوع دیگر ارائه داده است. این توابع، فرایند بسیار سادهای را برای تبدیل انواع داده فراهم کردهاند که باعث شده پایتون به گزینه بسیار منعطف و کارآمدی برای کار با دادهها تبدیل شود.
سناریویی را در نظر بگیرید، در این سناریو در حال کار با مجموعه دادههایی هستید که شامل ستونی برای نگهداری تاریخ است. در این ستون دادههای مربوط به تاریخ را با نوع داده رشتهای نگهداری میکنند. برای «تحلیلهای سری زمانی» (Time-Series Analysis) نیاز دارید که دادههای این ستون را به «شی نوع داده زمان» (Datetime Object) تبدیل کنید. ماژول Datetime در پایتون به برنامهنویسان در انجام چنین مسائلی کمک میکند.
یا تصور کنید ستونی از اعداد صحیح در اختیار داریم که باید دادههای این ستون را به دستهبندیهای مختلف تقسیم کنیم. برای انجام این کار میتوانیم از کتابخانه Pandas کمک بگیریم. کتابخانه Pandas تابع cut()
را ارائه میدهد. این تابع دادههای عددی را بر اساس محدودههای مشخص شده، به دستهبندیهای مختلف تبدیل میکند. البته پیشتر نیز در مجله فرادرس راجع به کتابخانه Pandas صحبت کردهایم و میتوانید مطلب مربوط به کتابخانه Pandas را مطالعه کنید.
در کد زیر مثالی درباره استفاده از تابع cut()
ارائه شده است. این تابع را باید از کتابخانه pandas
ایمپورت کرد. در این مثال از تابع cut()
برای تبدیل دادههای عددی به دادههای دستهبندی شده استفاده کردهایم.
1import pandas as pd
2
3# Create a list of ages
4ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]
5
6# Create bins
7bins = [18, 25, 35, 60, 100]
8
9# Use cut to categorize ages
10categories = pd.cut(ages, bins)
11
12print(categories)
کد بالا در خروجی، شی دستهبندی شدهای را بر میگرداند که نشان میدهد هر سنی در کدام محدوده قرار گرفته است.
درک پیشرفته تر نوع داده های پایتون
در پایتون هر مقداری نوع خاصی دارد و این نوعهای مختلف و خاص، کل عملیاتی را که میتوانید بر روی این مقادیر انجام دهید تحت کنترل دارند. در ادامه مطلب، بهصورت عمیقتری به کاوش درباره نوع دادههای مختلف پایتون خواهیم پرداخت. البته اولویت تمرکز بر روی رشتهها و اعداد صحیح است.
رشته در پایتون صفی از کاراکترها است. رشتهها بر اثر محصور شدن صف کارکترها در میان علامتهای کوتیشن-یگانه یا دوگانه- به وجود میآیند. برای نمونه ‘Hello, World!’
از نوع داده رشته است. از سوی دیگر، عدد صحیح، عدد کاملی است که قسمت اعشاری ندارد. برای مثال 123
عدد صحیح است.
نوعهای داده، نقشی اساسی در پایتون ایفا میکنند. زیرا این نوعهای داده هستند که انواع مختلف عملیات قابل اجرا را بر روی مقادیر تعیین میکنند. برای نمونه در حالی که میتوانید دو عدد صحیح را با یکدیگر جمع ببندید، تلاش برای جمع کردن دادهای از نوع عدد صحیح با رشته منجر به بروز خطای TypeError
میشود.
«تبدیل نوع» (Type Conversion | Type Casting) فرایندی است که در طول آن مقداری از نوع داده خاصی به نوع داده دیگری تبدیل میشود. تبدیل رشته به عدد در پایتون نیز زیر مجموعهای از این نوع عملیات است. زبان برنامهنویسی پایتون توابع خاصی را مانند int()
و str()
و float()
و complex()
بهطور اختصاصی برای انجام این عملیات ارائه داده است.
ویژگی تعیین خودکار نوع داده در پایتون
پایتون زبانی است که بهصورت خودکار نوع مخصوص هر داده را تشخیص میدهد و ویژگیهای آن نوع را به داده یا متغیر حاوی داده تخصیص میدهد. در واقع مفسر پایتون نوع داده هر متغیر را در زمان اجرای برنامه تشخیص میدهد.
جدول زیر نوع دادههای رایج پایتون را نمایش میدهد.
نوع داده | تعریف نوع داده |
Int | کل عدد به غیر از قسمت اعشار |
Float | عددی که شامل قسمت اعشار نیز است. |
Str | صفی از کاراکترها که درون علامت کوتیشن محصور شده است. |
Bool | مقداری که فقط شامل یکی از دو مقدار False یا True میشود. |
Complex | عددی که شامل عناصر حقیقی و موهومی میشود. |
به کد زیر توجه کنید. در کد زیر روش شناسایی نوع داده مقادیر مختلفی را درون متغیری یکسان، نمایش دادهایم.
1x = 'Hello, World!'
2print(type(x))
3
4x = 123
5print(type(x))
در کد بالا متغیر x
در ابتدا بهصورت رشته مقداردهی میشود و سپس به نوع عدد صحیح تغییر داده میشود. در این کد از تابع type()
برای بررسی نوع داده متغیر استفاده شده است.
فلسفه پایتون – درخواست بخشش آسانتر از درخواست اجازه است
درباره مبحث تبدیل نوع داده، فلسفه پایتون «درخواست بخشش آسانتر از درخواست اجازه است» به این نکته اشاره دارد که بیشتر اوقات بهتر است برای اجرای عملیات تبدیل تلاش کنیم و در عین حال اقدامات لازم برای مدیریت خطاهای احتمالی را نیز انجام دهیم، بهجای اینکه از قبل امکانپذیر بودن تبدیل را بررسی کنیم. این دقیقا جایی است که سیستمهای مدیریت خطای پایتون مانند بلاکهای try/except ارزش خود را ثابت میکنند.
در کد پایین نمونهای از تلاش برای اجرای عملیات تبدیل نوعهای داده را به همراه مدیریت خطاهای احتمالی پیادهسازی کردهایم.
1try:
2 number_string = '123.45'
3 number_int = int(number_string)
4 print(number_int)
5except ValueError:
6 print('Cannot convert string to integer directly')
7 number_float = float(number_string)
8 number_int = int(number_float)
9 print(number_int)
کدی که در بالا میبینید بعد از اجرا در ابتدا پیغام زیر را در خروجی نمایش میدهد.
Cannot convert string to integer directly
بعد از آن در خروجی عدد 123
را نیز نمایش میدهد.
امکانات کار با داده فراتر از تبدیل رشته به عدد در پایتون است
تواناییهای پایتون در کار بر روی دادهها فراتر و گستردهتر از تبدیل نوع دادهها است. از مدیریت مقادیر گمشده و ادغام مجموعههای داده گرفته تا فیلتر کردن دادهها و ایجاد جداول «محوری» (Pivot)، پایتون طیف گستردهای از توابع و متدها را برای کار کردن با دادهها ارائه داده است.
کتابخانههایی مانند Pandas و NumPy ساختارهای داده قدرتمندی مانند آرایهها و DataFrame-ها را همراه با تعداد بسیار زیادی توابع مختلف برای کار با این ساختارهای داده ارائه میدهند. بنابراین تبدیل رشته به عدد در پایتون یکی از کارهای بسیار ابتدایی و در عین حال لازم برای آموختن است. فرق نمیکند که در حال تغییر اندازه دادهها، جمعآوری دادهها، یا تجزیه دادهها بر اساس معیارهای مشخص شده باشید. پایتون حتما از شما حمایت میکند.
آموزش های تکمیلی پایتون
اگر که مهارتهای خود را در زبان برنامهنویسی پایتون در حد مناسبی ارتقا داده باشیم یا حتی برای اینکه متوجه شویم چه بخشهایی از دانش برنامهنویسی خود را باید تکمیل کنیم، بهترین کار بررسی دورههای حرفهایتر متناسب با بازار کار است. در این بخش از مطلب، چند فیلم آموزشی بسیار مناسب را از سایر آموزشی فرادرس را معرفی کردیم. این فیلمها نمونههایی از تعداد زیاد مطالب و فیلمهای آموزشی فرادرس میباشد. با جستوجو در سایت به تعداد بیشتری از این دورههای آموزشی دسترسی خواهید داشت.
جمع بندی
در طول این مطلب راهنمای جامع از مجله فرادرس، فرایند تبدیل رشته به عدد در پایتون را مورد بررسی دقیق قرار دادیم. دیدیم که تابع «درونی» (Built-In) int()
چگونه این عملیات را به سادگی و بهطور موثری انجام میدهد. در ادامه خطرات احتمالی در زمان اجرای عملیات تبدیل داده را یادآوری کردیم. همچنین راه حل ممکن برای مدیریت این خطاها را نیز با استفاده از مکانیزم قدرتمند و محکم مدیریت خطا در پایتون آموزش دادیم.
این مطلب آموزشی را بر روی تبدیل ساده نوع داده متوقف نکردیم بلکه به قلمرو وسیع تبدیل دادهها در پایتون سر زدیم و به کاوش در سناریوهای پیچیدهتری مانند کار با اعداد Float و «اعداد مرکب» (Complex Numbers) پرداختیم. فلسفه پایتون را که میگوید «درخواست بخشش آسانتر از درخواست اجازه است» در مبحث تبدیل نوع داده و مدیریت خطا باز کردیم و الگوی کدهای خود قرار دادیم.
به همچنین بر اهمیت انواع داده در پایتون تاکید کردیم و نشان دادیم که درک این نوع دادههای متفاوت چقدر برای مهارت نوشتن کدهای موثر ضروری است. بهطور خلاصه در این مطلب از مجله فرادرس آموختیم که مبحث تبدیل نوع داده فقط درباره تبدیل رشته به عدد در پایتون نیست. بلکه درباره استفاده از قدرت و انعطافپذیری پایتون برای مدیریت موثرتر دادهها، نوشتن کدهای قابل اعتماد وافزایش دائمی مهارتهای برنامهنویسی در زبان پایتون است.
source