برنامه‌نویسی پایتون فهرست مطالب
فصل ۴

شرط‌ها

تا اینجا برنامه‌های ما همیشه یک مسیر را می‌رفتند. از این فصل به بعد برنامه می‌تواند تصمیم بگیرد. این نقطه‌ای است که کد شما از یک ماشین‌حساب به یک برنامه واقعی تبدیل می‌شود.

در این فصل می‌خوانید
  1. نوع bool و عملگرهای مقایسه‌ای
  2. تفاوت مساوی و دو مساوی
  3. اولین if
  4. تورفتگی
  5. else
  6. مقایسه رشته‌ها
  7. عملگرهای منطقی
  8. ورود با نام کاربری و رمز
  9. چند مقدار مجاز با or
  10. زوج یا فرد، مثبت یا منفی
  11. شرط روی یک کاراکتر
  12. ترکیب and و or با پرانتز

۱. نوع bool و عملگرهای مقایسه‌ای

در فصل اول گفتیم که bool نوعی است که فقط دو مقدار دارد: True و False. حالا می‌بینیم این مقدارها از کجا می‌آیند. هر مقایسه یک مقدار بولی تولید می‌کند.

# A comparison is an expression whose value is either True or False.
print(5 > 3)      # True
print(5 < 3)      # False
print(5 == 5)     # True   -> '==' asks "are they equal?"
print(5 != 5)     # False  -> '!=' asks "are they different?"
print(5 >= 5)     # True
print(5 <= 4)     # False

# Careful: '=' stores a value, '==' compares two values.
age = 18          # assignment
print(age == 18)  # comparison -> True

# The result of a comparison is a real value of type bool.
result = 10 > 2
print(result, type(result))

مقایسه و نوع بولی: نمونه 01_booleans.py

True
False
True
False
True
False
True
True <class 'bool'>
عملگرسؤالی که می‌پرسدمثال درست
==آیا برابرند5 == 5
!=آیا نابرابرند5 != 3
>آیا بزرگ‌تر است5 > 3
<آیا کوچک‌تر است3 < 5
>=آیا بزرگ‌تر یا مساوی است5 >= 5
<=آیا کوچک‌تر یا مساوی است4 <= 5

خط آخر مثال مهم است: نتیجه مقایسه یک مقدار واقعی است که می‌شود آن را در متغیر ذخیره کرد، چاپ کرد و نوعش را پرسید. یعنی True چیزی از جنس داده است، درست مثل عدد ۵.

۲. تفاوت مساوی و دو مساوی

پرتکرارترین خطای این فصل

یک علامت مساوی یعنی بریز داخل: age = 18 مقدار ۱۸ را در متغیر می‌گذارد. دو علامت مساوی یعنی آیا برابر است: age == 18 یک سؤال می‌پرسد و جوابش True یا False است. اگر در یک if اشتباهی یکی بنویسید، پایتون خطای نگارشی می‌دهد. خوشبختانه اینجا پایتون سخت‌گیر است و اجازه نمی‌دهد این اشتباه بی‌سروصدا بماند.

۳. اولین if

دستور if می‌گوید: اگر این شرط درست بود، این چند خط را اجرا کن؛ وگرنه از رویشان بپر.

# The indented block runs ONLY when the condition is True.
age = 19

if age > 18:
    print('Welcome')          # this line belongs to the if (4 spaces)

print('End of the program')   # this line always runs (not indented)

ساده‌ترین شرط: نمونه 02_first_if.py

Welcome
End of the program

شرح مثال

۴. تورفتگی

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

چرا پایتون این کار را می‌کند

چون برنامه‌نویس‌ها به هر حال کدشان را تو می‌بردند تا خوانا شود. طراح پایتون گفت اگر همه این کار را می‌کنند، پس بگذاریم همین معنی هم داشته باشد و از شر آکولاد خلاص شویم. نتیجه این است که کد همه برنامه‌نویس‌های پایتون شبیه هم و مرتب است.

۵. else

else یعنی «در غیر این صورت». بلوکی که وقتی شرط نادرست باشد اجرا می‌شود.

# Reading a number and deciding with it.
user_input = input('Age: ')
age = int(user_input)

if age >= 18:
    print('Welcome!')
else:
    print('Access denied.')

شرط روی ورودی کاربر: نمونه 04_age_check.py

Age: 15
Access denied.

شرح مثال

۶. مقایسه رشته‌ها

# Strings are compared character by character, and the comparison is
# case sensitive: 'Kadoos' and 'kadoos' are NOT equal.
name = input('Enter your name: ')

if name == 'kadoos':
    print('Welcome', name)
else:
    print('Access denied!')

# To ignore the capitals, lower the text before comparing.
if name.lower() == 'kadoos':
    print('(case-insensitive check) Welcome', name)

مقایسه متن: نمونه 05_compare_strings.py

شرح مثال

۷. عملگرهای منطقی

گاهی یک شرط کافی نیست. سه عملگر منطقی به ما اجازه می‌دهند شرط‌ها را ترکیب کنیم.

# and -> True only when BOTH sides are True
# or  -> True when AT LEAST ONE side is True
# not -> reverses the value

age = 20
has_ticket = True

print(age >= 18 and has_ticket)     # True
print(age >= 18 or has_ticket)      # True
print(not has_ticket)               # False

# A very common pattern: is a value inside a range?
score = 15
if score >= 10 and score <= 20:
    print('Valid score')

# Python also allows the mathematical way of writing it:
if 10 <= score <= 20:
    print('Valid score (chained comparison)')

سه عملگر منطقی: نمونه 06_and_or_not.py

عملگرنتیجه True است وقتییادآوری فارسی
andهر دو طرف درست باشندو
orدست‌کم یک طرف درست باشدیا
notطرف مقابلش نادرست باشدنقیض

شرح مثال

۸. ورود با نام کاربری و رمز

# Constants are written in CAPITALS by convention: they are not meant to change.
USERNAME = 'admin'
PASSWORD = 'admin'

user = input('Enter username: ')
password = input('Enter password: ')

# Both conditions must be true, so we use 'and'.
if user == USERNAME and password == PASSWORD:
    print('Welcome,', user)
else:
    print('Access denied!')

ورود به سیستم: نمونه 07_login.py

شرح مثال

۹. چند مقدار مجاز با or

# Accepting several valid names with 'or'.
name = input('Enter your name: ')

if name == 'alireza' or name == 'omid' or name == 'arad':
    print('Welcome', name)
else:
    print('Access denied!')

# A shorter and much more readable way (we will study lists in session 09):
if name in ('alireza', 'omid', 'arad'):
    print('(short version) Welcome', name)

چند نام مجاز: نمونه 08_multiple_names.py

شرح مثال

۱۰. زوج یا فرد، مثبت یا منفی

حالا عملگر باقیمانده فصل دوم به کار می‌آید. عددی زوج است که باقیمانده‌اش بر ۲ صفر باشد.

# A number is even when the remainder of its division by 2 is zero.
user_input = input('Please enter a number: ')
number = int(user_input)

if number % 2 == 0:
    print('Even')
else:
    print('Odd')

زوج یا فرد: نمونه 09_even_or_odd.py

# Deciding on the sign of a number.
user_input = input('Enter a number: ')
number = float(user_input)

if number >= 0:
    print('+')
else:
    print('-')

علامت عدد: نمونه 10_positive_or_negative.py

در مثال دوم دقت کنید که صفر در دسته مثبت‌ها افتاده است، چون شرط >= است. اگر بخواهید صفر حالت سومی داشته باشد، به elif نیاز دارید که موضوع فصل بعد است.

۱۱. شرط روی یک کاراکتر

# A condition can be written on a single character of a string.
name = input('Enter your name: ')

# name[0] is the first character. An empty answer would crash the program,
# so we check the length first.
if len(name) > 0 and name[0].lower() == 's':
    print('Salam')
else:
    print('Hello')

شرط روی حرف اول: نمونه 11_first_letter.py

شرح مثال

۱۲. ترکیب and و or با پرانتز

# Combining 'and' and 'or'. The parentheses make the intention clear:
# (male AND older than 15) OR (female AND older than 9)
gender = input('Enter the gender (male / female): ')
age_input = input('Enter the age: ')
age = int(age_input)

if (gender == 'male' and age > 15) or (gender == 'female' and age > 9):
    print('She or he is ready to pray!')
else:
    print('Not ready yet.')

ترکیب شرط‌ها: نمونه 12_prayer_age.py

شرح مثال

فایل‌های تمرینی این فصل

پوشه S04-conditionals شامل نمونه‌های 01_booleans.py تا 12_prayer_age.py.

خلاصه فصل

ابزاروظیفه آن
== != > < >= <=شش عملگر مقایسه‌ای. نتیجه‌شان بولی است
= در برابر ==اولی مقداردهی، دومی مقایسه
if شرط:اجرای بلوک فقط وقتی شرط درست است
else:بلوکی که وقتی شرط نادرست است اجرا می‌شود
تورفتگیچهار فاصله. در پایتون بخشی از دستور زبان است
and or notترکیب و نقیض شرط‌ها
10 <= x <= 20مقایسه زنجیره‌ای، خواناتر از دو شرط با and
x in (a, b, c)جای چند or پشت سر هم
ارزیابی کوتاهاگر طرف چپ and نادرست باشد، طرف راست بررسی نمی‌شود

تمرین‌های فصل چهار

  1. یک عدد بگیرید و فقط با if و else بگویید مثبت است یا نه.
  2. دو عدد بگیرید و بزرگ‌ترشان را چاپ کنید.
  3. یک نمره بین ۰ تا ۲۰ بگیرید و اگر ۱۰ یا بیشتر بود Passed و وگرنه Failed چاپ کنید.
  4. یک سال بگیرید و بگویید کبیسه است یا نه: بر ۴ بخش‌پذیر باشد و بر ۱۰۰ نباشد، یا بر ۴۰۰ بخش‌پذیر باشد.
  5. نام کاربری و رمز بگیرید و فقط وقتی هر دو درست بودند اجازه ورود بدهید.
  6. یک کاراکتر بگیرید و با isdigit() بگویید رقم است یا نه.
  7. سه عدد بگیرید و بزرگ‌ترین را چاپ کنید، فقط با if و else و بدون تابع max.
  8. سن و نوع بلیت (normal یا student) را بگیرید و قیمت را چاپ کنید: دانش‌آموز زیر ۱۸ سال نصف قیمت و بقیه قیمت کامل.
فصل قبل: رشته‌ها فصل بعد: elif و شرط‌های تودرتو