מה שמצופה מאיתנו ב - zip with

תגיות:

כיוון שביקשו שנשתמש עם המודול operator אני נתקע עם בעיה קטנה:
הפונקציה add עובדת על שני מספרים להבדיל מהפונקציה max שעובדת על מספר בלתי מוגבל של מספרים:

add(num1, num2)
max(numbers)

הקוד שלי אמור להיות מספיק כללי בשביל שהפונקציה תהיה מסוגלת לקבל/למשוך יותר מ2 מספרים, ולכן אני לא מצאתי דרך להשתמש ב add מלבד להכניס אותו לפונקציה של שורה שאני כתבתי שמחזירה:

return operator.add(iterable[0], iterable[1])

וזה הערך שיחזור לכל שני מספרים במידה ואני משתמש בפונקציה add (שמחייב אותי לשנות את שם הקריאה שלה כיוון שברגע שאני פותח את המודול הקוד ישר משתייך למילה add ואני לא יכול להשתמש בו)

הצלחתי להגיע עד לפה, הקוד עובד כמו שצריך ומחזיר את התוצאות המתבקשות, אבל קיבלתי מהבודק האוטומטי את ההערה הבאה:
image
אני לא מצליח להבין את הערה כיוון שאם add לא היה מקבל 2 משתנים הקוד לא היה עובד, כנל בשימוש שלי איתו, הוא לוקח iterable בעל שני משתנים ועובד על iterable[0] ו- iterable[1]

ולכן אני כבר לא מבין מה מצופה ממני.

*עוד הערה, בשביל שהקוד יוכל לקבל את add ולרוץ רגיל, אנחנו צריכים לייבא אותו מתוך operator:

from operator import add

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

operator.add(num1, num2)

ולא להיראות:

add(num1, num2)

לייק 1

מצטרף לשאלה.
כבר פסלו לי שני פתרונות על הסיפור הזה.
באמת שאינני יודע כיצד add מאופרטור היא אופציה טובה כאן.
הרי אם יש יותר משני איטרטורים בכל מקרה נצטרך לדרוס אותה.

אתה בטוח שהארגומנטים שאתה מעביר ל-add באמת נראים ככה? משתמע מהשגיאה ש-add מצפה לקבל שני ארגומנטים ומקבל רק אחד ( add בנוי ככה: add(a, b))

בטוח, אחרת הקוד לא היה עובד לי

זאת הבעיה, הבודק נותן לadd פרמטר אחד, אבל בקוד שלך זה לא מספיק, תכתוב את זה כך שadd תוכל לקבל (a, b) כפרמטר

אוקי , וכאשר יש לך שלושה איטרטורים ומעלה מה את עושה ?
אפשר לעשות הכל עם משפטי תנאי - אם הפונקציה היא max תעשה כך וכך , אם add כך וכך - להבנתי זו לא דרך נכונה לכתוב קוד.
אם אני מבין את המהות של התרגיל אז היא ליישם כל פונקציה שתהיה על האיטרטורים.

תעשה את זה כך שבסוף גם פונקציה כמו add תעבוד וגם פונקציה כמו max, ע’י שימוש בביטוי כלשהו שמתאים לכל אחת מהן

@devorack
לא כל כך הבנתי את מה שכתבת, תוכלי להסביר קצת יותר?

@yosefco3
מוודא שהבנתי אותך,
אם ככה, במצב שיש לי 3 או יותר, הפונקציה add תעבור מספר מספר ותחבר אותם
לדוגמא:

numbers = [1, 2, 3]
counter = 0
counter = 0 + 1
counter = 1 + 2
counter = 3 + 3
counter = 6
return counter

ובעצם אני צריך להכניס את add ללולאה במקום לדרוש שני מספרים

לייק 1

עשיתי את זה פעמיים - פסלו לי כבר שני פתרונות !
כי הם רוצים דווקא את הadd הזו שמקבלת שני פרמטרים , ולא את הadd שכתבתי בפתרון הראשון עם *args או add שמקבלת tuple וכדומה (כפי שעשיתי בשני).

במקרה הזה באמת יש טעות באיך שהעברתי את השאלה לסגל.
לוקח על עצמי את הטעות וכל התשובות לשאלה הזו יתקבלו.
ראו עדכון כאן: הודעת תיקון לגבי התרגיל zipwith

4 לייקים

אני באמת אנסה את מה שאתה מציע , אין הרבה ברירות :slight_smile:

תודה …
בסוף הצלחתי עם שני פרמטרים בדרך שהצעת (לפני שראיתי את העדכון …)
כי למעשה גם max תוכל לעבוד עם שני פרמטרים ולולאה כפי שהצעת.
אז למדנו משהו היום.