Kahibaro
Discord Login Register

برنامهٔ آزمون (Quiz)

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

در این پروژه می‌خواهیم یک «برنامهٔ آزمون ساده» بسازیم که:

این پروژه تمرین خوبی برای:

است.

در این فصل چند نسخهٔ ساده تا کمی پیشرفته‌تر از یک برنامهٔ Quiz را قدم به قدم می‌سازیم.

نسخهٔ ۱: آزمون خیلی ساده با چند سؤال ثابت

در ساده‌ترین نسخه، می‌توانیم فقط چند سؤال را پشت سر هم بپرسیم و نمره را بشماریم.

ایده:

score = 0  # نمرهٔ کاربر
print("به آزمون اطلاعات عمومی خوش آمدید!")
answer = input("1) پایتون چیست؟ (زبان / حیوان / هر دو): ")
if answer == "هر دو":
    print("درست!")
    score = score + 1
else:
    print("نادرست!")
answer = input("2) کدام عدد از همه بزرگ‌تر است؟  10 ، 50 ، 3 : ")
if answer == "50":
    print("درست!")
    score = score + 1
else:
    print("نادرست!")
print("آزمون تمام شد.")
print("نمرهٔ شما:", score, "از 2")

نکته‌ها:

نسخهٔ ۲: استفاده از لیست برای ذخیرهٔ سؤال‌ها

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

ایده:

questions = [
    "1) پایتون چیست؟ (زبان / حیوان / هر دو): ",
    "2) کدام عدد بزرگ‌تر است؟  10 ، 50 ، 3 : ",
    "3) حاصل 2 + 2 چند است؟ "
]
answers = [
    "هر دو",
    "50",
    "4"
]
score = 0
print("به آزمون کوچک خوش آمدید!")
print("لطفاً به سؤال‌ها پاسخ دهید.\n")
for i in range(len(questions)):
    user_answer = input(questions[i])
    if user_answer == answers[i]:
        print("✔ جواب درست")
        score += 1
    else:
        print("✖ جواب نادرست")
print("\nآزمون تمام شد.")
print("نمرهٔ نهایی شما:", score, "از", len(questions))

مزیت این روش:

نسخهٔ ۳: استفاده از دیکشنری یا لیست از دیکشنری‌ها

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

ایدهٔ «لیست از دیکشنری‌ها»:

quiz = [
    {"question": "1) پایتون چیست؟ (زبان / حیوان / هر دو): ",
     "answer": "هر دو"},
    {"question": "2) حاصل 3 * 5 چند است؟ ",
     "answer": "15"},
    {"question": "3) رنگ آسمان در روز (مثلاً): ",
     "answer": "آبی"},
]
score = 0
print("آزمون شروع شد!\n")
for item in quiz:
    user_answer = input(item["question"])
    if user_answer == item["answer"]:
        print("درست ✅")
        score += 1
    else:
        print("غلط ❌")
print("\nآزمون تمام شد.")
print("نمرهٔ شما:", score, "از", len(quiz))

این ساختار وقتی سؤال‌ها پیچیده‌تر می‌شوند (مثلاً چند گزینه‌ای، زمان‌بندی، سختی سؤال و …) خیلی مفید است.

نسخهٔ ۴: اجازهٔ پاسخ حروف بزرگ/کوچک متفاوت

در نسخه‌های قبل، اگر جواب درست هر دو باشد، و کاربر بنویسد هر دو با فاصلهٔ اضافه یا حروف انگلیسی بزرگ/کوچک، ممکن است غلط حساب شود.

برای «منعطف‌تر شدن»، می‌توانیم:

correct = "هر دو"
user_answer = input("پایتون چیست؟ (زبان / حیوان / هر دو): ")
# تمیز کردن ورودی کاربر
user_answer = user_answer.strip()      # حذف فاصله‌های اول و آخر
user_answer = user_answer.lower()      # تبدیل به حروف کوچک
if user_answer == correct.lower():
    print("جواب درست است.")
else:
    print("جواب نادرست است.")

این تکنیک را می‌توانید داخل حلقهٔ اصلی آزمون هم استفاده کنید تا کاربر لازم نباشد دقیقاً همان شکل را تایپ کند.

نسخهٔ ۵: آزمون چندگزینه‌ای (Multiple Choice)

در بسیاری از آزمون‌ها، سؤال‌ها چند گزینه‌ای هستند.
می‌توانیم ساختار سؤال را این‌طور نگه داریم:

quiz = [
    {
        "question": "1) خروجی 2 + 3 در پایتون چیست؟",
        "options": ["a) 23", "b) 5", "c) 6"],
        "answer": "b"
    },
    {
        "question": "2) کدام یک نوع دادهٔ عدد صحیح در پایتون است؟",
        "options": ["a) int", "b) str", "c) list"],
        "answer": "a"
    },
    {
        "question": "3) کدام دستور برای گرفتن ورودی از کاربر است؟",
        "options": ["a) print", "b) input", "c) if"],
        "answer": "b"
    }
]
score = 0
print("آزمون چندگزینه‌ای پایتون\n")
for item in quiz:
    print(item["question"])
    for opt in item["options"]:
        print(opt)
    user_answer = input("جواب شما (a/b/c): ")
    # تمیز کردن جواب
    user_answer = user_answer.strip().lower()
    if user_answer == item["answer"]:
        print("درست ✅\n")
        score += 1
    else:
        print("غلط ❌\n")
print("آزمون تمام شد.")
print("نمرهٔ شما:", score, "از", len(quiz))

می‌توانید تعداد گزینه‌ها را بیشتر کنید یا حروف دیگری برای گزینه‌ها بگذارید.

نسخهٔ ۶: محاسبهٔ درصد و نمایش نتیجهٔ توصیفی

به‌جای فقط گفتن «نمرهٔ شما ۲ از ۳ است»، می‌توانیم درصد و یک پیام انگیزشی چاپ کنیم.

فرض کنیم نمرهٔ خام شما $score$ و تعداد سؤال‌ها $n$ باشد.
درصد نمره به صورت زیر است:

$$
percent = \frac{score}{n} \times 100
$$

total_questions = len(quiz)
percent = (score / total_questions) * 100
print("\nنمرهٔ خام:", score, "از", total_questions)
print("درصد نمره: ", percent, "%")
if percent == 100:
    print("عالی! همه را درست جواب دادید.")
elif percent >= 70:
    print("خیلی خوب بود!")
elif percent >= 50:
    print("بد نیست، ولی می‌توانید بهتر شوید.")
else:
    print("نیاز به تمرین بیشتری دارید.")

این قسمت را می‌توانید بعد از پایان هر نوع آزمونی (متنی یا چندگزینه‌ای) اضافه کنید.

نسخهٔ ۷: تبدیل منطق آزمون به تابع

برای مرتب شدن کد، می‌توانیم کد آزمون را در یک تابع قرار دهیم؛ مثلاً:

def run_quiz(quiz):
    score = 0
    for item in quiz:
        print(item["question"])
        for opt in item["options"]:
            print(opt)
        user_answer = input("جواب شما: ").strip().lower()
        if user_answer == item["answer"]:
            print("درست ✅\n")
            score += 1
        else:
            print("غلط ❌\n")
    return score
# تعریف سوال‌ها
quiz_questions = [
    {
        "question": "1) کدام نماد برای کامنت یک‌خطی در پایتون استفاده می‌شود؟",
        "options": ["a) //", "b) #", "c) /* */"],
        "answer": "b"
    },
    {
        "question": "2) کدام تابع نوع داده را نشان می‌دهد؟",
        "options": ["a) print()", "b) input()", "c) type()"],
        "answer": "c"
    }
]
print("برنامهٔ آزمون پایتون\n")
score = run_quiz(quiz_questions)
total = len(quiz_questions)
percent = (score / total) * 100
print("نمرهٔ شما:", score, "از", total)
print("درصد:", percent, "%")

مزیت:

امکانات اختیاری برای تمرین بیشتر

اگر دوست دارید برنامهٔ آزمون خود را کمی حرفه‌ای‌تر کنید، می‌توانید این ایده‌ها را تمرین کنید:

  1. تصحیح خودکار فاصله و حروف
    • حتماً روی جواب‌ها strip() و lower() را اجرا کنید.
    • امکان پذیرش چند پاسخ درست (مثلاً «آبی» یا «آسمانی») را اضافه کنید.
  2. نمایش جواب درست بعد از پاسخ غلط
    بعد از چاپ «غلط»، جواب درست را هم نمایش دهید:
   print("جواب درست این بود:", item["answer"])
  1. شمارش سؤالات درست و غلط به‌طور جداگانه
    مثلا دو متغیر correct_count و wrong_count داشته باشید.
  2. تصادفی‌کردن ترتیب سؤال‌ها
    با استفاده از random.shuffle() (در فصل کتابخانه‌ها با آن آشنا می‌شوید) ترتیب سؤال‌ها را عوض کنید تا آزمون هر بار شبیه هم نباشد.
  3. دسته‌بندی سؤال‌ها
    مثلا سؤال‌ها را به «آسان»، «متوسط»، «سخت» تقسیم کنید و فقط از یک دسته آزمون بگیرید.
  4. ذخیرهٔ نتیجهٔ آزمون در فایل
    در پایان آزمون، نام کاربر و نمره‌اش را داخل یک فایل متنی ذخیره کنید (با مطالب فصل «کار با فایل‌ها»).

این پروژه را می‌توانید هم‌زمان با جلو رفتن در فصل‌های دیگر تکمیل‌تر کنید؛
هر بار که مفهوم جدیدی یاد می‌گیرید، فکر کنید چطور می‌شود آن را به برنامهٔ آزمون اضافه کرد.

Views: 5

Comments

Please login to add a comment.

Don't have an account? Register now!