دوره H برنامه نویسی پایتون
فصل دوم: ساختار کنترلی پایتون
درس هفتم: پروژه عملی ماشین حساب ساده پایتون
پس از دو فصل، اکنون یک مثال از یک پروژهی پایتونی را میخواهیم اجرا کنیم. یک ماشین حساب ساده! 🙂
لذا با تجه به آموختههای فعلی، میخواهیم یک برنامهی تحت کنسول بنویسیم که دستورات «add»، «substract»، «multiply»، «divide»، «quit» را داشته باشد. و برای مثال، با وارد کردن add، ابتدا دو عدد را به ترتیب وارد کرده و Enter را بزنیم و سپس آن دو عدد باهم جمع شده و خروجی به کاربر نمایش داده شود! برای سایر دستورات substract, multiply, divide نیز به همین صورت. و در نهایت با دستور quit از برنامه خارج شود!
البته اگرچه بهتر بود تا با نوشتن مستقیم 2 + 2 عملیات رخ دهد، اما جهت نوشتن چنین چیزی، پیچیدگیهایی وجود دارند، که برای پروژهی سادهای در سطح ابتدایی، مناسب نیستند.
مراحل انجام کار
حالا برای ساخت چنین چیزی، برنامهی کنسولی ما بایستی بگونهای باشد تا بتواند ورودیهایی که کاربر وارد میکند را در هر لحظه تشخیص دهد. لذا ما نیاز به یک حلقهی بینهایت خواهیم داشت و البته شاید تعجب کنید که چرا! اما در ادامه متوجه خواهید شد. ابتدا یک new file ایجاد کرده و کد زیر را بنویسید:
while True: print("Options:") print("Enter 'add' to add two numbers") print("Enter 'subtract' to subtract two numbers") print("Enter 'multiply' to multiply two numbers") print("Enter 'divide' to divide two numbers") print("Enter 'quit' to end the program") user_input = input(": ") if user_input == "quit": break elif user_input == "add": elif user_input == "subtract": elif user_input == "multiply": elif user_input == "divide": else: print("Unknown input")
همانطور که میبینید:
- در ابتدا آپشنها یا لیست دستورات برنامه را پرینت کردیم تا کاربر مشاهده کند!
- سپس در ادامه، اولین کاری که انجام دادیم، گرفتن یک ورودی از کاربر است (یعنی گرفتن یک دستور)!
- پس از گرفتن دستور، آن را با شروطی که نوشتیم بررسی میکنیم؛ که حالا فرض کنید کاربر add را وارد کرده باشد؛ بنابراین باید چه چیزی رخ دهد؟! صحیح است، باید دو مقدار پشت سرهم از کاربر گرفته شده و جمع آنها نمایش داده شود! بنابراین داخل شرط add را میتوان بصورت زیر پیادهسازی کرد:
elif user_input == "add": #1 num1 = float(input("Enter a number: ")) num2 = float(input("Enter another number: ")) #2 result = str(num1 + num2) #3 print("The answer is " + result)
- ورودیها را ک همیشه از جنس string است، به float تبدیل میکنیم. (توجه داشته باشید چناچه ورودیعل چیزی جز عدد باشند، خطا رخ خواهد داد و فعلا با نحوهی مدیریت خطا آشنا نشدیم و در فصل چهارم به آن خواهیم پرداخت.)
- دو ورودی را پس از دریافت و تبدیل کردن به float، باهم جمع کرده و مجوع آنها در یک خروجی به نام result قرار دادیم؛ همچنین خروجی جمع را به رشته تبدیل کردیم تا بتوان آن را به یک رشتهی دیگر الحاق کرد.
- خروجی را چاپ کردیم.
در نتیجه، ما برای هر دستوری میتوانیم به همین صورت دو عدد گرفته و عمل ریاضی را انجام دهیم، سپس خروجی را چاپ کنیم. البته به این نکته هم توجه داشته باشید که میتوانیم result را در انتهای حلقه نوشته و در نهایت کل کد خود را بصورت زیر تکمیل کنیم:
while True: print("Options:") print("Enter 'add' to add two numbers") print("Enter 'subtract' to subtract two numbers") print("Enter 'multiply' to multiply two numbers") print("Enter 'divide' to divide two numbers") print("Enter 'quit' to end the program") user_input = input(": ") if user_input == "quit": exit() elif user_input == "add": num1 = float(input("Enter a number: ")) num2 = float(input("Enter another number: ")) result = "The answer is " + str(num1 + num2) elif user_input == "subtract": num1 = float(input("Enter a number: ")) num2 = float(input("Enter another number: ")) result = "The answer is " + str(num1 - num2) elif user_input == "multiply": num1 = float(input("Enter a number: ")) num2 = float(input("Enter another number: ")) result = "The answer is " + str(num1 * num2) elif user_input == "divide": num1 = float(input("Enter a number: ")) num2 = float(input("Enter another number: ")) result = "The answer is " + str(num1 / num2) else: result = "Unknown input" print(result)
برای خروج نیز دستور دلخواه quit را بررسی کردهایم و در صورت صدق، حلقه را میشکنیم که باعث خارج شدن از آن میشود؛ سپس میتوان بعد از حلقه و خارج از آن، دستور exit() یا quit() نوشت تا نیازی به زدن Enter نباشد. همچنین در این کد تکمیل شده، داخل هر کدام از شروط ریاضی، دو عدد را به ترتیب از کاربر گرفته و حاصل آن را پس از اعمال محاسبات، در داخل result و به همراه یک متن دلخواه قرار میدهیم؛ در نهایت نیز این result را در انتهای حلقه چاپ میکنیم؛ و چنانچه دستور وارد شده صحیح نباشد، result به مقدار Unknown input تبدیل شده و چاپ میشود.
همچنین توجه داشته باشید که ممکن است بپرسید چه نیازی است تا هربار اعداد را بصورت جدا در بدنهی شرطها بگیریم و آیا راهی نیست تا یک بار آنها را دریافت کرده و سپس عمل ریاضی را انجام دهیم؟! چرا راههای زیادی از جمله استفاده از توابع وجود دارد؛ اما چون فعلا در فصل مبتدی هستیم، ساخت چنین پروژهای که در سطح عالی قرار داشته باشد خوب نیست و اگر دانش کافی نداشته باشید، درک آن سخت و زننده خواهد شد. شاید در فصلهای آینده یک ماشین حساب پیشرفته بسازیم که با نوشتن مستقیم دستور 2 + 2 * 10 نیز کار کند و اصلا نیازی به add و … نباشد.
و نکته نهایی اینکه پس از چاپ خروجی result، حلقه دوباره اجرا شده و برنامه متوقف نمیشود! و این دلیل استفاده از حلقه برای این بخش بود. البته شما میتوانید آپشنها را خارج از حلقه نمایش دهید تا هربار پس از خروجی نمایش داده نشود و در کل این به منطق برنامهی شما مربوط میشود که چه چیزی بخواهید.
سلام میتونستی اعداد رو همان ابتدا بخونی و بعد عملگر رو بخونی تا برنامت چندین خط کوچکتر شه
سلام. بله درست میفرمایید. اما همونطور که محتضر هستید، این یه آموزش مبتدیه که الآنم درس هفتم از فصل اولشه و هنوز موارد زیادی گفته نشده؛ از طرفی این یه مسابقه برنامهنویس نیس که بهترین روش رو بنویسیم! بایستی ساده باشه که شخص مبتدی هم متوجه اون بشه.