سرنخ — خودآموز برنامه‌نویسی برای هوش مصنوعی (مقدماتی)

فصل ۲ از ۱۱

پیشرفت ترم
۰٪

ترم ۱ · پایتون از صفر، داخلِ Colab

مقدار، متغیر، نوع

فصل ۲پیش‌نمایش رایگان

در این فصل چه یاد می‌گیری#

تا اینجا هر چیزی که می‌خواستی، همان لحظه می‌نوشتی و می‌رفت. حالا یاد می‌گیری مقدارها را نگه داری: اسمی رویشان بگذاری، بعداً دوباره صدایشان بزنی، و رویشان حساب کنی. این کوچک‌ترین قدمِ ممکن است و در عینِ حال همان چیزی است که یک دستور را به یک برنامه تبدیل می‌کند. ضمناً می‌فهمی پایتون هر مقدار را در یک نوع می‌بیند، و چرا این نوع تعیین می‌کند که با آن مقدار چه کارهایی می‌شود کرد.

چهار ظرفِ برچسب‌خورده با شکل‌های متفاوت که هرکدام محتوای متفاوتی دارند و یک دست برچسبی را از یکی به دیگری منتقل می‌کند

آخر این فصل می‌توانی:

  • یک مقدار را در متغیر ذخیره کنی و بعداً به‌کارش ببری
  • با f-string متن و مقدار را در یک جمله ترکیب کنی
  • چهار نوعِ پایهٔ پایتون را تشخیص بدهی و با type() نوعِ هر چیزی را بپرسی
  • تفاوتِ / و // و % را بگویی
  • خطای TypeError را بشناسی و با تبدیلِ نوع رفعش کنی

قبل از شروع#

از فصل ۱: print() هر چیزی را چاپ می‌کند، و گیومه یعنی «این متن است، نه دستور».

از فصل ۱: نوت‌بوک را از بالا به پایین اجرا کن — این فصل مهم‌ترش می‌کند، چون سلول‌های بعدی به متغیرهایی که در سلول‌های قبلی ساخته‌ای وابسته‌اند.

📓 نوت‌بوک: نوت‌بوک این فصل را در Colab باز کن — همهٔ کدهای این فصل آماده و به‌ترتیب داخلش هست.

۱. متغیر: برچسبی که روی یک مقدار می‌چسبانی#

name = "سارا"
age = 27
print(name)
print(age)
سارا
27

علامتِ = اینجا «مساوی» ریاضی نیست؛ یعنی «این مقدار را بگذار در این اسم». سمتِ راست محاسبه می‌شود، و نتیجه‌اش در اسمِ سمتِ چپ ذخیره می‌شود. به این اسم می‌گویند متغیر (variable).

از این لحظه به بعد، هر جای نوت‌بوک بنویسی name، پایتون همان "سارا" را می‌فهمد — تا وقتی که چیزِ دیگری داخلش بگذاری.

age = age + 1
print(age)
28

این خط در ریاضی بی‌معناست («عدد یکی بیشتر از خودش است»؟) ولی در برنامه‌نویسی کاملاً واضح است: اول سمتِ راست حساب می‌شود (27 + 1 می‌شود 28بعد نتیجه در age گذاشته می‌شود. مقدارِ قبلی از بین می‌رود.

چک کن: خروجی باید 28 باشد. اگر 27 دیدی، یعنی سلول را دوباره اجرا نکرده‌ای. اگر 29 دیدی، یعنی سلول را دو بار اجرا کرده‌ای — و همین‌جا اولین نشانهٔ چیزی را دیدی که در فصلِ ۱۰ کامل بازش می‌کنیم: نوت‌بوک حافظه دارد، و اجرای دوبارهٔ یک سلول همیشه بی‌ضرر نیست.

نامِ متغیر را خودت انتخاب می‌کنی، ولی سه قاعده دارد: با حرف یا _ شروع شود (نه با عدد)، فاصله نداشته باشد، و به بزرگی و کوچکیِ حروف حساس است — age و Age دو متغیرِ کاملاً جدا هستند.

💡 نکته: اسمِ متغیر را انگلیسی و معنادار بگذار. x و a1 امروز واضح‌اند و سه هفتهٔ دیگر معما. در کلِ این دوره اسم‌ها انگلیسی‌اند حتی وقتی داده فارسی است — چون هر کدی که بعداً بخوانی همین‌طور است.

۲. f-string: متن و مقدار را با هم بنویس#

چاپِ خشکِ متغیر کافی نیست؛ معمولاً می‌خواهی داخلِ یک جمله بنشیند.

print(f"{name} {age} ساله است.")
سارا 28 ساله است.

آن حرفِ f قبل از گیومه به پایتون می‌گوید «داخلِ این متن دنبالِ آکولاد بگرد». هر چیزی که بینِ { و } باشد محاسبه می‌شود و نتیجه‌اش سرِ جایش می‌نشیند. به این می‌گویند f-string و در کلِ دوره ابزارِ اصلیِ ساختنِ پیام است.

داخلِ آکولاد فقط اسمِ متغیر نیست؛ هر محاسبه‌ای می‌تواند باشد:

print(f"سال دیگر {age + 1} ساله می‌شود.")
سال دیگر 29 ساله می‌شود.

۳. نوع: پایتون هر مقدار را چه می‌بیند#

هر مقدار در پایتون یک نوع (type) دارد، و نوع تعیین می‌کند چه کارهایی با آن مقدار مجاز است. چهار نوعِ پایه‌ای که در کلِ این دوره با آن‌ها کار داری:

print(type(name))
print(type(age))
print(type(3.5))
print(type(True))
<class 'str'>
<class 'int'>
<class 'float'>
<class 'bool'>
  • str (از string) — متن. هر چیزی داخلِ گیومه.
  • int (از integer) — عددِ صحیح، بدونِ اعشار.
  • float — عددِ اعشاری. اسمش از «ممیزِ شناور» می‌آید.
  • bool (از boolean) — فقط دو مقدار دارد: True و False. با حرفِ بزرگ، و بدونِ گیومه.

تابعِ type() هر وقت گیج شدی جوابِ قطعی می‌دهد. عادت کن وقتی کدی رفتارِ عجیبی دارد، اول نوعِ متغیرها را بپرسی — این ساده‌ترین و پرکاربردترین تکنیکِ اشکال‌زدایی در پایتون است.

قبل از ادامه، جواب بده: "27" و 27 هر دو بیست‌وهفت را نشان می‌دهند. آیا از نظرِ پایتون یکی هستند؟ جواب: نه. اولی str است و دومی int. اولی یک متن است که تصادفاً از رقم ساخته شده؛ نمی‌شود رویش حساب کرد. بخشِ ۵ نشان می‌دهد این تفاوت چطور به یک خطای واقعی تبدیل می‌شود.

۴. عملگرها: حساب و مقایسه#

print(8 / 2)
print(8 // 3)
print(9 % 2)
print(2 ** 10)
4.0
2
1
1024

اینجا بدهیِ فصلِ قبل را می‌پردازیم: / همیشه float می‌دهد، حتی وقتی جواب رُند است. برای همین 8 / 2 شد 4.0 نه 4. اگر عددِ صحیح می‌خواهی از // استفاده کن که تقسیمِ صحیح است و اعشار را دور می‌اندازد. % باقی‌ماندهٔ تقسیم را می‌دهد و ** توان است.

% بی‌ربط به‌نظر می‌رسد ولی یکی از پرکاربردترین‌هاست: n % 2 اگر صفر باشد، n زوج است. در فصلِ حلقه‌ها مرتب به‌کارش می‌بریم.

عملگرهای مقایسه جوابشان همیشه bool است:

print(age > 18)
print(age == 28)
print(name != "سارا")
True
True
False

⚠️ مواظب باش: = و == دو چیزِ کاملاً متفاوت‌اند. = مقدار را ذخیره می‌کند؛ == می‌پرسد «آیا این دو برابرند؟» و True یا False می‌دهد. جابه‌جا نوشتنشان یکی از رایج‌ترین اشتباهاتِ تازه‌کارهاست و در فصلِ بعدی که شرط داریم، دردسرساز می‌شود.

۵. یک خطای واقعی: جمعِ متن و عدد#

حالا ببینیم آن تفاوتِ نوع چطور خودش را نشان می‌دهد. یک سلولِ خالی بساز و این را امتحان کن:

print("سن: " + age)
TypeError: can only concatenate str (not "int") to str

پیام دقیقاً می‌گوید چه شده: «فقط str را می‌شود به str چسباند، نه int». علامتِ + برای دو متن یعنی «به‌هم بچسبان» و برای دو عدد یعنی «جمع کن» — ولی برای یکی از هرکدام تعریفی ندارد و پایتون به‌جای حدس‌زدن، می‌ایستد و شکایت می‌کند.

این رفتار عمدی و خوب است. زبانی که اینجا حدس بزند، سرِ دادهٔ واقعی سکوت می‌کند و جوابِ غلط می‌دهد؛ پایتون ترجیح می‌دهد همان‌جا داد بزند.

دو راهِ رفع:

print("سن: " + str(age))
print(f"سن: {age}")
سن: 28
سن: 28

راهِ اول عدد را با str() به متن تبدیل می‌کند. راهِ دوم f-string است که خودش این تبدیل را انجام می‌دهد. راهِ دوم تقریباً همیشه بهتر است و در کلِ این دوره از همان استفاده می‌کنیم.

تبدیل در جهتِ عکس هم کار می‌کند:

text_number = "42"
print(int(text_number) + 8)
print(float("3.5") * 2)
50
7.0

این را در ترمِ ۲ خیلی زیاد لازم می‌شوی: وقتی داده را از یک فایل می‌خوانی، همه‌چیز متن است — حتی ستونی که پُر از عدد است. تبدیلِ نوع اولین کاری است که روی دادهٔ واقعی می‌کنی.

🔧 اگر کار نکرد: ValueError: invalid literal for int() with base 10: 'سلام' یعنی خواسته‌ای چیزی را به عدد تبدیل کنی که اصلاً عدد نیست. int() جادو نمی‌کند؛ فقط متنی را که واقعاً از رقم ساخته شده تبدیل می‌کند. اگر روی دادهٔ واقعی این را دیدی، معنایش این است که یک ردیفِ خراب داری — و همین‌جاست که کارِ داده‌کاوی شروع می‌شود.

📏 اندازه بگیر: هر وقت خروجی‌ای گرفتی که انتظارش را نداشتی، اول type() را روی متغیرهای دخیل صدا بزن. بیشترِ «چرا این کار نمی‌کند؟»های هفتهٔ اول، جوابشان یک str است که فکر می‌کردی int است.

🤖 از دستیارت بپرس: «در پایتون فرقِ int و float چیست و چرا 0.1 + 0.2 دقیقاً 0.3 نمی‌شود؟» جوابش را بخوان ولی خودت هم print(0.1 + 0.2) را اجرا کن و ببین چه می‌دهد. این یکی از قدیمی‌ترین شگفتی‌های کارِ با عددِ اعشاری در همهٔ زبان‌هاست و بد نیست از همین حالا بدانی وجود دارد.

واژه‌های تازهٔ این فصل#

کلمه تلفظ به حروف فارسی یعنی چه
variable وَریِبِل اسمی که روی یک مقدار می‌گذاری تا بعداً صدایش بزنی
type تایپ نوعِ یک مقدار؛ تعیین می‌کند چه کارهایی با آن مجاز است
str / int / float / bool اِس‌تی‌آر / اینت / فلوت / بول متن / عددِ صحیح / عددِ اعشاری / درست-نادرست
f-string اِف‌استرینگ متنی که با f شروع می‌شود و داخلِ {} مقدار می‌گیرد
TypeError تایپ اِرور خطای ناسازگاریِ نوع — کاری خواسته‌ای که با این نوع تعریف نشده

تمرین‌ها

اول خودت فکر کن یا امتحان کن — بعد اینجا را باز کن.

در فصل بعد#

حالا می‌توانی یک مقدار را نگه داری. ولی دادهٔ واقعی هیچ‌وقت یک مقدار نیست — یک مجموعه است: قیمتِ صد محصول، نامِ هزار مشتری، دمای هر روزِ سال. فصلِ بعد اولین ظرفِ چندتایی را می‌آورد: list. آنجا یاد می‌گیری چطور ده‌ها مقدار را در یک متغیر نگه داری و به هرکدام جداگانه دسترسی داشته باشی — و این دقیقاً همان قدمی است که کارِ داده از آنجا شروع می‌شود.

به آخر این فصل رسیدی!

اگر ساختی و جواب داد، این دکمه مال توست.