הערה שאני לא מבין בבודק האוטומטי

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

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

לייק 1

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

לייק 1

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

מאיפה מגיע states שנמצא מחוץ לפונקציה (ובקריאה לפונקציה)? יש בתוכו משהו?
באופן כללי, עדיף להימנע ממשתנים בתוך פונקציות עם אותם שמות כמו משתנים בתוכנית הראשית :slight_smile:

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

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

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

לייק 1

מה הקישור לפוסט הזה אני אנסה לעזור

צריך קצת לדפדף שם כדי לחזור לזה:

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

לגבי השגיאה של הבודק, את מחזירה ערך אחד או משהו אחר?

אחד

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

לייק 1

עברו פה כבר הרבה מים מאז התגובה חח

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

לדוגמא אם הפונקציה היא:

def find_special_state(state):
    print(state)

הבודק האוטומטי מנסה לקרוא ככה:

find_special_state()

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

לייק 1

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

זה לא אומר שהקוד לא נכון (:

מה שמעניין שלפי ניסוח השאלה

קראו את שמות כל המדינות בארצות־הברית מהקובץ resources/states.txt.
כתבו פונקציה בשם find_special_state.

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

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

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

אפשר לתת לפונקציה שם אחר והבודק האוטומטי לא יעבור עליה, או להשתמש ב־default parameters

לייק 1