Table of Contents
هدف پروژه: ساخت یک ماشینحساب خط فرمان ساده
در این پروژه یک «ماشینحساب ساده» میسازیم که در ترمینال اجرا میشود و چهار عمل اصلی را انجام میدهد:
- جمع
- تفریق
- ضرب
- تقسیم
این پروژه تمرینی است برای ترکیب چیزهایی که تا اینجا یاد گرفتهاید:
- ورودی و خروجی (
input،print) - تبدیل به عدد
- شرطها (
if,elif,else) - حلقهها
- توابع
در این فصل، قدمبهقدم یک نسخهٔ ساده و بعد یک نسخهٔ کمی پیشرفتهتر میسازیم.
قدم ۱: طراحی رفتار برنامه
قبل از نوشتن کد، تصمیم میگیریم برنامه دقیقاً چه کار کند:
۱. یک منو نشان بدهد (انتخاب نوع عمل: +، -، *، /).
۲. از کاربر دو عدد بگیرد.
- بر اساس عمل انتخابشده، نتیجه را حساب کند.
- نتیجه را نمایش دهد.
- بپرسد آیا کاربر میخواهد ادامه دهد یا نه.
مثالی از رفتار مورد انتظار:
عمل را انتخاب کنید:
1) جمع
2) تفریق
3) ضرب
4) تقسیم
انتخاب شما: 1
عدد اول را وارد کنید: 10
عدد دوم را وارد کنید: 5
نتیجه: 15.0
آیا میخواهید ادامه دهید؟ (y/n): y
...قدم ۲: نسخهٔ کاملاً ساده (بدون منو و حلقه)
اول یک نسخهٔ «خیلی ساده» میسازیم که فقط یک عمل را انجام میدهد؛ مثلاً فقط جمع دو عدد.
a = float(input("عدد اول را وارد کنید: "))
b = float(input("عدد دوم را وارد کنید: "))
result = a + b
print("نتیجه:", result)میتوانید این را برای چهار عمل جداگانه بنویسید، اما بهتر است از کاربر بپرسیم کدام عمل را میخواهد.
قدم ۳: انتخاب عمل با `if / elif / else`
حالا اجازه میدهیم کاربر عمل مورد نظر را با وارد کردن یک علامت مشخص کند:
a = float(input("عدد اول را وارد کنید: "))
b = float(input("عدد دوم را وارد کنید: "))
op = 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)نکتهها:
- اگر عمل ناشناخته باشد،
resultراNoneمیگذاریم و نتیجه را چاپ نمیکنیم. - این یک شکل ساده از کنترل خطا است.
قدم ۴: رسیدگی به تقسیم بر صفر
در تقسیم، اگر عدد دوم صفر باشد، خطای زمان اجرا رخ میدهد. بهتر است قبل از تقسیم خودمان بررسی کنیم:
a = float(input("عدد اول را وارد کنید: "))
b = float(input("عدد دوم را وارد کنید: "))
op = input("عمل را وارد کنید (+, -, *, /): ")
result = None
if op == "+":
result = a + b
elif op == "-":
result = a - b
elif op == "*":
result = a * b
elif op == "/":
if b == 0:
print("خطا: تقسیم بر صفر مجاز نیست.")
else:
result = a / b
else:
print("عمل نامعتبر است.")
if result is not None:
print("نتیجه:", result)قدم ۵: تبدیل به یک برنامهٔ تکرارشونده (حلقه)
تا الان برنامه فقط یکبار اجرا میشود. حالا میخواهیم تا وقتی کاربر نگوید «خروج»، برنامه تکرار شود.
میتوانیم یک حلقهٔ while اطراف منطق اصلی بگذاریم:
while True:
print("ماشینحساب ساده")
print("عمل را وارد کنید (+, -, *, /) یا q برای خروج:")
op = input("عمل: ")
if op == "q":
print("خداحافظ!")
break
a = float(input("عدد اول را وارد کنید: "))
b = float(input("عدد دوم را وارد کنید: "))
result = None
if op == "+":
result = a + b
elif op == "-":
result = a - b
elif op == "*":
result = a * b
elif op == "/":
if b == 0:
print("خطا: تقسیم بر صفر مجاز نیست.")
else:
result = a / b
else:
print("عمل نامعتبر است.")
if result is not None:
print("نتیجه:", result)
print()چند نکته:
- با
while Trueیک حلقهٔ بینهایت میسازیم و فقط باbreakاز آن خارج میشویم. - اگر کاربر
qوارد کند، از حلقه خارج و برنامه تمام میشود.
قدم ۶: تمیز کردن کد با توابع
برای خواناتر شدن کد، بخشهای تکراری را به توابع تبدیل میکنیم. مثلاً:
- یک تابع برای گرفتن عدد از کاربر
- یک تابع برای انجام عمل حسابی
- یک تابع اصلی
mainبرای کنترل جریان برنامه
تابع گرفتن عدد
def get_number(message):
value = float(input(message))
return valueیا کمی زیباتر با متن فارسی:
def get_number(label):
text = f"{label} را وارد کنید: "
return float(input(text))تابع انجام محاسبه
def calculate(a, b, op):
if op == "+":
return a + b
elif op == "-":
return a - b
elif op == "*":
return a * b
elif op == "/":
if b == 0:
print("خطا: تقسیم بر صفر مجاز نیست.")
return None
return a / b
else:
print("عمل نامعتبر است.")
return Noneترکیب همه چیز در تابع `main`
def get_number(label):
text = f"{label} را وارد کنید: "
return float(input(text))
def calculate(a, b, op):
if op == "+":
return a + b
elif op == "-":
return a - b
elif op == "*":
return a * b
elif op == "/":
if b == 0:
print("خطا: تقسیم بر صفر مجاز نیست.")
return None
return a / b
else:
print("عمل نامعتبر است.")
return None
def main():
while True:
print("ماشینحساب ساده")
print("عمل را وارد کنید (+, -, *, /) یا q برای خروج:")
op = input("عمل: ")
if op == "q":
print("خداحافظ!")
break
a = get_number("عدد اول")
b = get_number("عدد دوم")
result = calculate(a, b, op)
if result is not None:
print("نتیجه:", result)
print()
if __name__ == "__main__":
main()این ساختار، برنامه را منظم و گسترشپذیر میکند.
قدم ۷: رسیدگی بهتر به ورودیهای نامعتبر (چالش کوچک)
تا اینجا اگر کاربر بهجای عدد، متن وارد کند (مثلاً سلام)، برنامه خطا میدهد و کرش میکند.
به عنوان یک تمرین کمی سختتر، میتوانید:
- گرفتن عدد را در یک حلقه قرار دهید.
- اگر تبدیل به
floatبا خطا مواجه شد، دوباره از کاربر بپرسید.
ایده:
- داخل تابع
get_numberیکwhile Trueبگذارید. - درونش سعی کنید ورودی را به
floatتبدیل کنید (باtry/except). - اگر خطا شد، پیام بدهید و تکرار کنید.
(جزئیات try / except در فصل خطاها توضیح داده شده است؛ اینجا فقط پیشنهاد تمرین است.)
ایدههای گسترش پروژهٔ ماشینحساب
اگر نسخهٔ اصلی برایتان ساده شد، میتوانید ویژگیهای زیر را اضافه کنید:
- پشتیبانی از توان (
**) و باقیمانده (%) - نمایش آخرین نتیجه و استفاده از آن در محاسبهٔ بعدی
- افزودن گزینهای برای «پاک کردن صفحه» (مثلاً با چاپ چند خط خالی)
- نوشتن تاریخچهٔ محاسبات در یک فایل متنی (استفاده از فصل کار با فایلها)
- ساخت نسخهٔ تحت وب ساده با Flask (ارتباط با فصل توسعهٔ وب)
جمعبندی
در این پروژه:
- یک برنامهٔ تعاملی کوچک ساختید (ورودی از کاربر، حلقهٔ تکرار، شرطها).
- چند عمل سادهٔ ریاضی را پیادهسازی کردید.
- کد را به توابع جدا تقسیم کردید تا منظم و قابل گسترش باشد.
- با مسئلههای واقعی مثل تقسیم بر صفر و ورودی نامعتبر روبهرو شدید.
این دقیقاً همان نوع پروژهای است که به شما کمک میکند مفاهیم پایهای پایتون را در یک برنامهٔ واقعی کنار هم ببینید و تمرین کنید.