در پایتون، انواع داده (Data Types) مشخص میکنند چه مقادیری را میتوان در یک متغیر ذخیره کرد و چه عملیاتی روی آنها انجام داد. هنگام کدنویسی، اغلب لازم است فرمت داده را تغییر دهید؛ مثلاً ورودیهای متنی دستور input را برای محاسبات ریاضی به عدد تبدیل کنید یا عددی را برای نمایش در خروجی به رشته بچسبانید.
شناخت انواع داده و تبدیل درست آنها برای جلوگیری از خطاهای برنامهنویسی، از مباحث پایه در مسیر آموزش برنامهنویسی پایتون است. در این آموزش تبدیل داده در پایتون، روشهای مختلف تغییر نوع داده و نحوه مدیریت خطاهای رایج آن را بررسی میکنیم.
تبدیل نوع داده در پایتون چیست و چه انواعی دارد؟
تغییر مقدار یک متغیر از یک نوع داده، مانند عدد صحیح، رشته یا اعشاری، به نوع دیگر را تبدیل نوع (Type Conversion) مینامند. مفسر زبان برنامهنویسی پایتون هنگام روبهرو شدن با انواع داده متفاوت در محاسبات، این تبدیل را به دو روش خودکار (ضمنی) و دستی (صریح) انجام میدهد.
تبدیل نوع ضمنی (Implicit Type Conversion)
در تبدیل نوع ضمنی، مفسر پایتون هنگام اجرای برنامه (Runtime)، بدون دخالت برنامهنویس، یک نوع داده را خودکار به نوع دیگری تبدیل میکند. پایتون در این فرآیند نوع داده کوچکتر را به نوع داده بزرگتر ارتقا میدهد تا اطلاعات از دست نرود.

این تبدیل خودکار معمولاً وقتی رخ میدهد که اعداد صحیح (int) و اعشاری (float) در یک عبارت ریاضی ترکیب میشوند:
integer_number = 123
float_number = 1.23
new_number = integer_number + float_number
# display new value and resulting data type
print("Value:", new_number)
print("Data Type:", type(new_number))
اجرای این کد خروجی زیر را دارد:
Value: 124.23
Data Type: <class 'float'>
در این مثال، پایتون هنگام جمع دو متغیر، مقدار صحیح integer_number را به float تبدیل میکند تا بخش اعشاری حاصل جمع حفظ شود. تبدیل ضمنی در همه شرایط کار نمیکند. برای مثال، اگر بخواهید یک رشته و یک عدد صحیح را مستقیم با هم جمع کنید، مانند ’۱۲’ + ۲۳، پایتون نمیتواند نوع داده را خودکار تبدیل کند و خطای TypeError میدهد.
تبدیل نوع صریح (Explicit Type Conversion یا Type Casting)
در تبدیل نوع صریح، که Type Casting در پایتون نیز نام دارد، برنامهنویس نوع داده یک شیء را دستی تغییر میدهد. برای این کار از توابع داخلی از پیش تعریفشده مانند int()، float() و str() استفاده میکند.
در این روش، کاربر نحوه پردازش داده را کنترل میکند و زمانی از آن استفاده میکند که تبدیل خودکار مناسب نباشد. به دلیل اجبار شیء به تغییر به یک نوع داده مشخص، ممکن است بخشی از اطلاعات از دست برود.
در کد زیر، ابتدا رشته عددی ’۱۲’ با تابع int() به عدد صحیح تبدیل میشود و سپس با عدد ۲۳ جمع میشود:
num_string = '12'
num_integer = 23
print("Data type of num_string before Type Casting:", type(num_string))
# explicit type conversion
num_string = int(num_string)
print("Data type of num_string after Type Casting:", type(num_string))
num_sum = num_integer + num_string
print("Sum:", num_sum)
print("Data type of num_sum:", type(num_sum))
خروجی اجرای کد:
Data type of num_string before Type Casting: <class 'str'>
Data type of num_string after Type Casting: <class 'int'>
Sum: 35
Data type of num_sum: <class 'int'>
تبدیل انواع اعداد در پایتون
هنگام کار روی پروژههای مختلف یا کدهای دیگران، ممکن است متغیری بهصورت عدد صحیح تعریف شده باشد، اما برای محاسبات به مقدار اعشاری یا مختلط نیاز داشته باشید. پایتون با توابع داخلی int()، float() و complex() امکان تبدیل این انواع عددی را به یکدیگر فراهم میکند.
تبدیل عدد صحیح (Integer) به اعشاری (Float)
برای تبدیل اعداد صحیح به اعشاری در پایتون از تابع داخلی float() استفاده میشود. برای این کار، عدد صحیح را مستقیم داخل پرانتزهای تابع قرار دهید؛ برای مثال، با نوشتن دستور float(۵۷)، عدد ۵۷ به ۵۷.۰ تبدیل خواهد شد.
میتوانید بهجای خود عدد، متغیری حاوی عدد صحیح را به این تابع بدهید تا معادل اعشاری آن را برگرداند:
f = 57
print(float(f))
این کد خروجی زیر را دارد:
57.0
تبدیل عدد اعشاری به صحیح و نکته حذف اعشار
برای تبدیل اعداد اعشاری (float) به اعداد صحیح (integer)، از تابع داخلی int() استفاده میشود. عدد اعشاری یا متغیر حاوی آن را داخل پرانتزهای این تابع قرار دهید:

b = 125.0
c = 390.8
print(int(b))
print(int(c))
خروجی:
125
390
در این تبدیل، پایتون بخش اعشاری و باقیمانده آن را حذف میکند و فقط قسمت صحیح را نگه میدارد، بدون اینکه عدد را گرد (رُند) کند. به همین دلیل، اگر عدد ۳۹۰.۸ را در تابع int() قرار دهید، خروجی برابر با ۳۹۰ خواهد بود، نه ۳۹۱.
تبدیل به اعداد مختلط (Complex) و تبدیل در عملیات تقسیم
برای ساخت عدد مختلط (Complex) یا تبدیل اعداد به این نوع، از تابع complex() استفاده میشود. این تابع میتواند متغیری عددی را با دستوری مانند complex(x) به عدد مختلط تبدیل کند. همچنین میتواند با دریافت دو ورودی به شکل complex(۱, ۲)، عددی مختلط با بخش حقیقی ۱ و بخش موهومی ۲ بسازد:
x = 1
c = complex(x)
print(c)
print(type(c))
print("To complex:", complex(1, 2))
خروجی:
(1+0j)
<class 'complex'>
To complex: (1+2j)
در پایتون، توابع int() و float() از اعداد مختلط پشتیبانی نمیکنند. در صورت نیاز، میتوان با تابع abs() اندازه عدد مختلط را بهصورت float دریافت کرد.
در پایتون ۳، تقسیم دو عدد صحیح نیز نوع داده را خودکار به float تبدیل میکند. پایتون ۲ خروجی تقسیم ۵ بر ۲ را عدد صحیح ۲ در نظر میگرفت، اما در پایتون ۳ نتیجه یک عدد اعشاری است:
a = 5 / 2
print(a)
خروجی:
2.5
تبدیل رشته و عدد به یکدیگر
رشته (String) دنبالهای از یک یا چند کاراکتر است که میتواند شامل حروف، اعداد یا نمادها باشد. هنگام کار با دادههای متنی و تایپ str در پایتون، بهویژه هنگام دریافت مستقیم ورودی از کاربر، بارها نیاز دارید اعداد را برای نمایش در متن به رشته تبدیل کنید یا رشتهها را برای محاسبات ریاضی به عدد تغییر دهید.
تبدیل عدد به رشته با تابع str()
برای تبدیل اعداد صحیح یا اعشاری به متن، از تابع str() استفاده میشود. عدد یا متغیر عددی را داخل پرانتز این تابع قرار دهید؛ مثلاً اجرای str(۱۲) در پوسته پایتون، مقدار رشتهای ’۱۲’ را برمیگرداند.
کاربرد اصلی این تبدیل، چسباندن (Concatenate) اعداد به رشتهها با عملگر + است. فرض کنید میخواهید تعداد خطوط کد روزانه کاربری به نام Sammy را در یک پیام متنی چاپ کنید:
user = "Sammy"
lines = 50
print("Congratulations, " + user + "! You just wrote " + lines + " lines of code.")
اجرای این کد به دلیل تلاش برای اتصال مستقیم عدد صحیح به رشته، خطای زیر را برمیگرداند:
TypeError: can only concatenate str (not "int") to str
برای رفع خطا، متغیر lines را با تابع str() به رشته تبدیل میکنیم:
user = "Sammy"
lines = 50
print("Congratulations, " + user + "! You just wrote " + str(lines) + " lines of code.")
خروجی کد اصلاحشده چنین خواهد بود:
Congratulations, Sammy! You just wrote 50 lines of code.
تبدیل اعداد اعشاری (float) به رشته نیز به همین روش انجام میشود و امکان اتصال آنها به متن را فراهم میکند:
f = 5524.53
print("Sammy has " + str(f) + " points.")
خروجی:
Sammy has 5524.53 points.
تبدیل رشته به عدد با int() و float() (کاربرد در input)
برای انجام عملیات ریاضی روی اعدادی که به شکل متن ذخیره شدهاند، باید رشتهها را با توابع int() یا float() به عدد تبدیل کنید. برای مثال، تفریق مستقیم دو رشته عددی باعث بروز خطا میشود، زیرا عملگر – برای رشتهها تعریف نشده است:
lines_yesterday = "50"
lines_today = "108"
lines_more = lines_today - lines_yesterday
print(lines_more)
خروجی:
TypeError: unsupported operand type(s) for -: 'str' and 'str'
با تبدیل متغیرها به عدد صحیح توسط int()، محاسبه درست انجام میشود:
lines_yesterday = "50"
lines_today = "108"
lines_more = int(lines_today) - int(lines_yesterday)
print(lines_more)
خروجی:
58
عملگر + روی رشتهها خطا نمیدهد و دو رشته را به هم میچسباند (الحاق میکند)، بهجای اینکه آنها را مانند اعداد جمع کند. برای نمونه، جمع دو امتیاز اعشاری که بهصورت رشته هستند، آنها را کنار هم قرار میدهد، مگر اینکه ابتدا با تابع float() تبدیل شوند:
total_points = "5524.53"
new_points = "45.30"
# قبل از تبدیل (الحاق دو رشته)
print(total_points + new_points)
# بعد از تبدیل به اعشاری (جمع ریاضی)
new_total_points = float(total_points) + float(new_points)
print(new_total_points)
خروجی:
5524.5345.30
5569.83
این رفتار هنگام دریافت اطلاعات از کاربر اهمیت زیادی دارد، زیرا دستور input() دادهها را بهصورت رشته تحویل میدهد. اگر کاربر اعداد ۲ و ۳ را وارد کند، برنامه آنها را به شکل رشتههای “۲” و “۳” میگیرد و حاصل جمع را “۲۳” نمایش میدهد. برای دریافت نتیجه درست ریاضی، ورودی را داخل تابع تبدیل نوع قرار دهید:
a = int(input('Enter 1st number: '))
b = int(input('Enter 2nd number: '))
print(a + b)
خروجی (برای ورودیهای ۲ و ۳):
5
تبدیل لیست، تاپل، مجموعه و دیکشنری
پایتون برای تبدیل ساختارهای داده تکرارپذیر (Iterable) به یکدیگر، توابع داخلی مشخصی دارد. شناخت تفاوت لیست و تاپل به انتخاب ساختار مناسب کمک میکند. لیست (list) دنبالهای مرتب و تغییرپذیر از عناصر داخل براکت [] است و تاپل (tuple) توالی مرتب و تغییرناپذیری از عناصر درون پرانتز () است.
تبدیل داده به تاپل با tuple()
تبدیل لیست به تاپل، به دلیل تغییرناپذیر بودن تاپل، میتواند به بهینهسازی برنامه کمک کند. با ارسال یک لیست یا متغیر حاوی لیست به تابع tuple()، نسخه تاپل آن درون پرانتز برگردانده میشود:
print(tuple(['pull request', 'open source', 'repository', 'branch']))
sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp']
print(tuple(sea_creatures))
خروجی:
('pull request', 'open source', 'repository', 'branch')
('shark', 'cuttlefish', 'squid', 'mantis shrimp')
میتوانید سایر دادههای تکرارپذیر (Iterable)، مانند رشتهها، را نیز به این تابع بدهید تا کاراکترهای آن با حفظ ترتیب از هم جدا شوند:
print(tuple('Sammy'))
خروجی:
('S', 'a', 'm', 'm', 'y')
تبدیل داده به لیست با list()
برای داشتن نسخهای تغییرپذیر از یک تاپل، میتوان آن را با تابع list() به لیست تبدیل کرد. خود تاپل و تابع هر دو از پرانتز استفاده میکنند؛ بنابراین، هنگام ارسال مستقیم تاپل به تابع باید دو جفت پرانتز قرار دهید:
print(list(('blue coral', 'staghorn coral', 'pillar coral')))
خروجی، لیستی است که عناصر آن داخل براکت قرار دارند:
['blue coral', 'staghorn coral', 'pillar coral']
برای خوانایی بیشتر کد و حذف یک جفت پرانتز، میتوان ابتدا تاپل را در متغیری ذخیره کرد:
coral = ('blue coral', 'staghorn coral', 'pillar coral')
print(list(coral))
خروجی این کد نیز همان خروجی حالت قبل است:
['blue coral', 'staghorn coral', 'pillar coral']
رشتهها هم به همین روش به لیستی تغییرپذیر از کاراکترهای تشکیلدهنده خود تبدیل میشوند:
print(list('shark'))
خروجی:
['s', 'h', 'a', 'r', 'k']
تبدیل به مجموعه (set) و دیکشنری (dict)
برای تبدیل دادههای تکرارپذیر به مجموعه از تابع set() استفاده میشود. این تابع هنگام تبدیل، عناصر تکراری را حذف میکند و مجموعهای نامرتب برمیگرداند. در مثال زیر، با تبدیل رشته ‘geeks’ به مجموعه، یکی از حروف ‘e’ حذف میشود و ترتیب کاراکترها تغییر میکند:
s = 'geeks'
print("To set:", set(s))
خروجی:
To set: {'e', 'g', 'k', 's'}
اگر دنبالهای از تاپلهای جفتی بهصورت کلید و مقدار داشته باشید، میتوانید آنها را با تابع dict() به ساختار دیکشنری در پایتون تبدیل کنید:
tup = (('a', 1), ('f', 2), ('g', 3))
print("To dict:", dict(tup))
خروجی:
To dict: {'a': 1, 'f': 2, 'g': 3}
سایر توابع تبدیل نوع (مبناها، کاراکتر و بولین)
برای تبدیل انواع داده در پایتون، توابع دیگری نیز برای تغییر مبنای اعداد، دریافت کد اسکی کاراکترها و تبدیل مقادیر به نوع منطقی (بولین) وجود دارد:

- تابع bool() یک مقدار را به نوع داده بولین (True یا False) تبدیل میکند.
- تعیین مبنا در تابع int() با ارسال آرگومان دوم انجام میشود. با این آرگومان، تابع رشتههای عددی در مبناهای دیگر، مانند باینری یا مبنای ۲، را به عدد صحیح در مبنای ۱۰ تبدیل میکند.
- تابع ord() یک کاراکتر را دریافت میکند و کد اسکی (ASCII) متناظر با آن را بهصورت عدد صحیح برمیگرداند.
- توابع hex() و oct() یک عدد صحیح را بهترتیب به رشتهای در مبنای ۱۶ (هگزادسیمال) و مبنای ۸ (اکتال) تبدیل میکنند.
کد زیر نحوه کار با مبناها و دریافت کد اسکی را نشان میدهد:
# تبدیل رشته باینری به عدد صحیح و اعشاری
s = "10010"
a = int(s, 2)
print(a)
b = float(s)
print(b)
# تبدیل به کد اسکی، مبنای 16 و مبنای 8
c = '4'
print("ASCII of '4':", ord(c))
print("56 in Hex:", hex(56))
print("56 in Octal:", oct(56))
خروجی اجرای کد:
18
10010.0
ASCII of '4': 52
56 in Hex: 0x38
56 in Octal: 0o70
در جدول زیر، تمام توابع تبدیل نوع بررسیشده یکجا خلاصه شدهاند:
| نام تابع | کاربرد |
|---|---|
| int() | تبدیل مقدار به عدد صحیح (یا تبدیل رشته عددی با مبنای مشخص به عدد صحیح) |
| float() | تبدیل مقدار به عدد اعشاری (ممیز شناور) |
| str() | تبدیل مقدار به رشته متنی |
| bool() | تبدیل مقدار به نوع منطقی بولین (True یا False) |
| complex() | ساخت عدد مختلط با تعیین بخش حقیقی و موهومی |
| list() | تبدیل دادههای تکرارپذیر به لیست (تغییرپذیر) |
| tuple() | تبدیل دادههای تکرارپذیر به تاپل (تغییرناپذیر) |
| set() | تبدیل دادههای تکرارپذیر به مجموعه (بدون عضو تکراری و نامرتب) |
| dict() | تبدیل دنبالهای از تاپلهای جفتی (کلید-مقدار) به دیکشنری |
| ord() | دریافت کد اسکی یک کاراکتر |
| hex() | تبدیل عدد صحیح به مبنای ۱۶ (Hexadecimal) |
| oct() | تبدیل عدد صحیح به مبنای ۸ (Octal) |
خطاهای رایج هنگام تبدیل داده در پایتون
هنگام تغییر نوع داده، ناسازگاری ساختار متغیرها با تابع مقصد باعث توقف برنامه میشود. رایجترین خطاهای تبدیل داده در سه دسته قرار میگیرند:

۱. خطای جمع یا تفریق مستقیم رشته و عدد (TypeError)
مفسر پایتون نمیتواند رشته و عدد را خودکار با هم جمع کند یا دو رشته عددی را از هم کم کند.
print('12' + 23)
خروجی خطا:
TypeError: can only concatenate str (not "int") to str
کد اصلاحشده با تبدیل صریح:
print(int('12') + 23)
# Output: 35
۲. خطای تبدیل رشته اعشاری به عدد صحیح (ValueError)
ارسال مستقیم رشتهای حاوی ممیز اعشار به تابع int() مجاز نیست و برنامه با خطا روبهرو میشود:
f = "54.23"
print(int(f))
خروجی خطا:
ValueError: invalid literal for int() with base 10: '54.23'
کد اصلاحشده با استفاده از تابع float():
f = "54.23"
print(float(f))
# Output: 54.23
۳. خطای ارسال عدد به لیست و تاپل (TypeError)
توابع tuple() و list() فقط دادههای تکرارپذیر (Iterable) یا آرگومان خالی دریافت میکنند و ارسال مستقیم اعداد به آنها خطا میدهد:
print(tuple(5000))
خروجی خطا:
TypeError: 'int' object is not iterable
برای رفع این مشکل، ابتدا عدد را با str() به رشته تبدیل کنید تا قابل پیمایش شود:
یادگیری مدیریت خطاها و کار با ساختارهای داده، بخش مهمی از مسیر آموزش برنامهنویسی است و به نوشتن کدهای بدون باگ کمک میکند.