آزمون‌های شرطی

قلب هر گزاره‌ی if عبارتی است که با True و False (درست و نادرست) بودن سنجیده می‌شود و آن را آزمون شرطی می‌نامیم. پایتون از مقدارهای True و False برای تصمیم‌گیری در مورد اجرا شدن کد داخل گزاره‌ی if استفاده می‌کند. اگر یک آزمون شرطی True (درست) ارزیابی شود، پایتون کدی را که بعد از گزاره‌ی if آمده اجرا می‌کند. اگر آزمون False (نادرست) باشد پایتون کدی را که در ادامه‌ی گزاره‌ی if آمده نادیده می‌انگارد.

بررسیِ تساوی

بیشتر آزمون‌های شرطی مقدارِ کنونیِ یک متغیّر را با یک مقدار مشخّصِ موردِ نظر مقایسه می‌کنند. ساده‌ترین آزمون شرطیْ تساویِ مقدارِ یک متغیّر را با یک مقدار دلخواه بررسی می‌کند:

1
2
3
>>> car = 'bmw'
>>> car == 'bmw'
True

خط ۱ مقدار car را به کمک یک علامت تساوی برابر با ‘bmw’ قرار می‌دهد، چنانکه پیش از این در موارد بسیاری آن را دیده‌اید. خط ۲ به کمک دو علامت تساوی (==) بررسی می‌کند آیا مقدار car برابر با ‘bmw’ است یا نه؟ عملگر برابری در صورت یکی بودن مقادیرِ دو طرف خود، True و در غیر این صورت False برمی‌گرداند. مقادیرِ این مثال به هم می‌خورند پس پایتون True برمی‌گرداند.

اگر مقدار car چیزی جز ‘bmw’ باشد، این آزمون False برمی‌گرداند:

1
2
3
>>> car = 'audi'
>>> car == 'bmw'
False

علامت تساوی تکّی در واقع یک حکم است، می‌توانید کد ۱ را به این صورت بخوانید: «مقدار car را برابر با ‘audi’ قرار بده.» از طرف دیگر علامت تساوی دوتایی، مانند ۲، پرسشی مطرح می‌کند: «آیا مقدار car برابر با ‘bmw’ است؟» بیشترِ زبان‌های برنامه‌نویسی از علامت‌های تساوی به همین شکل استفاده می‌کنند.

نادیده گرفتن بزرگ و کوچکی حروف هنگام بررسی تساوی

آزمودن تساوی در پایتون به بزرگی و کوچکی حروف حسّاس است. برای مثال دو کلمه با حروف یکسان امّا بزرگ و کوچکیِ متفاوت، یکسان تلقّی نمی‌شوند:

1
2
3
>>> car = 'Audi'
>>> car == 'audi'
False

اگر بزرگی و کوچکی حروف مهم باشد این روش مفید است. امّا اگر این مسأله اهمّیّتی نداشته باشد و به جای آن می‌خواهید تنها مقدار یک متغیّر را بررسی کنید، می‌توانید مقدار آن را پیش از مقایسه به حروف کوچک تبدیل کنید:

1
2
3
>>> car = 'Audi'
>>> car.lower() == 'audi'
True

این آزمون باید صرف از شکل ‘Audi’ هم True برگرداند زیرا اکنون دیگر به بزرگ و کوچکی حروف حسّاس نیست. تابع lower() مقدار اوّلیّه‌ی ذخیره‌شده در car را تغییر نمی‌دهد، پس می‌توانید این گونه مقایسه‌ها را بدون ایجاد تغییر در مقدار متغیّر انجام دهید:

1
2
3
4
5
>>> car = 'Audi'
>>> car.lower() == 'audi'
True
>>> car
'Audi'

وب‌سایت‌ها قوانین مشخّصی مانند این را بر داده‌هایِ ورودیِ کاربران اعمال می‌کنند. برای مثال سایتی ممکن است از یک آزمون شرطی مانند این استفاده کند تا مطمئن شود کاربر یک نام کاربری واقعاً یکتا دارد، نه صرفاً نام کاربری کس دیگری با تغییری در بزرگی و کوچکی حروف. زمانی که کسی نام کاربری جدیدی را ثبت می‌کند مقدار آن به حروف کوچک تبدیل می‌شود و سپس با تمام نام‌های کاربری موجودِ تبدیل‌شده به حروف کوچک، مقایسه می‌شود. طی چنین آزمونی اگر هر ترکیبی از ‘john’ قبلاً ثبت شده باشد، نام کاربری‌ای مانند ‘John’ رد خواهد شد.

بررسی نابرابری

اگر بخواهید نابرابری دو مقدار را بررسی کنید، می‌توانید از ترکیب یک علامت تعجّب و علامت تساوی (!=) استفاده کنید. علامت تعجّب، مانند بسیاری از زبان‌های برنامه‌نویسی دیگر، بیانگر «نیست» است.

اکنون از یک عبارت if دیگر برای بررسی کاربرد عملگر نابرابری استفاده می‌کنیم. مواد درخواستی برای روی پیتزا را در متغیّری ذخیره می‌کنیم و اگر ماهی کولی سفارش نداده باشد، پیامی خطاب به او صادر می‌کنیم:

1
2
3
4
requested_topping = 'mushrooms'

if requested_topping != 'anchovies':
    print("Hold the anchovies!")

خطّ ۱ مقدار requested_topping را با مقدار ‘anchovies’ مقایسه می‌کند. اگر دو مقدار برابر نباشند پایتون True برمی‌گرداند درنتیجه کدی که در ادامه‌ی گزاره‌ی if آمده اجرا می‌کند. اگر دو مقدار برابر باشند پایتون False برمی‌گرداند و آن خط را اجرا نخواهد کرد.

چون مقدار requested_topping برابر ‘anchovies’ نیست، تابع print() اجرا می‌شود:

1
Hold the anchovies!

بیشترِ عبارت‌های شرطی‌ای که می‌نویسید برابری را بررسی می‌کنند امّا گاهی آزمودن نابرابری را موثّرتر خواهید یافت.

مقایسه‌های عددی

آزمودن مقدارهای عددی بسیار سرراست است. برای مثال کد زیر بررسی می‌کند که آیا شخص ۱۸ ساله است یا نه:

1
2
3
>>> age = 18
>>> age == 18
True

همچنین می‌توانید نابرابری دو عدد را بررسی کنید. مثلاً در کد زیر، در صورتی‌که پاسخ وارد شده درست نباشد، پیامی چاپ می‌شود:

1
2
3
4
answer = 17

if answer != 42:
    print("That is not the correct answer. Please try again!")

آزمون شرطی ۱ قبول می‌شود زیرا مقدار answer (۱۷) برابر با ۴۲ نیست و به همین دلیل کد تورفته اجرا می‌شود:

1
That is not the correct answer. Please try again!

می‌توانید مقایسه‌های ریاضی مختلف دیگری را هم در عبارت‌های شرطی خود بگنجانید، مانند کمتری، کمتری یا برابری، بزرگتری، بزرگتری و برابری:

1
2
3
4
5
6
7
8
9
>>> age = 19
>>> age < 21
True
>>> age <= 21
True
>>> age > 21
False
>>> age >= 21
False

هر مقایسه‌ی ریاضی می‌تواند به عنوان بخشی از یک عبارت if به کار گرفته شود که به شما برای تشخیص شرط‌های دقیق موردنظرتان کمک می‌کند.