سلام
کد شما یک ایراد کوچیک داره که با کمی دقت پیدا میشه.
تابع find همواره اندیس (index) اولین مورد از زیررشتهای (substring) که بهش ورودی بدید رو خروجی میده. شما این رو به خوبی در متغیر l4 رعایت کردید اما برای بقیه نه. به طور خاص اگر دقت کنید در رشتهی مثال شما حرف o برای اولین بار قبل از تمام حروف دیگه اومده. بنابراین find همواره عددی برمیگردونه که از بقیه کوچیکتره و اون شرط l5 > l4 غلط از آب درمیآد.
باید تغییری مثل این رو اعمال کنید:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته باید توجه کنید که اعمال این تغییر باعث میشه بخشهای دیگه کد شما هم نیاز به تغییر پیدا کنن (مثل شروط hello). به این هم فکر کنید که با وجود این تغییر اگر یکی از مقادیر l منفی شد (مثلا حرف e در ورودی وجود نداشت)، تکلیف بقیه چی میشه؟ آیا میتونید راهی برای حل این مشکل پیشنهاد کنید؟ راه دیگری به ذهنتون میرسه؟ (سعی میکنم بهتون در حل مسئله جهت مناسب بدم تا خودتون به جواب برسید. فکر کنم خودتون هم این رو ترجیح بدید تا گرفتن پاسخ مستقیم رو)
من سطح مهارت شما در برنامهنویسی و منابع آموزشیتون رو نمیدونم اما به عنوان تمرین برنامهنویسی (و نه لزوما پایتون) به این فکر کنید که چرا راه حل شما بهینه نیست.
سعی کنید دنبال راهی باشید که با یک بار پیمایش رشتهی ورودی بتونه این مسئله رو حل کنه. راهی پیدا کنید که بدون توابعی مثل find این مسئله رو حل کنید (به کمک حلقهها و تبدیل رشتهی ورودی به یک لیست از کاراکترها)
در ضمن برای جلوگیری از بروز چنین مشکلاتی خوبه که از یه محیط توسعه با قابلیت دیباگ استفاده کنید تا مقدار تمام متغیرهای مورد نظر در هر لحظه از اجرای کد رو بهتون نشون بده. در مورد این مشکل خاص میتونستید ببینید مقدار l5 کوچکتر از بقیهاس و شاید زودتر میتونستید خودتون مشکل رو حل کنید. دربارهی این موضوع هم تحقیق کنید بد نیست.
موفق باشید