Homeداده کاویانواع داده در پایتون؛ راهنمای int، float، str، bool و None

انواع داده در پایتون؛ راهنمای int، float، str، bool و None

پاسخ کوتاه: در پایتون، نوع داده مشخص می‌کند هر مقدار چگونه ذخیره و تفسیر شود. انواع اصلی عبارت‌اند از int برای اعداد صحیح، float برای اعداد ممیز شناور، str برای متن، bool برای درست/نادرست و None برای مقدار ثبت‌نشده؛ انتخاب نوع درست از خطاهای محاسباتی و داده‌ای جلوگیری می‌کند.

 

چرا "10" با 10 یکسان نیست؟ چرا مقدار صفر نباید همیشه به‌معنای داده گمشده تفسیر شود؟ و چرا جمع دو عدد اعشاری گاهی نتیجه‌ای با رقم‌های اضافی تولید می‌کند؟ پاسخ این پرسش‌ها به یکی از پایه‌ای‌ترین مفاهیم برنامه‌نویسی برمی‌گردد: نوع داده.

برای شروع، کافی است پنج مفهوم اصلی را بشناسید: int برای اعداد صحیح، float برای اعداد ممیز شناور، str برای متن، bool برای مقدارهای منطقی و None برای نمایش نبود مقدار. انتخاب و تفسیر درست آن‌ها، پایه محاسبات صحیح، پاک‌سازی داده و نوشتن برنامه‌های قابل‌اعتماد است.

در این راهنما، این مفاهیم را با مثال‌هایی از فروش، موجودی و داده‌های پژوهشی بررسی می‌کنیم.

نوع داده چیست و چرا اهمیت دارد؟

نوع داده مشخص می‌کند یک مقدار چگونه تفسیر شود و چه عملیاتی روی آن معنا داشته باشد. برای مثال، جمع دو عدد با اتصال دو رشته متفاوت است:

print(10 + 5)       # 15print("10" + "5")   # 105

در خط اول، جمع عددی انجام می‌شود؛ در خط دوم، دو متن به یکدیگر متصل می‌شوند. بنابراین، ظاهر عددی یک مقدار لزوماً به‌معنای عدد بودن آن نیست.

نوعکاربردنمونه
intتعداد و اعداد صحیح12، 0، -5
floatاندازه‌گیری و محاسبات ممیز شناور3.14، -0.5
strمتن و شناسه‌های متنی"Python"، "00125"
boolوضعیت منطقیTrue، False
NoneTypeنوع مقدار ویژه NoneNone

۱. نوع int؛ اعداد صحیح و شمارش

از int برای مقدارهایی مانند تعداد محصول، تعداد نمونه یا شمار رویدادها استفاده کنید:

units_sold = 12stock = 0temperature_change = -3

صفر و اعداد منفی نیز عدد صحیح هستند. برای خواناتر شدن اعداد بزرگ می‌توان از زیرخط استفاده کرد:

sample_count = 1_000_000

زیرخط در اینجا فقط خوانایی کد را افزایش می‌دهد و مقدار عدد را تغییر نمی‌دهد.

تفاوت تقسیم معمولی، تقسیم کف و باقیمانده

عملگرکاربردمثالنتیجه
/تقسیم معمولی7 / 23.5
//تقسیم کف7 // 23
%باقیمانده7 % 21
**توان2 ** 38

تقسیم با / میان دو عدد صحیح نیز نتیجه float می‌دهد. همچنین // به‌معنای حذف ساده بخش اعشاری نیست؛ نتیجه را به سمت منفی بی‌نهایت گرد می‌کند:

print(8 / 2)     # 4.0print(-7 // 2)   # -4

برای مثال، اگر ۲۹ قطعه داشته باشید و ظرفیت هر بسته ۶ قطعه باشد:

items = 29box_capacity = 6
print(items // box_capacity)  # 4 full boxesprint(items % box_capacity)   # 5 remaining items

این مثال‌ها نشان می‌دهند انتخاب عملگر باید با معنای مسئله هماهنگ باشد. Python 3.15.0 documentation

۲. نوع float؛ اندازه‌گیری و محاسبات اعشاری

از float برای بسیاری از اندازه‌گیری‌ها و محاسبات علمی استفاده می‌شود:

unit_price = 49.50
temperature = 36.7
duration = 0.025

بااین‌حال، بسیاری از کسرهای ده‌دهی در نمایش دودویی رایانه دقیق نیستند:

print(0.1 + 0.2)# 0.30000000000000004

این رفتار ویژگی محاسبات ممیز شناور است. برای مقایسه تقریبی می‌توان از math.isclose() استفاده کرد:

import mathresult = 0.1 + 0.2
print(math.isclose(result, 0.3))  # True

در داده‌های علمی، تلورانس مقایسه باید با مقیاس داده و دقت اندازه‌گیری هماهنگ باشد؛ تنظیمات پیش‌فرض برای همه مسئله‌ها مناسب نیستند. نمایش دو رقم اعشار نیز دقت مقدار ذخیره‌شده را تغییر نمی‌دهد. Python 3.15.0 documentation

برای محاسبات مالی چه کنیم؟

در محاسبات مالی، واحد پول، تعداد رقم‌های اعشار و روش گردکردن را مشخص کنید. بسته به مسئله، نگهداری مبلغ به‌صورت عدد صحیح در کوچک‌ترین واحد پولی یا استفاده از Decimal مناسب است.

from decimal import Decimal, ROUND_HALF_UPquantity = 3unit_price = Decimal("19.95")tax_rate = Decimal("0.09")subtotal = quantity * unit_pricetotal = (subtotal * (Decimal("1") + tax_rate)).quantize(    Decimal("0.01"),    rounding=ROUND_HALF_UP,)print(total)  # 65.24

در این نمونه، مقادیر اعشاری از رشته ساخته شده‌اند تا تقریب اولیه float وارد محاسبه نشود. روش ROUND_HALF_UP صرفاً انتخاب این مثال است؛ سیاست واقعی گردکردن باید با قواعد پروژه هماهنگ باشد. Decimal نیز تنظیمات دقت دارد و به‌معنای دقت نامحدود نیست. Python 3.15.0 documentation

۳. نوع str؛ متن، برچسب و شناسه

از رشته برای نام محصول، توضیح آزمایش، کد نمونه و سایر اطلاعات متنی استفاده می‌کنیم:

product_name = "حسگر دما"sample_code = "00125"

کد نمونه بالا بهتر است رشته باقی بماند؛ تبدیل آن به عدد، صفرهای ابتدایی را حذف می‌کند. عددی بودن ظاهر یک شناسه، دلیل کافی برای ذخیره آن به‌صورت عدد نیست.

ساخت خروجی خوانا با f-string

با f-string می‌توانید مقدار متغیرها را در متن قرار دهید:

product_name = "Sensor"quantity = 12unit_price = 49.50revenue = quantity * unit_pricemessage = f"{product_name}: {quantity} units, total = {revenue:.2f}"print(message)# Sensor: 12 units, total = 594.00

عبارت :.2f مقدار را در خروجی با دو رقم اعشار نمایش می‌دهد و نتیجه قالب‌بندی یک رشته است. Python 3.15.0 documentation

پاک‌سازی متن فارسی

در داده فارسی، اختلاف «ي» و «ی»، «ك» و «ک» یا فاصله‌های اضافی می‌تواند تطبیق متن را مختل کند:

raw_name = "  كابل پزشكي  "clean_name = (    raw_name    .strip()    .replace("ي", "ی")    .replace("ك", "ک"))print(clean_name)  # کابل پزشکی

رشته‌ها تغییرناپذیرند؛ این متدها رشته تازه می‌سازند. درباره نیم‌فاصله نیز سیاست مشخصی داشته باشید: حذف همه نیم‌فاصله‌ها ممکن است برای متن نمایشی مناسب نباشد. بهتر است متن اصلی را حفظ و نسخه استانداردشده را برای جست‌وجو یا تطبیق جداگانه تولید کنید.

۴. نوع bool؛ شرط و تصمیم‌گیری

نوع bool دو مقدار True و False دارد:

stock = 8requested_quantity = 3can_fulfill = stock >= requested_quantityprint(can_fulfill)  # True

برای ترکیب شرط‌ها از and، or و not استفاده کنید:

payment_confirmed = Truecan_ship = (stock >= requested_quantity) and payment_confirmed

مراقب تبدیل متن به Boolean باشید

رشته غیرخالی در ارزیابی منطقی درست محسوب می‌شود؛ حتی اگر محتوای آن "False" باشد:

print(bool("False"))  # Trueprint(bool(""))       # False

بنابراین، وضعیت‌های متنی را صریح تفسیر کنید:

raw_status = " false "status = raw_status.strip().lower()if status == "true":    
is_active = Trueelif status == "false":    
is_active = Falseelse:    
raise ValueError("Expected 'true' or 'false'")

همچنین and و or همیشه مقدار bool برنمی‌گردانند؛ ممکن است یکی از عملوندها را برگردانند. در شرط‌ها، عبارت‌های مقایسه‌ای روشن معمولاً خواناترند. Python 3.15.0 documentation

۵. مقدار None؛ وقتی مقداری ثبت نشده است

فرض کنید مقدار یک اندازه‌گیری هنوز وارد نشده است:

measurement = Noneif measurement is None:    
print("No measurement recorded")

None با صفر تفاوت معنایی دارد. صفر می‌تواند نتیجه معتبر آزمایش باشد، درحالی‌که None نشان دهد هنوز اندازه‌گیری انجام نشده است.

برای بررسی نبود مقدار، از is None استفاده کنید:

value = 0if value is None:    
print("Missing")else:    
print("Available:", value)

شرط کلی if not value برای این هدف کافی نیست؛ چون صفر، رشته خالی و False نیز در شرط نادرست ارزیابی می‌شوند.

۶. تشخیص و تبدیل نوع داده

برای مشاهده نوع مقدار از type() و برای بررسی تعلق آن به یک نوع از isinstance() استفاده کنید:

quantity = 12
print(type(quantity))             # <class 'int'>
print(isinstance(quantity, int))  # True

تبدیل نوع باید آگاهانه انجام شود:

print(int("12"))       # 12
print(float("12.5"))   # 12.5
print(str(12))        # "12"
print(int(12.9))      # 12

تبدیل float به int بخش اعشاری را به سمت صفر حذف می‌کند؛ گردکردن نیست. همچنین int("12.5") معتبر نیست. ورودی input() نیز رشته برمی‌گرداند و برای محاسبه به تبدیل نیاز دارد. Python 3.15.0 documentation

ورودی نامعتبر را مدیریت کنید

raw_quantity = "12"
try:    
quantity = int(raw_quantity)except 
ValueError:    
print("Enter a valid integer.")
else:    
if quantity < 0:        
print("Quantity cannot be negative.")    
else:        
print("Accepted:", quantity)

در اینجا دو بررسی جدا داریم: امکان تبدیل به عدد صحیح و معتبر بودن مقدار برای مسئله. تبدیل موفق به‌تنهایی به‌معنای معتبر بودن داده نیست. Python 3.15.0 documentation

۷. تفاوت صفر، متن خالی، False و None

در طراحی داده، این مقدارها را براساس معنای واقعی‌شان ثبت کنید:

مقدارمعنای احتمالی در پروژه
0تعداد یا اندازه‌گیری برابر صفر
"0"متن حاوی رقم صفر
""متن خالی
" "متن شامل فاصله
Falseوضعیت منفی یا شرط برقرارنشده
Noneمقدار ثبت‌نشده یا در دسترس نیست

برای مثال، موجودی صفر یعنی کالا تمام شده است؛ موجودی نامشخص یعنی اطلاعات قابل اتکا نداریم. یکسان کردن این دو می‌تواند گزارش موجودی را نادرست کند.

۸. داده‌های گمشده در pandas

در pandas، بسته به نوع ستون، مقدار گمشده ممکن است با NaN، NaT یا pd.NA نمایش داده شود. برای شناسایی آن‌ها از isna() استفاده کنید:

import pandas as pddf = pd.DataFrame({    "quantity": pd.Series([12, 0, None], dtype="Int64"),    "note": pd.Series(["checked", "", None], dtype="string"),})print(df.isna().sum())

خروجی:

quantity    1
note        1
dtype: int64

صفر و رشته خالی در این مثال گمشده محسوب نمی‌شوند. اگر رشته خالی طبق تعریف پروژه نشانه نبود اطلاعات است، آن را صریح تبدیل کنید:

df["note"] = df["note"].replace(r"^\s*$", pd.NA, regex=True)

حذف یا جایگزینی مقادیر گمشده باید با دلیل انجام شود. جایگزینی همه مقادیر گمشده با صفر ممکن است میانگین‌ها و سایر نتایج را تغییر دهد. pandas 3.0.6 documentation

پرسش‌های رایج

آیا None همان False است؟

خیر. False وضعیت منطقی منفی است؛ None معمولاً نبود مقدار را نشان می‌دهد. شباهت رفتار آن‌ها در شرط، به‌معنای یکسان بودن معنا نیست.

آیا "10" با 10 برابر است؟

خیر. اولی متن و دومی عدد صحیح است. پیش از تبدیل، بررسی کنید مقدار واقعاً عدد است یا شناسه‌ای که باید متنی باقی بماند.

آیا برای شماره تلفن باید از int استفاده کنیم؟

معمولاً خیر. شماره تلفن شناسه است و ممکن است صفر ابتدایی یا علامت + داشته باشد؛ ذخیره آن به‌صورت رشته مناسب‌تر است.

آیا round مشکل دقت float را کاملاً حل می‌کند؟

خیر. گردکردن جایگزین انتخاب روش محاسبه و سیاست دقت نیست. برای مقایسه علمی و محاسبه مالی، راهکار مناسب همان مسئله را انتخاب کنید.

چگونه مقدارهای گمشده هر ستون را بشماریم؟

از دستور زیر استفاده کنید:

df.isna().sum()

جمع‌بندی

نوع داده را با معنای مقدار هماهنگ کنید: تعداد برای int، اندازه‌گیری برای float، متن و شناسه برای str، وضعیت منطقی برای bool و نبود مقدار برای None.

پیش از محاسبه، نوع و اعتبار ورودی را بررسی کنید و تفاوت میان صفر، متن خالی و داده گمشده را حفظ کنید. این عادت‌ها در پروژه‌های کوچک شکل می‌گیرند و در تحلیل داده‌های بزرگ، ارزش خود را نشان می‌دهند. گام بعدی، یادگیری لیست‌ها و شیوه نگهداری و پردازش چند مقدار در کنار یکدیگر است.

منابع رسمی

برای ادامهٔ یادگیری، این منابع مرتبط آکادمی تک را ببینید:

دورهٔ اصول برنامه‌نویسی پایتون

Share: 

No comments yet! You be the first to comment.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *