מחברת 4, מבריחים מהבריכה: השמה כנוסחה (וחשיבות תיאום ציפיות)

הקוד שכתבתי בתרגיל הראשון הוא:

l = 50
w = 25
d = (l**2 + w**2)**0.5
print(“The distance you have to swim is:”, d)

בחישוב מחדש:

l = l * 2
w = w + l
print(“Bad news, the NEW distance you have to swim is:”, d)

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

תודה רבה!

לא תשובה,
תהייה איתך ביחד,

מכיוון ש d = (l ** 2 + w ** 2)**0.5
רץ פעם אחת, אז הערך של d הוא מהריצה הקודמת,
אחת כך, אתה קורה ל d בלי שאמרת לו בעצם להשתנות, אז הערך של d נשאר כשהיה בהרצה הראשונה,
אם היית כותב את זה:
l = l * 2
w = w + l
d = (l ** 2 + w ** 2)**0.5
print(“Bad news, the NEW distance you have to swim is:”, d)

אז עכשיו היית מקבל ערך חדש ל d אחרת הוא משתמש רק ב ערך האחרון שנשמר לו

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

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

סדר הריצה תמיד קבוע:

  1. קוראים את השורה הראשונה
  2. קוראים את השורה השנייה
  3. קוראים את השורה השלישית

וכן הלאה.

כאשר אנחנו מבצעים השמה (x = y + 1, לדוגמה), אנחנו מבקשים מפייתון:

  1. להבין מה הם הערכים שנמצאים בצד ימין (לתרגם את y לערך שלו. נניח המספר 5, סתם כדוגמה).
  2. לחשב אותם כך שיהיה ערך “חד משמעי” בצד ימין של ההשמה (במקרה שלנו: 5 + 1 זה 6)
  3. להגדיר את השם בצד שמאל כך שיצביע על הערך שיצא מהחישוב בצד ימין. (במקרה שלנו: x הוא מעין קרן לייזר שמצביעה על הערך 6).

בשלב הזה המשתנה x בכלל לא יודע שהוא מורכב גם מ־y. הוא סתם קרן לייזר שמצביעה על 6.
אם נשנה שורה אחר כך את y, נניח עם הביטוי y = 100, המשתנה x לא יחושב מחדש:

  1. גם כי אנחנו לא קוראים שוב שורות “מלמעלה”
  2. וגם כי x בכלל לא יודע שהוא תוצר חיבור של y + 1 – בשלב הזה הוא סתם יצור שמצביע על הערך 6.