Table of Contents
هدف این پروژه
در این پروژه یک «بازی حدس عدد» میسازیم:
- کامپیوتر یک عدد مخفی انتخاب میکند (مثلاً بین ۱ تا ۱۰۰).
- کاربر سعی میکند آن عدد را حدس بزند.
- برنامه به کاربر میگوید:
- حدسش «بزرگتر» از عدد مخفی است،
- یا «کوچکتر» از عدد مخفی است،
- یا «درست حدس زدی!».
- در پایان میگوییم کاربر با چند حدس درست به جواب رسیده است.
در طول این پروژه از چیزهایی استفاده میکنیم که قبلاً یاد گرفتهاید:
- ورودی و خروجی (
inputوprint) - تبدیل رشته به عدد (
int) - شرطها (
if,elif,else) - حلقهها (
while) - کتابخانهها (
importکردنrandom)
در این فصل تمرکز روی «ترکیب» این مفاهیم در قالب یک برنامهٔ کامل است، نه آموزش دوبارهٔ آنها.
ایدهٔ کلی بازی
الگوی کلی بازی این است:
- برنامه یک عدد تصادفی انتخاب میکند.
- برنامه از کاربر میخواهد حدس بزند.
- تا وقتی حدس کاربر درست نشده، تکرار میکنیم:
- اگر حدس کاربر بزرگتر بود → بگو «عدد کوچکتر است».
- اگر حدس کاربر کوچکتر بود → بگو «عدد بزرگتر است».
- دوباره از او حدس جدید بگیر.
- وقتی حدس درست شد → پیام موفقیت نمایش بده و تعداد حدسها را بگو.
این الگوریتم را میخواهیم مرحلهبهمرحله به کد تبدیل کنیم.
مرحلهٔ ۱: انتخاب عدد تصادفی
برای اینکه هر بار بازی تکراری نباشد، از کتابخانهٔ random استفاده میکنیم.
import random
secret_number = random.randint(1, 100)
print("یک عدد مخفی بین 1 تا 100 انتخاب شده است!")در اینجا:
import random→ ماژولrandomرا وارد میکنیم.random.randint(1, 100)→ یک عدد تصادفی بین ۱ و ۱۰۰ (شامل هر دو) برمیگرداند.secret_number→ عدد مخفی است که کاربر باید حدس بزند.
مرحلهٔ ۲: گرفتن حدس از کاربر
ما میخواهیم از کاربر عدد بگیریم. input همیشه رشته میدهد، پس باید آن را به عدد تبدیل کنیم.
guess_text = input("حدس بزن عدد چیست: ")
guess = int(guess_text)اینجا:
guess_textمثلاً"50"است (رشته).int(guess_text)آن را به عدد50تبدیل میکند.
در نسخهٔ ساده، فرض میکنیم کاربر عدد معتبر وارد میکند. (بعداً دربارهٔ ورودی اشتباه میتوان پروژه را بهتر کرد.)
مرحلهٔ ۳: استفاده از حلقه برای تکرار حدسها
ما نمیدانیم کاربر چند بار تلاش میکند، پس از while استفاده میکنیم تا «تا زمانی که حدس اشتباه است» بازی ادامه داشته باشد.
فرم کلی:
while حدس_غلط_است:
راهنمایی_بده
حدس_جدید_بگیردر بازی ما:
while guess != secret_number:
# اینجا به کاربر میگوییم بزرگتر یا کوچکتر
# بعد حدس جدید میگیریممرحلهٔ ۴: راهنمایی «بزرگتر» یا «کوچکتر»
درون حلقه، باید بررسی کنیم حدس کاربر نسبت به عدد مخفی چه وضعی دارد.
if guess < secret_number:
print("برو بالاتر! عدد بزرگتر است.")
elif guess > secret_number:
print("برو پایینتر! عدد کوچکتر است.")بعد از این پیام، دوباره حدس جدید میگیریم:
guess_text = input("دوباره حدس بزن: ")
guess = int(guess_text)مرحلهٔ ۵: شمارش تعداد حدسها
برای جالبتر شدن بازی، تعداد تلاشها را میشماریم.
- قبل از حلقه یک شمارنده میسازیم و صفر میکنیم.
- هر بار که کاربر حدس میزند، شمارنده را یک واحد زیاد میکنیم.
- وقتی حدس درست شد، مقدار شمارنده را چاپ میکنیم.
attempts = 0 # تعداد حدسها
guess_text = input("حدس بزن عدد چیست: ")
guess = int(guess_text)
attempts = attempts + 1 # اولین حدسو داخل حلقه هم هر بار که حدس جدید میگیریم:
guess_text = input("دوباره حدس بزن: ")
guess = int(guess_text)
attempts = attempts + 1در پایان:
print("آفرین! عدد را درست حدس زدی.")
print("تعداد حدسهای تو:", attempts)برنامهٔ کامل: نسخهٔ سادهٔ بازی حدس عدد
حالا همهٔ تکهها را کنار هم میگذاریم تا یک برنامهٔ کامل داشته باشیم.
import random
print("به بازی حدس عدد خوش آمدی!")
print("من یک عدد بین 1 تا 100 انتخاب کردهام. سعی کن حدسش بزنی.")
secret_number = random.randint(1, 100)
attempts = 0 # شمارش حدسها
guess_text = input("حدس بزن عدد چیست: ")
guess = int(guess_text)
attempts = attempts + 1
while guess != secret_number:
if guess < secret_number:
print("برو بالاتر! عدد بزرگتر است.")
elif guess > secret_number:
print("برو پایینتر! عدد کوچکتر است.")
guess_text = input("دوباره حدس بزن: ")
guess = int(guess_text)
attempts = attempts + 1
print("آفرین! عدد را درست حدس زدی.")
print("عدد مخفی:", secret_number)
print("تعداد حدسهای تو:", attempts)این یک نسخهٔ کارا و ساده از بازی است. حالا میتوانیم آن را مرحلهبهمرحله بهتر کنیم.
بهبود ۱: محدود کردن تعداد تلاشها
میتوانیم سقف تلاش تعیین کنیم. مثلاً کاربر حداکثر ۷ بار اجازهٔ حدس دارد.
ایده:
- یک حدّ ماکسیمم انتخاب میکنیم، مثلاً
max_attempts = 7. - در شرط حلقه، علاوه بر غلط بودن حدس، بررسی میکنیم که هنوز به این سقف نرسیدهایم.
- اگر کاربر به عدد نرسید و تلاشها تمام شد، پیام «باخت» میدهیم.
import random
print("بازی حدس عدد با حداکثر 7 تلاش!")
secret_number = random.randint(1, 100)
attempts = 0
max_attempts = 7
while attempts < max_attempts:
guess_text = input("حدس بزن (بین 1 تا 100): ")
guess = int(guess_text)
attempts = attempts + 1
if guess == secret_number:
print("عالی! درست حدس زدی.")
print("در", attempts, "تلاش موفق شدی.")
break # خروج از حلقه
elif guess < secret_number:
print("عدد من بزرگتر از حدس تو است.")
else:
print("عدد من کوچکتر از حدس تو است.")
if attempts == max_attempts:
print("متاسفانه تلاشهایت تمام شد!")
print("عدد مخفی این بود:", secret_number)نکتهٔ جدید در این نسخه:
- استفاده از
breakبرای خروج از حلقه وقتی حدس درست است. - اضافه شدن یک شرط دیگر (
attempts < max_attempts) برای کنترل طول بازی.
بهبود ۲: بررسی اینکه ورودی عدد است (ایدهٔ ساده)
در نسخهٔ حرفهایتر میتوانیم ورودی اشتباه را مدیریت کنیم (مثلاً اگر کاربر سلام تایپ کند). در این دوره، جزئیات مدیریت خطاها در فصل مربوط به try/except توضیح داده میشود؛ پس اینجا فقط ایده را میگوییم و یک نمونهٔ کوتاه:
guess_text = input("حدس بزن (عدد وارد کن): ")
if guess_text.isdigit():
guess = int(guess_text)
else:
print("لطفاً فقط عدد وارد کن!")
# میتوانیم دوباره از کاربر ورودی بگیریماین فقط یک نمونهٔ ساده است؛ پیادهسازی کامل و محکمتر را میتوانید بهعنوان تمرین خودتان امتحان کنید.
ایدههایی برای گسترش بازی (تمرین)
اگر نسخهٔ ساده برایتان راحت شد، میتوانید این ایدهها را امتحان کنید:
- انتخاب بازهٔ عددی توسط خود کاربر
- از کاربر بپرسید عدد حداقل و حداکثر چند باشد.
- با
random.randint(min_value, max_value)عدد مخفی بسازید. - سطح سختی (آسان، معمولی، سخت)
- برای هر سطح، بازه و یا حداکثر تلاش متفاوت تعیین کنید.
مثال: - آسان: ۱ تا ۵۰، تلاش نامحدود
- معمولی: ۱ تا ۱۰۰، حداکثر ۱۰ تلاش
- سخت: ۱ تا ۲۰۰، حداکثر ۷ تلاش
- امتیازدهی
- اگر با تلاشهای کمتر ببرد، امتیاز بیشتری بگیرد.
- مثلاً امتیاز =
max_attempts - attempts + 1. - تکرار چند دور بازی بدون اجرای مجدد برنامه
- در پایان بپرسید: «دوباره بازی کنیم؟ (y/n)»
- اگر کاربر
yگفت، بازی را دوباره شروع کنید؛ اگرnگفت،خداحافظیکنید. - راهنمایی پیشرفتهتر
- اگر فاصلهٔ عدد مخفی و حدس کم است، بگویید «خیلی نزدیک شدی!».
- مثلاً اگر
abs(secret_number - guess) < 5.
جمعبندی
در این پروژه:
- یک عدد تصادفی ساختیم و در متغیری ذخیره کردیم.
- با حلقهٔ
whileیک روند تکراری ساختیم تا زمان درست شدن حدس ادامه پیدا کند. - با شرطها به کاربر راهنمایی دادیم که «بالاتر» یا «پایینتر» حدس بزند.
- تعداد حدسها را با یک شمارنده شمردیم.
- نسخههای بهبودیافتهای مثل محدود کردن تعداد تلاشها و ایدههای گسترش بازی را دیدیم.
پیشنهاد: برنامه را خودتان، بدون کپی، از صفر بنویسید و چند بار آن را تغییر دهید. این پروژهٔ کوچک تمرینی بسیار خوب برای ترکیب مفاهیم مختلف پایتون است.