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

چالش پایتون ۶: int، round و یک غافلگیری

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

print(int(3.9), round(3.5), round(2.5))
خروجی کدام است؟

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

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

سه نکته در یک خط

int(3.9) ← 3. int گرد نمی‌کند؛ فقط قسمت اعشار را دور می‌ریزد (به سمت صفر).

round(3.5) ← 4. تا اینجا عجیب نیست.

round(2.5) ← 2! پایتون از روش «گرد کردن به نزدیک‌ترین زوج» (round half to even، معروف به «گرد کردن بانکی») استفاده می‌کند: وقتی عدد دقیقاً وسط دو عدد صحیح است، به سمت عدد زوج گرد می‌شود.

print(round(0.5), round(1.5), round(2.5), round(3.5))   # 0 2 2 4

چرا؟

در روش مدرسه‌ای (همیشه ۰٫۵ به بالا)، وقتی هزاران عدد را گرد و جمع می‌کنید، جمع کل کمی به سمت بالا منحرف می‌شود. گرد کردن به زوج این انحراف را خنثی می‌کند؛ نیمی از حالت‌ها بالا می‌روند و نیمی پایین. برای همین در آمار و حسابداری استاندارد است.

اگر روش مدرسه‌ای را می‌خواهید: int(x + 0.5) برای اعداد مثبت، یا ماژول decimal با ROUND_HALF_UP.

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

print(int(3.9), round(3.5), round(2.5))