فصل ۳ · شروع یادگیری

شرط‌ها و مدیریت خطا

برنامه بر اساس داده‌ها تصمیم می‌گیرد و با ورودی نامعتبر کنار می‌آید.

۴۰ دقیقهٔ پیشنهادی مطالعه و تمرین۴ بخشتمرین عملی و خودآزمایی

بعد از این فصل می‌توانی…

  • با مقایسه، شرط درست و نادرست بسازی.
  • از if، elif و else با تورفتگی درست استفاده کنی.
  • خطای تبدیل ورودی را مدیریت کنی.

پیشنهاد برای پیش‌نیاز: متغیرها، عبارت‌ها و ورودی

ویدیوی این فصل

شرط‌ها و مدیریت خطا

ویدیوی این فصل هنوز اضافه نشده است. می‌توانی همین حالا آموزش متنی و تمرین‌ها را شروع کنی.

بخش 1

مقایسه و شرط یک‌طرفه

عملگرهای <، <=، >، >=، == و != دو مقدار را مقایسه می‌کنند و نتیجهٔ منطقی True یا False می‌دهند. = برای انتساب است و == برای مقایسهٔ برابری.

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

بررسی امتیاز

score = 18
if score >= 15:
    print("آفرین!")
print("پایان بررسی")
خروجی مورد انتظار
آفرین!
پایان بررسی
بخش 2

دو راه یا چند راه

if / else دقیقاً یکی از دو شاخه را اجرا می‌کند. برای چند حالت از elif استفاده کن. پایتون شرط‌ها را از بالا بررسی می‌کند و در یک زنجیره فقط اولین شاخهٔ درست را اجرا می‌کند.

ترتیب شرط‌ها مهم است: اگر اول score >= 10 را بررسی کنی، نمرهٔ ۱۹ هم وارد همان شاخه می‌شود و به شرط score >= 18 نمی‌رسد.

پیام مناسب نمره

score = 16
if score >= 18:
    print("عالی")
elif score >= 10:
    print("قبول")
else:
    print("نیاز به تمرین")
خروجی مورد انتظار
قبول
بخش 3

شرط‌های تو در تو

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

برای خوانایی، شرط‌ها را کوتاه نگه دار. مرزها را هم امتحان کن: مثلاً عددهای ۹، ۱۰ و ۱۱ رفتار شرط >= 10 را روشن می‌کنند.

بازهٔ معتبر

score = 17
if score >= 0:
    if score <= 20:
        print("نمره معتبر است")
خروجی مورد انتظار
نمره معتبر است
بخش 4

وقتی ورودی عدد نیست

تبدیل متن "hello" به float خطای ValueError می‌دهد. قسمت خطاپذیر را در try قرار بده و همان خطای مورد انتظار را با except ValueError بگیر.

با رخ دادن خطا، باقی دستورهای try اجرا نمی‌شوند و برنامه به except می‌رود. از except بدون نوع خطا برای پنهان کردن همهٔ مشکلات استفاده نکن.

تبدیل قابل کنترل

try:
    age = int(input())
    print(age + 1)
except ValueError:
    print("لطفاً عدد صحیح وارد کن")

ورودی نمونه؛ هر پاسخ در یک خط

hello
خروجی مورد انتظار
لطفاً عدد صحیح وارد کن
حالا نوبت توست

دستمزد با اضافه‌کاری

ساعت و نرخ را بگیر. تا ۴۰ ساعت نرخ عادی و برای ساعت‌های بیشتر نرخ ۱٫۵ برابر حساب کن. ورودی غیرعددی باید پیام خطا بدهد. با ۴۵ ساعت و نرخ ۱۰، نتیجه ۴۷۵ است.

یک راهنمای کوچک

در شاخهٔ اضافه‌کاری، 40 * rate را با (hours - 40) * rate * 1.5 جمع کن.

پاسخ پیشنهادی و خروجی
try:
    hours = float(input())
    rate = float(input())
    if hours > 40:
        pay = 40 * rate + (hours - 40) * rate * 1.5
    else:
        pay = hours * rate
    print(pay)
except ValueError:
    print("ورودی نامعتبر")

خروجی نمونه

475.0

خودآزمایی

پاسخ را انتخاب کن و دلیل آن را بخوان. این بخش برای تمرین است و نمرهٔ رسمی ثبت نمی‌کند.

1. در زنجیرهٔ if / elif / else چند شاخه اجرا می‌شود؟
2. برای خطای int("abc") کدام مناسب است؟