הגדרה משתנים מראש?

בעיה שנתקלתי בה ואשמח להסבר-
לא עבד עד שהגדרתי את המערך וגודלו.

עד כמה שהבנתי לא ממש צריך להגדיר מערך . ולאחר ניסיונות רבים הבנתי שזו הבעיה.
כי אחרת ההודעה שכותב:
NameError: name ‘list_sub_coloumns’ is not defined

list_sub_coloumns=[""]*length - פתר את הבעיה.

while i<length-
[tmp=longlist[i+1 [list_sub_coloumns[i]=tmp[0:4

האם אכן זו הבעיה?
ואם כן, מתי צריך להגדיר משתנים וגודלם ומתי לא?
תודה!

את כן צריכה “להגדיר” משתנה במובן של לתת לו ערך התחלתי כדי לעשות עליו פעולות.

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

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

נכון מאוד שכל משתנה את מוסיפה לקוד ברגע שאת צריכה אותו.
אבל שאלי את עצמך, מתי אי פעם עשית למשל את הדבר הבא: 5 + num
ולפני הפקודה הזו לא הזכרת את num בכלל? או משהו בתכנית שאמר מה מכיל num?

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

list = []

רשימה את מגדירה למשל כרשימה ריקה במידה ואין לך ערכים ראשוניים להכניס לה

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