ماشین حساب ساده با پایتون
ماشین حساب ساده در پایتون دو عدد و یک عملگر را از ورودی میخواند و با if و elif تصمیم میگیرد کدام عمل را انجام دهد. نکتهٔ مهم آن بررسی تقسیم بر صفر پیش از تقسیم است تا برنامه با خطا متوقف نشود.
صورت سؤال
برنامهای بنویسید که در سه خط، یک عدد، یکی از عملگرهای + و - و * و / و سپس عدد دوم را بخواند و نتیجه را چاپ کند. عددها ممکن است اعشاری باشند.
اگر عملگر / بود و عدد دوم صفر، به جای نتیجه پیام «تقسیم بر صفر ممکن نیست» را چاپ کنید. اگر عملگر هیچکدام از این چهار مورد نبود، «عملگر نامعتبر است» را چاپ کنید.
ورودی نمونه
12 / 4
خروجی نمونه
3.0
خودتان امتحان کنید
کد را در ویرایشگر زیر کامل کنید و اجرا کنید. ورودی نمونه در کادر ورودی آماده است و بعد از هر اجرا، خروجی شما با خروجی نمونه مقایسه میشود.
کد را اجرا کنید تا خروجی آن اینجا نمایش داده شود.
راهنمایی
برای هر عملگر یک شاخهٔ 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 نمینویسند و برنامه بدون هیچ پیامی تمام میشود.
تمرین بعدی
پایتون را قدمبهقدم یاد بگیرید
این تمرین یکی از تمرینهای پایتون با جواب دینا کد است. در دورهٔ پایتون از صفر هر مفهوم یک درس کوتاه دارد و تمرین هر درس با چند آزمون پنهان نمره میگیرد؛ درسهای اول رایگان است. برای امتحان کد آزاد هم اجرای آنلاین پایتون در دسترس است.