המערכת "ארגונית" לניהול חשבונות משתמשים כוללת שתי מחלקות: Account ו-Users.
המערכת "ארגונית" לניהול חשבונות משתמשים כוללת שתי מחלקות: Account ו-Users.
למחלקה Account כמה תכונות:
- שם משתמש – username, מסוג מחרוזת (str)
- הסיסמה הנוכחית – current_pass, מסוג מחרוזת (str)
- סיסמאות קודמות – pass_history, מסוג רשימה של 10 מחרוזות (list[str]). המערך ישמור עד 10 סיסמאות קודמות של החשבון.
כתבו בנאי (init) למחלקה Account שמקבל שם משתמש וסיסמה ראשונית כפרמטרים. הבנאי יאתחל את username, יאחסן את הסיסמה הראשונית ב-current_pass ובמקום הראשון ברשימה pass_history.
def __init__(self, username, password):
במערכת קיימת דרישת אבטחה לסיסמאות: הסיסמה תקינה אם היא עונה לפחות לשלושה מתוך חמישה תנאים:
- הסיסמה צריכה להיות באורך של שמונה תווים לפחות.
- הסיסמה צריכה להכיל שתי אותיות גדולות ('A'-'Z') לפחות.
- הסיסמה צריכה להכיל ספרה אחת ('0'-'9') לפחות.
- הסיסמה צריכה להכיל תו מיוחד אחד לפחות (כל תו שאינו אות או ספרה).
- בסיסמה אין תווים זהים צמודים.
כתבו במחלקה Account את הפונקציה is_password_valid המקבלת מחרוזת ובודקת אם היא יכולה להיות סיסמה.
def is_password_valid(self, password):
כתבו במחלקה Account את הפונקציה update_password המקבלת כפרמטר סיסמה חדשה. הסיסמה החדשה צריכה להיות תקינה. אם היא לא תקינה, הפונקציה לא מבצעת עדכון ומדפיסה הודעה מתאימה. הסיסמה החדשה צריכה להיות גם שונה מהסיסמה הנוכחית ומהסיסמאות הקודמות. אם היא זהה, הפונקציה לא תבצע עדכון ותדפיס הודעה מתאימה. אם הסיסמה החדשה תקינה ואינה זהה לאף אחת מהסיסמאות הקודמות, הפונקציה תעדכן את current_pass לסיסמה החדשה, ותוסיף את הסיסמה החדשה לתחילת הרשימה pass_history, תוך כדי הזזת הסיסמאות הקיימות (אם הרשימה מלאה, הסיסמה הישנה ביותר תידרס).
def update_password(self, new_password):
למחלקה Users שתי תכונות:
- חשבונות משתמשים – accounts, מסוג רשימת עצמים מסוג Account, בגודל מקסימלי של 100.
- מספר משתמשים פעילים – num_of_accounts, מסוג מספר שלם (int).
כתבו במחלקה Users את הפונקציה add_user המקבלת שם משתמש וסיסמה ראשונית כפרמטרים. תחילה הפונקציה תבדוק אם כבר קיים חשבון עם שם המשתמש הזה. אם קיים, או אם אין מקום, הפונקציה לא תוסיף משתמש חדש ותדפיס הודעה מתאימה. אם שם המשתמש לא קיים והרשימה accounts אינה מלאה, הפונקציה תיצור אובייקט חדש מסוג Account, תוסיף אותו לרשימה accounts ותעדכן את num_of_accounts.
def add_user(self, username, password):
עקב ריבוי ניסיונות פריצה מצד גורמים זרים, הוחלט להקשיח את דרישות האבטחה לסיסמאות של המשתמשים. בהתאם לכך:
- הציעו לפחות שני שיפורים נוספים לחיזוק הסיסמאות, אשר יתווספו לתנאים לסיסמה תקינה.
- כתבו פונקציה המאפשרת לקבל את רשימת המשתמשים הנדרשים לחיזוק הסיסמה, ולצד כל משתמש את רשימת התנאים בהם סיסמתו הישנה אינה עומדת! נא הדפיסו הודעה מתאימה.
- ממשו את השינויים הנדרשים בהתאם לשיפורים כפי שהצעתם. במחלקה אחת או יותר יש לתעד היטב את הצעתכם.
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.