چالش روزانه · ۲۲ مهر ۱۴۰۵

چالش پایتون ۱۳: تلهٔ or در شرط

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

ch = "z"
print(ch == "a" or "e")
خروجی کدام است؟

نمایش پاسخ و توضیح

پاسخ درست: گزینهٔ ج — e

پایتون این را چطور می‌خواند؟

== اولویت بالاتری از or دارد، پس عبارت این‌طور گروه‌بندی می‌شود:

(ch == "a") or ("e")

نه این‌طور: ch == ("a" or "e") و نه «ch برابر a یا برابر e».

  • ch == "a" ← False
  • False or "e" ← or اولین مقدار «درست» را برمی‌گرداند. رشتهٔ "e" غیرخالی است، پس ارزش منطقی‌اش درست است.

نتیجه خود رشتهٔ "e" است، نه True. جواب: e

چرا مهم است؟

ch = "z"
if ch == "a" or "e":
    print("صدادار!")   # همیشه اجرا می‌شود 😱

این شرط همیشه برقرار است، چون "e" همیشه درست است. شکل درست:

ch = "z"
print(ch == "a" or ch == "e")   # False
print(ch in "ae")               # False؛ کوتاه‌تر

حالا خودت اجرا کن و تغییرش بده

ch = "z"
print(ch == "a" or "e")