הודעת תיקון לגבי התרגיל zipwith

תגיות:

התרגיל zipwith עבר אתמול בדיקה.

לצערי היה קצר בתקשורת בנוגע להנחיות התרגיל, וחלקכם קיבלו הערות לא מדויקות בנוגע אליו.
אני לוקח על עצמי את הטעות הזו וכל הפתרונות שיוגשו ל־zipwith יתקבלו.

עם זאת, אם מי מכם רוצה לממש את zipwith כפי שהתכוונתי אליו בתרגיל, הנה ניסוח מחודש שלו:

כתבו פונקציה בשם zip_with שמקבלת פונקציה כפרמטר ראשון, ושני iterable־ים או יותר בפרמטרים שאחריו.
הפונקציה תחזיר רשימה, שבה האיבר במקום ה־N־י הוא הערך שחזר מהעברת כל הערכים במקום ה־N־י של כל ה־iterables לפונקציה.

לדוגמה:

  • עבור הקריאה zip_with(add, [1, 2, 3], [4, 5, 6])
    יוחזר הערך: [5, 7, 9].
  • עבור הקריאה zip_with(add, [1, 2, 3], [4, 5, 6], [1, 1, 1])
    יוחזר הערך: [6, 8, 10].
  • עבור הקריאה zip_with(max, (5, 4), (2, 5), (6, -6))
    יוחזר הערך: [6, 5].
  • עבור הקריאה zip_with(add, range(4), range(1, 5), range(2, 6))
    יוחזר הערך: [3, 6, 9, 12].
  • עבור הקריאה zip_with(round, [1.1234] * 4, range(4))
    יוחזר הערך: [1.0, 1.1, 1.12, 1.123].

כהבהרה נוספת – הפונקציה add תמומש כך שתקבל כל מספר ארגומנטים שהוא, כולם מסוג int או float.
על הערכים לחזור כרשימה (כמו בדוגמה) או כג’נרייטור.

אפשר להניח שה־iterables המועברים לפונקציה זהים באורכם.

6 לייקים

היי ים,

האם add צריך להיות פונקציה שאנחנו כתבנו אם כן, הבודק האוטומטי מבקש ממני לשלח לו 2 משתנים ולא TUPLE.

היי, add צריכה להיות פונקציה שכתבתם.
היא צריכה לקבל כל מספר שהוא של משתנים (לאו דווקא 2) מסוג int או float.

אז למה הבודק מתקש על 2 וה TUPLE שאני יוצרת לא טוב?
שגיאה בודק אוטומטי “TypeError: add expected 2 arguments, got 1”

בגדול הקוד שלי עובד לכל הדוגמאות שלך.

שלחי קישור ואסתכל :slight_smile:

https://solve.pythonic.guru/view/90388

בבקשה.

יכול להיות שיש טעות בבדיקה האוטומטית? היא מתנהגת כאילו ש add נלקח מ operator ומצפה לשני ארגומנטים.
https://solve.pythonic.guru/view/90387
אתמול לא הופיעה השגיאה הזו. בנוסף זה עובד אצלי ב jupyter על כל הדוגמאות.

למה בעצם להשתמש או לממש add כזה אם sum עושה את אותו הדבר? והאם מותר להשתמש ב-sum כחלק מפונקציית add שלנו?

לייק 1

אין סיבה – המטרה היא לשמור על backwards compatibility עם ההנחיות הקודמות של התרגיל.
כן, מותר.

(תיקון קל לתשובתי ל־@Ode – ההבדל הוא ש־sum מקבל ארגומנט אחד של tuple, ו־add שלנו מקבל כל מספר שהוא של ארגומנטים. עדיין ניתן להשתמש בו כדי לממש את add)

לייק 1

אני על זה :slight_smile:

לייק 1

תיקון לפלט של קריאה 2, הערכים בסדר הפוך, כלומר המצופה הוא:
[10, 8, 6]

2 לייקים

תודה, ערכתי :slight_smile:

הבודק האוטומטי נערך כך שיתאים להגדרות החדשות של התרגיל. תודה על תשומת הלב.

זה עדיין נותן לי שגיאה “TypeError: unsupported operand type(s) for +: ‘int’ and ‘tuple’” :-/

שימי לב ש־zipwith לא אמור לשלוח כפרמטר אחד דברים. add אמורה לקבל מספר בלתי מוגבל של פרמטרים, לא tuple

רק מוודא, הבודק האוטומטי פה מאה אחוז בסדר?
מריץ את הבדיקות ששמת - יוצא תקין.
פונקציית add אצלי לא מקבל טאפלים, אלא רשימה בלתי מוגבלת של מספרים.
אני עדיין מקבל:

TypeError: unsupported operand type(s) for +: ‘int’ and ‘tuple’

לא ממש יודע איפה להתחיל לטפל בזה.

לא, תיקנתי אותו לפני כשעה והוא לא 100% בסדר :slight_smile: אני שמח לפידבקים.
האם הפונקציה add שלך מקבלת כל מספר שהוא של פרמטרים?
אם כן; אשמח לקישור לתרגיל

כן, הדוגמא הזאת: print(zip_with(add, [1, 2, 3], [4, 5, 6], [1, 1, 1])) עובדת ושיניתי את הadd שלי ממצב שהוא קיבל טאפל למצב שהוא מקבל מספרים.
https://solve.pythonic.guru/view/90586

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

לדוגמה:

zip_with(add, [1, 2, 3, 2], [4, 5, 6, 2], [1, 1, 1, 2], [2, 2 ,2, 2])
מחזיר [8, 10, 12, 8]

zip_with(add, [1, 2, 3, 2], [4, 2, 6, 2], [1, 1, 1, 2], [2, 2 ,1, 2], [1, 1, 1, 1])
מחזיר [9, 8, 12, 9]

לא הצלחתי למצוא דוגמא שלא עובדת.

התחכמת שם עם function.__name__ והבודק האוטומטי לא אהב אותך על זה :slight_smile: