מחברת 3 - תרגול לדוגמא - מרתון

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

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

הפתרון שלי:
def avarage_speed(time):
return 5 / time

time = float(input("Please input how many hours it took to run 5 KM "))
speed = avarage_speed(time)
print(“Danny’s speed is " + str(speed) + " KM per hour.”)

def run_marathon(speed):
return 3 * speed >= 42.195
print("Can danny run a marathon under 3 hours? " + str(run_marathon(speed)))

הפתרון המוצג:
def calculate_km_per_hour_for_5_km(hours_to_finish):
km_per_hour = 5 / hours_to_finish
return km_per_hour

def check_if_run_marathon_in_three_hours(km_per_hour):
hours_to_finish_marathon = 42.195 / km_per_hour
return hours_to_finish_marathon <= 3

time = float(input("How many hours did it take to finish a 5km run? "))
km_per_hour = calculate_km_per_hour_for_5_km(time)
can_run_marathon_in_three_hours = check_if_run_marathon_in_three_hours(km_per_hour)

if can_run_marathon_in_three_hours:
print(“Yes you can!”)
else:
print(“No you can’t!”)

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

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

בהצלחה בהמשך!

2 לייקים


אשמח להסבר מה השגיאה אומרת…ניסיתי לחפש לא מצאתי :frowning:

יודעת שבהמשך לא נכון…

הפירוש של Indentation הוא הזחה :slight_smile:

הבנתי… תודה רבה :slight_smile:

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

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

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