اجرای شرطی

اصلاح شده

2025-07-28

اجرای شرطی

برای نوشتن یک برنامه کارآ، خیلی اوقات نیاز به بررسی شرایط مختلف داریم که براساس آن‌ها رفتارهای متفاوتی را طراحی کنیم. با استفاده از جملات شرطی (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 می‌تواند کمک‌کننده باشد:

inp = input('Enter Fahrenheit Temperature:')
try:
    fahr = float(inp)
    cel = (fahr - 32.0) * 5.0 / 9.0
    print(cel)
except:
    print('Please enter a number')

در اینجا پایتون کار را با اجرای دستور try آغاز می‌کند و اگر همه چیز خوب باشد، بلاک except را درنظر نمی‌گیرد. اما اگر استثنایی در بلاک try رخ داد، مفسر پایتون از بلاک try عبور می‌کند و به اجرای بلاک except می‌پردازد.

پروژه

به کد زیر نگاه کنید که یک ماشین حساب ساده است و ببینید کدام مطالبی که توی این بخش گفته شده استفاده شده.

# وارد کردن پکیج های مورد نیاز
import tkinter as tk


# تابع برای محاسبه نتیجه بر اساس عملگر
def calculate():
    try:
        num1 = float(entry1.get())  # گرفتن عدد اول
        num2 = float(entry2.get())  # گرفتن عدد دوم
        op = operator.get()  # گرفتن عملگر

        # بررسی نوع عملگر با شرط‌ها
        if op == "+":
            result = num1 + num2
        elif op == "-":
            result = num1 - num2
        elif op == "*":
            result = num1 * num2
        elif op == "/":
            if num2 == 0:
                result_label.config(text="خطا: تقسیم بر صفر!")
                return
            result = num1 / num2
        else:
            result_label.config(text="عملگر نامعتبر است")
            return

        # نمایش نتیجه
        result_label.config(text=f"نتیجه: {result}")

    except ValueError:
        # خطا در صورت وارد کردن عدد نامعتبر
        result_label.config(text="لطفاً فقط عدد وارد کنید")


# ساخت پنجره اصلی
window = tk.Tk()
window.title("ماشین حساب ساده")
window.geometry("300x250")

# ساخت ویجت‌ها
label1 = tk.Label(window, text="عدد اول:")
entry1 = tk.Entry(window)

label2 = tk.Label(window, text="عدد دوم:")
entry2 = tk.Entry(window)

label_op = tk.Label(window, text="عملگر (+ - * /):")
operator = tk.Entry(window)

calc_button = tk.Button(window, text="محاسبه", command=calculate)
result_label = tk.Label(window, text="نتیجه: ", fg="blue")

# قرار دادن ویجت‌ها در پنجره
label1.pack()
entry1.pack()

label2.pack()
entry2.pack()

label_op.pack()
operator.pack()

calc_button.pack(pady=10)
result_label.pack()

# اجرای برنامه
window.mainloop()