چالش روزانه · ۱۵ آبان ۱۴۰۵

چالش پایتون ۱۹: یک، True و یک‌ممیزصفر

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

print(len({1, True, 1.0, 2}))
خروجی این کد چیست؟

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

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

گام به گام

مجموعه (و کلید دیکشنری) دو عضو را تکراری حساب می‌کند اگر با == برابر باشند (و hash یکسان داشته باشند). در پایتون:

1 == True   →  True    (True در واقع همان عدد 1 است)
1 == 1.0    →  True

پس 1، True و 1.0 از نظر مجموعه یک عضوند. پایتون اولی (1) را نگه می‌دارد و بقیه را تکراری حساب می‌کند. 2 هم عضو جداگانه است.

{1, True, 1.0, 2}  →  {1, 2}

جواب: 2

خودتان ببینید

s = {1, True, 1.0, 2}
print(s)                  # {1, 2}
print({True, 1, 1.0})     # این بار اولی True است: {True}
print(True + True)        # 2 ؛ bool زیرنوعِ int است
d = {1: "یک"}
d[1.0] = "یک‌ممیزصفر"
print(d)                  # کلید همان 1 می‌ماند، مقدار عوض می‌شود

نکتهٔ کاربردی: در مجموعه‌ها و کلیدهای دیکشنری، 1، 1.0 و True یک چیزند. اگر داده‌تان ترکیبی از عدد و True/False است (مثلاً جواب‌های یک فرم)، قبل از شمردن یا گروه‌بندی، نوعشان را یکی کنید. (درس مجموعه)

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

print(len({1, True, 1.0, 2}))