עזרה | בהבנת דרך פיתרון לתרגיל פייתון
-
לפני בערך חצי שנה העליתי את הבעיה שאני מעלה עכשיו ואז העליתי גם פיתרון
אני כרגע לא רוצה פשוט להסתכל בפיתרון הישן אלא להבין למה הקוד לא עובד לי
יש לי תרגיל כזה:
ואני מנסה לפתור אותו
בינתיים כתבתי את הקוד הזה: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 (הפעם אתה וודאי אמור לדעת..) @מתכנת-חובב ו @אהרן-שובקס אתם עזרתם לי פעם שעברה קבוצת @תכנות תנו בראש!@THMHE דבר ראשון בפונקציה fix_age לא כתבת מה קורה אם התנאים לא מתקיימים, אתה צריך להגדיר
else: return age
דבר שני בפונקציית filter_teens אתה לא שומר את הערכים של fix_age בשום מקום, כשאתה כותב fix_age(a) זה לא משנה את a, זה פשוט מביא לך את התוצאה, שאותה אתה אמור לשמור במשתנה.
א"כ אתה צריך לכתוב את זה כך:a = fix_age(a)
ואז זה מעדכן ב a את התוצאה של הפונקציה.
-
@THMHE כתב בעזרה | בהבנת דרך פיתרון לתרגיל פייתון:
@shloimy כלומר בגלל שורות 4 ו5?
המחשב לא יודע לבד שאם לא החזרתי כלום זה נשאר על מה שהיה קודם?לא בגלל 4 5.
שורות 9 10 11.שורות 4 5 הוספתי למקרה שהפונ' לא משנה כלום המשתנה היה הופך ל - NoneType.
@shloimy כתב בעזרה | בהבנת דרך פיתרון לתרגיל פייתון:
@THMHE כתב בעזרה | בהבנת דרך פיתרון לתרגיל פייתון:
@shloimy כלומר בגלל שורות 4 ו5?
המחשב לא יודע לבד שאם לא החזרתי כלום זה נשאר על מה שהיה קודם?לא בגלל 4 5.
שורות 9 10 11.שורות 4 5 הוספתי למקרה שהפונ' לא משנה כלום המשתנה היה הופך ל - NoneType.
ניסיתי כרגע להריץ את הפונקציה בלי שורות 4 ו5 ונכשלתי
הם כן דרושות
עכשיו אני נזכר שבאחד הנסיונות שלי להבין למה הקוד לא עובד הגדרתי משתנים חדשים ועדיין זה לא עבד..
כי 4 ו5 הם כן קריטיות -
@THMHE דבר ראשון בפונקציה fix_age לא כתבת מה קורה אם התנאים לא מתקיימים, אתה צריך להגדיר
else: return age
דבר שני בפונקציית filter_teens אתה לא שומר את הערכים של fix_age בשום מקום, כשאתה כותב fix_age(a) זה לא משנה את a, זה פשוט מביא לך את התוצאה, שאותה אתה אמור לשמור במשתנה.
א"כ אתה צריך לכתוב את זה כך:a = fix_age(a)
ואז זה מעדכן ב a את התוצאה של הפונקציה.
@דני-ו כתב בעזרה | בהבנת דרך פיתרון לתרגיל פייתון:
@THMHE דבר ראשון בפונקציה fix_age לא כתבת מה קורה אם התנאים לא מתקיימים, אתה צריך להגדיר
else: return age
דבר שני בפונקציית filter_teens אתה לא שומר את הערכים של fix_age בשום מקום, כשאתה כותב fix_age(a) זה לא משנה את a, זה פשוט מביא לך את התוצאה, שאותה אתה אמור לשמור במשתנה.
א"כ אתה צריך לכתוב את זה כך:a = fix_age(a)
ואז זה מעדכן ב a את התוצאה של הפונקציה.
מצוין!
תודה על העזרה
זה בעצם סיכום תמציתי של מה שכתבו חבריך הטובים @shloimy ו @תוכניתן .. -
@shloimy כתב בעזרה | בהבנת דרך פיתרון לתרגיל פייתון:
@THMHE כתב בעזרה | בהבנת דרך פיתרון לתרגיל פייתון:
@shloimy כלומר בגלל שורות 4 ו5?
המחשב לא יודע לבד שאם לא החזרתי כלום זה נשאר על מה שהיה קודם?לא בגלל 4 5.
שורות 9 10 11.שורות 4 5 הוספתי למקרה שהפונ' לא משנה כלום המשתנה היה הופך ל - NoneType.
ניסיתי כרגע להריץ את הפונקציה בלי שורות 4 ו5 ונכשלתי
הם כן דרושות
עכשיו אני נזכר שבאחד הנסיונות שלי להבין למה הקוד לא עובד הגדרתי משתנים חדשים ועדיין זה לא עבד..
כי 4 ו5 הם כן קריטיות@THMHE כתב בעזרה | בהבנת דרך פיתרון לתרגיל פייתון:
ניסיתי כרגע להריץ את הפונקציה בלי שורות 4 ו5 ונכשלתי
כתבתי לך למה.
@shloimy כתב בעזרה | בהבנת דרך פיתרון לתרגיל פייתון:
שורות 4 5 הוספתי למקרה שהפונ' לא משנה כלום המשתנה היה הופך ל - NoneType.
וכאשר אתה מנסה להשתמש באופרטור + למשתנה NoneType אתה מקבל שגיאה.
-
לפני בערך חצי שנה העליתי את הבעיה שאני מעלה עכשיו ואז העליתי גם פיתרון
אני כרגע לא רוצה פשוט להסתכל בפיתרון הישן אלא להבין למה הקוד לא עובד לי
יש לי תרגיל כזה:
ואני מנסה לפתור אותו
בינתיים כתבתי את הקוד הזה: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 (הפעם אתה וודאי אמור לדעת..) @מתכנת-חובב ו @אהרן-שובקס אתם עזרתם לי פעם שעברה קבוצת @תכנות תנו בראש! -
@THMHE אני ממליץ על הספר https://data.cyber.org.il/python/python_book.pdf. לדוגמה הפרק העוסק בעניין הscope והעותק ש @תוכניתן הזכיר:
CleanShot 2024-01-31 at 19.37.16@2x.pdf -
@THMHE אני ממליץ על הספר https://data.cyber.org.il/python/python_book.pdf. לדוגמה הפרק העוסק בעניין הscope והעותק ש @תוכניתן הזכיר:
CleanShot 2024-01-31 at 19.37.16@2x.pdf@צדיק-תמים ממה שאני רואה במקורות באינטרנט זה עובד באופן מעניין, אם לא מבבצעת השמה של ערך בפרמטר הוא לא מועתק ורק בהשמה נוצר משתנה חדש בעצם, בשונה משפות תכנות אחרות (אין נפק"מ אבל זו התנהגות שונה בקריאה לפונקציה ואולי גם מהירה יותר וחסכנית יותר).
-
@צדיק-תמים ממה שאני רואה במקורות באינטרנט זה עובד באופן מעניין, אם לא מבבצעת השמה של ערך בפרמטר הוא לא מועתק ורק בהשמה נוצר משתנה חדש בעצם, בשונה משפות תכנות אחרות (אין נפק"מ אבל זו התנהגות שונה בקריאה לפונקציה ואולי גם מהירה יותר וחסכנית יותר).
-
@THMHE אני ממליץ על הספר https://data.cyber.org.il/python/python_book.pdf. לדוגמה הפרק העוסק בעניין הscope והעותק ש @תוכניתן הזכיר:
CleanShot 2024-01-31 at 19.37.16@2x.pdf@צדיק-תמים כתב בעזרה | בהבנת דרך פיתרון לתרגיל פייתון:
CleanShot 2024-01-31 at 19.37.16@2x.pdf
תודה על הספר!
שגיאה 403.. (אני בנטפרי) -
@צדיק-תמים כתב בעזרה | בהבנת דרך פיתרון לתרגיל פייתון:
CleanShot 2024-01-31 at 19.37.16@2x.pdf
תודה על הספר!
שגיאה 403.. (אני בנטפרי)@THMHE כתב בעזרה | בהבנת דרך פיתרון לתרגיל פייתון:
שגיאה 403.. (אני בנטפרי)
תשבית בהגדרות סינון את אזהרת שיבוש קבצים
אבל מה שצירפתי פה זה רק עמודים ספציפיים, זה המלא: https://data.cyber.org.il/python/python_book.pdf
-
לפני בערך חצי שנה העליתי את הבעיה שאני מעלה עכשיו ואז העליתי גם פיתרון
אני כרגע לא רוצה פשוט להסתכל בפיתרון הישן אלא להבין למה הקוד לא עובד לי
יש לי תרגיל כזה:
ואני מנסה לפתור אותו
בינתיים כתבתי את הקוד הזה: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 (הפעם אתה וודאי אמור לדעת..) @מתכנת-חובב ו @אהרן-שובקס אתם עזרתם לי פעם שעברה קבוצת @תכנות תנו בראש!@THMHE למה קיבלתי התראה כשלא הזכרת אותי בפוסט?
-
@THMHE למה קיבלתי התראה כשלא הזכרת אותי בפוסט?
-
-
@Yehuda-1 אה, סליחה, עכשיו הבנתי
-
@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)