שימוש במספרים בפייתון



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



בפייתון אנחנו מבצעים הבדלה בין שני סוגים עיקריים של מספרים – מספרים שלמים (integers או int כמו שהם נקראים בפייתון) ומספרים עשרוניים (floats). חשוב להבדיל בין מספר לבין מחרוזת המורכבת מספרות. דוגמה קטנה להמחשה:


ה-number הוא משתנה המכיל מספר. אנחנו יודעים את זה מעצם העובדה שהוא מקבל מספר ללא גרשיים או מרכאות, וכשאנו בודקים את הטיפוס שלו בעזרת הפונקציה type אנחנו מקבלים את התשובה int שזה קיצור של integer – מספר שלם. כאשר המשתנה מוכפל ב-3 אנחנו מקבלים את התוצאה שהיינו מצפים לה – 300.

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


טוב, אז אולי בעצם לא כל כך דומה. הספרות הן אותן ספרות אבל הגרשיים שעוטפים את הערך הופכים את המשתנה למשתנה מחרוזתי ואנחנו מקבלים אישור לכך באמצעות פונקציית type שמחזירה הפעם את הערך str – כלומר מחרוזת (str הוא קיצור של string). פירוש הדבר הוא שפייתון אינה מתייחסת לספרות כאל מספר אמיתי אלא כאל אוסף של תווים, 1-0-0, ללא כל משמעות מתמטית. כאשר נבצע הכפלה על הערך הזה נקבל את רצף התווים 3 פעמים. הדבר שקול לשרשור המחרוזת לעצמה 3 פעמים. מספרים בפורמט מחרוזתי הן לא דבר נדיר כמו שאולי נראה במבט ראשון. מספרי זהות, מספרי רישוי, מספרי טלפון, מספרי בתים בכתובות, מיקודים, כרטיסי אשראי, כתובות IP, מספרים קטלוגיים ועוד ועוד. אלה מספרים שאף פעם לא נתייחס אליהם כאל "מספרים" – לעולם לא נבצע עליהם חישובים חשבוניים והרבה פעמים הם לא באמת מתנהגים כמו מספרים (יכולים להתחיל ב-0, יכולים להכיל מקפים, סוגריים או סימנים אחרים)


חישובים על מספרים

בפרק על ביטויים ליטרלים ראינו כיצד ניתן לבצע את הפעולות החשבוניות הבסיסיות ביותר -חיבור, חיסור, כפל, וחילוק. בנוסף ראינו שאפשר לחשב חזקות באמצעות זוג כוכביות (**), אבל אפשר לבצע את אותו החישוב גם באמצעות הפונקציה pow המקבלת זוג מספרים כפרמטרים ומחזירה לנו את התוצאה של המספר הראשון בחזקת המספר שני.


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


הדוגמה הזאת מקבילה לחישוב 5 % (4**3) (השארית של 64 חלקי 5 היא 4) אבל פייתון תבצע את החישוב באופן מעט יותר יעיל כאשר נשתמש בפונקציה.

כדי לחשב שורש ריבועי, לעומת זאת כבר נאלץ לייבא ספרייה נוספת


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

חישוב ערך מוחלט (מרחק מ-0) ניתן לקבל באמצעות הפונקציה abs


עיגול מספרים

הפונקציה round עוזרת לנו לעגל מספרים עשרוניים


שימו לב שהתוצאה חזרה בפורמט עשרוני. אפשר לראות את זה ע"פ הנקודה העשרונית וספרת ה-0 שנמצאת אחריה. מבחינת ערך המספר הזה שווה ל-5 שלם אבל עדיין מדובר בנתון מטיפוס שונה.


המונח float נפוץ מאוד בשפות מחשב והכוונה היא לנקודה העשרונית ש"צפה" בין הספרות ומיקומה קובע את גודלו של המספר. תזוזה של מיקום אחד לשמאל תקטין את המספר פי 10. תזוזה ימינה – תגדיל אותו פי 10 בפייתון 2, כל פעולה חשבונית על שני מספרים שלמים תמיד תחזיר מספר שלם. בכל מקרה אחר (אחד מהמספרים או שניהם עשרוניים) התוצאה תהיה עשרונית.

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


במידה ונרצה לעגל עד למקום מסוים לאחר הנקודה העשרונית (למשל לקבל מספר מדו"ח בנקאי המציג 4 ספרות אחרי נקודה עשרונית ולהציג אותו בדו"ח תקציבי עם 2 ספרות אחרי הנקודה בלבד), ניתן להוסיף לפונקציית round פרמטר המגדיר את מידת הדיוק שנרצה לקבל בתוצאה, כלומר, כמה ספרות יש להציג אחרי הנקודה העשרונית.


הפונקציה round מבצעת עיגול משתנה, זאת אומרת שאת הספרות 0-4 היא תעגל למטה בעוד שאת הספרות 5-9 תעגל למעלה. אם אנחנו רוצים לוודא עיגול בכיוון מסוים אנחנו יכולים להשתמש בפונקציות בעלות השמות הציוריים ceil (תקרה – תמיד תעגל למעלה) ו-floor (רצפה – תמיד תעגל למטה). הפונקציות האלה לא יכולות לקבל פרמטר נוסף לקביעת דיוק ולכן תמיד יעגלו למספר שלם. שתי הפונקציות האלה הן חלק מספריית math שראינו קודם ולכן גם כדי להשתמש בהן נצטרך לייבא את הספרייה (אם לא עשינו זאת עדיין במהלך הסשן הנוכחי).



יצירת מספרים אקראיים

לפייתון יש ספרייה שלמה בשם random המוקדשת ליצירה של ערכים אקראיים במגוון צורות ופורמטים.



בשלב הראשון נייבא את הספרייה כדי שנוכל להשתמש בפונקציות שהיא מכילה.

הפונקציה random מספריית random מייצרת מספר אקראי עשרוני בין 0 ל-1

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

הפונקציה randint מקבלת מספרים שלמים בלבד (גם שליליים) ומחזירה מספר שלם. המספר יכול לכלול את ערכי הקצה שהגדרתם (בדוגמה הזאת, למשל, הגדרתי מספר אקראי בין 1 ל-10 ולכן המספר שאקבל בחזרה יכול להיות 1 או 10 או כל מספר שלם ביניהם). כמו כן המספר הראשון חייב להיות קטן מהמספר השני.

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


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




© כל הזכויות שמורות לאלעד פלג הדרכות 2020