چالش روزانه · ۲۲ مهر ۱۴۰۵
چالش پایتون ۶: 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))