پایه برنامهنویسی با AI هرچی قبل از شروع باید بدونی
برنامهنویسی واقعاً چیه؟
برنامهنویسی در واقعیترین شکلش فقط سه کار میکند: یک چیزی میگیرد (ورودی)، رویش قانون اجرا میکند (پردازش)، و یک چیزی تحویل میدهد (خروجی). یک ماشینحساب ورودی میگیرد (دو عدد)، قانون اجرا میکند (جمع بزن)، خروجی میدهد (نتیجه).
وقتی این مدل ذهنی را داشته باشی، حتی وقتی AI برایت کد مینویسد میتوانی بپرسی: این تابع چه ورودیای میگیرد؟ چه پردازشی میکند؟ چه خروجیای برمیگرداند؟ همین سه سؤال، بخش بزرگی از کارِ فهمیدنِ هر کد ناآشنا را حل میکند.
چرا Python؟
- نحوش به انگلیسیِ ساده نزدیک است — برای شروع بهترین انتخاب.
- زبان شمارهیک برای هوش مصنوعی، اتوماسیون و تحلیل داده است.
- تقریباً هر ابزار AI کدنویسی روی Python فوقالعاده قوی است.
مفاهیمی که یاد میگیری (متغیر، شرط، حلقه، تابع) در هر زبان دیگری هم همینها هستند، فقط شکل نوشتنشان کمی فرق میکند.
- سه اپلیکیشنی که روزانه استفاده میکنی را انتخاب کن و برای هرکدام «ورودی، پردازش، خروجی»اش را بنویس.
- از یک ابزار AI بپرس: «برنامهنویسی را با یک تشبیه غیر از ماشینحساب توضیح بده.»
متغیرها و انواع داده
متغیر مثل یک جعبه است که رویش برچسب میزنی. داخلش یک چیزی میگذاری و هر وقت بخواهی با اسمِ برچسب به آن دسترسی داری.
# هر متغیر یک نوع دارد
name = "Hozhi" # str (متن)
age = 25 # int (عدد صحیح)
price = 49.99 # float (عدد اعشاری)
in_stock = True # bool (درست/غلط)رایجترین ارورِ مبتدیها از قاطیکردنِ نوع داده میآید — مثلاً نمیتوانی عدد را مستقیم با متن جمع بزنی:
age = 25
print("سن: " + age) # ❌ TypeError
print("سن: " + str(age)) # ✅ درستگرفتن ورودی از کاربر
input() همیشه یک رشته برمیگرداند — حتی اگر کاربر عدد تایپ کند. برای کار با عدد باید با int() تبدیلش کنی:
name = input("اسمت چیه؟ ")
age = int(input("چند سالته؟ ")) # تبدیل به عدد- چهار متغیر بساز: اسمت (str)، سنت (int)، قدت به متر (float)، و اینکه دانشجو هستی یا نه (bool).
- برنامهای بنویس که اسم و سنِ کاربر را با
input()بگیرد و جملهی «سلام [اسم]، تو [سن] سالته» را چاپ کند.
عملگرها
عملگرها سه دستهی اصلی دارند: ریاضی، مقایسهای و منطقی.
total = 10 + 5 # 15
remainder = 10 % 3 # 1 (باقیمانده)
# شکل کوتاهشدهی عملگرها:
count += 1 # یعنی count = count + 1
stock -= 2 # یعنی stock = stock - 25 == 5 # True ← دو مساوی یعنی «برابره؟»
5 != 3 # True ← «مساوی نیست؟»
if age >= 18 and has_ticket: # هر دو باید درست باشند
print("اجازه ورود داری")= یعنی «مقداردهی کن»، ولی == یعنی «آیا برابرند؟». قاطیکردنشان یکی از رایجترین باگهاست.- برنامهای بنویس که یک عدد بگیرد و با عملگر
%بگوید زوج است یا فرد. - دو متغیر سن و «بلیط دارد یا نه» بساز و با
andچک کن آیا شخص اجازهی ورود دارد.
شرطها — قلبِ تصمیمگیری
برنامهنویسی یعنی به کامپیوتر بگویی: اگر این اتفاق افتاد، آن کار را بکن؛ وگرنه، این یکی را. این کاری است که if / elif / else انجام میدهد.
temperature = 32
if temperature > 30:
print("هوا گرمه، آب بخور")
elif temperature > 15:
print("هوا معتدله")
else:
print("هوا سرده، کتت رو بردار"): میگذاری و خط بعد را یک تب تو میروی. این تورفتگی در Python بخشی از خودِ زبان است. رایجترین دلیلِ کار نکردنِ کدِ کپیشده از AI، بههمریختنِ همین تورفتگی است.قوی: «اگر مبلغ سبد بالای ۵۰۰ هزار بود ۱۰٪ تخفیف بده، اگر بالای یک میلیون بود ۲۰٪، وگرنه تخفیفی نده.» ← این دقیقاً ساختار if/elif/else را توضیح میدهد.
- برنامهای بنویس که نمره (۰ تا ۲۰) را بگیرد و بگوید عالی، خوب، قبول یا مردود.
- سیستم تخفیفِ مثالِ بالا را با if/elif/else پیاده کن.
حلقهها — تکرار بدون خستگی
حلقه یعنی «این کار را تکرار کن». دو نوع اصلی: for وقتی تعداد تکرار مشخص است، و while وقتی فقط شرطِ توقف مشخص است.
for i in range(5):
print(i) # 0 1 2 3 4
fruits = ["سیب", "موز", "پرتقال"]
for fruit in fruits:
print(fruit) # هر میوه را یکییکی چاپ میکندcount = 0
while count < 5:
print(count)
count += 1 # حتماً باید شرط یکجا False شودwhile اگر شرط هیچوقت False نشود، در یک حلقهی بینهایت گیر میکنی و برنامه تمام نمیشود.for برای تعداد مشخص، while برای شرطِ توقف. مراقب حلقهی بینهایت باش.- با یک حلقهی for اعداد ۱ تا ۱۰ را چاپ کن.
- یک لیست از ۵ عدد بساز و با حلقه مجموعشان را حساب کن.
- حدس بزن
range(3, 10, 3)چه چاپ میکند، بعد اجرا کن.
توابع — بستهبندیِ منطق
تابع مثل یک دستگاه است: چیزی به آن میدهی (ورودی)، کاری رویش انجام میدهد، چیزی پس میدهد (خروجی). یکبار مینویسیاش، هزاربار استفادهاش میکنی.
def calculate_discount(price, percent):
discount = price * (percent / 100)
return price - discount
result = calculate_discount(500000, 10)
print(result) # 450000.0def یعنی «تابع تعریف کن»، پارامترها ورودیها هستند، و return یعنی «این مقدار را بهعنوان نتیجه پس بده».
- تابعی بنویس که دو عدد بگیرد و بزرگترشان را برگرداند.
- تابعی بنویس که یک اسم بگیرد و جملهی خوشآمدگویی برگرداند.
لیست و دیکشنری
لیست یعنی مجموعهی مرتب از چیزها (با اندیس از صفر). دیکشنری یعنی دادهای که با «کلید و مقدار» ذخیره میشود.
fruits = ["سیب", "موز", "پرتقال"]
print(fruits[0]) # سیب (شمارش از صفر)
len(fruits) # 3
fruits.append("انگور") # اضافه به آخر
fruits.remove("موز") # حذف با اسم
removed = fruits.pop(0) # حذف با اندیس + برگرداندن مقدار
fruits.insert(1, "خربزه") # اضافه در جایگاه مشخصpop() میکنی، لیست جمع میشود و اندیسها دوباره از نو شمارهگذاری میشوند. اگر میخواهی بدانی چه چیزی حذف شد، همان لحظه با = در یک متغیر ذخیرهاش کن.customer = {
"name": "علی",
"age": 30,
"is_subscribed": True
}
print(customer["name"]) # علی
customer["email"] = "ali@x.com" # اضافهکردن کلید جدید- لیستی از ۴ کشور بساز، یکی را با
appendاضافه و یکی را باremoveحذف کن. - دیکشنریای برای خودت بساز با کلیدهای name، age، city و مقدار city را چاپ کن.
- یک لیست از دیکشنریها (چند مشتری) بساز و با حلقه اسم همه را چاپ کن.
کتابخانهها و Import
هیچوقت چرخ را از اول اختراع نکن. هزاران ابزارِ آماده بهصورت «کتابخانه» نوشته شدهاند، و برای استفاده از آنها از import استفاده میکنیم.
import random
number = random.randint(1, 100) # عدد تصادفی ۱ تا ۱۰۰
print(number)pip install requestsModuleNotFoundError یعنی کتابخانه نصب نیست → با pip install نصبش کن.No matching distribution found یعنی اسم کتابخانه را اشتباه نوشتی (مثلاً request بهجای requests).import یعنی استفاده از کد دیگران. بعضی آمادهاند، بعضی را باید با pip install نصب کنی.- با
random.choiceیک عضو تصادفی از یک لیست انتخاب کن. - کتابخانهی
datetimeرا import کن و تاریخ امروز را چاپ کن (از AI بپرس چطور).
کار با JSON
JSON فرمتِ استانداردِ ذخیره و ارسال داده است که همهی زبانها میفهمند. تقریباً هر دادهای که از یک API یا هوش مصنوعی میگیری به این شکل است — و بسیار شبیه دیکشنریِ Python.
{
"name": "علی",
"age": 30,
"is_subscribed": true,
"courses": ["پایتون", "طراحی"]
}import json
data = {"name": "علی", "age": 30}
json_text = json.dumps(data) # دیکشنری → متن JSON
parsed = json.loads(json_text) # متن JSON → دیکشنری
print(parsed["name"]) # علیdumps به متن، loads به دیکشنری.- یک دیکشنری از اطلاعات خودت بساز و با
json.dumpsبه متن تبدیلش کن. - همان متن را با
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 معمولاً خودشان همین ساختار را میسازند.- یک پوشهی پروژه بساز و داخلش
main.pyوREADME.mdایجاد کن. - در README بنویس پروژهات چهکار میکند و چطور اجرا میشود.
کار با API
API مثل گارسونِ رستوران است: یک واسطه که به تو اجازه میدهد از یک سرویس دیگر چیزی بخواهی، بدون آنکه بدانی پشت صحنه چطور کار میکند.
import requests
response = requests.get("https://api.agify.io?name=ali")
data = response.json()
print(f"سنِ حدسی: {data['age']}")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 میگیری.GET میگیرد، POST میسازد، status code نتیجه را میگوید.- کد
agify.ioرا با اسم خودت اجرا کن و نتیجه را ببین. - قبل از خواندن داده، status code را چاپ کن و مطمئن شو ۲۰۰ است.
متغیرهای محیطی و امنیت (.env)
هیچوقت کلید یا رمز را مستقیم در کد ننویس. اگر کدت را جایی مثل گیتهاب آپلود کنی، آن کلید برای همه — و برای رباتهای خودکار — قابلدیدن است.
api_key = "sk-abc123verysecret" ← این را هرگز مستقیم در کد ننویس.OPENAI_API_KEY=sk-abc123xyz456
STORE_NAME=هژی لرنfrom dotenv import load_dotenv
import os
load_dotenv()
api_key = os.environ.get("OPENAI_API_KEY").env
__pycache__/
*.pyc
.venv/.env جدا میماند و در .gitignore نادیده گرفته میشود.- یک فایل
.envبساز و یک متغیرSTORE_NAMEدر آن بگذار. - در کد بخوانش و در یک پیام خوشآمدگویی چاپش کن.
State — وضعیت برنامه (اختیاری)
State یعنی چیزهایی که برنامه در یک لحظهی مشخص «بهخاطر» دارد و در طول زمان تغییر میکند — مثل محتویاتِ سبد خرید.
cart = [] # وضعیتِ سبد خرید
def add_to_cart(item):
cart.append(item)
return cart
add_to_cart("دوره پایتون")
add_to_cart("دوره طراحی")- یک سبد خرید بساز و سه محصول به آن اضافه کن، بعد کل سبد را چاپ کن.
مستندسازی (اختیاری)
مستندسازی یعنی توضیحدادنِ اینکه کد چهکار میکند — برای خودت شش ماه بعد، برای دیگران، و حتی برای خودِ AI وقتی دوباره کد را میبیند.
# این تابع تخفیف را حساب میکند و قیمت نهایی را برمیگرداند
def calculate_discount(price, percent):
return price - (price * percent / 100)# شروع میشوند کامنتاند و اجرا نمیشوند.- به یکی از توابعی که در فصلهای قبل نوشتی، یک کامنت توضیحی اضافه کن.
خطاها و دیباگ کردن
ارور دشمن تو نیست؛ پیامِ کامپیوتر است که دقیقاً میگوید مشکل کجاست. مهم این است که بهجای هولکردن، بخوانیاش.
age = "25"
print(age + 5)
# TypeError: can only concatenate str (not "int") to str
# یعنی: داری رشته را با عدد جمع میزنی| نوع ارور | یعنی چه |
|---|---|
| SyntaxError | کد از نظر گرامری غلط است |
| NameError | از متغیری استفاده کردی که تعریف نشده |
| TypeError | دو نوع دادهی ناسازگار |
| IndexError | اندیسی که در لیست وجود ندارد |
| KeyError | کلیدی که در دیکشنری وجود ندارد |
پروتکل سهمرحلهای دیباگ
- آخرین خط ارور را بخوان (خلاصهی اصلی همانجاست).
- شمارهی خط را پیدا کن و همان خط را نگاه کن.
- اگر هنوز گیر بودی، درست از AI بپرس (پرامپت زیر).
- عمداً یک ارور بساز (مثلاً از متغیری تعریفنشده استفاده کن) و نوعش را تشخیص بده.
- ارور را با پرامپت بالا به یک ابزار AI بده و جوابش را با تشخیص خودت مقایسه کن.
چطور درست با AI کد بزنیم
حالا که مفاهیم پایه را داری، وقتش است یاد بگیری چطور با هوش مصنوعی واقعاً بسازی، نه فقط پرامپت بزنی و منتظر معجزه بمانی.
«چی میخوام» را بگو، نه «چطور بسازش»
قوی: «وقتی کاربر تا ساعت ۹ صبح اولویتهای روزش را ثبت نکرده، به او یادآوری نشان بده.» ← نتیجه را توصیف میکند، نه روش را.
همیشه بگو کجا ایستادی — کانتکست بده
قوی: «من با Python 3.13 روی ویندوز کار میکنم. یک فایل
products.json دارم که لیستی از دیکشنریهاست با کلیدهای name، price، stock. یک تابع بنویس که این فایل را بخواند و لیست محصولات را برگرداند.»هفت قانون طلایی
- یک قابلیت در هر پرامپت. اول لاگین را بخواه، تستش کن، بعد برو سراغ بعدی.
- همیشه کد را اجرا کن. «درست بهنظر میرسد» با «واقعاً کار میکند» فرق دارد.
- ادعای «تمام شد» را باور نکن. کدِ بدون بازبینی، ریسک امنیتیِ بیشتری دارد.
- قبل از کد، برنامهاش را بخواه. «اول بگو چه فایلها و توابعی میسازی و چرا.»
- تغییرات کوچک بخواه. «فقط تابع X را عوض کن، بقیه را دست نزن.»
- نسخهی سالم را نگه دار. قبل از هر تغییر بزرگ، یک کپی بگیر.
- بپرس «چرا اینطوری نوشتی؟» این فرقِ کسی است که یاد میگیرد با کسی که فقط کپی میکند.
pip install اسمش را در گوگل یا pypi.org چک کن.اطلاعات محرمانه: وقتی کدت را در چتِ AI میگذاری، اول مطمئن شو کلید API یا رمزی در آن نیست؛ اگر هست جایش بنویس
YOUR_API_KEY_HERE.- یک پرامپتِ ضعیف بنویس، بعد همان را با کانتکست و توصیفِ نتیجه به یک پرامپتِ قوی تبدیل کن.
- یک درخواست کوچک به AI بده و قبل از گرفتن کد، از او بخواه اول «برنامهاش» را بگوید.
پروژهی نهایی — سیستم مدیریت سفارش
همهی چیزی که یاد گرفتیم را در یک پروژهی واقعی کنار هم میگذاریم. این پروژه را در چهار مرحله میسازیم.
مرحله ۱: نسخهی ساده
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 (محصول پیدا نشد) بیرونِ حلقه است — فقط وقتی کل لیست را گشتیم میتوانیم مطمئن باشیم محصول وجود ندارد.
مرحله ۲: خواندن داده از فایل
[
{"name": "دوره پایتون", "price": 490000, "stock": 5},
{"name": "دوره طراحی", "price": 690000, "stock": 0}
]import json
with open("products.json", "r", encoding="utf-8") as file:
products = json.load(file)"r" یعنی حالت خواندن، و encoding="utf-8" تضمین میکند فارسی درست خوانده شود.
مرحله ۳: لحظهی «آهان!» — ذخیرهی تغییرات
json.load فقط یک کپی از فایل را در حافظه آورد. تا فایل را دوباره ننویسی، تغییرات ذخیره نمیشوند (همان مفهوم State).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 فایل را خوانا میکند.
مرحله ۴: گرفتن ورودی از کاربر
product_name = input("اسم محصول: ")
quantity = int(input("چند تا؟ ")) # int چون input رشته میدهد
print(place_order(product_name, quantity))- تابعی بنویس که محصول جدید به لیست اضافه کند.
- کاری کن اگر کاربر عدد منفی وارد کرد، برنامه قبولش نکند.
- مجموع مبلغ سفارش را حساب کن و نشان بده.
جمعبندی و قدم بعدی
هوش مصنوعی جایگزین فهمیدن نیست، شتابدهندهی فهمیدن است — اگر درست ازش استفاده کنی. حالا که این مفاهیم را داری، هر کدی که AI برایت بنویسد دیگر یک جعبهی سیاه نیست.
قدم بعدی: یک پروژهی کوچکِ شخصی انتخاب کن — چیزی که واقعاً به آن نیاز داری — و با کمک AI بسازش، در حالی که هر خط کد را با همین مفاهیم میخوانی و میفهمی.
- یک مشکل کوچک از زندگی روزمرهات را انتخاب کن که با یک اسکریپت ساده حل شود.
- با پرامپتهای اصولیِ فصل ۱۶ آن را با کمک AI بساز.
- بعد از هر بخش، از AI بپرس «چرا اینطوری نوشتی؟» و جوابش را یاد بگیر.
ویدیوی کامل این آموزش را دیدی؟
این جزوه همراهِ ویدیوی کامل است. برای دیدن توضیح گامبهگامِ هر بخش، ویدیو را تماشا کن.
تماشای ویدیوی کامل