→ بازگشت به وبلاگ

پایه برنامه‌نویسی با AI هرچی قبل از شروع باید بدونی

پایه برنامه‌نویسی با AI هرچی قبل از شروع باید بدونی
پایه برنامه‌نویسی با AI — جزوه‌ی کامل | Hozhi Learn
فصل ۰۱

برنامه‌نویسی واقعاً چیه؟

برنامه‌نویسی در واقعی‌ترین شکلش فقط سه کار می‌کند: یک چیزی می‌گیرد (ورودی)، رویش قانون اجرا می‌کند (پردازش)، و یک چیزی تحویل می‌دهد (خروجی). یک ماشین‌حساب ورودی می‌گیرد (دو عدد)، قانون اجرا می‌کند (جمع بزن)، خروجی می‌دهد (نتیجه).

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

چرا Python؟

  • نحوش به انگلیسیِ ساده نزدیک است — برای شروع بهترین انتخاب.
  • زبان شماره‌یک برای هوش مصنوعی، اتوماسیون و تحلیل داده است.
  • تقریباً هر ابزار AI کدنویسی روی Python فوق‌العاده قوی است.

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

خلاصه: برنامه‌نویسی = ورودی + پردازش + خروجی. Python بهترین نقطه‌ی شروع است.
تمرین فصل ۱
  1. سه اپلیکیشنی که روزانه استفاده می‌کنی را انتخاب کن و برای هرکدام «ورودی، پردازش، خروجی»‌اش را بنویس.
  2. از یک ابزار AI بپرس: «برنامه‌نویسی را با یک تشبیه غیر از ماشین‌حساب توضیح بده.»
فصل ۰۲

متغیرها و انواع داده

متغیر مثل یک جعبه است که رویش برچسب می‌زنی. داخلش یک چیزی می‌گذاری و هر وقت بخواهی با اسمِ برچسب به آن دسترسی داری.

Python
# هر متغیر یک نوع دارد
name = "Hozhi"       # str  (متن)
age = 25            # int  (عدد صحیح)
price = 49.99       # float (عدد اعشاری)
in_stock = True      # bool (درست/غلط)

رایج‌ترین ارورِ مبتدی‌ها از قاطی‌کردنِ نوع داده می‌آید — مثلاً نمی‌توانی عدد را مستقیم با متن جمع بزنی:

Python
age = 25
print("سن: " + age)        # ❌ TypeError
print("سن: " + str(age))   # ✅ درست

گرفتن ورودی از کاربر

input() همیشه یک رشته برمی‌گرداند — حتی اگر کاربر عدد تایپ کند. برای کار با عدد باید با int() تبدیلش کنی:

Python
name = input("اسمت چیه؟ ")
age = int(input("چند سالته؟ "))   # تبدیل به عدد
خلاصه: متغیر یعنی جعبه با برچسب. هر مقدار یک نوع دارد. قاطی‌کردن نوع‌ها رایج‌ترین منشأ ارور است.
پرامپت پیشنهادی
«من تازه مفهوم متغیر و انواع داده در Python را یاد گرفتم. ۵ مثال کد کوتاه بده که هرکدام یک اشتباه رایجِ مربوط به نوع داده دارد، و از من بخواه قبل از دیدن جواب حدس بزنم مشکل چیست.»
تمرین فصل ۲
  1. چهار متغیر بساز: اسمت (str)، سنت (int)، قدت به متر (float)، و اینکه دانشجو هستی یا نه (bool).
  2. برنامه‌ای بنویس که اسم و سنِ کاربر را با input() بگیرد و جمله‌ی «سلام [اسم]، تو [سن] سالته» را چاپ کند.
فصل ۰۳

عملگرها

عملگرها سه دسته‌ی اصلی دارند: ریاضی، مقایسه‌ای و منطقی.

Python — ریاضی
total = 10 + 5      # 15
remainder = 10 % 3  # 1 (باقیمانده)

# شکل کوتاه‌شده‌ی عملگرها:
count += 1   # یعنی count = count + 1
stock -= 2   # یعنی stock = stock - 2
Python — مقایسه‌ای و منطقی
5 == 5    # True  ← دو مساوی یعنی «برابره؟»
5 != 3    # True  ← «مساوی نیست؟»

if age >= 18 and has_ticket:   # هر دو باید درست باشند
    print("اجازه ورود داری")
نکته‌ی مهم
= یعنی «مقداردهی کن»، ولی == یعنی «آیا برابرند؟». قاطی‌کردنشان یکی از رایج‌ترین باگ‌هاست.
خلاصه: ریاضی محاسبه می‌کند، مقایسه‌ای True/False می‌دهد، منطقی (and/or/not) شرط‌ها را ترکیب می‌کند.
تمرین فصل ۳
  1. برنامه‌ای بنویس که یک عدد بگیرد و با عملگر % بگوید زوج است یا فرد.
  2. دو متغیر سن و «بلیط دارد یا نه» بساز و با and چک کن آیا شخص اجازه‌ی ورود دارد.
فصل ۰۴

شرط‌ها — قلبِ تصمیم‌گیری

برنامه‌نویسی یعنی به کامپیوتر بگویی: اگر این اتفاق افتاد، آن کار را بکن؛ وگرنه، این یکی را. این کاری است که if / elif / else انجام می‌دهد.

Python
temperature = 32

if temperature > 30:
    print("هوا گرمه، آب بخور")
elif temperature > 15:
    print("هوا معتدله")
else:
    print("هوا سرده، کتت رو بردار")
تورفتگی (Indentation)
بعد از هر شرط یک دو‌نقطه : می‌گذاری و خط بعد را یک تب تو می‌روی. این تورفتگی در Python بخشی از خودِ زبان است. رایج‌ترین دلیلِ کار نکردنِ کدِ کپی‌شده از AI، به‌هم‌ریختنِ همین تورفتگی است.
خلاصه: شرط‌ها یعنی «اگر X، پس Y؛ وگرنه Z». تورفتگی بخشی از قوانین زبان است.
مقایسه‌ی پرامپت
ضعیف: «یه سیستم تخفیف بساز»
قوی: «اگر مبلغ سبد بالای ۵۰۰ هزار بود ۱۰٪ تخفیف بده، اگر بالای یک میلیون بود ۲۰٪، وگرنه تخفیفی نده.» ← این دقیقاً ساختار if/elif/else را توضیح می‌دهد.
تمرین فصل ۴
  1. برنامه‌ای بنویس که نمره (۰ تا ۲۰) را بگیرد و بگوید عالی، خوب، قبول یا مردود.
  2. سیستم تخفیفِ مثالِ بالا را با if/elif/else پیاده کن.
فصل ۰۵

حلقه‌ها — تکرار بدون خستگی

حلقه یعنی «این کار را تکرار کن». دو نوع اصلی: for وقتی تعداد تکرار مشخص است، و while وقتی فقط شرطِ توقف مشخص است.

Python — حلقه‌ی for
for i in range(5):
    print(i)          # 0 1 2 3 4

fruits = ["سیب", "موز", "پرتقال"]
for fruit in fruits:
    print(fruit)      # هر میوه را یکی‌یکی چاپ می‌کند
Python — حلقه‌ی while
count = 0
while count < 5:
    print(count)
    count += 1          # حتماً باید شرط یک‌جا False شود
حلقه‌ی بی‌نهایت
در while اگر شرط هیچ‌وقت False نشود، در یک حلقه‌ی بی‌نهایت گیر می‌کنی و برنامه تمام نمی‌شود.
خلاصه: for برای تعداد مشخص، while برای شرطِ توقف. مراقب حلقه‌ی بی‌نهایت باش.
تمرین فصل ۵
  1. با یک حلقه‌ی for اعداد ۱ تا ۱۰ را چاپ کن.
  2. یک لیست از ۵ عدد بساز و با حلقه مجموعشان را حساب کن.
  3. حدس بزن range(3, 10, 3) چه چاپ می‌کند، بعد اجرا کن.
فصل ۰۶

توابع — بسته‌بندیِ منطق

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

Python
def calculate_discount(price, percent):
    discount = price * (percent / 100)
    return price - discount

result = calculate_discount(500000, 10)
print(result)    # 450000.0

def یعنی «تابع تعریف کن»، پارامترها ورودی‌ها هستند، و return یعنی «این مقدار را به‌عنوان نتیجه پس بده».

خلاصه: تابع یعنی بسته‌بندی یک منطق با ورودی و خروجی مشخص. یک‌بار بنویس، هزاربار استفاده کن.
نکته‌ی پرامپت
وقتی از AI کد می‌خواهی، اگر بگویی «این را به‌صورت یک تابع مجزا بنویس»، خروجی تمیزتر و قابل‌فهم‌تر می‌شود.
تمرین فصل ۶
  1. تابعی بنویس که دو عدد بگیرد و بزرگ‌ترشان را برگرداند.
  2. تابعی بنویس که یک اسم بگیرد و جمله‌ی خوش‌آمدگویی برگرداند.
فصل ۰۷

لیست و دیکشنری

لیست یعنی مجموعه‌ی مرتب از چیزها (با اندیس از صفر). دیکشنری یعنی داده‌ای که با «کلید و مقدار» ذخیره می‌شود.

Python — لیست و متدهایش
fruits = ["سیب", "موز", "پرتقال"]

print(fruits[0])       # سیب  (شمارش از صفر)
len(fruits)             # 3

fruits.append("انگور")   # اضافه به آخر
fruits.remove("موز")     # حذف با اسم
removed = fruits.pop(0)  # حذف با اندیس + برگرداندن مقدار
fruits.insert(1, "خربزه") # اضافه در جایگاه مشخص
نکته درباره‌ی pop
هر بار که pop() می‌کنی، لیست جمع می‌شود و اندیس‌ها دوباره از نو شماره‌گذاری می‌شوند. اگر می‌خواهی بدانی چه چیزی حذف شد، همان لحظه با = در یک متغیر ذخیره‌اش کن.
Python — دیکشنری
customer = {
    "name": "علی",
    "age": 30,
    "is_subscribed": True
}
print(customer["name"])          # علی
customer["email"] = "ali@x.com"  # اضافه‌کردن کلید جدید
خلاصه: لیست = مجموعه‌ی مرتب (اندیس از صفر)، دیکشنری = کلید-مقدار. اکثر داده‌های دنیای واقعی به این دو شکل‌اند.
تمرین فصل ۷
  1. لیستی از ۴ کشور بساز، یکی را با append اضافه و یکی را با remove حذف کن.
  2. دیکشنری‌ای برای خودت بساز با کلیدهای name، age، city و مقدار city را چاپ کن.
  3. یک لیست از دیکشنری‌ها (چند مشتری) بساز و با حلقه اسم همه را چاپ کن.
فصل ۰۸

کتابخانه‌ها و Import

هیچ‌وقت چرخ را از اول اختراع نکن. هزاران ابزارِ آماده به‌صورت «کتابخانه» نوشته شده‌اند، و برای استفاده از آن‌ها از import استفاده می‌کنیم.

Python — کتابخانه‌ی استاندارد
import random

number = random.randint(1, 100)   # عدد تصادفی ۱ تا ۱۰۰
print(number)
Terminal — نصب کتابخانه‌ی شخص‌ثالث
pip install requests
دو ارور رایج
ModuleNotFoundError یعنی کتابخانه نصب نیست → با pip install نصبش کن.
No matching distribution found یعنی اسم کتابخانه را اشتباه نوشتی (مثلاً request به‌جای requests).
خلاصه: import یعنی استفاده از کد دیگران. بعضی آماده‌اند، بعضی را باید با pip install نصب کنی.
تمرین فصل ۸
  1. با random.choice یک عضو تصادفی از یک لیست انتخاب کن.
  2. کتابخانه‌ی datetime را import کن و تاریخ امروز را چاپ کن (از AI بپرس چطور).
فصل ۰۹

کار با JSON

JSON فرمتِ استانداردِ ذخیره و ارسال داده است که همه‌ی زبان‌ها می‌فهمند. تقریباً هر داده‌ای که از یک API یا هوش مصنوعی می‌گیری به این شکل است — و بسیار شبیه دیکشنریِ Python.

JSON
{
  "name": "علی",
  "age": 30,
  "is_subscribed": true,
  "courses": ["پایتون", "طراحی"]
}
Python — تبدیل دو طرفه
import json

data = {"name": "علی", "age": 30}
json_text = json.dumps(data)     # دیکشنری → متن JSON

parsed = json.loads(json_text)   # متن JSON → دیکشنری
print(parsed["name"])          # علی
خلاصه: JSON یعنی همان دیکشنری، به شکل استاندارد. dumps به متن، loads به دیکشنری.
تمرین فصل ۹
  1. یک دیکشنری از اطلاعات خودت بساز و با json.dumps به متن تبدیلش کن.
  2. همان متن را با json.loads برگردان و یکی از مقادیرش را چاپ کن.
فصل ۱۰

ساختار فایل پروژه

یک پروژه‌ی واقعی کدش را در چند فایل و پوشه‌ی مرتب پخش می‌کند، نه یک فایل غول‌پیکر.

ساختار نمونه
my_project/
├── main.py           # نقطه‌ی شروع برنامه
├── requirements.txt  # لیست کتابخانه‌های موردنیاز
├── .env              # اطلاعات محرمانه
├── .gitignore        # فایل‌هایی که نباید آپلود شوند
├── README.md         # توضیح پروژه
└── src/
    ├── models.py     # ساختارهای داده
    └── utils.py      # توابع کمکی
خلاصه: main.py نقطه‌ی شروع، requirements.txt لیست کتابخانه‌ها. ابزارهای AI مثل Claude Code و Cursor معمولاً خودشان همین ساختار را می‌سازند.
تمرین فصل ۱۰
  1. یک پوشه‌ی پروژه بساز و داخلش main.py و README.md ایجاد کن.
  2. در README بنویس پروژه‌ات چه‌کار می‌کند و چطور اجرا می‌شود.
فصل ۱۱

کار با API

API مثل گارسونِ رستوران است: یک واسطه که به تو اجازه می‌دهد از یک سرویس دیگر چیزی بخواهی، بدون آنکه بدانی پشت صحنه چطور کار می‌کند.

Python — یک API واقعی و بدون کلید
import requests

response = requests.get("https://api.agify.io?name=ali")
data = response.json()
print(f"سنِ حدسی: {data['age']}")
Python — چک‌کردن Status Code
response = requests.get("https://api.agify.io?name=ali")

if response.status_code == 200:   # 200 یعنی موفق
    data = response.json()
    print(data)
else:
    print(f"مشکل: {response.status_code}")
کدیعنی چه
200موفقیت‌آمیز
404پیدا نشد
401اجازه نداری (مشکل کلید دسترسی)
500مشکل از سمت سرور
آدرس‌های نمونه
وقتی در یک مثال آدرسی مثل api.example.com می‌بینی، این یک جای‌نگه‌دار است، نه یک API واقعی. قبل از اجرا باید با آدرس واقعی جایگزینش کنی، وگرنه ConnectionError می‌گیری.
خلاصه: API واسطه‌ای است برای درخواست از سرویس دیگر. GET می‌گیرد، POST می‌سازد، status code نتیجه را می‌گوید.
تمرین فصل ۱۱
  1. کد agify.io را با اسم خودت اجرا کن و نتیجه را ببین.
  2. قبل از خواندن داده، status code را چاپ کن و مطمئن شو ۲۰۰ است.
فصل ۱۲

متغیرهای محیطی و امنیت (.env)

هیچ‌وقت کلید یا رمز را مستقیم در کد ننویس. اگر کدت را جایی مثل گیت‌هاب آپلود کنی، آن کلید برای همه — و برای ربات‌های خودکار — قابل‌دیدن است.

راه غلط
api_key = "sk-abc123verysecret" ← این را هرگز مستقیم در کد ننویس.
فایل .env
OPENAI_API_KEY=sk-abc123xyz456
STORE_NAME=هژی لرن
Python — خواندن از .env
from dotenv import load_dotenv
import os

load_dotenv()
api_key = os.environ.get("OPENAI_API_KEY")
فایل .gitignore
.env
__pycache__/
*.pyc
.venv/
خلاصه: کلید و رمز همیشه در فایل .env جدا می‌ماند و در .gitignore نادیده گرفته می‌شود.
تمرین فصل ۱۲
  1. یک فایل .env بساز و یک متغیر STORE_NAME در آن بگذار.
  2. در کد بخوانش و در یک پیام خوش‌آمدگویی چاپش کن.
فصل ۱۳

State — وضعیت برنامه (اختیاری)

State یعنی چیزهایی که برنامه در یک لحظه‌ی مشخص «به‌خاطر» دارد و در طول زمان تغییر می‌کند — مثل محتویاتِ سبد خرید.

Python
cart = []   # وضعیتِ سبد خرید

def add_to_cart(item):
    cart.append(item)
    return cart

add_to_cart("دوره پایتون")
add_to_cart("دوره طراحی")
خلاصه: State یعنی خاطره‌ی موقتِ برنامه در حین اجرا. در وب‌اپ‌ها مدیریتش یکی از چالش‌برانگیزترین بخش‌هاست.
تمرین فصل ۱۳
  1. یک سبد خرید بساز و سه محصول به آن اضافه کن، بعد کل سبد را چاپ کن.
فصل ۱۴

مستندسازی (اختیاری)

مستندسازی یعنی توضیح‌دادنِ اینکه کد چه‌کار می‌کند — برای خودت شش ماه بعد، برای دیگران، و حتی برای خودِ AI وقتی دوباره کد را می‌بیند.

Python — کامنت
# این تابع تخفیف را حساب می‌کند و قیمت نهایی را برمی‌گرداند
def calculate_discount(price, percent):
    return price - (price * percent / 100)
نکته‌ی پرامپت
وقتی از AI کد می‌خواهی، بگو «برای هر تابع یک کامنتِ کوتاه هم بنویس». هم خودت بهتر می‌فهمی، هم اگر فردا همان کد را برای تغییر به AI بدهی، سریع‌تر منطق را می‌فهمد.
خلاصه: خط‌هایی که با # شروع می‌شوند کامنت‌اند و اجرا نمی‌شوند.
تمرین فصل ۱۴
  1. به یکی از توابعی که در فصل‌های قبل نوشتی، یک کامنت توضیحی اضافه کن.
فصل ۱۵

خطاها و دیباگ کردن

ارور دشمن تو نیست؛ پیامِ کامپیوتر است که دقیقاً می‌گوید مشکل کجاست. مهم این است که به‌جای هول‌کردن، بخوانی‌اش.

یک ارور نمونه
age = "25"
print(age + 5)

# TypeError: can only concatenate str (not "int") to str
# یعنی: داری رشته را با عدد جمع می‌زنی
نوع اروریعنی چه
SyntaxErrorکد از نظر گرامری غلط است
NameErrorاز متغیری استفاده کردی که تعریف نشده
TypeErrorدو نوع داده‌ی ناسازگار
IndexErrorاندیسی که در لیست وجود ندارد
KeyErrorکلیدی که در دیکشنری وجود ندارد

پروتکل سه‌مرحله‌ای دیباگ

  1. آخرین خط ارور را بخوان (خلاصه‌ی اصلی همان‌جاست).
  2. شماره‌ی خط را پیدا کن و همان خط را نگاه کن.
  3. اگر هنوز گیر بودی، درست از AI بپرس (پرامپت زیر).
پرامپت درستِ دیباگ
«این کد را اجرا کردم و این ارور را گرفتم: [متن کامل ارور]. فکر می‌کنم مشکل از [حدس خودت] باشد. می‌توانی توضیح بدهی چرا این اتفاق افتاده، قبل از اینکه کد اصلاح‌شده را بدهی؟»
خلاصه: ارور راهنماست. آخرین خط را بخوان، شماره‌ی خط را پیدا کن، و هنگام پرسیدن از AI متن کامل ارور و حدس خودت را بده.
تمرین فصل ۱۵
  1. عمداً یک ارور بساز (مثلاً از متغیری تعریف‌نشده استفاده کن) و نوعش را تشخیص بده.
  2. ارور را با پرامپت بالا به یک ابزار AI بده و جوابش را با تشخیص خودت مقایسه کن.
فصل ۱۶

چطور درست با AI کد بزنیم

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

«چی می‌خوام» را بگو، نه «چطور بسازش»

مقایسه‌ی پرامپت
ضعیف: «یک تایمر بساز که هر ساعت دیتابیس را چک کند»
قوی: «وقتی کاربر تا ساعت ۹ صبح اولویت‌های روزش را ثبت نکرده، به او یادآوری نشان بده.» ← نتیجه را توصیف می‌کند، نه روش را.

همیشه بگو کجا ایستادی — کانتکست بده

مقایسه‌ی پرامپت
ضعیف: «یک تابع بنویس که فایل بخواند»
قوی: «من با Python 3.13 روی ویندوز کار می‌کنم. یک فایل products.json دارم که لیستی از دیکشنری‌هاست با کلیدهای name، price، stock. یک تابع بنویس که این فایل را بخواند و لیست محصولات را برگرداند.»

هفت قانون طلایی

  1. یک قابلیت در هر پرامپت. اول لاگین را بخواه، تستش کن، بعد برو سراغ بعدی.
  2. همیشه کد را اجرا کن. «درست به‌نظر می‌رسد» با «واقعاً کار می‌کند» فرق دارد.
  3. ادعای «تمام شد» را باور نکن. کدِ بدون بازبینی، ریسک امنیتیِ بیشتری دارد.
  4. قبل از کد، برنامه‌اش را بخواه. «اول بگو چه فایل‌ها و توابعی می‌سازی و چرا.»
  5. تغییرات کوچک بخواه. «فقط تابع X را عوض کن، بقیه را دست نزن.»
  6. نسخه‌ی سالم را نگه دار. قبل از هر تغییر بزرگ، یک کپی بگیر.
  7. بپرس «چرا این‌طوری نوشتی؟» این فرقِ کسی است که یاد می‌گیرد با کسی که فقط کپی می‌کند.
دو هشدار مهم
کتابخانه‌ی خیالی: گاهی AI اسم کتابخانه‌ای می‌دهد که وجود ندارد. قبل از pip install اسمش را در گوگل یا pypi.org چک کن.

اطلاعات محرمانه: وقتی کدت را در چتِ AI می‌گذاری، اول مطمئن شو کلید API یا رمزی در آن نیست؛ اگر هست جایش بنویس YOUR_API_KEY_HERE.
خلاصه: نتیجه را توصیف کن نه مراحل، کانتکست بده، یک قابلیت در هر پرامپت، همیشه تست کن، نسخه‌ی سالم نگه دار، و بپرس «چرا این‌طوری؟»
تمرین فصل ۱۶
  1. یک پرامپتِ ضعیف بنویس، بعد همان را با کانتکست و توصیفِ نتیجه به یک پرامپتِ قوی تبدیل کن.
  2. یک درخواست کوچک به AI بده و قبل از گرفتن کد، از او بخواه اول «برنامه‌اش» را بگوید.
فصل ۱۷

پروژه‌ی نهایی — سیستم مدیریت سفارش

همه‌ی چیزی که یاد گرفتیم را در یک پروژه‌ی واقعی کنار هم می‌گذاریم. این پروژه را در چهار مرحله می‌سازیم.

مرحله ۱: نسخه‌ی ساده

main.py
products = [
    {"name": "دوره پایتون", "price": 490000, "stock": 5},
    {"name": "دوره طراحی", "price": 690000, "stock": 0},
]

def place_order(product_name, quantity):
    for product in products:
        if product["name"] == product_name:
            if product["stock"] >= quantity:
                product["stock"] -= quantity
                return f"✅ سفارش ثبت شد: {product_name}"
            else:
                return "❌ موجودی کافی نیست"
    return "❌ محصول پیدا نشد"

print(place_order("دوره پایتون", 2))

دقت کن آخرین return (محصول پیدا نشد) بیرونِ حلقه است — فقط وقتی کل لیست را گشتیم می‌توانیم مطمئن باشیم محصول وجود ندارد.

مرحله ۲: خواندن داده از فایل

products.json
[
  {"name": "دوره پایتون", "price": 490000, "stock": 5},
  {"name": "دوره طراحی", "price": 690000, "stock": 0}
]
main.py
import json

with open("products.json", "r", encoding="utf-8") as file:
    products = json.load(file)

"r" یعنی حالت خواندن، و encoding="utf-8" تضمین می‌کند فارسی درست خوانده شود.

مرحله ۳: لحظه‌ی «آهان!» — ذخیره‌ی تغییرات

چرا تغییرات ذخیره نمی‌شوند؟
اگر برنامه را دوبار اجرا کنی، انگار هیچ تغییری نکرده. چون json.load فقط یک کپی از فایل را در حافظه آورد. تا فایل را دوباره ننویسی، تغییرات ذخیره نمی‌شوند (همان مفهوم State).
main.py — ذخیره در فایل
def save_products():
    with open("products.json", "w", encoding="utf-8") as file:
        json.dump(products, file, ensure_ascii=False, indent=2)

"w" یعنی نوشتن (محتوای قبلی را پاک می‌کند)، ensure_ascii=False فارسی را سالم نگه می‌دارد، indent=2 فایل را خوانا می‌کند.

مرحله ۴: گرفتن ورودی از کاربر

main.py
product_name = input("اسم محصول: ")
quantity = int(input("چند تا؟ "))   # int چون input رشته می‌دهد

print(place_order(product_name, quantity))
خلاصه: یک پروژه‌ی واقعی چیزی جز ترکیبِ همان مفاهیم ساده نیست — متغیر، شرط، حلقه، تابع، ساختار داده، فایل و تنظیمات.
پرامپت برای گسترش پروژه
«به این پروژه یک قابلیت اضافه کن که تاریخِ هر سفارش را در یک فایل جدا ذخیره کند. اول توضیح بده چه ساختاری استفاده می‌کنی، بعد فقط تابعِ لازم را اضافه کن و بقیه‌ی کد را دست نزن.»
تمرین نهایی — حتماً انجام بده
  1. تابعی بنویس که محصول جدید به لیست اضافه کند.
  2. کاری کن اگر کاربر عدد منفی وارد کرد، برنامه قبولش نکند.
  3. مجموع مبلغ سفارش را حساب کن و نشان بده.
فصل ۱۸

جمع‌بندی و قدم بعدی

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

قدم بعدی: یک پروژه‌ی کوچکِ شخصی انتخاب کن — چیزی که واقعاً به آن نیاز داری — و با کمک AI بسازش، در حالی که هر خط کد را با همین مفاهیم می‌خوانی و می‌فهمی.

چالش پایانی
  1. یک مشکل کوچک از زندگی روزمره‌ات را انتخاب کن که با یک اسکریپت ساده حل شود.
  2. با پرامپت‌های اصولیِ فصل ۱۶ آن را با کمک AI بساز.
  3. بعد از هر بخش، از AI بپرس «چرا این‌طوری نوشتی؟» و جوابش را یاد بگیر.

ویدیوی کامل این آموزش را دیدی؟

این جزوه همراهِ ویدیوی کامل است. برای دیدن توضیح گام‌به‌گامِ هر بخش، ویدیو را تماشا کن.

تماشای ویدیوی کامل

ساخته‌شده برای دانشجویانِ Hozhi Learn — مسیر یادگیری برنامه‌نویسی با هوش مصنوعی