מפענח הצפנים - צריכה הכוונה

היי עומר, האם ראית את הסרטון שלי על פונקציות?
חשוב להבין היט מה אומר “return” ומתי משתמשים בו, נניח בהקשרי counting_function

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

כן, יש כמה דברים שעוד מבלבלים אותי, למשל האנלוגיה לקופסת קסמים, כי הרי אנחנו כן יודעים בדיוק מה קורה כאן, מה שהגדרנו בפונקציה, זה יקרה באותו אופן שזה היה קורה מחוץ לפונקציה פשוט עכשיו שמו בתוך השם של הפונקציה, כמו השמה רק לפעולות מרובות במקום משתנה אחד, ככה זה נתפס לי, אולי זה מה שמעקב אותי, לא יודע :man_shrugging:, ובתרגול לא הבנתי מה זה split ומה השימוש בסוגריים [האלה], השתמשתי בהם בכל מקרה אבל אני לא יודע מה ההבדל במשמעות אם יש (למדנו את זה? לא זכור לי).
בקשר לתרגיל, ניסיתי כן להשתמש בreturn וזה עשה לי בעיה אחרת כשהcounting נשאר 0 לא משנה מה המסספרים שכתבתי.
//צנזור פתרון//
כשניסיתי גם return וגם השמה זה פשוט עשה לי error שוב
וסורי אם אני יוצא לחוץ פה, לא רוצה להיתקע מאחור :sweat_smile: :sweat:

דיברתי על הסרטון שלי ולא על התרגול, לדעתי מסביר על עניין הסוגריים די סבבה.
עזוב רגע את המילים “קופסת קסם”, תתמקד בעקרונות שקשורים לכתיבה נכונה של פונקציות:

  1. פונקציה מבטאת סדרת פעולות מוגדרת שאמורה לבצע משימה מסוימת.
  2. פונקציה אמורה לעבוד “Out of the box” גם אם אתה גורר אותה לקוד אחר לחלוטין.

אילו מהעקרונות הפונקציה counting function שלך מפרה?
רמז: איזה משתנה שאתה מתייחס אליו שם לא מוגדר בתוך הפונקציה?

אני נוטה לומר שהמשתנה של correct_numbers לא מוגדר בתוך הפונקציה אז הוא הבעיה?
אך זה מעלה לי בעיה עקרונית- אז פונקציות לא זוכרות השמות קודמות בכלל אם הן לא מתרחשות בתוך הפונקציה? זה הרי יכול להאריך לי את הפונקציה מאוד והרעיון של הפונקציה הוא לקצר, כתבתם מה שלא חייב להיות בתוך הפונקציה שלא יהיה בפונקציה כמה שניתן. ובעיה יישומית- טוב ניסיתי כן לעשות את אותה השמה בתוך הפונקציה שהפונקציה תדע את ההגדרה של correct_numbers אבל הבעיה לא נפתרה, זה עדיין לא מוסיף לcount. וניסיתי ליתר ביטחון גם את המשתנה count לשים בפנים, אותו דבר. כל המידע שהקופסה צריכה נמצא בפנים לא? נראה לי הפונקציה מוגדרת דיי ברור, איפה אני מפספס פה?

  1. תתעלם מהניסיון ליצור פונקציות קצרות כרגע. המטרה הרשמית היא לא “לקצר”, אלא “שהפונקציה תדאג למינימום ההכרחי”. כשתפתח תחושה טובה יותר בתור מתכנת עם ניסיון מה זה המינימום ההכרחי יהיה לך יותר קל להתייחס לזה, עד אז בוא נגרום לדברים פשוט לעבוד :slight_smile: בכ"מ, העקרון של “פונקציה חייבת להיות יחידה עצמאית” גובר על “מה שלא צריך להיות בפונקציה” וגו’
  2. צלם לי את הפונקציה החדשה שיצרת עם count בפנים (כן, זה היה הדבר החשוב)

(ואם אפשר לבקש – מספר את השאלות שלך כמו שמספרתי את התשובות שלי. זה יעזור לי להתייחס לכולן ויתן לי אפשרות להבין אותן מהר יותר)

סורי :sweat_smile:

הפונקציה כ"כ אחלה שמחקתי לך את התמונה כדי שאחרים לא ישתמשו בה בתור תשובה.
עכשיו נשאר רק לחשוב על מה קורה כשאתה קורא לה ואיפה התשובה מאוחסנת.
רמז: משתנים שהגדרת בתוך הפונקציה לא תקפים למחוץ לפונקציה.

אותו הדבר ממשיך לקרות לי גם כאשר אני מגדיר מחדש את אותם משתנים בפונקציה הבאה try_to_open_the_safe. ממש ניסיתי לחשוב על הכל בצעדים קטנים לראות איפה אני טועה, כנראה שפשוט כשאני מעלה את count אז בלי קשר לפונקציה פייתון זוכר אותו כ-0, אז ניסיתי לעשות השמה בתוך הפונקציה של פונקציית הספירה לcount, וזה איכשהו עבד, אני לא מקבל יותר 0, אבל כעת אני מקבל רק 1 :sweat_smile: גם אם יש 3 ספרות נכונות או 4 לא בסדר הנכון אני מקבל 1, ואם יש 0 אני מקבל שגיאה, מזה אני ממש מבולבל. אני מניח שגם באופציית הספירה כל פעם שיש ספרה נכונה זה מוסיף 1 לcount אבל זה לא זוכר את הcount הקודם אז זה כל פעם 1, אבל אני לא יכול לעשות השמה לתוצאה שיצאה לי אחר הreturn הקודם, זה עושה שגיאה, אז איך אני גורם לפונקציה לזכור? מפרק ל4 פונקציות שונות לכל מספר?

אחי יש לי 50 הודעות נוספות וממש קשה לי להתמצא בשאלה שלך :slight_smile:
אם אפשר קצת מיקוד/מספור באיפה לדעתך הבעיה שלך זה יקל עלי מאוד

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

מזכיר שכל פעם שמתבצע return בפונקציה, היא עוצרת.
בנוסף, בקריאה לפונקיצה הזאת אתה לא עושה כלום עם המידע שחוזר, נסה לשים משתנה רלוונטי שישמור את הנתונים שחוזרים מהפונקציה.

לייק 1

הצלחתי, תודה לכל מי שעזר :pray: :smile:

לייק 1

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

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

הצעות?