שאלה על שיעור 4- אורך חדש של הבריכה

כתבתי קוד לחישוב האורך החדש של הבריכה. וגם את האלכסון החדש שלה. כתבתי את הקוד הבא:

pool_lenth=50
pool_wide=25
pool_diagonal=(((pool_lenth**2)+(pool_wide**2))**0.5)
print (pool_diagonal)
pool_lenth=pool_lenth*2
print (pool_lenth)
print (pool_diagonal)

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

רק לאחר שכתבתי שתי שורות נוספות:

new_pool_diagonal=(((pool_lenth**2)+(pool_wide**2))**0.5)
print (new_pool_diagonal)

הצלחתי לקבל את האורך החדש, אף שלא השתמשתי במשתנה חדש לאורך, אלא באותו אחד, שאכן שיניתי.|

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

מדוע?

תודה!

2 לייקים

זו שאלה נהדרת הדס ואנסה להסביר.

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

  1. שורה אחר שורה
  2. מלמעלה למטה
  3. בלי להסתכל אחורה

כשפייתון רואה את שורה 3 שכתבת, היא מחפשת את pool_length ואת pool_wide ומחליפה אותם ב־50 וב־25 בהתאמה כדי לקבל את התוצאה הנכונה. בסוף הפעולה היא מזינה את התוצאה לתוך pool_diagonal.
בשורה 5, פייתון לוקחת את pool_length (עדיין 50), מכפילה אותו ב־2 ואז מעדכנת אותו (עכשיו הוא 100), אבל פייתון לא חוזרת לשורה 3 כדי לעדכן את הערך הזה. מבחינתה מה שהיה היה,
יותר מזה, ‏היא אפילו לא באמת זוכרת איך היא חישבה את pool_diagonal. היא רק יודעת את הערך שלו שהיא חישבה בשורה 3.

3 לייקים
  1. אז אם אני מבינה נכון, פייתון לא זוכרת את הדרך שבה הגדרנו ערך למשתנה שלנו (פונקציה שהזנו עבור חישוב האלכסון), היא רק זוכרת את הערך עצמו שהתקבל כתוצאה מהחישוב? בגלל זה כל עדכון חדש של הערכים מחייב כתיבה מחדש של המשתנים, אם רוצים להתחשב בערכים החדשים וצריך גם לתת להם שם חדש?
    ניסיתי לחזור על הנוסחה עם אותו שם של משתנה האלכסון וזה נתן לי את אותו האלכסון מקודם עד שלא שיניתי את pool_diagonal ל newpool_diagonal.
  2. דבר טכני נוסף - אם אני עושה בטעות CTRL+ENTER פעמיים או יותר, זה מכפיל לי את התוצאה שקיבלתי מקודם באותו תא? איך אפשר לחזור אחורה במקום להריץ מחדש את התא הקודם?
לייק 1

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

תודה רבה ים על התשובה.

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

pool_lenth=50
pool_wide=25
pool_slant=(((pool_lenth**2)+(pool_wide**2))**0.5)
print (pool_slant)
poll_lenth=pool_lenth*2
print (poll_lenth)
pool_slant=(((pool_lenth**2)+(pool_wide**2))**0.5)
print (pool_slant)

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

מדוע? תודה רבה על הקורס והעזרה

לייק 1

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

תודה
@Yam

מצטרף לשאלה 2 של oksana… למה כל CTRL+ENTER גורם לעוד הכפלה של התוצאה?

היי שי
אפשר להוסיף שורת קוד משלך ע"י לחיצה על a/b תלוי איפה אתה רוצה אותה
a=above b=bellow

אשמח לעזרה.
במחברת 4 באורך החדש של הבריכה כתוב:
“כחלק מהשיפוצים גם הוסיפו לבריכה מסלולים, כך שהרוחב שלה גדל בגודל השווה לאורך החדש של הבריכה”.
האורך החדש זה 100, האם צריך להוסיף לרוחב 100 ואז זה נהיה 125, או להוסיף 75 ואז זה נהיה 100.
(אם זה נהיה 125, הרוחב נהיה יותר גדול מהאורך, זה קצת מבלבל).
תודה מראש.

לייק 1

שלום לכולם מצטרף לשאלה

לייק 1

אני השתמשתי באותם שמות של משתנים אבל זה עבד לי (וגם לא בטוחה שזה נכון) רק כשהזכרתי בכל פעם קודם את ההשמה הקודמת (למשל: l = 50) ושורה אח"כ את ההשמה החדשה (למשל: l = 50*2), אפילו שבהנחיה במחברת נאמר:

“ניתן להתייחס גם למשתנים שהוגדרו בתאים אחרים במחברת.
לדוגמה, אם הרצנו תא שבו הוגדר משתנה בשם w, מאותו רגע כל תא אחר במחברת יוכל להשתמש במשתנה w.
ערכו של משתנה מסויים בזמן נתון הוא הערך שהוגדר עבורו בתא האחרון שהורץ במחברת.”

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

אשמח לחידוד.

@nogabod, הבנת נכון, הכל טוב :slight_smile:

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

היי @edgutandet, צריך להוסיף 100 שזה האורך החדש של הבריכה וזה נהיה 125.

תודה רבה!! :grinning:

לייק 1

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