עזרה | בהבנת דרך פיתרון לתרגיל פייתון
-
@Yehuda-1 אה, סליחה, עכשיו הבנתי
@מנדי-הלפרין היי
אני סקרן
אפשר בבקשה הסבר?? -
@מנדי-הלפרין היי
אני סקרן
אפשר בבקשה הסבר?? -
לפני בערך חצי שנה העליתי את הבעיה שאני מעלה עכשיו ואז העליתי גם פיתרון
אני כרגע לא רוצה פשוט להסתכל בפיתרון הישן אלא להבין למה הקוד לא עובד לי
יש לי תרגיל כזה:
ואני מנסה לפתור אותו
בינתיים כתבתי את הקוד הזה:def fix_age(age): if age == 13 or age == 14 or age == 17 or age == 18 or age == 19: return 0 def filter_teens(a=13, b=13, c=13): fix_age(a) fix_age(b) fix_age(c) return a + b + c print(filter_teens(45, 13, 15))
אבל בקריאה לפונקציה filter_teens הפונקציה לא מקבלת מהפונקציה fix_age את המספר 0 בתור ערך אלא ממשיכה להשאיר את הגיל לפי איך שמי שקרא לפונקציה הגדיר ולא את הגיל המתוקן
הפונקציה fix_age כן עובדת ומשדרת נתונים לפונקציה הראשית כי כשאני מגדיר את הקוד הזה:def fix_age(age): if age == 13 or age == 14 or age == 17 or age == 18 or age == 19: print(0) def filter_teens(a=13, b=13, c=13): fix_age(a) fix_age(b) fix_age(c) return a + b + c print(filter_teens(45, 13, 15))
(שימו לב שיניתי בשורה 3 מההגדרה return להגדרה print ואז כל הפונקציה עובדת מעולה ומחזירה הדפסות של אפסים
אז למה היא לא מצליחה להחזיר ערך של אפס אלא רק הדפסה של 0?
אשמח לתשובתכם (לא איך לפתור את התרגיל, אלא מה הבעיה בקוד)
@אלישי @MGM-IVR (הפעם אתה וודאי אמור לדעת..) @מתכנת-חובב ו @אהרן-שובקס אתם עזרתם לי פעם שעברה קבוצת @תכנות תנו בראש! -
@mefateach מקורס פייתון של קמפוס il
-
@mefateach מקורס פייתון של קמפוס il
@THMHE פתרתי טוב?:
def filter_teens(a = 13, b = 13, c = 13): a = fix_age(a) b = fix_age(b) c = fix_age(c) print(a+b+c) def fix_age(age): if age >= 13 and age <= 19: if age == 15 or age == 16: return age return 0 return age filter_teens() filter_teens(1, 2, 3) filter_teens(2, 13, 1)
-
@THMHE פתרתי טוב?:
def filter_teens(a = 13, b = 13, c = 13): a = fix_age(a) b = fix_age(b) c = fix_age(c) print(a+b+c) def fix_age(age): if age >= 13 and age <= 19: if age == 15 or age == 16: return age return 0 return age filter_teens() filter_teens(1, 2, 3) filter_teens(2, 13, 1)
@mefateach כן
אבל בשורה 5 צריך להיות במקום הדפסהreturn a + b + c
ובשורה 14 לא ממש צריך לקרוא לפונקציה ריקה, (אלא אולי בתור בדיקה אם היא תקינה)
אבל כן, הפיתרון מעולה! -
@mefateach כן
אבל בשורה 5 צריך להיות במקום הדפסהreturn a + b + c
ובשורה 14 לא ממש צריך לקרוא לפונקציה ריקה, (אלא אולי בתור בדיקה אם היא תקינה)
אבל כן, הפיתרון מעולה! -
למה ארוך אם אפשר קצר
def fix_age(age): if age in range(13, 19) and age not in (15, 16): age = 0 return age def filter_teens(a = 13, b =13, c =13): return fix_age(a) + fix_age(b) + fix_age(c)
-
או ככה (אם כי יש שיגידו שזה פחות אינטואטיבי)
def fix_age(age): return 0 if 13 <= age <= 18 and age not in (15, 16) else age def filter_teens(a=13, b=13, c=13): return fix_age(a) + fix_age(b) + fix_age(c)