ماشین حساب ساده با پایتون

متوسطشرط

صورت سؤال

برنامه‌ای بنویسید که در سه خط، یک عدد، یکی از عملگرهای + و - و * و / و سپس عدد دوم را بخواند و نتیجه را چاپ کند. عددها ممکن است اعشاری باشند.

اگر عملگر / بود و عدد دوم صفر، به جای نتیجه پیام «تقسیم بر صفر ممکن نیست» را چاپ کنید. اگر عملگر هیچ‌کدام از این چهار مورد نبود، «عملگر نامعتبر است» را چاپ کنید.

ورودی نمونه

12
/
4

خروجی نمونه

3.0

خودتان امتحان کنید

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

Ctrl + Enter
خروجی

کد را اجرا کنید تا خروجی آن اینجا نمایش داده شود.

راهنمایی

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

جواب و توضیح

بهتر است جواب را بعد از امتحان کردن راه خودتان باز کنید.

نمایش جواب
a = float(input())
op = input().strip()
b = float(input())

if op == "+":
    print(a + b)
elif op == "-":
    print(a - b)
elif op == "*":
    print(a * b)
elif op == "/":
    if b == 0:
        print("تقسیم بر صفر ممکن نیست")
    else:
        print(a / b)
else:
    print("عملگر نامعتبر است")

این جواب چطور کار می‌کند؟

عددها با float() خوانده شده‌اند تا ماشین حساب عددهای اعشاری را هم بپذیرد. به همین دلیل نتیجه هم اعشاری چاپ می‌شود؛ مثلاً تقسیم ۱۲ بر ۴ عدد 3.0 را نشان می‌دهد.

عملگر به شکل متن خوانده می‌شود و با رشته‌هایی مثل "+" مقایسه می‌شود. متد strip() فاصله‌های ابتدا و انتهای ورودی را حذف می‌کند تا اگر کاربر پیش یا پس از عملگر فاصله زده باشد، مقایسه باز هم درست انجام شود.

در شاخهٔ تقسیم، یک if تودرتو اول صفر بودن b را بررسی می‌کند. بدون این بررسی، تقسیم بر صفر خطای ZeroDivisionError می‌دهد و برنامه متوقف می‌شود. شاخهٔ else آخر هم هر عملگری را که برنامه نمی‌شناسد پوشش می‌دهد.

راه دوم: دیکشنری عملگرها

import operator

OPS = {"+": operator.add, "-": operator.sub, "*": operator.mul, "/": operator.truediv}

a = float(input())
op = input().strip()
b = float(input())

if op not in OPS:
    print("عملگر نامعتبر است")
elif op == "/" and b == 0:
    print("تقسیم بر صفر ممکن نیست")
else:
    print(OPS[op](a, b))

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

اشتباه‌های رایج

  • تقسیم بر صفر را بررسی نمی‌کنند و برنامه با خطای ZeroDivisionError متوقف می‌شود.
  • عملگر را هم با float() می‌خوانند و برنامه روی ورودی + خطا می‌دهد.
  • برای عملگر نامعتبر شاخهٔ else نمی‌نویسند و برنامه بدون هیچ پیامی تمام می‌شود.

تمرین بعدی

پایتون را قدم‌به‌قدم یاد بگیرید

این تمرین یکی از تمرین‌های پایتون با جواب دینا کد است. در دورهٔ پایتون از صفر هر مفهوم یک درس کوتاه دارد و تمرین هر درس با چند آزمون پنهان نمره می‌گیرد؛ درس‌های اول رایگان است. برای امتحان کد آزاد هم اجرای آنلاین پایتون در دسترس است.