در این دوره پایتون را با نوشتن کد یاد میگیرید، از اولین print تا شیءگرایی و کتابخانهٔ استاندارد. هر فصل چند تمرین کوتاه دارد که همان لحظه بررسی میشوند.
from collections import Counter
# هر رأی یک کلمه است و Counter همه را میشمارد
votes = """پایتون جاوااسکریپت پایتون گو پایتون راست
جاوااسکریپت پایتون گو پایتون جاوااسکریپت پایتون""".split()
counts = Counter(votes)
total = len(votes)
for language, n in counts.most_common():
bar = "█" * n
print(f"{bar:<7} {n / total:>4.0%} {language}")
██████ 50% پایتون ███ 25% جاوااسکریپت ██ 17% گو █ 8% راست
رأیها شمرده میشوند و برای هر گزینه یک نوار، درصد و نامش چاپ میشود. نمونههای دیگر
فصلها از ساده به پیشرفته چیده شدهاند و هر کدام روی چیزی ساخته میشود که پیش از آن یاد گرفتهاید.
با print و input برنامهای مینویسید که میپرسد و جواب میدهد. متغیر، عدد، تبدیل نوع و عملگرها را یاد میگیرید و میفهمید چرا حساب اعشاری گاهی کمی خطا دارد.
رشته را برش میزنید، با split و join تکه و دوباره سرهم میکنید و خروجی را با f-string مرتب میکنید. با if، while، for و match برنامه تصمیم میگیرد و کاری را تکرار میکند.
داده را در لیست و تاپل نگه میدارید و مرتب میکنید، با دیکشنری میشمارید و با مجموعه تکرارها را حذف میکنید.
حلقههای چندخطی را در یک خط درک (comprehension) مینویسید. تابع با آرگومان پیشفرض، args و kwargs، lambda، بستار و بازگشت میسازید.
با yield داده را تکهتکه تولید میکنید، بیآنکه همه را یکجا در حافظه نگه دارید. خطا را با try و except میگیرید و استثنای مخصوص برنامهٔ خودتان را تعریف میکنید.
کلاس، متد، property و وراثت را یاد میگیرید. با متدهای ویژه شیءهای شما مثل نوعهای خود پایتون جمع، مقایسه و چاپ میشوند و با dataclass و enum کد کوتاهتری مینویسید.
دکوراتور مینویسید، منابع را با with مدیریت میکنید و برنامه را در چند فایل و ماژول جدا میکنید.
ابزارهایی را به کار میگیرید که همراه خود پایتون هستند: math و statistics، itertools و functools، Counter و defaultdict، عبارتهای باقاعده، فایل، JSON، CSV، تاریخ و زمان و تایپهینت.
با assert، unittest و doctest برای کدتان تست مینویسید، باگ را پیدا میکنید و با hashlib، base64 و asyncio آشنا میشوید.
مبدل واحد، رمز سزار، تحلیلگر لاگ، گزارش فروش از CSV، دفترچه تلفن، سیستم انبار و مفسر عبارت ریاضی را خودتان میسازید.
این شش برنامه را برای همین صفحه نوشتهایم. هر کدام مهارت یکی از فصلها را نشان میدهد و خروجی کنارش همان چیزی است که اجرای کد چاپ میکند.
رأیها شمرده میشوند و برای هر گزینه یک نوار، درصد و نامش چاپ میشود.
from collections import Counter
# هر رأی یک کلمه است و Counter همه را میشمارد
votes = """پایتون جاوااسکریپت پایتون گو پایتون راست
جاوااسکریپت پایتون گو پایتون جاوااسکریپت پایتون""".split()
counts = Counter(votes)
total = len(votes)
for language, n in counts.most_common():
bar = "█" * n
print(f"{bar:<7} {n / total:>4.0%} {language}")
██████ 50% پایتون ███ 25% جاوااسکریپت ██ 17% گو █ 8% راست
قیمت هر ردیف و جمع کل حساب میشود و ستونها زیر هم میایستند.
# فاکتور: f-string ستونها را مرتب میکند و قیمت را سهرقمسهرقم جدا میکند
items = [
("دفتر", 2, 45_000),
("مداد", 5, 8_000),
("کولهپشتی", 1, 690_000),
]
total = 0
for name, qty, price in items:
line = qty * price
total += line
print(f"{qty:>2} x {price:>8,} = {line:>8,} {name}")
print("-" * 24)
print(f"{total:>24,} جمع کل")
2 x 45,000 = 90,000 دفتر
5 x 8,000 = 40,000 مداد
1 x 690,000 = 690,000 کولهپشتی
------------------------
820,000 جمع کلمیانگین نمرههای هر دانشآموز حساب میشود و کلاس از بیشترین میانگین به کمترین مرتب میشود.
grades = {
"سارا": [19, 18.5, 20],
"علی": [17, 16, 18.5],
"مریم": [20, 19.5, 19],
"رضا": [15, 17.5, 16],
}
# میانگین هر نفر با درک دیکشنری، بعد مرتبسازی از بیشترین به کمترین
averages = {name: sum(g) / len(g) for name, g in grades.items()}
ranking = sorted(averages.items(), key=lambda item: item[1], reverse=True)
medals = ["🥇", "🥈", "🥉"]
for i, (name, avg) in enumerate(ranking):
medal = medals[i] if i < len(medals) else " "
print(f"{medal} {avg:5.2f} {name}")
🥇 19.50 مریم 🥈 19.17 سارا 🥉 17.17 علی 16.17 رضا
کلاس Duration زمان هر آهنگ را نگه میدارد. چون __add__ دارد، تابع sum مدت کل فهرست را حساب میکند.
class Duration:
"""مدت زمان بر حسب ثانیه، که جمع میشود و به شکل دقیقه:ثانیه چاپ میشود."""
def __init__(self, seconds):
self.seconds = seconds
@classmethod
def parse(cls, text):
minutes, seconds = text.split(":")
return cls(int(minutes) * 60 + int(seconds))
def __add__(self, other): # به Duration اجازه میدهد با + جمع شود
return Duration(self.seconds + other.seconds)
def __str__(self): # شکل چاپی: 4:05
m, s = divmod(self.seconds, 60)
return f"{m}:{s:02d}"
songs = {"مقدمه": "1:05", "جادهٔ شب": "4:32", "باران": "3:48", "خانه": "5:17"}
lengths = {title: Duration.parse(t) for title, t in songs.items()}
for title, d in lengths.items():
print(f"{str(d):>5} {title}")
print("-" * 16)
total = sum(lengths.values(), Duration(0)) # sum از همان __add__ استفاده میکند
print(f"{str(total):>5} مجموع")
1:05 مقدمه 4:32 جادهٔ شب 3:48 باران 5:17 خانه ---------------- 14:42 مجموع
یک خط @cache تعداد فراخوانیهای تابع بازگشتی را از عددی ۲۲ رقمی به ۱۰۱ میرساند.
from functools import cache
calls = 0
@cache # هر جواب یک بار حساب و بعد از حافظه خوانده میشود
def fib(n):
global calls
calls += 1
return n if n < 2 else fib(n - 1) + fib(n - 2)
print(f"fib(100) = {fib(100):,}")
print(f"با حافظه: {calls:,} فراخوانی")
# بدون حافظه، fib(n) به اندازهٔ 2×fib(n+1)−1 بار صدا زده میشود
print(f"بدون حافظه: {2 * fib(101) - 1:,} فراخوانی")
fib(100) = 354,224,848,179,261,915,075 با حافظه: 101 فراخوانی بدون حافظه: 1,146,295,688,027,634,168,201 فراخوانی
شمارههایی که هر کدام به شکلی نوشته شدهاند پیدا میشوند، یکشکل میشوند و وسطشان پوشانده میشود.
import re
text = """سارا: 0912 123 4567، تحویل صبح
علی: +98-935-765-4321
مریم: 09151112233 (فقط پیامک)"""
# پیششمارهٔ 0 یا +98، سه بخش عدد، و بین بخشها فاصله یا خط تیرهٔ اختیاری
phone = re.compile(r"(?:\+98|0)[ -]?(?P<op>9\d\d)[ -]?(?P<mid>\d{3})[ -]?(?P<end>\d{4})")
for line in text.splitlines():
name = line.split(":")[0]
m = phone.search(line)
clean = f"0{m['op']}{m['mid']}{m['end']}"
hidden = f"0{m['op']}***{m['end']}"
print(f"{clean} {hidden} {name}")
09121234567 0912***4567 سارا 09357654321 0935***4321 علی 09151112233 0915***2233 مریم
هر درس یک مفهوم را با یک مثال کوتاه توضیح میدهد و یک کار مشخص از شما میخواهد.
خروجی برنامه همان لحظه زیر کد میآید. اگر برنامه ورودی بخواهد، آن را در کادر ورودی مینویسید.
دکمهٔ بررسی برنامهٔ شما را با چند ورودی آزمایش میکند. اگر جایی گیر کردید، راهنمای همان تمرین قدمبهقدم کمکتان میکند.
در صفحهٔ اجرای آنلاین پایتون هر کدی را بدون ثبتنام اجرا میکنید، با کادر ورودی برای input.
| موضوع | دینا کد | آموزش ویدیویی |
|---|---|---|
| در هر درس | خودتان کد مینویسید و اجرا میکنید. | بیشتر وقت به تماشای کدنویسی مدرس میگذرد. |
| برای شروع | یک مرورگر کافی است. | معمولاً باید پایتون و یک ویرایشگر را خودتان نصب کنید. |
| وقتی اشتباه میکنید | بررسی خودکار جای خطا را نشان میدهد و راهنما دارد. | باید خودتان ایراد را پیدا کنید. |
| توضیح مدرس | متن کوتاه و مثال، بدون صدا و تصویر مدرس | مدرس با صدا و تصویر توضیح میدهد. |
۲۶ سرفصل، ۱۸۰ درس، ۱۵۴ تمرین
درسهای اول رایگان است و برای شروع پرداختی لازم نیست. هر وقت خواستید ادامه دهید، همین دوره را بخرید یا با اشتراک پرو همهٔ دورهها را باز کنید.
۱۲ درس ابتدایی رایگان است. برای ادامه، اشتراک بگیرید یا دوره را بخرید.
بدون نیاز به پرداخت مبلغی برای شروع
اگر تا امروز هیچ کدی ننوشتهاید. دوره از اولین print شروع میشود.
برای درس مبانی برنامهنویسی، پروژهٔ دانشگاه یا تمرین برای مسابقههای برنامهنویسی.
اگر یک دورهٔ مقدماتی دیدهاید و میخواهید شیءگرایی، مولدها، دکوراتورها و کتابخانهٔ استاندارد را درست یاد بگیرید.
پیشنیاز: یک رایانه و یک مرورگر. تجربهٔ برنامهنویسی لازم نیست.
اگر میخواهید کنار دوره بیشتر تمرین کنید، تمرینهای رایگان پایتون با جواب و توضیح آماده است.
اولین برنامهٔ پایتونتان را همین امروز در مرورگر بنویسید. شروع رایگان است و در کمتر از دو دقیقه وارد محیط یادگیری میشوید.