תרגיל – פלינדרום
פאלינדרום (אפשר גם בלי א' או בכלל באנגלית palindrome) הוא מספר הוא מילה (אפשר גם משפט אבל זה מורכב יותר) שאפשר לקרוא מהסוף להתחלה והוא יישאר אותו דבר. למשל המילה שמש, גם אם קוראים מהסוף להתחלה זה עדיין שמש. כך גם המספר 121 או 1001. המשימה שלנו היא לבנות פונקציה המקבלת פרמטר (מילה או מספר) ומחזירה תשובה האם הוא פלינדרום או לא. יאללה
def pali (p): sp=str (p) rp=sp [::-1] if sp==rp: print ("palindrome") else: print ("not palindrome") pali ("שמש") >>> palindrome
pali ("ana") >>> palindrome
pali ("פוף") >>> not palindrome
השלבים –
הגדרנו פונקציה בשם def עם פרמטר p.
הגדרנו משתנה בשם sp שלוקח את מה שנכניס בפרמטר p והופך אותו למחרוזת משום שהערך המספרי , גם אם מכניסים מספר, לא ממש מעניין אותנו, אלא רק סדר הסימנים.
הגדרנו משתנה rp שלוקח את המחרוזת sp והופך ורושם אותה מחדש מהסוף להתחלה (קפיצות של -1 משמעותן שעוברים על המחרוזת כולה [::] החל מהאיבר שמספרו 1- (האחרון) וכל פעם מוסיפים 1- כך שהאיבר הבא יהיה 2- (השני מהסוף) וכו'. אנו רואים שמחרוזת מתנהגת כמו רשימה. אפשר לחתוך אותה או להפוך אותה.
עכשיו, לאחר שהפכנו את המחרוזת מהסוף להתחלה אנו יכולים להשוות אותה (תנאי של if) למחרוזת המקורית, כך שאם הן שוות אזי מדובר בפלינדרום.
אבל רגע, יש לנו bug, גם המילה פוף היא סוג של פלינדרום, למה קיבלנו not palindrome ? זאת משום שפייתון לא מזהה ש פ' סופית (ף) היא גם סוג של פ'. לכן עכשיו נתקן את התוכנית –
def poli(p): sp=str(p) if "ף" in sp: np=sp.replace("ף","פ") sp=np rp=sp[::-1] if sp==rp: print ("palindrome") else: print ("not palindrome") poli ("פוק קוף")
>>>
palindrome
עכשיו לאחר יצירת המחרוזת sp אנו בודקים אם יש בה ף (פ' סופית) ובמידה שכן, אנו עושים שימוש בפקודה שפועלת על מחרוזות ומאפשרת יצירת מחרוזת חדשה np שבה תוחלף כל ף בפ' רגילה. לאחר מכן במקרה שקיימת ף אנו מבקשים להכניס לתוך sp את המחרוזת המתוקנת ומשם ממשיכים כמו בתוכנית הקודמת, יוצרים משתנה rp שהופך את המחרוזת ומשווה אותה למחרוזת המקורית לאחר החלפת ף (פ' סופית) ב - פ' רגילה. כמובן שניתן לבצע את התהליך על כל הסופיות ובדרכים יעילות יותר. באנגלית צריך להתמודד עם אותיות גדולות מול קטנות כשהופכים את כיוון הקריאה. ולא, לא מצאתי משהו טוב יותר מ- "פוק קוף" יש לי גם "פושטק קטשופ" אבל זה עוד אחד מאותו ז'אנר.