כיוון שביקשו שנשתמש עם המודול operator אני נתקע עם בעיה קטנה:
הפונקציה add עובדת על שני מספרים להבדיל מהפונקציה max שעובדת על מספר בלתי מוגבל של מספרים:
add(num1, num2)
max(numbers)
הקוד שלי אמור להיות מספיק כללי בשביל שהפונקציה תהיה מסוגלת לקבל/למשוך יותר מ2 מספרים, ולכן אני לא מצאתי דרך להשתמש ב add מלבד להכניס אותו לפונקציה של שורה שאני כתבתי שמחזירה:
return operator.add(iterable[0], iterable[1])
וזה הערך שיחזור לכל שני מספרים במידה ואני משתמש בפונקציה add (שמחייב אותי לשנות את שם הקריאה שלה כיוון שברגע שאני פותח את המודול הקוד ישר משתייך למילה add ואני לא יכול להשתמש בו)
הצלחתי להגיע עד לפה, הקוד עובד כמו שצריך ומחזיר את התוצאות המתבקשות, אבל קיבלתי מהבודק האוטומטי את ההערה הבאה:
אני לא מצליח להבין את הערה כיוון שאם add לא היה מקבל 2 משתנים הקוד לא היה עובד, כנל בשימוש שלי איתו, הוא לוקח iterable בעל שני משתנים ועובד על iterable[0] ו- iterable[1]
ולכן אני כבר לא מבין מה מצופה ממני.
*עוד הערה, בשביל שהקוד יוכל לקבל את add ולרוץ רגיל, אנחנו צריכים לייבא אותו מתוך operator:
from operator import add
אחרת אין לי ברירה להשתמש בפונקציה חיצונית, כיוון שאין לי דרך כללית להחליט איזה פונקציה מובנית ואיזו פונקציה מיובאת, וכיוון שאנחנו מעדיפים לייבא את כל המודול, השימוש בקוד יצטרך להיראות:
operator.add(num1, num2)
ולא להיראות:
add(num1, num2)
לייק 1
yosefco3
מצטרף לשאלה.
כבר פסלו לי שני פתרונות על הסיפור הזה.
באמת שאינני יודע כיצד add מאופרטור היא אופציה טובה כאן.
הרי אם יש יותר משני איטרטורים בכל מקרה נצטרך לדרוס אותה.
Ode
אתה בטוח שהארגומנטים שאתה מעביר ל-add באמת נראים ככה? משתמע מהשגיאה ש-add מצפה לקבל שני ארגומנטים ומקבל רק אחד ( add בנוי ככה: add(a, b))
DrorBiton
בטוח, אחרת הקוד לא היה עובד לי
devorack
זאת הבעיה, הבודק נותן לadd פרמטר אחד, אבל בקוד שלך זה לא מספיק, תכתוב את זה כך שadd תוכל לקבל (a, b) כפרמטר
yosefco3
אוקי , וכאשר יש לך שלושה איטרטורים ומעלה מה את עושה ?
אפשר לעשות הכל עם משפטי תנאי - אם הפונקציה היא max תעשה כך וכך , אם add כך וכך - להבנתי זו לא דרך נכונה לכתוב קוד.
אם אני מבין את המהות של התרגיל אז היא ליישם כל פונקציה שתהיה על האיטרטורים.
devorack
תעשה את זה כך שבסוף גם פונקציה כמו add תעבוד וגם פונקציה כמו max, ע’י שימוש בביטוי כלשהו שמתאים לכל אחת מהן
DrorBiton
@devorack
לא כל כך הבנתי את מה שכתבת, תוכלי להסביר קצת יותר?
@yosefco3
מוודא שהבנתי אותך,
אם ככה, במצב שיש לי 3 או יותר, הפונקציה add תעבור מספר מספר ותחבר אותם
לדוגמא:
ובעצם אני צריך להכניס את add ללולאה במקום לדרוש שני מספרים
לייק 1
yosefco3
עשיתי את זה פעמיים - פסלו לי כבר שני פתרונות !
כי הם רוצים דווקא את הadd הזו שמקבלת שני פרמטרים , ולא את הadd שכתבתי בפתרון הראשון עם *args או add שמקבלת tuple וכדומה (כפי שעשיתי בשני).
Yam
במקרה הזה באמת יש טעות באיך שהעברתי את השאלה לסגל.
לוקח על עצמי את הטעות וכל התשובות לשאלה הזו יתקבלו.
ראו עדכון כאן: הודעת תיקון לגבי התרגיל zipwith
4 לייקים
yosefco3
אני באמת אנסה את מה שאתה מציע , אין הרבה ברירות
yosefco3
תודה …
בסוף הצלחתי עם שני פרמטרים בדרך שהצעת (לפני שראיתי את העדכון …)
כי למעשה גם max תוכל לעבוד עם שני פרמטרים ולולאה כפי שהצעת.
אז למדנו משהו היום.