قسمت چهارم برنامه نویسی مقدماتی با پایتون - انواع داده ها
نوشته شده توسط دیما
نویسنده سایت
متغیر ها در پایتون برای نگهداری مقادیر استفاده میشوند و این مقادیر میتوانند انواع مختلفی داشته باشند. در این قسمت از مجموعه آموزش مقدماتی برنامه نویسی پایتون، با انواع مختلف دادهها در این زبان آشنا خواهیم شد.
در زبانهای برنامه نویسی، متغیر ها برای نگهداری مقادیر مختلف در حافظه سیستم استفاده می شوند. مقادیر مورد استفاده میتوانند انواع مختلفی داشته باشند.
برای مثال ممکن است یک متغیر برای نگهداری سن کاربر داشته باشیم که مقدار سن کاربر را به صورت عددی در حافظه ذخیره کند و یا متغیری برای ذخیره نام کتاب داشته باشیم که از ترکیب تعدادی حرف برای مشخص کردن نام کتاب ایجاد شده است. به این نوع دادهها که از ترکیب حروف مختلف تشکیل شده اند در زبانهای برنامه نویسی ”رشته” میگویند.
بدین ترتیب ما از دادهها با نوع های مختلف داده برای کاربرد های مختلف استفاده میکنیم که هر کدام ویژگیهای متمایزی دارند که میشود از آنها بهره برد. به عنوان مثال تنها متغیرهای عددی را میتوان با یکدیگر جمع و یا سایر عملیات ریاضی را روی آنها بکار برد. در زبان پایتون، انواع مختلفی برای دادهها در نظر گرفته شدهاند که با آنها آشنا خواهیم شد.
داده های رشته ای در پایتون
برای ذخیره مقادیر متنی یا رشتهها در پایتون از نوع داده ی str استفاده میشود که مخفف کلمه ی string به معنای رشته نیز می باشد. رشتهها عموما برای نمایش اطلاعات به صورت متنی استفاده می شوند.
برای ایجاد یک مقدار رشته ای تنها کافیست که متن مورد نظر خود را بین یکی از دو علامت نقل قول تکی(') و یا نقل قول دوتایی(") قرار دهید.
myStr = "Hello World!" print(myStr) myStr = 'I love python' print(myStr)
در مثال قبل هر دو نحوه ی تعریف متغیر رشته ای صحیح می باشد. برای ایجاد رشتههای چند خطی نیز تنها کافیست که به صورت زیر عمل کنید.
myStr = """ line1 line2 """ print(myStr) myStr = '''line1 line2''' print(myStr)
توجه: در مثال قبل هر دو روش برای تعریف متغیر های رشته ای چند خطی استفاده می شوند. ولی با اینکه مقدار آنها یکسان است، خروجی یکسانی نخواهند داشت. با تست کردن هر دو تکه و مقایسه خروجی ها، این تفاوت را پیدا کنید. :)
برای استفاده از علامت نقل قولها در رشتهها باید به صورت زیر عمل کرد:
str1 = 'sample text with quote mark " in string' str2 = "sample text with single quote mark ' in string"
همانطور که در مثال بالا می بینید، هنگامی که از ' برای تعریف رشته استفاده شده است دیگر نمیتوان در رشته از علامت ' استفاده کرد و یا هنگامی که از " برای تعریف رشته استفاده شده است دیگر نمیتوان در رشته از علامت " استفاده کرد. به همین دلیل زمانی که بخواهیم در رشته از علامت های ' یا " استفاده کنیم، باید برای تعریف رشته از علامت دیگر استفاده کنیم.
روشی دیگر نیز برای استفاده از علامت های یکسان درون رشته وجود دارد که از escape character ها استفاده میکند. برای اینکار کافی است قبل از علامت مورد نظر از علامت \(بک اسلش) استفاده کنیم.
str1 = "sample text with ' and \" in string"
در اینجا چون رشته در بین دو علامت " قرارگرفته، باید برای استفاده از علامت " درون رشته از "\ استفاده کنیم.
رشتهها در پایتون از پرکاربرد ترین نوع دادهها میباشند که عملیات مختلفی را میتوان بر روی آنها بکار برد. در قسمتهای بعدی بیشتر با رشتهها در پایتون آشنا خواهیم شد.
داده های عددی در پایتون
برای ذخیره مقادیر عددی، انواع مختلفی از دادهها در نظر گرفته شده اند. به عنوان مثال برای ذخیره اعداد صحیح(اعدادی که بدون ممیز هستند) نوع داده ی int در نظر گرفته شده است. این نوع داده مخفف عبارت integer به معنای عدد صحیح نیز می باشد. این نوع میتواند هر عدد مثبت و منفی بدون ممیز را شامل شود.
x = 20 y = -9
نوع دیگری از دادههای عددی نیز برای مقادیر اعشاری درنظر گرفته شده اند. نوع این دادههای اعشاری در پایتون float می باشد. این نوع داده میتواند هر عدد مثبت و منفی اعشاری را شامل شود.
x = 20.9 y = 9.20
نوع داده ی float همچنین میتواند برای نمایش اعداد اشعاری به صورت نماد علمی(توان ۱۰) نیز استفاده شود.
x = 20e9 #20*(10^9) print(x) # output => 20000000000.0
در پایتون همچنین یک نوع داده برای مجموعه اعداد مختط نیز ایجاد شده است.
x = 9+20j y = 9j z = -9j print(type(x)) # output => 'complex' print(type(y)) # output => 'complex' print(type(z)) # output => 'complex'
نکته: تابع type برای نمایش نوع دادهها استفاده می شود. با استفاده از این تابع میتوانید نوع داده ی متغیر مورد نظر را بیابید.
در زبان پایتون قابلیتی برای ایجاد مقادیر عددی به صورت تصادفی نیز فراهم شده است. برای اینکار کافیست از ماژول random و تابع randrange این ماژول استفاده کنیم.
import random randomNumber = random.randrange(1, 10) print(randomNumber)
در خط اول این تکه کد، ابتدا ماژول random به برنامه اضافه میشود تا ما بتوانیم از توابع این ماژول استفاده کنیم. برای واردسازی ماژول ها در پایتون از دستور import استفاده میشود و معمولا قبل از نوشتن کد های برنامه در بالای خطوط برنامه یا ابتدای صفحه، دستورات import نوشته می شوند. در قسمتهای بعدی با مفهوم ماژول ها آشنا خواهیم شد.
در خط دوم نیز تابع randrange ماژول random با پارامتر های ۱ و ۱۰ فراخوانی می شود. این تابع یک عدد به طور تصادفی بین بازه ی ۱ و ۹(عددی بین مجموعه اعداد ۱ تا ۹ بدون اینکه عدد ۱۰ را در نظر بگیرد) را بر میگرداند و درون متغیر randomNumber قرار می دهد.
در ادامه با مفاهیم تابع و پارامتر ها نیز آشنا خواهیم شد و نگران این مفاهیم نباشید. با استفاده از تکه کد قبل میتوانید مقادیر را به طور تصادفی تولید و از آنها استفاده کنید.
دادههای توالی، نگاشتی و مجموعهای در پایتون
این نوع دادهها برای ایجاد توالی یا سری یا ذخیره سازی مجموعهای از چندین مقدار با هم استفاده می شوند. انواع مختلفی برای این نوع دادهها در نظر گرفته شدهاند که هر کدام دارای ویژگی مختلف و برای کاربرد مختلف استفاده می شوند. نوع دادههای list, tuple, range, dict, set, frozenset از این نوع دادهها میباشند که برای کاربرد های مختلف ایجاد شده اند.
برای مثال وقتی بخواهیم یک لیستی از میوههای مختلف را ایجاد کنیم میتوانیم به صورت زیر عمل کنیم:
fruits = ["orange", "apple", "mango"] print(fruits)
لیست ها برای ایجاد لیستی از مقادیر با انواع مختلف داده استفاده میشوند که میتوانند مقادیر تکراری نیز بپذیرند. برای ایجاد لیست ها باید مقادیر رشته یا مقادیر عددی و یا ترکیبی از این مقادیر را بین دو [] قرار داد.
myList = ["orange", 10, 203.2] print(myList)
نوع داده ی دیگری نیز به نام tuple وجود دارد که میتوان مانند لیست از آنها استفاده نمود با این تفاوت که امکان تغییر مقادیر تاپل ها بعد از ایجاد آنها وجود ندارد. برای تعریف تاپل ها تنها کافیست مقادیر مختلف خود را بین () قرار دهید.
myTuple = ("orange", 10, 203.2)
print(myTuple)
برای دسترسی به عناصر لیست ها و تاپل ها میتوانیم به صورت زیر عمل کنیم.
myList = ["orange", 10, 203.2]
myTuple = ("orange", 10, 203.2)
print(myList[0]) # output => orange
print(myTuple[2]) # output => 203.2
print(myTuple[3]) # error
در مثال بالا، خط ششم زمانی که بخواهیم مقدار عنصر ایندکس شماره ۳ یا عنصر چهارم تاپل را بدست آوریم با خطای زیر مواجه میشویم چون که ایندکس مشخص شده بیشتر از تعداد عناصر یا شماره ایندکس مجاز برای تاپل می باشد.
IndexError: tuple index out of range
باید توجه داشته باشیم که در زبان پایتون ایندکس یا شماره اولین عنصر همیشه از صفر شروع می شود. بدین صورت که اولین عنصر، ایندکس صفر را خواهد داشت و آخرین عنصر، ایندکسی برابر با تعداد عناصر – ۱ خواهد بود. در صورتی که از ایندکسی غیر ایندکس های مجاز استفاده نماییم با خطا مواجه خواهیم شد.
برای مثال برای ذخیره اطلاعات یک کتاب میتوانیم به صورت زیر عمل کنیم:
myBook = {
"id": 100,
"book_name": "The Little Prince",
"price": 20000
}
در تکه کد بالا از نوع داده ی dict برای ذخیره سازی اطلاعات مختلف درون یک متغیر استفاده شده است. dict ها به صورت دادههای کلید و مقدار تعریف میشوند. در مثال بالا کلید ها idوbook_nameوprice میباشد و مقادیر ۱۰۰و "The Little Prince"و20000 می باشد.
هر کدام از این نوع دادهها برای هدف خاصی ایجاد شدهاند و تفاوتهایی نیز با یکدیگر دارند. این نوع دادهها بسیار با اهمیت هستند و کاربرد بسیاری در برنامههای شما خواهند داشت. به دلیل اهمیت بالای این نوع دادهها، در این قسمت شرح مختصری درباره این نوع ها داده شده و در آینده به طور مفصل درباره هر کدام از این نوع دادهها و عملیاتی که بر روی آنها انجام میشود در قسمتهای جداگانه خواهیم پرداخت.
برای دسترسی به اطلاعات مورد نظر متغیر myBook به عنوان مثال نام کتاب، تنها کافی است به شکل ["نام کلید مورد نظر"] استفاده کنیم.
myBook["book_name"]
توجه: در صورتی که هنگام دسترسی به کلید مورد نظر، از کلیدی غیر کلید های اصلی متغیر استفاده کنیم با خطای زیر مواجه می شویم.
myBook["author"] KeyError: 'author'
داده های منطقی در پایتون
داده ی های منطقی یا boolean دارای دو مقدار True یا False می باشند. این نوع مقادیر عموما برای بررسی عبارات شرطی استفاده می شوند. همانطور که در قسمت عملگرها یادگرفتیم، عملگرهایی وجود دارند که به آنها عملگرهای منطقی میگویند. این عملگرها نتیجهای در قالب True یا False را بر میگردانند. و این True یا False از همین نوع دادههای منطقی می باشند.
print(20 == 9) # output => False
داده های دودویی در پایتون
نوع داده ی bytes یکی از نوع دادههای دودویی میباشد که مقادیر را به صورت دودویی ذخیره می نماید.
نوع داده ی bytearray نیز مانند bytes عمل میکند با این تفاوت که امکان تغییر عناصر را می دهد.
هر دو bytes و bytearray توابعی را برای encoding(رمز نگاری) و decoding(رمزگشایی) رشتهها ارایه می دهند. در اینجا منظور از رمزنگاری، تبدیل رشته به یک استاندارد کدگذاری حروف دیگر و منظور رمزگشایی برگرداندن از استاندارد کدگذاری حروف به رشته می باشد.
# encoding
myStr = bytearray("python", "utf-16")
print(myStr) # output => bytearray(b'\xff\xfep\x00y\x00t\x00h\x00o\x00n\x00')
# decoding
myStr = myStr.decode("utf-16")
print(myStr) # output => python
در خط دوم مثال قبل، رشته ی python با استاندارد کدگذاری utf-16 انکود شده و در خط ششم متغیر کد شده با استفاده از تابع decode از استاندارد utf-16 به رشته ی معمولی دیکود می شود.
نکته: تابع bytearray امکان تغییر عناصر را به ما میدهد، در صورتی که اگر از تابع bytes استفاده کنیم و بخواهیم مقادیر عنصر خاصی را تغییر دهیم با خطای زیر مواجه می شویم.
TypeError: 'bytes' object does not support item assignment
مثال تغییر عناصر در هنگام استفاده از تابع bytearray:
x = bytearray("python", "utf-8")
myStr = x.decode("utf-8")
print(myStr) # output => python
x[0] = 67
myStr = x.decode("utf-8")
print(myStr) # output => Cython
در خط اول یک آرایه ای از بایت ها با استفاده از رشته ی "پایتون" ایجاد میکنیم. در خط دوم و سوم عبارت اصلی را برای نمایش چاپ میکنیم. در خط چهارم عنصر اول ارایه x را که مشخص کننده ی حرف اول رشته ی ما(p) میباشد را با عدد 67 که معادل حرف C میباشد را جایگرین کرده و با استفاده از خطوط پنجم و ششم عبارت خود را به صورت رشته ای چاپ می نماییم.
داده های بدون نوع در پایتون
نوع داده ی بدون نوع یا NoneType زمانی استفاده میشود که متغیری داریم که جزء هیچکدام از نوع دادههای مشخص نمی باشد یا زمانی که متغیری را ایجاد میکنیم که هیچ مقداری را ندارد.
x = None print(x) # output => None print(type(x)) # output =>
تبدیل نوع دادهها به یکدیگر در پایتون
برای آنکه بتوانیم عملیات مختلف را بر روی دادههای مختلف موجود انجام دهیم نیاز داریم تا آنها را به نوع مورد نظر خود تبدیل کنیم. به مثال زیر توجه کنید.
x = input("Please enter a number: ")
x = int(x)
x = x ^ x
print(x)
در خط اول، با استفاده از تابع input ورودی را از کاربر دریافت و آن را درون یک متغیر به نام x قرار میدهیم. این تابع یکی از توابع پایتون میباشد که امکان دریافت ورودی از کاربر را فراهم میکند.
خروجی این تابع به صورت رشته می باشد، یعنی آنکه مقداری را که کاربر بصورت عددی و یا رشته ای وارد میکند را، به صورت رشته بر میگرداند. به همین دلیل برای تبدیل به عدد و انجام عملیات ریاضی بر روی ورودی کاربر باید عملیات تبدیل به عدد، بر روی خروجی تابع input انجام شود.
در خط دوم با استفاده از تابع int، متغیر x از نوع رشته ای به نوع عددی تبدیل می گردد.
تابع دیگری نیز به نام float وجود دارد که بتوان مقادیر رشته ای یا عددی صحیح را به صورت اعشاری تبدیل کرد.
x = 23.1 y = "1" z = int(x) + float(y) print(z) # output => 24.0
نکته: زمانی که عملیات ریاضی مانند جمع و تفریق را بر روی دو متغیر یا مقدار از نوع صحیح و اعشاری انجام می دهید، خروجی نهایی از نوع اعشاری خواهد بود.
برای تبدیل متغیر یا مقدار به نوع رشته، باید از تابع str استفاده نمود. در مثال زیر زمانی که بخواهیم یک عدد را به همراه یک رشته در کنار هم چاپ نماییم باید متغیر یا مقدار عددی را به رشته تبدیل کرده و سپس با استفاده از عملگر الحاق(+)، دو رشته را به یکدیگر متصل کنیم.
x = 23
print("x is " + str(x))
نکته: در صورتی که در مثال قبل از تابع str استفاده نکنیم با خطای زیر مواجه می شویم.
TypeError: can only concatenate str (not "int") to str
البته میتوان مثال قبل را به شکل زیر تغییر داد بدون آن که بخواهیم متغیری را تبدیل کنیم.
x = 23
print("x is ", x)
استفاده از , به جای + برای الحاق رشته تنها در تابع print قابل استفاده است. مثال بالا در مقایسه با مثال قبلتر یک تفاوتی را در خروجی دارد، به نظر شما تفاوت در چیست و چرا؟
توابع دیگری نیز برای تبدیل به نوع دادههای دیگر استفاده میشود که میتوان از آنها استفاده کرد:
bool(12)
complex(1j)
list(("1", 2, "3"))
tuple(("aa", "a", 3))
dict(name="ali", age=12)
set(("1", "2", "a"))
توجه داشته باشید که امکان تبدیل متغیر یا مقادیر به هر نوع دلخواهی وجود ندارد. به عنوان مثال اعداد مختلط را نمیتوان به صورت عددی تبدیل کرد.
سوال: به نظر شما نوع و مقدار متغیر های زیر چطور خواهد بود؟
x = int("10") # type?
y = str(20.0) # type?
z = float(9) # type?
a = bool(-9) # type?
print(x) # output => ?
print(y) # output => ?
print(z) # output => ?
print(a) # output => ?
Image by pikisuperstar on Freepik