Kahibaro
Discord Login Register

ماشین‌حساب ساده

هدف پروژه: ساخت یک ماشین‌حساب خط فرمان ساده

در این پروژه یک «ماشین‌حساب ساده» می‌سازیم که در ترمینال اجرا می‌شود و چهار عمل اصلی را انجام می‌دهد:

این پروژه تمرینی است برای ترکیب چیزهایی که تا این‌جا یاد گرفته‌اید:

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


قدم ۱: طراحی رفتار برنامه

قبل از نوشتن کد، تصمیم می‌گیریم برنامه دقیقاً چه کار کند:

۱. یک منو نشان بدهد (انتخاب نوع عمل: +، -، *، /).
۲. از کاربر دو عدد بگیرد.

  1. بر اساس عمل انتخاب‌شده، نتیجه را حساب کند.
  2. نتیجه را نمایش دهد.
  3. بپرسد آیا کاربر می‌خواهد ادامه دهد یا نه.

مثالی از رفتار مورد انتظار:

عمل را انتخاب کنید:
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)

نکته‌ها:

قدم ۴: رسیدگی به تقسیم بر صفر

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

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()

چند نکته:

قدم ۶: تمیز کردن کد با توابع

برای خواناتر شدن کد، بخش‌های تکراری را به توابع تبدیل می‌کنیم. مثلاً:

تابع گرفتن عدد

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()

این ساختار، برنامه را منظم و گسترش‌پذیر می‌کند.


قدم ۷: رسیدگی بهتر به ورودی‌های نامعتبر (چالش کوچک)

تا این‌جا اگر کاربر به‌جای عدد، متن وارد کند (مثلاً سلام)، برنامه خطا می‌دهد و کرش می‌کند.

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

ایده:

  1. داخل تابع get_number یک while True بگذارید.
  2. درونش سعی کنید ورودی را به float تبدیل کنید (با try / except).
  3. اگر خطا شد، پیام بدهید و تکرار کنید.

(جزئیات try / except در فصل خطاها توضیح داده شده است؛ اینجا فقط پیشنهاد تمرین است.)


ایده‌های گسترش پروژهٔ ماشین‌حساب

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

جمع‌بندی

در این پروژه:

این دقیقاً همان نوع پروژه‌ای است که به شما کمک می‌کند مفاهیم پایه‌ای پایتون را در یک برنامهٔ واقعی کنار هم ببینید و تمرین کنید.

Views: 6

Comments

Please login to add a comment.

Don't have an account? Register now!