برنامه نویسی

آموزش پایتون مقدماتی

پایتون را از python.org نصب می کنید، یک فایل با پسوند py می سازید، و با یک دستور در ترمینال اجرایش می کنید. تا آخر این درس یک برنامه واقعی نوشته اید که طول متن را می سنجد، و یاد گرفته اید خطای پایتون را از پایین به بالا بخوانید.

  • درس ۴ از ۱۴
  • مقدماتی
  • رایگان، بدون ثبت نام

از نصب تا اولین برنامه ای که به کار می آید

پنج قدم، و هیچ کدام بیشتر از چند دقیقه وقت نمی خواهد.

  1. از python.org نصب کنید

    روی مک و بیشتر لینوکس ها از قبل هست و این قدم لازم نیست.

    ۱
  2. با یک دستور تاییدش کنید

    python3 --version باید یک شماره چاپ کند. روی ویندوز py --version.

    ۲
  3. یک فایل py بسازید

    اسمش hello.py و پسوندش واقعا py، نه py.txt.

    ۳
  4. ورودی بگیرید و خروجی بدهید

    input همیشه رشته می دهد؛ برای حساب کردن باید تبدیلش کنید.

    ۴
  5. یک برنامه واقعا مفید بنویسید

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

    ۵

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

آخرین بررسی: فکت ها و نام ابزارهای این درس در همین تاریخ با منابعشان بازبینی شده اند.

پایتون را از کجا بگیریم و از کجا بفهمیم نصب شده؟

از صفحه دانلود python.org و نه از هیچ جای دیگر. روی مک و بیشتر لینوکس ها پایتون از قبل هست و لازم نیست چیزی نصب کنید؛ روی ویندوز باید نصبش کنید.

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

python3 --version

اگر یک شماره نسخه چاپ شد، تمام است. روی همین سروری که این درس روی آن نوشته می شود، جواب این دستور Python 3.12.3 است.

و حالا تله ای که هیچ آموزشی از آن حرف نمی زند: روی خیلی از سیستم ها اصلا دستوری به اسم python وجود ندارد. روی همین سرور، python جواب می دهد «command not found» ولی python3 کار می کند. پس وقتی در یک آموزش دیدید python file.py، اگر جواب نداد اشتباه از شما نیست؛ عدد ۳ را اضافه کنید.

روی ویندوز داستان سومی دارد. مستندات خود پایتون می گویند وقتی چند نسخه در کار باشد، دستور توصیه شده py است. یعنی روی ویندوز اول py --version را امتحان کنید و بعد بقیه دستورهای این درس را با همان py بزنید.

py --version

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

اولین اسکریپت: از فایل خالی تا خروجی روی ترمینال

یک فایل متنی بسازید و اسمش را hello.py بگذارید. هر ویرایشگر متنی کار می کند و برای امروز لازم نیست دنبال ابزار بگردید. یک خط داخلش بنویسید:

print("Hello")

حالا ترمینال را در همان پوشه باز کنید و اجرا کنید:

python3 hello.py

کلمه Hello چاپ می شود. همین. اگر چاپ نشد، سه چیز را چک کنید و به همین ترتیب: در همان پوشه ای هستید که فایل آنجاست، اسم فایل واقعا به py ختم می شود و نه به py.txt، و دستوری که می زنید همان دستوری است که در بخش قبل جواب داد.

یک قاعده هم هست که پایتون را از بقیه زبان ها جدا می کند و بهتر است همین اول بدانید: در پایتون فاصله اول خط معنی دارد. آکولاد و سمی کالن نداریم؛ چیزی که به یک بلوک تعلق دارد را با تورفتگی نشان می دهید و کل زبان روی همین قرارداد بنا شده.

if 5 > 3:
    print("bigger")

آن چهار فاصله قبل از print تزئین نیست، نحو زبان است. اگر بردارید، پایتون خطای IndentationError می دهد. توصیه ما این است که در ویرایشگر، tab را روی چهار فاصله تنظیم کنید و بعد اصلا به آن فکر نکنید.

چهار چیزی که کار می کنند و چهار چیزی که کار را می خوابانند

تقریبا همه «چرا اجرا نمی شود» های روز اول در ستون راست هستند.

برگه چک روز اولپنج دقیقه

اگر اینها درست باشند، اجرا می شود

  • دستور نسخه یک شماره چاپ می کند
  • فایل واقعا با پسوند py ذخیره شده
  • ترمینال در همان پوشه ای است که فایل هست
  • تورفتگی ها همه فاصله اند و با tab قاطی نشده اند

اگر اینها باشند، هیچ اتفاقی نمی افتد

  • دستور python زده اید و روی این سیستم اصلا وجود ندارد
  • ویرایشگر فایل را hello.py.txt ذخیره کرده
  • فایل در یک پوشه است و ترمینال در پوشه دیگر
  • کد را از یک صفحه وب کپی کرده اید و فاصله های نامرئی با آن آمده اند

این فهرست فقط اجرا شدن را تضمین می کند، نه درست بودن برنامه را. کدی که اجرا می شود هنوز می تواند جواب غلط بدهد.

ورودی و خروجی: برنامه ای که با کاربر حرف می زند

یک برنامه تا وقتی فقط چاپ می کند، یک یادداشت است. با input تبدیل می شود به چیزی که جواب می گیرد:

name = input("Your name: ")
print("Hello,", name)

سه چیز در همین دو خط هست. input پیامی که به آن می دهید را چاپ می کند و منتظر می ماند، جوابی که کاربر می زند را برمی گرداند، و آن جواب را در متغیر name نگه می دارید تا بعدا استفاده اش کنید.

حالا مهم ترین نکته این بخش، که اگر ندانیدش اولین خطای واقعی زندگی برنامه نویسی تان می شود: input همیشه رشته برمی گرداند. مستندات خود پایتون همین را می گویند؛ حتی وقتی کاربر ۱۷ تایپ می کند، چیزی که به شما می رسد متن «۱۷» است و نه عدد ۱۷.

age = input("Age: ")
print(type(age))

خروجی این دو خط <class 'str'> است. یعنی اگر بخواهید یک واحد به آن اضافه کنید، پایتون خطا می دهد و باید اول تبدیلش کنید:

age = input("Age: ")
print(int(age) + 1)

چرا این طوری است؟ چون پایتون حدس نمی زند. اگر خودش رشته را عدد می کرد، برنامه ای که کد پستی یا شماره کارت می گیرد، صفرهای اولش را از دست می داد. تبدیل با شماست چون فقط شما می دانید آن رشته قرار است چه معنایی بدهد. این موضوع آنقدر مهم است که درس بعدی همین مسیر کاملا به نوع داده اختصاص دارد و ترتیب درس ها را در صفحه مسیر می بینید.

اولین برنامه واقعی: طول متن را بشمار

حالا چیزی می نویسیم که خودمان واقعا استفاده اش می کنیم. توضیح متای هر صفحه این سایت باید بین ۱۴۰ تا ۱۶۰ کاراکتر باشد؛ این قاعده خانگی خودمان است و در راهنمای محتوای همین سایت نوشته شده. شمردنش با چشم کار سختی است، با شش خط پایتون کار ده ثانیه ای است.

text = input("Meta description: ")
n = len(text)

if n < 140:
    print(f"{n} characters. Too short, {140 - n} to go.")
elif n > 160:
    print(f"{n} characters. Too long by {n - 160}.")
else:
    print(f"{n} characters. Good.")

این کد را قبل از انتشار همین درس سه بار اجرا کردیم و خروجی واقعی اش این بود: برای یک متن ۹۰ کاراکتری، 90 characters. Too short, 50 to go.؛ برای ۱۵۰ کاراکتر، 150 characters. Good.؛ و برای ۲۰۰ کاراکتر، 200 characters. Too long by 40.

چهار چیز تازه در این شش خط هست. len طول یک رشته را می دهد. if و elif و else سه راهی می سازند و فقط یکی از سه شاخه اجرا می شود. آن f قبل از گیومه یعنی داخل رشته می توانید آکولاد بگذارید و پایتون مقدار داخلش را حساب می کند؛ اسمش f-string است و راحت ترین راه ساختن متن است. و ریاضی داخل همان آکولاد هم کار می کند، مثل {140 - n}.

یک تمرین که ارزش دارد همین حالا انجامش بدهید: شرط را عوض کنید تا به جای کاراکتر، کلمه ها را بشمارد. راهنمایی: len(text.split()). اگر این را خودتان تغییر دادید و کار کرد، شما دیگر «آموزش دیده» نیستید، «برنامه نوشته» اید.

خطا گرفتید؟ تریسبک را از پایین بخوانید

مهارتی که تازه کار را از کسی که واقعا برنامه می نویسد جدا می کند، نوشتن کد بی خطا نیست؛ خواندن خطاست. پایتون وقتی برنامه می افتد یک تریسبک چاپ می کند، و آن متن ترسناک در واقع دقیق ترین دوستی است که دارید.

این فایل را با نام shop.py بسازید و اجرا کنید:

def price(n):
    return n * 1.09

print(price("100"))

و این دقیقا چیزی است که چاپ می شود. عین همان اجرا، نه چیزی که باید چاپ شود:

Traceback (most recent call last):
  File "shop.py", line 4, in <module>
    print(price("100"))
          ^^^^^^^^^^^^
  File "shop.py", line 2, in price
    return n * 1.09
           ~~^~~~~~
TypeError: can't multiply sequence by non-int of type 'float'

حالا قاعده: از پایین بخوانید. خط آخر می گوید چه اتفاقی افتاده؛ اینجا نوع داده اشتباه بوده. خط بالای آن می گوید کجا افتاده: خط ۲، داخل تابع price. و بالاتر می گوید چه کسی آنجا را صدا زده: خط ۴. یعنی خطا در خط ۲ ظاهر شده ولی علتش در خط ۴ است، جایی که به جای عدد، رشته فرستاده ایم.

همین ترتیب برای هر تریسبکی صادق است و به همین دلیل عادت «از پایین به بالا» را باید همین امروز بسازید. اول جمله آخر را بخوانید، بعد پایین ترین خطی که فایل خودتان است را نگاه کنید، و تازه بعد از آن به بقیه نگاه کنید.

سه خطای اول زندگی هر کسی هم اینها هستند: SyntaxError یعنی جمله را غلط نوشته اید و معمولا یک پرانتز یا دونقطه کم است؛ NameError یعنی اسمی را صدا زده اید که وجود ندارد و بیشتر وقت ها غلط تایپی است؛ و TypeError همین بالایی است، یعنی نوع داده با کاری که با آن می کنید نمی خواند.

بعد از این چه؟ نقشه ای که وقتتان را هدر نمی دهد

مهم ترین چیزی که بعد از این درس لازم دارید یک آموزش دیگر نیست، یک برنامه کوچک است که خودتان لازمش دارید. ولی چهار چیز هست که ترتیبشان مهم است و شکل زیر همان ترتیب را نشان می دهد.

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

بعد نصب کتابخانه بیرونی با pip، و همراهش محیط مجازی. این دو خط، پروژه شما را از بقیه سیستم جدا نگه می دارند:

python3 -m venv .venv
source .venv/bin/activate

روی ویندوز خط دوم فرق می کند و مستندات venv شکل درستش را دارد. چرا این کار لازم است؟ چون بدون آن، هر پروژه ای که می سازید کتابخانه هایش را در همان یک جای مشترک می ریزد و شش ماه بعد دو پروژه دو نسخه متفاوت از یک کتابخانه می خواهند و سیستم شما فقط یکی دارد.

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

پنج پله بعد از اولین برنامه، به همین ترتیب

ترتیب اینجا مهم تر از سرعت است؛ پله چهارم قبل از سوم فقط سردرگمی می سازد.

  1. ۱

    کتابخانه استاندارد را بگردید

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

  2. ۲

    یک برنامه که خودتان لازمش دارید

    تمرین کتاب رها می شود، کاری که دردی از خودتان دوا می کند نه.

  3. ۳

    pip و محیط مجازی

    اولین باری که دو پروژه دو نسخه از یک کتابخانه بخواهند، دلیلش را می فهمید.

  4. ۴

    تابع نویسی

    وقتی یک تکه کد را بار سوم کپی کردید، وقتش رسیده.

  5. ۵

    کلاس، فقط وقتی دردی داشتید

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

این نردبان ترتیب است نه جدول زمانی. کسی که هفته ای دو ساعت وقت دارد ممکن است ماه ها روی پله دوم بماند و این طبیعی است.

مسیر سریع با هوش مصنوعی

مسیر سریع برای یک تازه کار «کد را بگیر» نیست. هر مدلی یک اسکریپت شش خطی می نویسد و همین است که آدم را در جای خودش نگه می دارد. سرعت واقعی جای دیگری است: در حلقه بعد از نوشتن. کاری که یک حرفه ای می کند این است که کدش را به مدل می دهد تا به آن حمله کند، ورودی هایی که برنامه را می خوابانند را پیدا کند، و همان ها را قبل از کاربر خودش امتحان کند. برای این کار مدل سریع و ارزان کافی است؛ انتخاب فعلی ما در <a class="text-link" href="/ai/">بخش هوش مصنوعی</a> هست.

  1. اول خودتان کوچک ترین نسخه را بنویسید و اجرا کنید، حتی اگر زشت باشد. کدی که یک بار اجرا شده، واقعیت است؛ کدی که فقط خوانده شده، حدس است.
  2. کد واقعی خودتان را با یک ورودی و خروجی واقعی بدهید و کوتاه ترین فهرست اصلاح را بخواهید، نه بازنویسی. بازنویسی، کد شما را با کد مدل عوض می کند و شما همان جایی می مانید که بودید.
  3. پنج ورودی بخواهید که برنامه را می خوابانند، و همان پنج تا را خودتان اجرا کنید. اینجاست که یاد می گیرید، نه وقتی جواب درست را می خوانید.
  4. در آخر بپرسید کدام تابع کتابخانه استاندارد جای تکه دست ساز شما را می گیرد، و اسم آن تابع را در مستندات رسمی چک کنید نه در جواب مدل.

نسخه آماده کپی

این کد پایتون من است. خودم نوشتمش و اجرا شده:

{کد کامل خودتان}

با این ورودی: {یک ورودی واقعی}
این را چاپ کرد: {خروجی واقعی همان اجرا}

چهار کار بکن و بازنویسی نکن:

۱. کوتاه ترین فهرست اصلاح روی همین کد. هر بند: کدام خط، چه تغییری، چرا.
   ساختار و اسم های من را نگه دار.
۲. پنج ورودی که این برنامه را می خوابانند یا جواب غلط می دهند، هر کدام با
   یک جمله که می گوید چه اتفاقی می افتد. خالی، عدد منفی، متن خیلی بلند و
   حروف فارسی را حتما در نظر بگیر.
۳. اگر تکه ای از این کد را کتابخانه استاندارد پایتون از قبل دارد، اسم دقیق
   تابع و ماژولش را بگو. فقط اسم، بدون کد.
۴. یک تمرین کوچک که همین برنامه را یک قدم جلو ببرد، ولی جوابش را ننویس.

سوال بپرس اگر چیزی از کد من مبهم است.

قبل از اعتماد به خروجی: مدل ترمینال ندارد. نسخه پایتون شما، سیستم عاملتان و اینکه فایل ها کجا هستند را نمی بیند، پس هر جمله ای درباره «این باید کار کند» را باید خودتان اجرا کنید. دومی مهم تر است: گاهی اسم کتابخانه یا تابعی را با اطمینان می گوید که وجود ندارد. قاعده ساده است، هر <code>import</code> که پیشنهاد شد را قبل از نصب در مستندات رسمی پایتون جستجو کنید؛ اگر آنجا نبود، نیست.

هوش مصنوعی در این کار

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

ابزارهایی که واقعا کمک می کنند

  • Claude حالت یادگیری دارد که به جای جواب دادن، مثل یک معلم سوال می پرسد؛ برای همان الگوی «توضیح بده، بعد امتحانم کن» ساخته شده. ایران در فهرست کشورهای پشتیبانی شده انتروپیک نیست و این را از صفحه خود انتروپیک خوانده ایم.
  • Gemini حالت یادگیری هدایت شده اش هم به جای جواب دادن سوال می پرسد و از منبع شما راهنمای مطالعه و فلشکارت و آزمون می سازد. فارسی را خوب می فهمد. صفحه خود گوگل می گوید اپ وب جمنای در بیش از دویست و سی کشور و منطقه کار می کند و ایران در آن فهرست نیست.
  • ChatGPT رایج ترین انتخاب و برای سوال های پایه ای پایتون قابل قبول. ما هنوز صفحه ای برایش در بخش هوش مصنوعی نداریم، پس درباره دسترسی و قیمتش اینجا ادعایی نمی کنیم.

کجا نتیجه معکوس می دهد

یک استفاده هست که مستقیم علیه خودتان کار می کند و باید صریح گفته شود: تمرین را کپی کنید، جواب را بگیرید و رد شوید. جواب درست است، صفحه پر می شود، و هیچ چیزی در سر شما اتفاق نمی افتد. مهارت برنامه نویسی از همان دقیقه هایی ساخته می شود که گیر کرده اید و مدل دقیقا همان دقیقه ها را از شما می گیرد. اگر برای یک درس دانشگاهی تمرین می زنید، این کار علاوه بر بی فایده بودن، تقلب هم هست. خطر دوم جنس دیگری دارد: مدل درباره خطای شما جوابی می دهد که کاملا قانع کننده است و ممکن است لایه اشتباهی را توضیح بدهد، مثلا نحو را توضیح بدهد وقتی مشکل زمان اجراست. برای همین در این درس اول تریسبک را یاد گرفتیم و بعد سراغ مدل آمدیم؛ کسی که تریسبک را می خواند می فهمد جواب مدل به مسئله او ربط دارد یا نه. و خطر سوم دسترسی است: ایران در هیچ کدام از دو فهرست کشورهای پشتیبانی شده انتروپیک نیست و در فهرست کشورهای جمنای گوگل هم نیست؛ هر دو را از صفحه خود سازنده خوانده ایم و راه دور زدن پیشنهاد نمی کنیم.

منبع ها: Python docs: built-in functions, input Anthropic: supported countries Google: where Gemini Apps are available

حد این توصیه

این درس شما را تا یک اسکریپت تک فایلی روی کامپیوتر خودتان می برد و همان جا می ایستد. انتشار برنامه، بسته بندی، کار همزمان و کتابخانه های داده هیچ کدام اینجا نیستند. یک محدودیت عملی هم هست که خیلی ها دیر می فهمند: اسکریپت پایتون روی یک هاست وب که برای صفحه های پی اچ پی ساخته شده اجرا نمی شود؛ برای اجرای دائمی به سروری نیاز دارید که خودتان کنترلش کنید. و یک نکته صادقانه درباره خود یادگیری: خواندن این صفحه یاد گرفتن نیست. تنها سنجه واقعی این است که کد را عوض کرده باشید و باز هم کار کند.

از تجربه خود ما

پایتون در کار خود ما نقش دربان دارد و همین درس از زیر دستش رد شده است. دو اسکریپت پایتون، یکی ۲۸۱ خط و دیگری ۸۹ خط، هر فایل درس را به چهار زبان تکه می کنند و در هر تکه دنبال کاراکترهای ممنوع می گردند. امروز همین دو اسکریپت روی درس همسایه همین جلسه یک کاراکتر را رد کردند: یک همزه در کلمه ای که با چشم کاملا سالم به نظر می رسید. آدم آن را نمی دید و شش خط پایتون در کمتر از یک ثانیه دیدش. نسخه پایتونی که این کار را کرد 3.12.3 است و روی همین سرور با python3 --version قابل بررسی است؛ روی همین سرور دستور python هم اصلا وجود ندارد، که همان تله بخش اول همین درس است.

سوال هایی که واقعا پرسیده می شوند

پایتون ۲ یاد بگیریم یا ۳؟

نسخه ۳، بدون تردید. پایتون ۲ سال هاست پشتیبانی نمی شود و صفحه دانلود python.org فقط نسخه های ۳ را می دهد. اگر به آموزشی برخوردید که print "hello" بدون پرانتز داشت، آن متن برای نسخه ۲ نوشته شده و بقیه اش هم احتمالا کهنه است.

برای شروع چه ویرایشگری لازم است؟

همانی که همین حالا روی کامپیوترتان هست. هر ویرایشگر متنی ساده ای فایل py را ذخیره می کند و روز اول همین کافی است، فقط حواستان باشد که پسوند را به txt عوض نکند. انتخاب ویرایشگر جایی مهم می شود که پروژه تان چند فایل شد؛ آن روز خودتان می فهمید چه می خواهید.

بدون انگلیسی می شود پایتون یاد گرفت؟

بله، ولی یک کار را باید یاد بگیرید: خواندن پیام خطا. متن خطاها انگلیسی است و ترجمه نمی شود، ولی همان چند ده جمله اند که مدام تکرار می شوند و بعد از دو هفته دیگر ترجمه شان را از بر هستید. حرف زدن و نوشتن انگلیسی لازم نیست؛ شناختن TypeError و NameError لازم است.