מתודה נחמדה בפייתון נקראת divmod עושה פעולה מתמטית שיכולה לעתים לקצר תהליכים ולהיות מאוד שימושית. כידוע אנו יכולים לקבל מנה של שני מספרים בתצורות שונות בפייתון, במקרה הזה אנו מקבלים את המנה (תוצאת החילוק) כ- tuple שחלקו השמאלי מייצג את המספר השלם וחלקו הימני את השארית. נדגים -
print(divmod(5,3))
נקבל - (1,2) כלומר, 3 מוכל ב- 5 פעם אחת בלבד עם שארית של 2 התוצאה כאמור בטופל שניתן להתייחס בנפרד לשני חלקיו.
אפשר גם להזין ערך כ- float למשל 8.0 -
print(divmod(8.0 ,3))
התוצאה המתקבלת - (2.0, 2.0) כלומר 3 מוכל פעמיים ב- 8 ונותרת שארית של 2 (פייתון מחזיר את התוצאה כטופל המכיל מספרים מסוג- float)
מה אפשר לעשות עם זה? - למשל, אפשר לכתוב תוכנית שמחזירה את סכום הספרות של מספר כלשהו x -
x = 999 #זה המספר שבחרנו sum_dig = 0 #כאן נסכום את היחידות while x!=0: dm = divmod(x, 10) #חלוקה ב-10 מבודדת את היחידות מיתר המספר dig = dm[1] #בסיבוב הראשון שווה 9 x = dm[0] #בסיבוב הראשון שווה 99 sum_dig = sum_dig + dig #צוברים את סכומי האחדות print(sum_dig)
התוצאה כמובן 27=9+9+9
אפשר לכתוב תוכנית שהופכת לנו את סדר הספרות במספר כלשהו -
x = 456 #המספר שבחרנו rev_num = 0 #כאן יהיה המספר ההפוך while x!=0: dm = divmod(x, 10) dig = dm[1] x = dm[0] rev_num = rev_num * 10 + dig #תהליך של צירוף היחידות ובסיבוב הבא הכפלה ב-10 print(rev_num)
התוצאה בדוגמא הזאת - 654 סדר ספרות הפוך למספר המקורי שלנו 456.
עכשיו נראה שימוש בפעולה מתמטית אחרת log שנייבא מתוך הספריה math
פעולת log מבחינה מתמטית משמשת, בגדול, לאיתור מעריך החזקה כאשר בסיס החזקה נתון ותוצאת פעולת החזקה נתונה.
2**3=8
פעולת log יכולה למצוא את מעריך החזקה 3 כאשר נתונים לנו בסיס החזקה 2 והתוצאה 8 -
from math import log print(log(8,2))
התוצאה 3.0 - הערך הוא מסוג float
בספריית math אפשר למצוא לוגים עם בסיסים מן המוכן למשל בסיס 10 בסיס 2 כך שלא צריך להזין את הבסיס בנוסחה אלא רק את המספר ממנו נחלץ את מעריך החזקה.
אחד השימושים האפשריים הוא מציאת אורך של מספר (כמה ספרות יש במספר) X כלשהו.
התוצאה היא 5 כי במספר יש חמש ספרות. הסבר - כאשר אנו עושים פעולה של לוג בבסיס של 10 נקבל מספר שלם המשקף את מספר הספרות אחרי המספר הראשון משמאל ועוד שבר (מספרים אחרי הנקודה העשרונית) שילך ויגדל ככל שאנו מתקרבים להוספת ספרה לאורך המספר. למשל - log בבסיס 10 של 100 = 2, log בבסיס 10 של 500 =2.698 ואילו לוג בבסיס 10 של 1000 שווה ל- 3.
היות שאנו מעוניינים רק בחלק התוצאה שהיא המספרים השלמים - אנו מבצעים פעולה של ( )int שמנקה את הספרות מימין לנקודה. כמו כן, פעולת לוג נותנת לנו את הספרות אחרי המספר השמאלי ואנו רוצים את האורך של כל המספר לכן אנו מוסיפים 1. הרי לנו שימוש בפעולה מתמטית לצורך ביצוע משימה בפייתון שאינה קשורה דווקא במתמטיקה.
Comments