...

برای راهنمایی و دریافت مشاوره رایگان میتونید فرم را پر کنید

مشاوره رایگان
پایتون
موضوعات داغ

پروژه های پایتون برای تمرین | ۱۶ پروژه ساده پایتون برای مبتدیان و کودکان

پروژه‌های پایتون برای تمرین زمانی مفید هستند که فقط نام یک ایده را نبینید، بلکه بتوانید کد را اجرا کنید، خروجی را بررسی کنید و بعد آن را تغییر دهید. در این راهنما ۱۶ پروژه ساده پایتون را از سطح خیلی ساده تا متوسط آماده کرده‌ایم. تمام کدها با Python 3 نوشته شده‌اند، از کتابخانه استا I’m havingدارد استفاده می‌کنند و پیش از تحویل از نظر سینتکس بررسی شده‌اند.

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

روش استفاده از مقاله: ابتدا صورت پروژه را بخوانید، ۱۵ تا ۳۰ دقیقه خودتان تلاش کنید، سپس کد را ببینید. بعد از اجرای موفق، یکی از پیشنهادهای توسعه را انجام دهید. یادگیری اصلی در همین مرحله تغییر دادن کد اتفاق می‌افتد.

فهرست ۱۶ پروژه پایتون برای تمرین

پروژه سطح زمان تقریبی مفاهیم
1. بازی داستان‌ساز Mad Libs خیلی ساده ۲۰ دقیقه input، متغیر، f-string
2. تولید نام مستعار تصادفی خیلی ساده ۲۰ دقیقه لیست، random، رشته
3. مسابقه چهارگزینه‌ای پایتون ساده ۴۵ دقیقه دیکشنری، حلقه، شرط، امتیاز
4. تولید رمز عبور قوی ساده ۳۰ دقیقه secrets، string، اعتبارسنجی ورودی
5. چت‌بات ساده قانون‌محور ساده ۴۰ دقیقه تابع، شرط، متدهای رشته، حلقه while
6. بازی حدس عدد ساده ۳۰ دقیقه random، حلقه، شرط، شمارنده
7. بازی سنگ، کاغذ، قیچی ساده ۴۵ دقیقه مجموعه، دیکشنری، random، تابع
8. ماشین حساب ساده ساده ۴۰ دقیقه تابع، دیکشنری، مدیریت خطا
9. مدیریت کارهای روزانه متوسط ۹۰ دقیقه JSON، فایل، منو، فهرست
10. شمارش واژه‌ها در متن ساده ۴۰ دقیقه رشته، Counter، عبارت منظم
11. استخراج ایمیل از متن متوسط ۴۵ دقیقه Regex، مجموعه، مرتب‌سازی
12. ردیاب بودجه شخصی متوسط ۱۲۰ دقیقه CSV، تاریخ، جمع‌زدن داده‌ها
13. تایمر شمارش معکوس ساده ۳۰ دقیقه time، حلقه، divmod
14. نمایش دنباله فیبوناچی ساده ۳۰ دقیقه حلقه، فهرست، جابه‌جایی متغیرها
15. تحلیل ساده داده‌های فروش متوسط ۹۰ دقیقه CSV، دیکشنری، تجمیع داده
16. بازی دوز دونفره متوسط ۱۵۰ دقیقه فهرست، تابع، حلقه، الگوریتم بازی

پیش‌نیاز اجرای پروژه‌ها

  • نصب Python 3.10 یا نسخه جدیدتر: برای دریافت فایل رسمی و انجام مراحل نصب، راهنمای دانلود و نصب پایتون را ببینید.

  • یک ویرایشگر ساده مانند IDLE یا Visual Studio Code
  • آشنایی مقدماتی با متغیر، شرط، حلقه، تابع و فهرست
  • ساخت یک پوشه جدا برای هر پروژه و ذخیره فایل با پسوند .py

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

کد کامل ۱۶ پروژه ساده پایتون

1. بازی داستان‌ساز Mad Libs

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

سطح: خیلی ساده
زمان: ۲۰ دقیقه
مفاهیم: input، متغیر، f-string
def get_non_empty(prompt: str) -> str:
    while True:
        value = input(prompt).strip()
        if value:
            return value
        print("لطفاً یک مقدار وارد کنید.")


def main() -> None:
    name = get_non_empty("نام یک شخصیت: ")
    place = get_non_empty("نام یک مکان: ")
    animal = get_non_empty("نام یک حیوان: ")
    adjective = get_non_empty("یک صفت: ")
    verb = get_non_empty("یک فعل: ")

    story = (
        f"یک روز {name} به {place} رفت. آنجا یک {animal} {adjective} دید "
        f"که مشغول {verb} بود. {name} تصمیم گرفت با او دوست شود."
    )

    print("\nداستان شما:")
    print(story)


if __name__ == "__main__":
    main()

تمرین توسعه: از کاربر واژه‌های بیشتری بگیرید و سه داستان مختلف بسازید تا برنامه یکی را به‌صورت تصادفی انتخاب کند.

2. تولید نام مستعار تصادفی

برنامه نام کاربر را می‌گیرد و با ترکیب یک صفت و یک اسم، نام مستعار تازه می‌سازد.

سطح: خیلی ساده
زمان: ۲۰ دقیقه
مفاهیم: لیست، random، رشته
import random

ADJECTIVES = ["سریع", "خلاق", "کنجکاو", "درخشان", "جسور", "آرام"]
NOUNS = ["روباه", "شاهین", "پاندا", "برنامه‌نویس", "کاوشگر", "ستاره"]


def create_nickname(name: str) -> str:
    adjective = random.choice(ADJECTIVES)
    noun = random.choice(NOUNS)
    return f"{name} {adjective} {noun}"


def main() -> None:
    name = input("نام خود را وارد کنید: ").strip()
    if not name:
        name = "دوست یاسانی"

    print("نام مستعار شما:", create_nickname(name))


if __name__ == "__main__":
    main()

تمرین توسعه: امکان ساخت چند نام مستعار و ذخیره نام انتخابی در یک فایل متنی را اضافه کنید.

3. مسابقه چهارگزینه‌ای پایتون

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

سطح: ساده
زمان: ۴۵ دقیقه
مفاهیم: دیکشنری، حلقه، شرط، امتیاز
QUESTIONS = [
    {
        "question": "کدام دستور برای نمایش متن استفاده می‌شود؟",
        "options": ["input", "print", "range", "len"],
        "answer": 2,
    },
    {
        "question": "کدام نوع داده برای نگهداری چند مقدار مناسب است؟",
        "options": ["list", "int", "float", "bool"],
        "answer": 1,
    },
    {
        "question": "خروجی len('Python') چیست؟",
        "options": ["5", "6", "7", "خطا"],
        "answer": 2,
    },
]


def ask_question(item: dict) -> bool:
    print("\n" + item["question"])
    for index, option in enumerate(item["options"], start=1):
        print(f"{index}. {option}")

    while True:
        choice = input("شماره پاسخ: ").strip()
        if choice.isdigit() and 1 <= int(choice) <= len(item["options"]):
            return int(choice) == item["answer"]
        print("یک شماره معتبر وارد کنید.")


def main() -> None:
    score = 0
    for question in QUESTIONS:
        if ask_question(question):
            print("پاسخ درست بود.")
            score += 1
        else:
            correct = question["options"][question["answer"] - 1]
            print(f"پاسخ درست: {correct}")

    percent = score / len(QUESTIONS) * 100
    print(f"\nامتیاز نهایی: {score} از {len(QUESTIONS)}")
    print(f"درصد پاسخ درست: {percent:.0f}%")


if __name__ == "__main__":
    main()

تمرین توسعه: سؤال‌ها را از یک فایل JSON بخوانید و برای هر اجرای برنامه ترتیب سؤال‌ها را تغییر دهید.

4. تولید رمز عبور قوی

برای ساخت رمز عبور بهتر است از ماژول secrets استفاده کنیم. این ماژول برای انتخاب‌های امنیتی مناسب‌تر از random است.

سطح: ساده
زمان: ۳۰ دقیقه
مفاهیم: secrets، string، اعتبارسنجی ورودی
import secrets
import string


def generate_password(length: int) -> str:
    if length < 8:
        raise ValueError("طول رمز عبور باید حداقل ۸ کاراکتر باشد.")

    required = [
        secrets.choice(string.ascii_lowercase),
        secrets.choice(string.ascii_uppercase),
        secrets.choice(string.digits),
        secrets.choice("!@#$%^&*"),
    ]

    alphabet = string.ascii_letters + string.digits + "!@#$%^&*"
    remaining = [secrets.choice(alphabet) for _ in range(length - 4)]
    characters = required + remaining
    secrets.SystemRandom().shuffle(characters)
    return "".join(characters)


def main() -> None:
    try:
        length = int(input("طول رمز عبور: "))
        print("رمز عبور:", generate_password(length))
    except ValueError as error:
        print("خطا:", error)


if __name__ == "__main__":
    main()

تمرین توسعه: گزینه‌هایی برای فعال یا غیرفعال کردن عددها و نشانه‌ها به برنامه اضافه کنید.

5. چت‌بات ساده قانون‌محور

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

سطح: ساده
زمان: ۴۰ دقیقه
مفاهیم: تابع، شرط، متدهای رشته، حلقه while
import random

GREETINGS = ["سلام", "درود", "خوش آمدی"]
FACTS = [
    "پایتون نخستین بار در سال ۱۹۹۱ منتشر شد.",
    "نام پایتون از گروه کمدی Monty Python گرفته شده است.",
    "در پایتون فاصله‌گذاری ابتدای خط بخشی از ساختار کد است.",
]


def get_response(message: str) -> str:
    text = message.strip().lower()

    if any(word in text for word in ["سلام", "درود"]):
        return random.choice(GREETINGS)
    if "حالت" in text:
        return "خوبم و آماده تمرین پایتون هستم."
    if "واقعیت" in text or "دانستنی" in text:
        return random.choice(FACTS)
    if text in {"خروج", "تمام", "خداحافظ"}:
        return "خداحافظ"
    return "هنوز پاسخ این جمله را یاد نگرفته‌ام."


def main() -> None:
    print("برای پایان، خروج را بنویسید.")
    while True:
        message = input("شما: ")
        response = get_response(message)
        print("بات:", response)
        if response == "خداحافظ":
            break


if __name__ == "__main__":
    main()

تمرین توسعه: پاسخ‌ها را داخل فایل JSON قرار دهید تا بدون تغییر کد بتوانید جمله‌های جدید اضافه کنید.

6. بازی حدس عدد

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

سطح: ساده
زمان: ۳۰ دقیقه
مفاهیم: random، حلقه، شرط، شمارنده
import random


def read_guess() -> int:
    while True:
        value = input("حدس شما: ").strip()
        if value.isdigit() and 1 <= int(value) <= 100:
            return int(value)
        print("یک عدد بین ۱ تا ۱۰۰ وارد کنید.")


def main() -> None:
    secret_number = random.randint(1, 100)
    attempts = 0
    print("یک عدد بین ۱ تا ۱۰۰ انتخاب کرده‌ام.")

    while True:
        guess = read_guess()
        attempts += 1

        if guess < secret_number:
            print("عدد بزرگ‌تری انتخاب کنید.")
        elif guess > secret_number:
            print("عدد کوچک‌تری انتخاب کنید.")
        else:
            print(f"آفرین، در {attempts} تلاش عدد را پیدا کردید.")
            break


if __name__ == "__main__":
    main()

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

7. بازی سنگ، کاغذ، قیچی

کاربر و کامپیوتر انتخاب می‌کنند و برنامه با یک جدول ساده برنده را مشخص می‌کند.

سطح: ساده
زمان: ۴۵ دقیقه
مفاهیم: مجموعه، دیکشنری، random، تابع
import random

CHOICES = ("سنگ", "کاغذ", "قیچی")
WINNING_RULES = {
    "سنگ": "قیچی",
    "کاغذ": "سنگ",
    "قیچی": "کاغذ",
}


def determine_winner(player: str, computer: str) -> str:
    if player == computer:
        return "مساوی"
    if WINNING_RULES[player] == computer:
        return "کاربر"
    return "کامپیوتر"


def main() -> None:
    print("گزینه‌ها:", "، ".join(CHOICES))
    player = input("انتخاب شما: ").strip()

    if player not in CHOICES:
        print("گزینه نامعتبر است.")
        return

    computer = random.choice(CHOICES)
    winner = determine_winner(player, computer)
    print("انتخاب کامپیوتر:", computer)
    print("نتیجه:", winner)


if __name__ == "__main__":
    main()

تمرین توسعه: بازی را سه‌دور کنید و امتیاز هر بازیکن را تا پایان نگه دارید.

8. ماشین حساب ساده

این ماشین حساب چهار عمل اصلی را انجام می‌دهد و خطای تقسیم بر صفر یا ورودی نامعتبر را مدیریت می‌کند.

سطح: ساده
زمان: ۴۰ دقیقه
مفاهیم: تابع، دیکشنری، مدیریت خطا
from typing import Callable


def add(a: float, b: float) -> float:
    return a + b


def subtract(a: float, b: float) -> float:
    return a - b


def multiply(a: float, b: float) -> float:
    return a * b


def divide(a: float, b: float) -> float:
    if b == 0:
        raise ZeroDivisionError("تقسیم بر صفر ممکن نیست.")
    return a / b


OPERATIONS: dict[str, Callable[[float, float], float]] = {
    "+": add,
    "-": subtract,
    "*": multiply,
    "/": divide,
}


def main() -> None:
    try:
        first = float(input("عدد اول: "))
        operator = input("عملگر + - * / : ").strip()
        second = float(input("عدد دوم: "))

        if operator not in OPERATIONS:
            raise ValueError("عملگر معتبر نیست.")

        result = OPERATIONS[operator](first, second)
        print("نتیجه:", result)
    except (ValueError, ZeroDivisionError) as error:
        print("خطا:", error)


if __name__ == "__main__":
    main()

تمرین توسعه: توان، جذر و تاریخچه محاسبات را به برنامه اضافه کنید.

9. مدیریت کارهای روزانه

این برنامه کارها را در فایل JSON ذخیره می‌کند تا بعد از بسته شدن برنامه هم باقی بمانند.

سطح: متوسط
زمان: ۹۰ دقیقه
مفاهیم: JSON، فایل، منو، فهرست
import json
from pathlib import Path

DATA_FILE = Path("todo.json")


def load_tasks() -> list[dict]:
    if not DATA_FILE.exists():
        return []
    try:
        return json.loads(DATA_FILE.read_text(encoding="utf-8"))
    except (json.JSONDecodeError, OSError):
        return []


def save_tasks(tasks: list[dict]) -> None:
    DATA_FILE.write_text(
        json.dumps(tasks, ensure_ascii=False, indent=2),
        encoding="utf-8",
    )


def show_tasks(tasks: list[dict]) -> None:
    if not tasks:
        print("فهرست کارها خالی است.")
        return
    for index, task in enumerate(tasks, start=1):
        status = "✓" if task["done"] else "○"
        print(f"{index}. {status} {task['title']}")


def main() -> None:
    tasks = load_tasks()

    while True:
        print("\n۱. نمایش  ۲. افزودن  ۳. انجام شد  ۴. حذف  ۵. خروج")
        choice = input("انتخاب: ").strip()

        if choice == "1":
            show_tasks(tasks)
        elif choice == "2":
            title = input("عنوان کار: ").strip()
            if title:
                tasks.append({"title": title, "done": False})
                save_tasks(tasks)
        elif choice in {"3", "4"}:
            show_tasks(tasks)
            try:
                index = int(input("شماره کار: ")) - 1
                if not 0 <= index < len(tasks):
                    raise IndexError
                if choice == "3":
                    tasks[index]["done"] = True
                else:
                    tasks.pop(index)
                save_tasks(tasks)
            except (ValueError, IndexError):
                print("شماره معتبر نیست.")
        elif choice == "5":
            break
        else:
            print("گزینه معتبر نیست.")


if __name__ == "__main__":
    main()

تمرین توسعه: برای هر کار تاریخ انجام، اولویت و دسته‌بندی تعریف کنید.

10. شمارش واژه‌ها در متن

برنامه تعداد واژه‌ها و پرتکرارترین کلمات یک متن را محاسبه می‌کند.

سطح: ساده
زمان: ۴۰ دقیقه
مفاهیم: رشته، Counter، عبارت منظم
import re
from collections import Counter


def analyze_text(text: str) -> tuple[int, Counter]:
    words = re.findall(r"[\wآ-ی]+", text.lower(), flags=re.UNICODE)
    return len(words), Counter(words)


def main() -> None:
    text = input("متن را وارد کنید: ").strip()
    total, frequencies = analyze_text(text)

    print("تعداد کل واژه‌ها:", total)
    print("پنج واژه پرتکرار:")
    for word, count in frequencies.most_common(5):
        print(f"{word}: {count}")


if __name__ == "__main__":
    main()

تمرین توسعه: متن را از فایل بخوانید و تعداد جمله‌ها و میانگین طول واژه‌ها را هم نمایش دهید.

11. استخراج ایمیل از متن

برنامه آدرس‌های ایمیل موجود در یک متن را پیدا می‌کند و موارد تکراری را حذف می‌کند.

سطح: متوسط
زمان: ۴۵ دقیقه
مفاهیم: Regex، مجموعه، مرتب‌سازی
import re

EMAIL_PATTERN = re.compile(
    r"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}"
)


def extract_emails(text: str) -> list[str]:
    return sorted(set(EMAIL_PATTERN.findall(text)))


def main() -> None:
    print("متن را وارد کنید و سپس Enter بزنید:")
    text = input()
    emails = extract_emails(text)

    if not emails:
        print("ایمیلی پیدا نشد.")
        return

    print("ایمیل‌های پیدا شده:")
    for email in emails:
        print(email)


if __name__ == "__main__":
    main()

تمرین توسعه: امکان خواندن فایل متنی و ذخیره ایمیل‌ها در فایل CSV را اضافه کنید.

12. ردیاب بودجه شخصی

درآمد و هزینه‌ها در فایل CSV ذخیره می‌شوند و برنامه مانده حساب را گزارش می‌کند.

سطح: متوسط
زمان: ۱۲۰ دقیقه
مفاهیم: CSV، تاریخ، جمع‌زدن داده‌ها
import csv
from datetime import date
from pathlib import Path

DATA_FILE = Path("budget.csv")
FIELDS = ["date", "type", "amount", "description"]


def add_record(record_type: str, amount: float, description: str) -> None:
    file_exists = DATA_FILE.exists()
    with DATA_FILE.open("a", newline="", encoding="utf-8-sig") as file:
        writer = csv.DictWriter(file, fieldnames=FIELDS)
        if not file_exists:
            writer.writeheader()
        writer.writerow(
            {
                "date": date.today().isoformat(),
                "type": record_type,
                "amount": amount,
                "description": description,
            }
        )


def calculate_balance() -> tuple[float, float, float]:
    income = 0.0
    expense = 0.0
    if not DATA_FILE.exists():
        return income, expense, 0.0

    with DATA_FILE.open("r", newline="", encoding="utf-8-sig") as file:
        for row in csv.DictReader(file):
            amount = float(row["amount"])
            if row["type"] == "income":
                income += amount
            else:
                expense += amount
    return income, expense, income - expense


def main() -> None:
    while True:
        print("\n۱. ثبت درآمد  ۲. ثبت هزینه  ۳. گزارش  ۴. خروج")
        choice = input("انتخاب: ").strip()

        if choice in {"1", "2"}:
            try:
                amount = float(input("مبلغ: "))
                if amount <= 0:
                    raise ValueError
                description = input("توضیح: ").strip()
                record_type = "income" if choice == "1" else "expense"
                add_record(record_type, amount, description)
                print("ثبت شد.")
            except ValueError:
                print("مبلغ معتبر نیست.")
        elif choice == "3":
            income, expense, balance = calculate_balance()
            print(f"درآمد: {income:,.0f}")
            print(f"هزینه: {expense:,.0f}")
            print(f"مانده: {balance:,.0f}")
        elif choice == "4":
            break
        else:
            print("گزینه معتبر نیست.")


if __name__ == "__main__":
    main()

تمرین توسعه: گزارش ماهانه و دسته‌بندی هزینه‌ها را به برنامه اضافه کنید.

13. تایمر شمارش معکوس

کاربر زمان را بر حسب ثانیه وارد می‌کند و برنامه تا صفر شمارش می‌کند.

سطح: ساده
زمان: ۳۰ دقیقه
مفاهیم: time، حلقه، divmod
import time


def countdown(total_seconds: int) -> None:
    while total_seconds >= 0:
        minutes, seconds = divmod(total_seconds, 60)
        print(f"\r{minutes:02d}:{seconds:02d}", end="", flush=True)
        time.sleep(1)
        total_seconds -= 1
    print("\nزمان تمام شد.")


def main() -> None:
    try:
        seconds = int(input("زمان بر حسب ثانیه: "))
        if seconds < 0:
            raise ValueError
        countdown(seconds)
    except ValueError:
        print("یک عدد صحیح نامنفی وارد کنید.")


if __name__ == "__main__":
    main()

تمرین توسعه: دکمه توقف و ادامه را با کتابخانه tkinter به تایمر اضافه کنید.

14. نمایش دنباله فیبوناچی

برنامه تعداد جمله‌های موردنظر کاربر را از دنباله فیبوناچی تولید می‌کند.

سطح: ساده
زمان: ۳۰ دقیقه
مفاهیم: حلقه، فهرست، جابه‌جایی متغیرها
def fibonacci(count: int) -> list[int]:
    if count < 0:
        raise ValueError("تعداد نباید منفی باشد.")

    sequence = []
    first, second = 0, 1
    for _ in range(count):
        sequence.append(first)
        first, second = second, first + second
    return sequence


def main() -> None:
    try:
        count = int(input("تعداد جمله‌ها: "))
        print(fibonacci(count))
    except ValueError as error:
        print("خطا:", error)


if __name__ == "__main__":
    main()

تمرین توسعه: بررسی کنید آیا یک عدد مشخص عضو دنباله فیبوناچی است یا خیر.

15. تحلیل ساده داده‌های فروش

این پروژه یک فایل نمونه فروش می‌سازد، مجموع فروش هر محصول را محاسبه می‌کند و محصول پرفروش را نشان می‌دهد.

سطح: متوسط
زمان: ۹۰ دقیقه
مفاهیم: CSV، دیکشنری، تجمیع داده
import csv
from collections import defaultdict
from pathlib import Path

DATA_FILE = Path("sales.csv")

SAMPLE_ROWS = [
    ["product", "quantity", "unit_price"],
    ["دفتر", 3, 50000],
    ["مداد", 10, 12000],
    ["دفتر", 2, 50000],
    ["پاک‌کن", 5, 18000],
    ["مداد", 4, 12000],
]


def create_sample_file() -> None:
    if DATA_FILE.exists():
        return
    with DATA_FILE.open("w", newline="", encoding="utf-8-sig") as file:
        csv.writer(file).writerows(SAMPLE_ROWS)


def analyze_sales() -> dict[str, float]:
    totals: dict[str, float] = defaultdict(float)
    with DATA_FILE.open("r", newline="", encoding="utf-8-sig") as file:
        for row in csv.DictReader(file):
            product = row["product"]
            quantity = int(row["quantity"])
            unit_price = float(row["unit_price"])
            totals[product] += quantity * unit_price
    return dict(totals)


def main() -> None:
    create_sample_file()
    totals = analyze_sales()

    print("فروش هر محصول:")
    for product, amount in sorted(totals.items()):
        print(f"{product}: {amount:,.0f}")

    best_product = max(totals, key=totals.get)
    print("محصول با بیشترین فروش:", best_product)


if __name__ == "__main__":
    main()

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

16. بازی دوز دونفره

دو بازیکن به نوبت خانه‌های صفحه را انتخاب می‌کنند و برنامه برد یا مساوی شدن را تشخیص می‌دهد.

سطح: متوسط
زمان: ۱۵۰ دقیقه
مفاهیم: فهرست، تابع، حلقه، الگوریتم بازی
WINNING_LINES = [
    (0, 1, 2), (3, 4, 5), (6, 7, 8),
    (0, 3, 6), (1, 4, 7), (2, 5, 8),
    (0, 4, 8), (2, 4, 6),
]


def show_board(board: list[str]) -> None:
    print()
    for row in range(0, 9, 3):
        print(" | ".join(board[row:row + 3]))
        if row < 6:
            print("---------")
    print()


def has_won(board: list[str], symbol: str) -> bool:
    return any(all(board[index] == symbol for index in line) for line in WINNING_LINES)


def read_move(board: list[str], symbol: str) -> int:
    while True:
        choice = input(f"بازیکن {symbol}، شماره خانه ۱ تا ۹: ").strip()
        if choice.isdigit():
            index = int(choice) - 1
            if 0 <= index < 9 and board[index] not in {"X", "O"}:
                return index
        print("خانه معتبر و خالی انتخاب کنید.")


def main() -> None:
    board = [str(index) for index in range(1, 10)]
    current = "X"

    for _ in range(9):
        show_board(board)
        move = read_move(board, current)
        board[move] = current

        if has_won(board, current):
            show_board(board)
            print(f"بازیکن {current} برنده شد.")
            return
        current = "O" if current == "X" else "X"

    show_board(board)
    print("بازی مساوی شد.")


if __name__ == "__main__":
    main()

تمرین توسعه: یک بازیکن کامپیوتری ساده بسازید که خانه خالی را به‌صورت تصادفی انتخاب کند.

نمونه پروژه‌های پایتون فراگیران آکادمی یاسان

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

در تلنت‌شو یاسان، فراگیران پروژه یا مهارت خود را بدون داوری و رتبه‌بندی ارائه می‌دهند. هدف، دیده‌شدن مسیر ساخت و تمرین مهارت توضیح دادن پروژه است، نه مقایسه فراگیران با یکدیگر.

چطور از کپی کردن کد عبور کنیم؟

۱. ابتدا صورت مسئله را بنویسید

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

۲. کد را خط‌به‌خط تایپ کنید

تایپ کردن کمک می‌کند ساختار کد را ببینید و خطاهای واقعی را تجربه کنید.

۳. یک بخش را تغییر دهید

نام‌ها، قوانین بازی، فایل خروجی یا شکل گزارش را تغییر دهید. پروژه زمانی مال شما می‌شود که تصمیمی در آن گرفته باشید.

۴. پروژه را توضیح دهید

در چند جمله بگویید مسئله چه بود، کدام بخش سخت بود و برای بهتر شدن پروژه چه ایده‌ای دارید.

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

اشتباهات رایج در پروژه‌های پایتون

  • کپی کردن بدون اجرا: کد را اجرا کنید و ورودی‌های متفاوت بدهید.
  • نادیده گرفتن پیام خطا: آخرین خط خطا معمولاً نوع مشکل و محل تقریبی آن را نشان می‌دهد.
  • شروع با پروژه خیلی بزرگ: ابتدا نسخه متنی ساده بسازید و بعد رابط گرافیکی یا امکانات بیشتر اضافه کنید.
  • نام‌گذاری نامفهوم: برای متغیر و تابع نامی انتخاب کنید که نقش آن را توضیح دهد.
  • ذخیره نکردن نسخه‌ها: پیش از تغییر بزرگ، یک کپی از نسخه سالم پروژه نگه دارید.

جمع‌بندی نکات کلیدی

  • برای شروع، پروژه‌هایی را انتخاب کنید که فقط با کتابخانه استاندارد اجرا می‌شوند.
  • هر پروژه را ابتدا خودتان حل کنید و سپس از کد کامل برای بررسی استفاده کنید.
  • پس از اجرای کد، دست‌کم یک قابلیت تازه اضافه کنید.
  • پروژه را با نام، توضیح و نمونه خروجی در یک پوشه مرتب نگه دارید.
  • موضوع موردعلاقه فراگیر، مانند فوتبال، بازی یا داده، می‌تواند پایه یک پروژه شخصی باشد.

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

سؤالات متداول

برای اجرای این پروژه‌ها چه نسخه‌ای از پایتون لازم است؟

Python 3.10 یا نسخه جدیدتر پیشنهاد می‌شود. بیشتر کدها روی نسخه‌های کمی قدیمی‌تر هم اجرا می‌شوند، اما نوع‌نویسی بعضی پروژه‌ها با نسخه‌های جدید سازگارتر است.

آیا کد پروژه‌ها به اینترنت نیاز دارد؟

خیر. هر ۱۶ پروژه با کتابخانه استاندارد نوشته شده‌اند و پس از نصب پایتون، بدون اینترنت اجرا می‌شوند.

کدام پروژه برای شروع مناسب‌تر است؟

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

آیا کودک باید همه کد را حفظ کند؟

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

چطور پروژه پایتون را به رزومه تبدیل کنیم؟

برای هر پروژه یک توضیح کوتاه، تصویر خروجی، فایل README و سورس مرتب آماده کنید. سپس پروژه را در یک مخزن GitHub یا صفحه شخصی منتشر کنید.

پایتون برای چه سنی مناسب است؟

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

آیا پروژه‌های فراگیران یاسان فقط داخل کلاس ساخته می‌شوند؟

یادگیری یاسان پروژه‌محور است و فراگیران در طول مسیر پروژه می‌سازند. بعضی پروژه‌ها نیز در رویدادهایی مانند تلنت‌شو ارائه می‌شوند تا فراگیر درباره فرایند ساخت و تصمیم‌های خود توضیح دهد.

جمع‌بندی

پروژه‌های پایتون برای تمرین زمانی به یادگیری واقعی منجر می‌شوند که کد را اجرا کنید، خطا ببینید، تغییر بدهید و درباره تصمیم‌های خود توضیح دهید. این ۱۶ پروژه از ورودی و شرط شروع می‌شوند و تا فایل، تحلیل داده و منطق بازی پیش می‌روند.

مقالات مرتبط

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا