תרגילים

מערכת בנק

בתרגיל הזה נכתוב מערכת מעט חכמה יותר לבנק.
נבנה אותה בשלבים באמצעות חלוקה לפונקציות.
בשלב הראשון נבנה פונקציה למחולל סיסמאות, שמקבלת שם משתמש ומחזירה סיסמה.
הסיסמה תורכב כך עבור שם משתמש נתון:

  • שם המשתמש באותיות קטנות ומייד אחריו שם המשתמש באותיות גדולות.
  • הוספת האות "X" מימין לשם המשתמש, כמספר התווים בשם המשתמש.

שימו לב כי שם המשתמש יכול לכלול ספרות וסימנים, נוסף על אותיות.
כמו כן, לא נאפשר שם משתמש שהוא מחרוזת ריקה. במקרה זה החזירו מחרוזת ריקה.

לדוגמה, עבור שם המשתמש 'stam' המחולל יחזיר את הסיסמה: 'stamSTAMXXXX'
הריצו את הפונקציה על 4 דוגמאות נוספות לפחות, באורכים שונים, ובדקו שקיבלתם פלט כמצופה.


In [ ]:
# כתבו את הפונקציה שלכם כאן

הריצו את הפונקציה כך: password_generator('stam')

כעת נקבל שם משתמש וסיסמה, ונבדוק אם השילוב הוא נכון. בדקו באמצעות מחולל הסיסמאות מהסעיף הקודם אם הסיסמה של המשתמש תואמת את הסיסמה שיוצר המחולל. הדפיסו "ברוך הבא" אם הסיסמה נכונה, אחרת הדפיסו "סיסמה שגויה".

login('stam', 'stamSTAMXXXX')
Welcome stam!

login('stam', 'mats')
Wrong Password!


In [ ]:
# כתבו את הפונקציה שלכם כאן

כתבו פונקציה שמחזירה True אם בוצע חיבור מוצלח, אחרת החזירו False.
פונקציה זו דומה מאוד לפונקציה הקודמת שכתבתם, רק שהיא אינה מדפיסה דבר.
במקום ההדפסה יוחזר ערך בוליאני מתאים.
לדוגמה:


login('stam', 'stamSTAMXXXX')
True
login('stam', 'mats')
False


In [ ]:
# כתבו את הפונקציה שלכם כאן

כעת ענו על השאלה הקודמת באמצעות הפונקציה שכתבתם בסעיף זה, כלומר כתבו פונקציה שמשתמשת בפונקציה המחזירה ערך בוליאני ומדפיסה בהתאם להוראת מהסעיף הקודם.
רמז: השתמשו בערך ההחזרה של הפונקציה מהסעיף הקודם, בתוך if.


In [ ]:
# כתבו את הפונקציה שלכם כאן

כעת נרחיב את מערכת הבנק שלנו.
נניח כי לכל לקוח יש בחשבון הבנק 500 ש"ח.
באמצעות הפוקנציות הקודמות שכתבנו נממש את התוכנית הבאה:

  • נבקש מהמשתמש שם משתמש וסיסמה.
  • נאמת את שם המשתמש והסיסמה בעזרת מחולל הסיסמאות. אם האימות הצליח נדפיס: ?Login succeeded. How much you'd like to withdraw
    אחרת נדפיס: .Login failed
  • כיון שלמשתמש יש 500 ש"ח בחשבון, עלינו לוודא שסכום המשיכה אינו גבוה מ־500 ש"ח. אם הסכום אכן גבוה מ־500 ש"ח נדפיס: .Withdrawal denied
  • כמו כן, עלינו לוודא כי הסכום אינו שלילי או 0. במקרה זה נדפיס: .Invalid amount
  • אם הסכום חוקי, נדפיס: .(Please take your money (amount asked). Your balance is: (amount left in balance

ציירו תחילה על דף תרשים זרימה של הקוד – תרשים מעויינים ללא קוד. זה יעזור לכם במימוש.</p

דוגמאות:

Insert username: stam
Insert password: stamSTAMXXXX
Login succeeded. How much you'd like to withdraw? 200
Please take your money (200NIS). Your balance is: 300NIS.

דוגמה לסיסמה שגויה:

Insert username: stam
Insert password: mats
Login failed.

דוגמה למשיכה לא חוקית:

Insert username: stam
Insert password: stamSTAMXXXX
Login succeeded. How much you'd like to withdraw? 600
Withdrawal denied.

דוגמה למשיכה של 0 ש"ח:

Insert username: stam
Insert password: stamSTAMXXXX
Login succeeded. How much you'd like to withdraw? 0
Invalid amount.


In [ ]:
# כתבו את הפונקציה שלכם כאן

לאחרונה עלתה דרישה לשכלל את הבנק שלנו, כך שרק מספר מצומצם של לקוחות יוכלו לגשת לבנק.
הגדירו רשימה של שמות של לקוחות שעבורם יתאפשר החיבור.
עבור לקוחות שאינם ברשימה יכתוב הבנק You are not a customer of the bank.


In [ ]:
# כתבו את הפונקציה שלכם כאן

מתודות של מחרוזות

ניזכר בכמה פעולות של מחרוזות:
לכל אחד מהתרגילים הבאים הריצו את הדוגמה וכתבו בעצמכם 3 דוגמאות נוספות. הסבירו לעצמכם מה עושה כל מתודה למחרוזת שהיא מקבלת.
אם תרצו להיזכר מה עושה מתודה מסוימת תוכלו להריץ אותה כך:

str.method-name?

לדוגמה:

str.split?

הריצו את התא הבא לקבלת מידע על המתודה split:


In [ ]:
str.split?

In [ ]:
"abcdef:ghijk:xyz".split(":")

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
"543".zfill(4)

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
"now i am a lowercase string, one day i will be upper".upper()

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
"I AM AN UPPERCASE STRING. I AM AFRAID TO BE LOWERED!".lower()

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
"wow!_I_am_using_underscore_as_space!".replace("_", " ")

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
"                    i need some spaceeeeeeee                            ".strip()

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
"i^wonder&if@all##characters$in%%%this string are alpha-numeric???".isalnum()

In [ ]:
"onlylettersandnumbers2342343".isalnum()

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
"lettersonly".isalpha()

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
"4535354353".isdecimal()

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
# כתבו דוגמה למתודה זו

In [ ]:
# כתבו דוגמה למתודה זו

שעון עולמי

בשאלה זו נכתוב גרסה של שעון עולמי התומך ב־4 אזורי זמן:

  • תל אביב – TLV
  • לונדון – LDN
  • ניו יורק – NYC
  • טוקיו – TYO

אם נקבל תל אביב, נחזיר את השעה בתוספת 3 שעות.
אם נקבל ניו יורק נחזיר את השעה פחות 4.
אם נקבל טוקיו נחזיר את השעה ועוד 9.
בכל מקרה אחר נחזיר את השעה כמו שקיבלנו אותה.

השעון שלנו בתרגיל זה הוא שעון 24 שעות בפורמט HH:MM.

תחילה, כתבו פונקציה המקבלת את השעה בפורמט HH:MM, ומקבלת את מספר השעות שיש להוסיף או להוריד מהשעה הנתונה, ומחזירה את השעה המעודכנת.


time_shift("08:44", 1)
"09:44"
time_shift("07:31", -2)
"05:31"

כמו כן עליכם לוודא שמוכנסת שעה חוקית, ולהדפיס שגיאה אם לא:


time_shift("32:12", 4)
"Invalid time inserted"

נוסף לכך, עליכם לתמוך במעברים בין יממות. כלומר עליכם לבצע נכון פעולות מסוג זה:


time_shift("23:30", 2)
"01:30"
time_shift("04:13", -5)
"23:13"


In [ ]:
# כתבו את הפונקציה שלכם כאן

רמזים

פונקציות שימושיות:
split – מתודה של string.
האופרטור % (מודולו) – חשבו עם איזה מספר צריך לעשות מודולו.
zfill – השתמשו בה במקרה שהשעה חד־ספרתית (לדוגמה 1:05 תהפוך ל־01:05)

רמזים נוספים:
מומלץ להמיר את השעה מ־string ל־int ואז לבצע את פעולות החשבון, ולבסוף להמיר חזרה ל־string

כעת כתבו פונקציה המקבלת שני פרמטרים – שעה ואזור זמן ובאמצעות הפונקציה מהתרגיל הקודם מחזירה את השעה באזור הזמן המבוקש.
לדוגמה:

convert_to_timezone("10:34", "TLV")
"13:34"


In [ ]:
# כתבו את הפונקציה שלכם כאן

אורכי רשימות

כתבו תוכנית שמקבלת 2 רשימות שונות, ומדפיסה:

  • "Same length" אם הן באותו אורך.
  • "Not same length" אם הן באורך שונה.
  • "Got empty list" אם רשימה שקיבלנו היא באורך 0.

לדוגמה – אם קיבלנו 2 רשימות ריקות, נדפיס:
"Got empty list" "Got empty list" "Same length"


In [ ]:
# כתבו את הפונקציה שלכם כאן

מיקומים

כתבו פונקציה שמקבלת רשימה של רשימות.
אם הרשימה החיצונית לא באורך 6, הפונקציה תדפיס Only lists of length 6 are allowed.
הפונקציה תדפיס "Yes!" אם אחד מהבאים מתקיים:

  • אורך הרשימה במקום ה־0 שווה לאורך הרשימה במקום ה־4
  • אורך הרשימה במקום ה־3 שווה לאורך הרשימה במקום ה־2 וה־1
  • אורך הרשימה במקום ה־5 שווה לאורך הרשימה במקום ה־3

הפונקציה תדפיס "Yes!" עבור כל תנאי שמתקיים, גם אם קיים יותר מאחד כזה.
לדוגמה, עבור:
multi = [[0], [1], [2], [3], [4], [5]]
כל התנאים מתקיימים, ולכן נדפיס "Yes!" 3 פעמים.

כתבו לפחות 3 דוגמאות שונות שמדגימות:

  • אפס הדפסות
  • הדפסה אחת
  • שתי הדפסות
  • שלוש הדפסות

In [ ]:
# כתבו את הפונקציה שלכם כאן