הקוד נתקע במנה מושלמת לחלוקה

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

קרה לי משהו מאוד דומה, ובסופו של דבר זה היה בגלל שני דברים - הראשון, והחשוב יותר, היה התקדמות הלולאה ומה שבתוכה (אצלי היתה לולאת while מסוימת, שבתנאי התרגיל ‘מנה מושלמת’ המשתנה שקידם ובסופו של דבר עצר אותה, כבר לא היה קיים. השני, היה המיקום של הyield, וזה גם היה באותו הקשר של הראשון

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

אולי למישהו אחר יש רעיונות יותר טובים. מה שאני עושה במקרים כאלו זה לעקוב אחרי מה שאני חושבת שיקרה למשתנה שאני מכניסה לפונקציה שורה שורה, מה ישתנה, מה יוחזר ומתי יעצור. (כן, אני מבינה שזה כללי בטירוף, אבל עד עכשיו זה עבד לי :wink:). בערך בכל מקום שאפשר אני גם שמה print לכל מה שרלוונטי, כולל הסבר - this is … , var

אני מריץ את הפונקציה שכוללת בתוכה את הגנרטור של המספרים השלמים, והוספתי שורת הדפסה מיד לאחר מכן (בשורה שאחרי פקודת ההדפסה אני מבצע השמה של התוצאה לתוך רשימה כדי שאפשר יהיה לעבוד איתה). אז הקוד מדפיס לי את הכתובת, ואז שוב נתקע בלולאה אינסופית. ניסיתי גם לשחק עם היילד בגנרטור, אבל שום דבר לא עובד, הקוד ממשיך להתקע בלולאה. אולי יש לך תובנות @Yam?

עדיף שלא לתייג אותי בבקשה. אני רואה את כל התגובות ממילא :slight_smile:
איך נראית הפונקציה החיצונית? אתה בטוח שיצרת generator iterator ועליו אתה רץ?

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

כן, שלח לי צילום בה"פ