סקרנות - השמה לתכונה

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

self.options = options

ולאחר מכן השמה עבור כל איבר ברשימה:

for option in options:
self.option = 0

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

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

למדנו בשבוע שעבר לעשות רשימות בצורה של השמה.
(נראה לי זה הכי הרבה שאני יכול לומר בלי לגלות לך את התשובה :slight_smile: )

מה אתה מצפה שיקרה כשאתה כותב:

self.options = options

אני מציעה לקחת נייר וממש לכתוב כל אחד מהפריטים

חוץ מזה, רק בשביל השלב הזה, כל מקום שכתוב self.options תכתוב במקום options(self) זה לא בדיוק מדויק, אבל נראה לי שיש לך איזה ציפייה ש options כפעולה תשנה את שמה, וזה לא הולך לקרות

עם self.options = options אין לי בעיה, הוא נותן לי רשימה כאשר self.options = הרשימה שהתקבלה כקלט.
הבעיה שלי עם הלולאת for וכאן הבלבול שלי, כיוון שממה שאני מבין אין דרך לעשות השמה לכל option.
לדוג:

options = [‘a’, ‘b’, ‘c’]
for option in options:
self.option = 0

ומזה לקבל:

self.a = 0
self.b = 0
self.c = 0

אני מבין עכשיו שזה לא אפשרי כיוון שהאותיות a, b, c הן סטרינגים ואני לא יכול לשייך self.string
ולכן אם עכשיו ההסבר שלי טיפה יותר ברור, אני מחפש דרך שעבור כל אופציה מתוך האופציות לבחירה אני אוכל להגדיר לה שהיא שווה ל0
כדי שבסוף אוכל לקבל את המצב:

self.a = 0
self.b = 0
self.c = 0

כדי שבהמשך אוכל להשתמש באתה הדרך לפונקציה המוחקת, לדוג’:

מחק את ‘b’
מה שנשאר:
self.options = [‘a’, ‘c’]
self.a = 0
self.c = 0

ושאם אנסה לבקש את self.b אקבל שגיאה כיוון שהוא נמחק

למה לא ללכת בכיוון של מה שרשמתי לך למעלה ?

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

אבל אם אתה רוצה לקשר בין משתנה (או שם) מרשימה אחת לערך כלשהוא, למדנו על מבנה נתונים שעושה בדיוק את זה :wink:

אני עדיין לא הבנתי לגמרי את הכוונה שלך אבל ממה שעולה לי לראש התכוונת למילון ובעצם להפוך אותם למשתנה אחד כך ש self.options יצא כך:

{‘a’ = 0, ‘b’ = 0, ‘c’ = 0}

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

אם אתה עדיין בקטע של לסבך אתה גם תמיד יכול לשמור רשימה נפרדת שמכילה int מייצג עבור כל אופציה, ובהתאמה לעדכן כל פעם שמבצעים הצבעה/הוספת אופיצה/הורדת אופציה :wink:

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