اجرای شرطی
اجرای شرطی
برای نوشتن یک برنامه کارآ، خیلی اوقات نیاز به بررسی شرایط مختلف داریم که براساس آنها رفتارهای متفاوتی را طراحی کنیم. با استفاده از جملات شرطی (Conditional Statements) میتوانیم این قابلیت را بدست آوریم.
if x > 0 :
print('x is positive')
عبارت منطقی پس از if ، شرط یا (condition) نامیده میشود. اگر شرط منطقی درست باشد، دستور تورفتگی اجرا میشود. اگر شرط منطقی نادرست باشد، عبارت تورفتگی نادیده گرفته میشود.
اجرای جایگزین
شکل دوم یک عبارت if اجرای جایگزین (Alternative Execution) است که در آن دو حالت ممکن توسط شرط بررسی میشود که کدامیک میبایست اجرا شوند:
if x%2 == 0 :
print('x is even')
else :
print('x is odd')
ز آنجایی که شرط باید درست یا نادرست باشد، دقیقاً یکی از گزینهها اجرا میشود. گزینههای جایگزین شاخه (Branch) نامیده میشوند، زیرا آنها شاخههایی در جریان اجرا هستند.
شرطهای زنجیرهای
یکی از راههای بررسی بیش از سه شرط این است که با استفاده از elif
از شرطهای زنجیری (Chained Conditionals) استفاده کنیم:
if x < y:
print('x is less than y')
elif x > y:
print('x is greater than y')
else:
print('x and y are equal')
شرطهای تو در تو
یک عبارت شرطی نیز میتواند درون عبارت شرطی دیگری قرار گیرد و ساختار شرطهای تو در تو (Nested Conditionals) را ایجاد کنند:
if x == y:
print('x and y are equal')
else:
if x < y:
print('x is less than y')
else:
print('x is greater than y')
استفاده از try
و except
برخی اوقات در جریان برنامهنویسی شرطی، نیاز داریم که به مفسر پایتون بگوئیم براساس ورودیهای مختلف چگونه رفتار کند تا کد برنامه ما با خطا رویرو نشود. مثلاً در برنامه از کاربر خواستیم مقداری عددی وارد کند و بر اساس این مقدار، قرار است محاسبهای انجام گیرد. حال فرض کنید کاربر مقداری غیر عددی وارد کرد و آنگاه این مقدار غیرعددی در یک فرمول محاسباتی وارد میشود! چه اتفاقی میافتد؟ مفسر پایتون اجرای برنامه را قطع میکند، چرا که نتوانسته است مقدار غیرعددی را در محاسبات وارد کند.
در این مواقع استفاده از ساختار try-except
میتواند کمککننده باشد:
= input('Enter Fahrenheit Temperature:')
inp try:
= float(inp)
fahr = (fahr - 32.0) * 5.0 / 9.0
cel print(cel)
except:
print('Please enter a number')
در اینجا پایتون کار را با اجرای دستور try
آغاز میکند و اگر همه چیز خوب باشد، بلاک except
را درنظر نمیگیرد. اما اگر استثنایی در بلاک try
رخ داد، مفسر پایتون از بلاک try
عبور میکند و به اجرای بلاک except
میپردازد.
پروژه
به کد زیر نگاه کنید که یک ماشین حساب ساده است و ببینید کدام مطالبی که توی این بخش گفته شده استفاده شده.
# وارد کردن پکیج های مورد نیاز
import tkinter as tk
# تابع برای محاسبه نتیجه بر اساس عملگر
def calculate():
try:
= float(entry1.get()) # گرفتن عدد اول
num1 = float(entry2.get()) # گرفتن عدد دوم
num2 = operator.get() # گرفتن عملگر
op
# بررسی نوع عملگر با شرطها
if op == "+":
= num1 + num2
result elif op == "-":
= num1 - num2
result elif op == "*":
= num1 * num2
result elif op == "/":
if num2 == 0:
="خطا: تقسیم بر صفر!")
result_label.config(textreturn
= num1 / num2
result else:
="عملگر نامعتبر است")
result_label.config(textreturn
# نمایش نتیجه
=f"نتیجه: {result}")
result_label.config(text
except ValueError:
# خطا در صورت وارد کردن عدد نامعتبر
="لطفاً فقط عدد وارد کنید")
result_label.config(text
# ساخت پنجره اصلی
= tk.Tk()
window "ماشین حساب ساده")
window.title("300x250")
window.geometry(
# ساخت ویجتها
= tk.Label(window, text="عدد اول:")
label1 = tk.Entry(window)
entry1
= tk.Label(window, text="عدد دوم:")
label2 = tk.Entry(window)
entry2
= tk.Label(window, text="عملگر (+ - * /):")
label_op = tk.Entry(window)
operator
= tk.Button(window, text="محاسبه", command=calculate)
calc_button = tk.Label(window, text="نتیجه: ", fg="blue")
result_label
# قرار دادن ویجتها در پنجره
label1.pack()
entry1.pack()
label2.pack()
entry2.pack()
label_op.pack()
operator.pack()
=10)
calc_button.pack(pady
result_label.pack()
# اجرای برنامه
window.mainloop()