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

چالش پایتون ۱۲: مرتب کردن نمره‌ها

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

scores = ["10", "9", "100", "25"]   # از input
print(sorted(scores))
خروجی این کد چیست؟

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

پاسخ درست: گزینهٔ ب — ['10', '100', '25', '9']

گام به گام

عضوهای لیست رشته‌اند، نه عدد (کوتیشن‌ها را ببینید). input() همیشه رشته برمی‌گرداند.

رشته‌ها مثل کلمه‌های لغت‌نامه، حرف به حرف از چپ مقایسه می‌شوند:

  • "10" و "100" و "25" و "9": اولین حرف‌ها 1، 1، 2، 9 هستند. پس هرچه با 1 شروع شود اول می‌آید و "9" آخر.
  • بین "10" و "100": دو حرف اول یکسان‌اند و "10" کوتاه‌تر است، پس اول می‌آید.
['10', '100', '25', '9']

جواب: ['10', '100', '25', '9']

راه درست

scores = ["10", "9", "100", "25"]
nums = [int(s) for s in scores]   # اول به عدد تبدیل کنید
print(sorted(nums))

# یا اگر می‌خواهید رشته بمانند:
print(sorted(scores, key=int))

نکتهٔ کاربردی: هر عددی که از input() یا فایل می‌خوانید رشته است. قبل از مقایسه یا مرتب کردن، با int() یا float() تبدیلش کنید. همین باگ باعث می‌شود «۹» از «۱۰۰» بزرگ‌تر به نظر برسد. (درس انواع داده و تبدیل نوع)

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

scores = ["10", "9", "100", "25"]   # از input
print(sorted(scores))