PDA

نسخه کامل مشاهده نسخه کامل : رفع مشکل یک برنامه ی پایتون



smss.exe
28-03-2020, 11:55
سلام
یه تمرین هست به این صورت:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

وچیزی که من نوشتم این:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ولی ظاهرا درست نیست.
توی مثالی که خودش زده درست کار میکنه ولی توی این مورد مثلا کار نمیکنه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Ali_vdo
28-03-2020, 14:02
سلام

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

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته باید توجه کنید که اعمال این تغییر باعث می‌شه بخش‌های دیگه کد شما هم نیاز به تغییر پیدا کنن (مثل شروط hello). به این هم فکر کنید که با وجود این تغییر اگر یکی از مقادیر l منفی شد (مثلا حرف e در ورودی وجود نداشت)، تکلیف بقیه چی می‌شه؟ آیا می‌تونید راهی برای حل این مشکل پیشنهاد کنید؟ راه دیگری به ذهنتون می‌رسه؟ (سعی می‌کنم بهتون در حل مسئله جهت مناسب بدم تا خودتون به جواب برسید. فکر کنم خودتون هم این رو ترجیح بدید تا گرفتن پاسخ مستقیم رو)

من سطح مهارت شما در برنامه‌نویسی و منابع آموزشیتون رو نمی‌دونم اما به عنوان تمرین برنامه‌نویسی (و نه لزوما پایتون) به این فکر کنید که چرا راه حل شما بهینه نیست.
سعی کنید دنبال راهی باشید که با یک بار پیمایش رشته‌ی ورودی بتونه این مسئله رو حل کنه. راهی پیدا کنید که بدون توابعی مثل find این مسئله رو حل کنید (به کمک حلقه‌ها و تبدیل رشته‌ی ورودی به یک لیست از کاراکترها)
در ضمن برای جلوگیری از بروز چنین مشکلاتی خوبه که از یه محیط توسعه با قابلیت دیباگ استفاده کنید تا مقدار تمام متغیرهای مورد نظر در هر لحظه از اجرای کد رو بهتون نشون بده. در مورد این مشکل خاص می‌تونستید ببینید مقدار l5 کوچک‌تر از بقیه‌اس و شاید زودتر می‌تونستید خودتون مشکل رو حل کنید. درباره‌ی این موضوع هم تحقیق کنید بد نیست.

موفق باشید :)

smss.exe
28-03-2020, 16:07
ممنون خیلی توضیحاتتون خوب بود.