מחברת 6 - איקס עיגול

היי,

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

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

make_turn(player_char,board) כתבו את הפונקציה שלכם כאן

(כלומר רק 2)

היא צריכה לקבל 3 אני מניח… כן ?

תודה,
חגי

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

בדיוק מה ש @Felixmn אמר

היי @itamaraviv
אם אתה כבר פה, אשמח לנצל את המעמד :slight_smile:

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

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

תודה רבה

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

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

איתמר

לייק 1

היי,

אני כבר עשיתי אותה בצורה הזו:

def make_turn(player_char,board,user_sign):

כלומר מהתוכנית הראשית נשלח הסימן X או O. המשחק עובד לפי הנדרש…
אפשר בבקשה להקל בנושא הזה ולקבל את זה ככה ?
זה יהיה קצת סרט לשנות את זה וכבר סיימתי את כל החוברות…

תודה,
חגי

מה זה user_sign ומה זה player_char? זה לא אותו דבר?

היי,

user_sign - זה X או O

player_char - זה המיקום בלוח שבו הוא רוצה להציב את X או O. לדוגמא 1 0

@itamaraviv
@Yam

אשמח לדעת אם לאור השאלות שלי למעלה, יש אישור להגיש את התרגיל עם הפונקציה שמקבלת 3 ערכים…

תודה רבה.

לא. תקלוט את הערכים בתוך make_turn.

היי לצוות הקורס היקר, בזכותכם הצלחתי לכתוב סוף סוף את משחק איקס עיגול שכ"כ רציתי לעשות, תודה רבה רבה לכם!!!

לייק 1

היי,
האם שורת הקוד הבאה:
board[0][2] == board[1][2] == board[2][2] == “X” or “O”

תתממש רק כשכל התאים שווים זה לזה, או גם כשלצורך העניין board[1][2] == board[2][2] והם אינם שווים לboard[0][2]?
תודה

לא, התייחסנו אל זה בהרחבה בווידאו של אופרטורים לוגיים

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

לייק 1

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

לייק 1

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

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