Table of Contents
هدف فصل: تمرینِ «ساختن یک پروژه واقعی»
در این فصل، دیگر فقط چند خط کد آزمایشی نمینویسیم؛ بلکه چند برنامهٔ کوچک و کامل میسازیم. هدف این است که:
- ببینید آموختههای فصلهای قبل چطور کنار هم قرار میگیرند.
- با مراحل واقعیِ ساخت یک برنامه آشنا شوید: از ایده تا اجرا.
- تمرین کنید که کد خود را گامبهگام تکمیل و اصلاح کنید (نه یکباره).
در ادامه، برای هر پروژه:
- ایدهٔ پروژه را توضیح میدهیم.
- ورودی و خروجی برنامه را مشخص میکنیم.
- یک ساختار پیشنهادی (الگو) برای کد ارائه میکنیم.
- پیشنهادهایی برای گسترش (نسخهٔ پیشرفتهتر) میآوریم.
این فصل برای تمرین است؛ لازم نیست همهٔ پروژهها را یکباره کامل انجام دهید. میتوانید:
- از سادهترین نسخه شروع کنید.
- بعداً به آن برگردید و آن را بهتر کنید.
الگوی کلی ساخت یک پروژه
پیش از ورود به پروژهها، یک الگوی کلی برای تقریباً هر برنامهٔ کوچک:
- تعریف مسئله
- برنامه دقیقاً قرار است چه کار کند؟
- مثال بزنید: «اگر ورودی این باشد، خروجی چه باید باشد؟»
- طراحی ورودی/خروجی
- برنامه چه چیزهایی از کاربر بپرسد؟
- برنامه چه چیزی را روی صفحه نشان دهد؟
- تقسیم مسئله به بخشهای کوچک
- گرفتن ورودی
- پردازش (حساب کردن، مقایسه، …)
- نمایش نتیجه
- نوشتن نسخهٔ خیلی ساده
- بدون امکانات اضافی
- فقط کاری که «حداقلاً» باید انجام شود
- آزمایش با چند ورودی مختلف
- ورودیهای معمولی
- ورودیهای اشتباه یا عجیب
- بهبود و افزودن امکانات
- پیامهای بهتر برای کاربر
- رسیدگی به خطاها
- مرتب کردن کد به کمک تابعها
در همهٔ پروژههای این فصل، میتوانید از همین الگو استفاده کنید.
پروژه ۱: بازی حدس عدد
ایدهٔ برنامه
کامپیوتر یک عدد تصادفی در یک بازه (مثلاً ۱ تا ۱۰۰) انتخاب میکند و کاربر باید آن را حدس بزند. بعد از هر حدس، برنامه میگوید:
- عدد واقعی بزرگتر است یا کوچکتر؟
- کاربر چند بار حدس زده است؟
بازی زمانی تمام میشود که کاربر عدد درست را حدس بزند.
مشخصات سادهٔ برنامه
- ورودیها:
- حدس کاربر (عدد صحیح)
- خروجیها:
- پیام «بزرگتر حدس بزن»، «کوچکتر حدس بزن» یا «تبریک، درست حدس زدی!»
- تعداد تلاشها در پایان بازی
گامهای پیشنهادی پیادهسازی
- تولید عدد تصادفی
- استفاده از کتابخانهٔ
randomبرای ساخت یک عدد تصادفی در یک بازه. - حلقه برای حدسزدن
- تا زمانی که حدس کاربر با عدد مخفی برابر نشده، حلقه ادامه پیدا کند.
- مقایسهٔ حدس با عدد
- اگر حدس کوچکتر، پیام افزایش؛ اگر بزرگتر، پیام کاهش.
- شمارش تعداد تلاشها
- در هر حدس، یک شمارنده را ۱ واحد زیاد کنید.
- نمایش نتیجه نهایی
- وقتی حدس درست شد، پیام موفقیت همراه با تعداد حدسها.
ساختار نمونهٔ کد (الگو)
import random
# ۱. تولید عدد تصادفی
secret = random.randint(1, 100)
attempts = 0
while True:
# ۲. گرفتن حدس کاربر
guess_text = input("یک عدد بین ۱ تا ۱۰۰ حدس بزن: ")
# تبدیل به عدد
guess = int(guess_text)
attempts = attempts + 1 # ۳. افزایش شمارنده
# ۴. مقایسه
if guess < secret:
print("بزرگتر حدس بزن!")
elif guess > secret:
print("کوچکتر حدس بزن!")
else:
print("آفرین! عدد درست", secret, "بود.")
print("تعداد حدسها:", attempts)
breakپیشنهادهای گسترش
- محدود کردن تعداد حدسها (مثلاً حداکثر ۷ بار)، و اعلان «باخت».
- اجازه دادن به کاربر برای انتخاب بازه (مثلاً ۱ تا N).
- نمایش یک راهنما مثل «چقدر نزدیک بودی» (مثلاً اگر اختلاف کم بود پیامی جدا).
- نوشتن نسخهای که کامپیوتر عدد شما را حدس میزند (بازی برعکس).
پروژه ۲: ماشینحساب ساده
ایدهٔ برنامه
یک برنامهٔ متنی بنویسید که بتواند چهار عمل اصلی را انجام دهد:
- جمع
- تفریق
- ضرب
- تقسیم
کاربر عمل دلخواه و اعداد را وارد میکند و برنامه جواب را نشان میدهد.
مشخصات سادهٔ برنامه
- ورودیها:
- انتخاب نوع عملیات (مثلاً با وارد کردن
+،-،*،/) - دو عدد (میتواند صحیح یا اعشاری باشد)
- خروجیها:
- نتیجهٔ عملیات روی دو عدد
گامهای پیشنهادی پیادهسازی
- نمایش منو برای کاربر
- مثلاً چهار گزینه برای انتخاب نوع عملیات.
- گرفتن نوع عملیات
- با
input، نماد عمل (مثل+) را بگیرید. - گرفتن دو عدد
- از کاربر بپرسید عدد اول و دوم چه باشد.
- تبدیل رشته به عدد با
float. - بررسی نوع عملیات
- با
if/elif/elseتصمیم بگیرید چه عملی انجام شود. - نمایش نتیجه
- فرمت مناسب برای چاپ (مثلاً «نتیجهٔ ۲ + ۳ = ۵»).
ساختار نمونهٔ کد (الگو)
print("ماشینحساب ساده")
print("عملیات را انتخاب کنید:")
print("+ برای جمع")
print("- برای تفریق")
print("* برای ضرب")
print("/ برای تقسیم")
op = input("نماد عملیات را وارد کنید: ")
a = float(input("عدد اول: "))
b = float(input("عدد دوم: "))
if op == "+":
result = a + b
elif op == "-":
result = a - b
elif op == "*":
result = a * b
elif op == "/":
result = a / b
else:
print("عملیات نامعتبر است.")
result = None
if result is not None:
print("نتیجه:", result)پیشنهادهای گسترش
- جلوگیری از تقسیم بر صفر با استفاده از شرط.
- تکرار برنامه در یک حلقه تا زمانی که کاربر بخواهد خارج شود.
- اضافه کردن عملیاتهای دیگر مثل توان (
a ** b) یا باقیمانده (a % b). - جدا کردن منطق هر عمل در یک تابع (برای تمرین فصل توابع).
پروژه ۳: فهرست کارها (To-Do List)
ایدهٔ برنامه
یک برنامهٔ ساده برای مدیریت فهرست کارهای روزانه:
- اضافه کردن کار جدید
- دیدن فهرست کارها
- علامتزدن یک کار بهعنوان «انجامشده»
- حذف یک کار
این پروژه تمرین خوبی برای لیستها و حلقهها است.
مشخصات سادهٔ برنامه
- ورودیها:
- انتخاب از یک منو (اضافهکردن، نمایش، حذف، خروج)
- متنِ کار (مثلاً «مطالعهٔ ۳۰ دقیقه پایتون»)
- شمارهٔ کار برای حذف یا علامتزدن
- خروجیها:
- نمایش فهرست کارها با شماره
- پیامهای موفقیت یا خطا (مثلاً شمارهٔ نادرست)
گامهای پیشنهادی پیادهسازی
- ایجاد یک لیست خالی برای کارها
- در ابتدای برنامه:
tasks = [] - حلقهٔ اصلی برنامه
- تا زمانی که کاربر گزینهٔ «خروج» را انتخاب نکرده.
- نمایش منو در هر دور
- مثلاً ۱: افزودن، ۲: نمایش، ۳: حذف، ۴: خروج.
- پیادهسازی هر گزینه
- گزینهٔ افزودن: گرفتن متن کار و
appendبه لیست. - گزینهٔ نمایش: چاپ همهٔ کارها با شماره.
- گزینهٔ حذف: دریافت شماره و حذف همان اندیس از لیست.
- کنترل ورودیهای اشتباه
- اگر شماره خارج از محدوده بود، پیام خطا.
ساختار نمونهٔ کد (الگو)
tasks = []
while True:
print("\nفهرست کارها")
print("1. افزودن کار جدید")
print("2. نمایش کارها")
print("3. حذف کار")
print("4. خروج")
choice = input("یک گزینه را انتخاب کنید: ")
if choice == "1":
text = input("متن کار جدید را وارد کنید: ")
tasks.append(text)
print("کار اضافه شد.")
elif choice == "2":
if not tasks:
print("هنوز کاری ثبت نشده است.")
else:
print("فهرست کارها:")
for i, t in enumerate(tasks, start=1):
print(i, "-", t)
elif choice == "3":
if not tasks:
print("چیزی برای حذف وجود ندارد.")
else:
num = int(input("شمارهٔ کاری که میخواهید حذف کنید: "))
index = num - 1 # چون لیست از ۰ شروع میشود
if 0 <= index < len(tasks):
removed = tasks.pop(index)
print("حذف شد:", removed)
else:
print("شمارهٔ نامعتبر.")
elif choice == "4":
print("خروج از برنامه.")
break
else:
print("گزینهٔ نامعتبر، دوباره تلاش کنید.")پیشنهادهای گسترش
- علامتزدن کارها بهعنوان «انجام شد» به جای حذف کامل.
- ذخیرهکردن فهرست در یک فایل و خواندن آن هنگام اجرای بعدی (اتصال به فصل فایلها).
- دستهبندی کارها (مثلاً «خانه»، «کار»، «یادگیری»).
- افزودن تاریخ یا زمان به هر کار.
پروژه ۴: تولیدکنندهٔ رمز عبور
ایدهٔ برنامه
برنامهای بنویسید که یک رمز عبور تصادفی بسازد. کاربر میتواند بگوید:
- طول رمز چقدر باشد (مثلاً ۸ یا ۱۲ کاراکتر)
- آیا از اعداد و حروف کوچک/بزرگ استفاده شود یا نه؟
این پروژه تمرین خوبی برای:
- کار با رشتهها
- حلقهها
- کتابخانههای استاندارد (مثل
randomوstring)
است.
مشخصات سادهٔ برنامه
- ورودیها:
- طول رمز (عدد صحیح)
- خروجیها:
- یک رشته بهعنوان رمز، مثلاً
a8Fz91Qk
گامهای پیشنهادی پیادهسازی
- مشخصکردن کاراکترهای مجاز
- مثلاً مجموعهای از حروف و اعداد (میتوانید خودتان تعریف کنید).
- گرفتن طول رمز از کاربر
- تبدیل به عدد.
- ساختن رمز در حلقه
- به تعداد طول رمز، هر بار یک کاراکتر تصادفی انتخاب و به رشتهٔ رمز اضافه کنید.
- نمایش رمز نهایی
ساختار نمونهٔ کد (الگو)
import random
import string
print("تولیدکنندهٔ رمز عبور")
length = int(input("طول رمز را وارد کنید: "))
# کاراکترهای مجاز: حروف کوچک، حروف بزرگ، اعداد
chars = string.ascii_lowercase + string.ascii_uppercase + string.digits
password = ""
for i in range(length):
password = password + random.choice(chars)
print("رمز تولید شده:")
print(password)پیشنهادهای گسترش
- اضافه کردن کاراکترهای خاص (مثل
!@#$%^&*). - پرسیدن از کاربر که کدام نوع کاراکترها را میخواهد (فقط عدد، فقط حرف، …).
- ساختن چندین رمز بهصورت همزمان (مثلاً ۵ رمز مختلف).
- بررسیِ سادهٔ «قدرت» رمز بر اساس طول و تنوع کاراکترها.
پروژه ۵: برنامهٔ آزمون (Quiz)
ایدهٔ برنامه
یک آزمون چندسؤالی طراحی کنید که:
- چند سؤال چهارگزینهای یا درست/غلط بپرسد.
- از کاربر پاسخ بگیرد.
- در پایان، تعداد پاسخهای درست را اعلام کند.
این پروژه تمرین خوبی برای:
- لیستها و دیکشنریها
- حلقهها
- شمارندهٔ امتیاز
است.
مشخصات سادهٔ برنامه
- ورودیها:
- پاسخ کاربر به هر سؤال (مثلاً
a،b،c،d) - خروجیها:
- نمایش سؤال و گزینهها
- امتیاز نهایی (چند جواب درست بوده است)
گامهای پیشنهادی پیادهسازی
- تعریف سؤالات
- میتوانید یک لیست از دیکشنریها بسازید؛ هر دیکشنری شامل:
- متن سؤال
- گزینهها
- پاسخ صحیح
- حلقه روی سؤالات
- هر سؤال را بهترتیب نمایش دهید.
- گرفتن پاسخ کاربر
- با
input. - مقایسه با پاسخ صحیح
- اگر درست بود، یک امتیاز به شمارنده اضافه کنید.
- نمایش نتیجهٔ نهایی
- تعداد پاسخ درست و شاید درصد نمره.
ساختار نمونهٔ کد (الگو)
questions = [
{
"text": "پایتون چیست؟",
"choices": {
"a": "یک زبان برنامهنویسی",
"b": "یک سیستمعامل",
"c": "یک مرورگر",
"d": "یک پایگاهداده"
},
"answer": "a"
},
{
"text": "خروجی 2 + 3 در پایتون چیست؟",
"choices": {
"a": "23",
"b": "5",
"c": "خطا",
"d": "هیچکدام"
},
"answer": "b"
}
]
score = 0
for q in questions:
print("\nسؤال:")
print(q["text"])
for key, value in q["choices"].items():
print(key + ":", value)
user_answer = input("گزینهٔ درست را وارد کنید: ")
if user_answer == q["answer"]:
print("درست!")
score = score + 1
else:
print("نادرست. پاسخ درست:", q["answer"])
print("\nآزمون تمام شد.")
print("تعداد پاسخهای درست:", score, "از", len(questions))پیشنهادهای گسترش
- تصادفیکردن ترتیب سؤالات.
- نمایش درصد نمره و سطح (مثلاً «عالی»، «خوب»، «نیاز به تمرین بیشتر»).
- جداکردن منطق سؤالپرسیدن در یک تابع.
- بارگذاری سؤالات از یک فایل متنی (اتصال به فصل فایلها).
پروژه ۶: پروژهٔ کوچک وب یا داده (نگاه اولیه)
این بخش فقط برای چشیدن طعم استفاده از پایتون در وب یا علم داده است. توضیحات کاملتر در فصلهای بعدی (توسعهٔ وب و علم داده) آمده است؛ اینجا فقط یک نمونهٔ «خیلی ساده» میسازیم.
ایدهٔ ۱: شمارندهٔ بازدید خیلی ساده با Flask (وب)
- یک وبسرور کوچک با Flask که:
- در هر بار بازکردن صفحه، یک عدد «بازدید» را یکی افزایش میدهد.
- عدد بازدید را روی صفحه نشان میدهد.
ساختار خیلی کلی (فقط ایده)
from flask import Flask
app = Flask(__name__)
visits = 0
@app.route("/")
def index():
global visits
visits = visits + 1
return f"تعداد بازدیدها تا الان: {visits}"
# اجرای برنامه در صورت اجرای مستقیم فایل
if __name__ == "__main__":
app.run()جزئیات نصب و اجرای Flask، در فصل توسعهٔ وب توضیح داده میشود؛ اینجا فقط شکل کلی یک برنامهٔ وب را میبینید.
ایدهٔ ۲: محاسبهٔ میانگین نمرات (دادهٔ خیلی ساده)
برنامهای بنویسید که:
- چند نمره از کاربر بگیرد (مثلاً با وارد کردن پشتسرهم).
- وقتی کاربر مثلاً کلمهٔ
endرا وارد کرد، گرفتن نمرات متوقف شود. - میانگین نمرات را حساب و نمایش دهد.
ساختار نمونهٔ کد (الگو)
grades = []
while True:
text = input("یک نمره وارد کنید (یا end برای پایان): ")
if text == "end":
break
grade = float(text)
grades.append(grade)
if grades:
total = sum(grades)
avg = total / len(grades)
print("میانگین نمرات:", avg)
else:
print("هیچ نمرهای وارد نشد.")این برنامه یک مثال ساده از کار با دادهها است: جمعآوری، ذخیره، و محاسبهای ساده روی آنها.
چگونه از این فصل بیشترین استفاده را ببرید؟
- با سادهترین نسخه هر پروژه شروع کنید؛ اگر گیر کردید:
- مسئله را کوچکتر کنید.
- مثلاً اول فقط ورودی و خروجی را درست کنید، سپس منطق وسط را اضافه کنید.
- بعد از اجرای موفق نسخهٔ ساده:
- یک یا دو ویژگی از بخش «پیشنهادهای گسترش» اضافه کنید.
- سعی کنید:
- بعضی پروژهها را خودتان از صفر بنویسید بدون نگاه کردن به الگو.
- سپس کد خود را با الگوها مقایسه کنید و تفاوتها را ببینید.
- اگر خطایی دیدید:
- از فصل خطاها و اشکالزدایی کمک بگیرید.
- پیام خطا را با دقت بخوانید و خط مربوطه را بررسی کنید.
این فصل نقطهٔ اتصال بین «مفاهیم تئوری» و «برنامههای واقعی» است. هر بار که پروژهای را کامل میکنید، یک قدم بزرگ در تبدیلشدن به برنامهنویس برداشتهاید.