خوبسازی
فرهاد و سلیب بازی جدیدی را شروع کردهاند. بازی کلمهها به این صورت است که فرهاد رشتهای را به سلیب میدهد و سلیب باید کلمات خوب آن را به همراه تعداد تکرارهایشان، به فرهاد بدهد. کلمات رشته با کاراکترهای Whitespace از هم جدا شدهاند. از نظر فرهاد هر کاراکتری که جزو حروف انگلیسی نباشد، یک حرف بد است و باید حذف شود. این کار برای سلیب سخت است و از شما کمک میخواهد.
تابع check_words
تابعی به نام check_words پیادهسازی کنید که یک رشتهی ورودی (text) دریافت میکند. این رشته شامل کلماتی است که با کاراکترهای Whitespace از هم جدا شدهاند. تابع باید کلمات خوب موجود در متن را شناسایی، پردازش و تعداد تکرار هر کدام را در یک دیکشنری شمارش کند.
📋 قوانین پردازش
مرحله ۱: جداسازی کلمات
ابتدا متن ورودی باید بر اساس کاراکترهای فضای خالی به لیستی از کلمات اولیه تقسیم شود.
مثال: اگر متن ورودی Hello SAliB! باشد، کلمات آن Hello و SAliB! هستند.
مرحله ۲: شناسایی و حذف کلمات بد
یک کلمه بد است اگر حداقل نیمی (نصف یا بیشتر) از کاراکترهای آن بد باشند. این کلمات باید حذف شوند. هر کاراکتری که جزو حروف الفبای انگلیسی (a تا z و A تا Z) نباشد، یک کاراکتر بد محسوب میشود.
مثال: A! یک کلمهی بد است (۱ کاراکتر بد از ۲ کاراکتر کل). A!A یک کلمهی خوب است (۱ کاراکتر بد از ۳ کاراکتر کل).
مرحله ۳: پردازش کلمات خوب
- تمام کاراکترهای بد از کلمه حذف میشوند.
- در رشتهی حاصل (که فقط شامل حروف الفبای انگلیسی است)، باید حرف اول بزرگ و باقی حروف کوچک باشند.
مثال: FriEnDs!!! ← پس از حذف !!!، به FriEnDs تبدیل میشود. سپس با فرمتبندی نهایی بهصورت Friends در میآید.
مثال: i$s ← پس از حذف $، به is تبدیل شده و سپس به Is فرمتبندی میشود.
مرحله ۴: شمارش نهایی
در نهایت، تابع باید یک دیکشنری برگرداند که کلیدهای آن، کلمات خوب پس از پردازش و فرمتبندی نهایی هستند و مقدار هر کلید، تعداد تکرار آن کلمه در لیست کلمات پردازششده است.
🎯 نمونه
>>> check_words("""hEllO My FriEnDs!!! thIS is A tEsT For your #p#r#o#b#l#e#m a""")
{'A': 2, 'For': 1, 'Friends': 1, 'Hello': 1, 'Is': 1, 'My': 1, 'Test': 1, 'This': 1, 'Your': 1}
کلمات اولیه:
["hEllO", "My", "FriEnDs!!!", "thIS", "i$s", "A", "tE%sT", "For", "your", "#p#r#o#b#l#e#m", "a"]
- کلمهی
#p#r#o#b#l#e#mبد است (۷ حرف الفبا، ۷ کاراکتر بد#) و حذف میشود.- سایر کلمات خوب هستند و پردازش میشوند:
hEllO← HelloMy← MyFriEnDs!!!← FriendsthIS← Thisi$s← IsA← AtE%sT← TestFor← Foryour← Youra← A- لیست نهایی کلمات پردازششده:
["Hello", "My", "Friends", "This", "Is", "A", "Test", "For", "Your", "A"]- دیکشنری خروجی: {'A': 2, 'For': 1, 'Friends': 1, 'Hello': 1, 'Is': 1, 'My': 1, 'Test': 1, 'This': 1, 'Your': 1}
💡 راهنمایی
برای حل این تمرین، مراحل زیر را دنبال کنید:
- متن ورودی را با
split()به کلمات تقسیم کنید. - برای هر کلمه: تعداد کاراکترهای بد (غیرحروف انگلیسی) را بشمارید. اگر تعداد کاراکترهای بد نصف یا بیشتر از طول کلمه بود، کلمه را نادیده بگیرید. در غیر این صورت، کاراکترهای بد را حذف کنید. کلمهی حاصل را با
capitalize()فرمتبندی کنید. کلمهی فرمتشده را در دیکشنری شمارش کنید. - دیکشنری خروجی را برگردانید.
def check_words(text):
word_count = {}
for word in text.split():
# شمارش کاراکترهای بد
bad_count = sum(1 for ch in word if not ch.isalpha())
if bad_count * 2 >= len(word):
continue
# حذف کاراکترهای بد
clean_word = ''.join(ch for ch in word if ch.isalpha())
# فرمتبندی نهایی
formatted_word = clean_word.capitalize()
# شمارش
if formatted_word in word_count:
word_count[formatted_word] += 1
else:
word_count[formatted_word] = 1
return word_count
- برای تشخیص حروف انگلیسی از
isalpha()استفاده کنید.- شرط کلمهی بد:
bad_count * 2 >= len(word)- برای فرمتبندی نهایی از
capitalize()استفاده کنید.- برای شمارش از دیکشنری استفاده کنید.
- در این تمرین، نیازی به دریافت ورودی از کاربر یا چاپ خروجی در کنسول ندارید.
- شما فقط باید تابع
check_wordsرا پیادهسازی کنید.- ورودی تابع از طریق آرگومان آن دریافت میشود و خروجی تابع باید از طریق دستور
returnبرگردانده شود.- کلمات با
split()جدا میشوند (فضاهای خالی، تب، خط جدید).
✅ این تمرین را در ویرایشگر خود پیادهسازی کنید. به یاد داشته باشید که تابع باید یک دیکشنری از کلمات خوب و تعداد آنها برگرداند.
نمونهها
check_words("""hEllO My FriEnDs!!! thIS is A tEsT For your #p#r#o#b#l#e#m a"""){'A': 2, 'For': 1, 'Friends': 1, 'Hello': 1, 'Is': 1, 'My': 1, 'Test': 1, 'This': 1, 'Your': 1}برای نوشتن پاسخ و دریافت امتیاز، ابتدا وارد حساب شوید.
ورود