תרגיל מחשמל - בעיה בקונקטור

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

קשה לפענח את הבעיה מבלוק גדול של טקסט :slight_smile:
בוא נפרק לאט לאט. הבעיה היא בתרגיל הראשון או בבונוס?

לייק 1

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

תנסה בreturn לכתוב self.gate(gate1,gate2)

כאן לא רואים את המימוש שלך של הפונקציה output שבמחלקת gate.

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

כשאני עושה את זה אז כל התשובות יוצאות לא נכונות, לא רק השלוש הראשונות.

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

מוזר. זה בדיוק מה שאתה עושה כדי לקבל את התוצאות מהinput_gates .

זה מה שאני לא מצליח להבין. התוצאות משערי האינפוט יוצאות נכונות תמיד. ברגע שמכניסים אותן לשער הסופי, שגם הוא מסוג ORGATE, ממש כמו אחד משערי האינפוט, התוצאה מתהפכת. אני תוהה אם מדובר במשהו שקשור להורשה. בניתי את LOGICGATE כמחלקה מופשטת, וממנה הורשתי ל BINARYGATE ו UNARIGATE, שמהן הורשתי לכל המחלקות הרגילות (הנחתי מתיאור התרגיל שזה מה שאמורים לעשות). אבל כמו שאמרתי, העובדה ששערי האינפוט עובדים כמו שצריך אבל משום שער האאוטפוט לא ממש מבלבלת אותי. אני פשוט לא מצליח להבין מה קורה כאן, וכבר ישבתי על זה שלוש שעות עם כל מיני נסיונות לשינויים קטנים (למשל השינוי ל self.gate.output(self, gate1, gate2 כדי לראות מה זה יחזיר), ושום דבר לא עובד. כמו שהראיתי קודם גם עשיתי בדיקות נפרדות לכל המצבים של כל השערים שמופעלים בקונקטור, וכולם עובדים כמו שצריך מחוץ לפונקציה.

מה קורה כשאתה מנסה להדפיס את self.gate?
נראה לפי זה שמשהו שם השתבש.

אני מקבל <class ‘main.OrGate’>

לייק 1

נשמע שאתה מקבל ממש את המחלקה במקום לקבל את המופע

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

במקרה של הכלה: יש מחלקה A שהפריט שלה מסוג B
למה כשאני עושה על הפריט isinstance כל מחלקה B. יוצא שלילי???.

ווידאת שה’פריט’ הוא מופע של המחלקה ולא שם של מחלקה? :blush:
לדוגמא:

class A:
    pass

isinstance(A(), A)  # True
isinstance(A, A)  # False

הבדל קטן אך מהותי :pray:

לייק 1

תודה! בדיוק קמתי ואחרי כמה שעות שינה הבנתי את זה…
מסקנה: לא לנסות תרגיל כשעייפים :slight_smile:

2 לייקים