שלום,
במחברת 5, אחרי שלומדים על סידור רשימות באמצעות sorted, ועל reverse ו-key, יש תירגול. בתירגול מבקשים לסדר רשימה של שמות, כשהשמות יכולים להכיל גם אותיות גדולות וגם אותיות קטנות.
אני יודע איך לפתור את זה, אבל האם הייתי אמור לפתור את זה באמצעות משהו שבדיוק נלמד? כי לא הבנתי איך אני יכול להשתמש ב-key כלשהו בשביל לפתור את זה. הרי lower/upper הן פעולות על מחרוזות, ולא פונקציות כמו len, שבה נעשה שימוש בדוגמה.
אשמח להבהרה מהסגל או מישהו שהצליח לפתור את זה באמצעות החומר החדש
תודה.
orpazf
להשתמש ב-key עם פונקציה מתאימה במקום עם מתודה
dingross
זאת פונקציה שלמדנו?
…
orronai
הכוונה היא ליצור פונקציה שמקבלת פרמטר, ומבצעת עליו את הפעולות הדרושות
dingross
אז הכוונה היא שאפשר להשתמש ב-key עם פונקציה שאנחנו יוצרים.
הבנתי את מהמשך המחברת.
תודה לעונים.
Ayelet
היי, ההסברים פה עדיין לא לגמרי מסתדרים לי.
כתבתי פונקציה נוספת שעוברת על כל שם ברשימה ומפעילה עליו lower (בלי ערך החזרה כי זה גורם לשגיאה), קראתי לפונקציה הזו בתוך sorted וזה סידר בצורה משונה, לא נכונה.
aviadamar
סורטד עוברת איבר איבר ומחליטה איפה למקם אותו ביחס לפרמטר מסויים.
למשל: אם הייתה לי כתה של תלמידים, והייתי מפעיל עליהם sorted עם key שמפנה לפונקציה שמחזירה את שנת הלידה שלהם,
אז sorted הייתה עוברת תלמיד תלמיד, מפנה אותו לפונקציה שבודקת מה שנת הלידה של אותו תלמיד (כלומר עבור פרט אחד בלבד מכל הכתה) והייתה מקבלת חזרה את שנת הלידה שלו.
אחרי שהיא הייתה עוברת על כל התלמידים ומקבלת מכולם את הנתונים של שנות הלידה היא תמיין את כל התלמידים בהתאם לנתונים של שנות הלידה.
הפוקנציה שמכניסים לkey היא בעצם אומרת לsorted שעבור כל איבר שהיא בודקת, הפרמטר למיון יהיה לפי התוצאה שחוזרת מהפונקציה. כך שאם הפונקציה שלנו קיבלה תלמיד והחזירה שנת לידה, אז sorted תחפש לפי שנות הלידה שהיא מקבלת מכל התלמידים שהיא “עוברת” עליהם.
יש לשים לב שסורטד מקבל משתנה iterable - כלומר היא בעצמה כבר עובדת איבר איבר ולא צריך להפעיל עליה עוד מעבר בין האיברי.
נחזור לדוגמא שלנו:
def get_birth(person):
return person[1]
students = [('Aviad',1988), ('Sapir',1990),('Shani',1986)]
print(sorted(students, key=get_birth))
שימי לב שלא צריך לקרוא לפונקציה בתוך ה־key, אלא להעביר את הפונקציה עצמה (בלי פתח וסגור סוגריים אחרי השם שלה)
לייק 1
Ayelet
תודה @aviadamar@Yam,
גם סיבכתי מדי את הפונקציה שפועלת על כל איבר ברשימה, וגם לא העברתי אותה נכון.
לייק 1
Yam
קורה. בשביל זה יש פורום
2 לייקים
odededri8
שאלה נוספת: האם צריך לקבל חזרה את הרשימה עם השמות המקוריים?
כי אני מקבל חזרה את השמות אחרי lower ולא מצליח לייצר פונקציה שתחזיר לי חזרה את השמות כפי שנכתבו במקור.
orpazf
צריך את השמות המקוריים. נסה לחשוב איך להשתמש ב-key כדי למיין בלי לשנות את השמות המקוריים