علی که با کمک شما توانست مکعبش را رنگ کند، به این فکر رفته که یک کلاس طراحی کند تا کمک کند امنیت بیشتری داشته باشد. برای همین از شما میخواهد تا کلاسی با جزییات زیر برایش طراحی کنید.
حال شما باید متدهای خواستهشده از کلاس Security
را به صورتی که در ادامه توضیح دادهشده، تکمیل کنید.
class Security:
def secure(self, info):
pass
def is_social_account_info(self, param):
pass
def encrypt(self, s):
pass
متد encrypt(self, s)
یک رشته به عنوان ورودی این متد داده میشود و معادل رمزنگاریشده آن در خروجی برگردانده میشود.
با توجه به توضیحات زیر، معادل رمزنگاریشده ورودی را محاسبه کنید.
- ابتدا رشته به زیررشتههای یونیفورمش تقسیم میشود و سپس مقدار رمزنگاری شده رشته اصلی از به هم چسباندن مقدار رمزنگاری شده رشتههای یونیفورم به دست میآید.
- با در کنار هم قرار دادن وزن تمام زیررشتههای یونیفرمِ یک رشته، یک عبارت عددی به دست میآید که همان معادل رمزنگاریشده رشته ورودی است.
- رشته یونیفرم رشتهای است که تمام کاراکترهایش با هم یکسان باشند. مانند
c
یاaa
یاccc
- برای یک رشته یونیفورم مقدار رمزنگاری اینگونه به دست میآید که به ازای هر کاراکتر مقدار رشتهای ضرب وزن آن کاراکتر در تعداد کاراکترهایی که قبلش آمده به علاوه یک را به انتهای جواب اضافه میکنیم. (این کار را از اول رشته شروع میکنیم و تا آخر آن طی میکنیم.)
- برای مثال مقدار رمزنگاری رشته یونیفورم
cccc
برابر یا36912
است. - وزن یک کاراکتر برابر است با کد عددی آن کاراکتر منهای عدد 96. مثلا کد کاراکتر
a
برابر 97 و وزن آن برابر با $$97-96=1$$ است.
نمونه
>>> encrypt('abcccdd')
1236948
توضیحات نمونه
کلیه زیررشتههای یونیفرم حاصل از رشته ورودی و وزن آنها در ادامه لیست شده:
وزن | زیررشته یونیفرم |
---|---|
1 | a |
2 | b |
369 | ccc |
48 | dd |
که با در کنار هم قرار دادن وزن آنها، به عبارت 1236948
میرسیم.
متد is_social_account_info(self, param)
این متد یک رشته به عنوان پارامتر ورودی دریافت کرده و در خروجی مشخص میکند که آیا این رشته حاوی آدرس مربوط به یک اکانت شبکه اجتماعی هست یا نه. در زمان استخدام، واحد حفاظت و امنیت، آدرس کلیه اکانتهای عمومی (public) افراد را پرسیده و به شکل زیر در اسناد ذخیره کرده است:
[Social Network Name]:www.[domain]/[Account Name]
برای مثال آدرس اکانت توییتر علی به این صورت ذخیره شده است:
Twitter:www.twitter.com/javalover1990
توجه
- اسم شبکه اجتماعی همواره با حرف بزرگ انگلیسی شروع میشود.
- دامنه فقط شامل حروف کوچک انگلیسی و عدد و کاراکتر
.
است. - آدرس اکانت شامل حرف یا عدد یا علامت زیرخط (
_
) است.
نمونه
>>> is_social_account_info('Instagram:www.instagram.com/javafan')
True
متد secure(self, info)
حال با استفاده از دو متد قبلی، میخواهیم اطلاعات مورد نظر را رمزنگاری کنیم. به این صورت که:
- با استفاده از متد
is_social_account_info
بخشهایی که مربوط به اطلاعات حسابهای کاربری است را پیدا کنید. - با استفاده از متد
encrypt
بخش Account Name را رمزنگاری ک
ورودی یک متن است که شامل اطلاعات یک کارمند از جمله اطلاعات صفر یا چند حساب کاربری وی در شبکههای اجتماعی مختلف است.
نمونه
>>> secure('FirstName:Ali, LastName:Alavi, BirthDate:1990/02/02 Gender:male Instagram:www.instagram.com/aalavi Degree:Master Twitter:www.twiter.com/alaviii imdb:www.imdb.com/alavi')
'FirstName:Ali, LastName:Alavi, BirthDate:1990/02/02 Gender:male Instagram:www.instagram.com/12121229 Degree:Master Twitter:www.twiter.com/11212291827 imdb:www.imdb.com/alavi'
نکات
- میتوانید فایل اولیه این سوال را از این لینک دریافت کنید.
- دقت کنید که هیچکدام از توابع نباید مقداری را چاپ کند، بلکه باید مقادیر مورد نظر را بازگرداند.
نحوه ارسال
شما باید توابع encrypt
، is_social_account_info
و secure
از کلاس Security
موجود در فایل security.py
را تکمیل و سپس این فایل را ارسال کنید.
ارسال پاسخ برای این سؤال