משתמש:Fargoth~hewikibooks/פייתון/משתנים ביטויים והצהרות

משתנים, ביטויים והצהרות

עריכה

2.1 ערכים וסוגי משתנים.

עריכה

ערך הוא אחד הדברים הבסיסיים הנימצאים בשימוש בתוכנה. כמו אות או מספר. הערכים שראינו עד כה הם 1, 2, ו- 'Hello, World'.

ערכים אלה שייכים לסוגי משתנים שונים: 2 הוא מספר שלם (integer), ו- 'Hello, World' הוא מחרוזת (string), סוג זה נקרא כך מפני שהוא מכיל "מחרוזת" של אותיות. אתה (וכך גם המפענח) יכולים לזהות את סוג המשתנה מחרוזת ע"י סימני הגרשיים המלווים אותו.

הצהרת ההדפסה עובדת גם על מספרים שלמים:

>>> print 4
4

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

>>> type('Hello, World!')
<type 'str'>
>>> type(17)
<type 'int'>

כפי שניתן לראות המחרוזת שייכת לסוג str ואילו מספר שלם שייך לסוג int (קל לראות שאלו קיצורים עבור המילים string ו integer). לעומת זאת מספר עם נקודה עשרונית שייך לסוג צף (float), מפני שמספרים אלה מיוצגים בדרך הנקראת נקודה צפה.

>>> type(3.2)
<type 'float'>

ולאיזה סוג משתייכים הערכים '17' ו '3.2'? הם נראים כמו מספרים, אבל הם מלווים בסימני גרשיים כמו מחרוזות.

>>> type('17')
<type 'str'>
>>> type('3.2')
<type 'str'>

מסתבר שאלה מחרוזות.

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

>>> print 1,000,000
1 0 0

זה לא מה שרצינו בכלל! פייתון מפענח 1,000,000 כרצף מופרד בפסיקים של מספרים שלמים (1, 000 (שהוא גם 0) ועוד 0) אותם הוא מדפיס עם רווחים בין אחד לשני.

זו הדוגמא הראשונה שיש לנו לשגיאת משמעות: הקוד רץ ללא כל הודעת שגיאה, אבל הוא לא עושה את הדבר ה"נכון".


2.2 משתנים

עריכה

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

>>> message = 'And now for something completely different'
>>> n = 17
>>> pi = 3.1415926535897931

בדוגמא זו ישנן שלוש השמות. הראשונה מציבה מחרוזת למשתנה חדש בשם message; השניה מציבה את הערך 17 ב n; והשלישת מציבה את הערך (בקירוב) של π ל pi.

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

<צריכה להיות כאן תמונה>

message ---> 'And now for something completely different’
n ---> 17
pi ---> 3.1415926535897931

הצהרת ההדפסה מציגה את הערך של המשתנה:

>>> print n
17
>>> print pi
3.1415926535897931

סוג המשתנה הוא הסוג של הערך אליו הוא מתייחס.

>>> type(message)
<type 'str'>
>>> type(n)
<type 'int'>
>>> type(pi)
<type 'float'>


2.3 שמות משתנים ושמות שמורים

עריכה

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

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

הקו התחתון (_) יכול להופיע בשם. לעתים קרובות משתמשים בו בשמות המכילים מספר מלים, כמו my_name או airspeed_of_unladen_swallow.

אם תיתן למשתנה שם לא חוקי תתקל בשגיאה:

>>> 76trombones = ’big parade’
SyntaxError: invalid syntax
>>> more@ = 1000000
SyntaxError: invalid syntax
>>> class = ’Advanced Theoretical Herpetology’
SyntaxError: invalid syntax

שם המשתנה 76trombones אינו חוקי מפני שהוא לא מתחיל באות. השם more@ אינו חוקי מפני שהוא מכיל תו לא חוקי, @. אבל מה הבעיה עם השם class?

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

השפה פייתון מכילה 31 מלים שמורות:

and del from not while as elif global or with assert else if pass yield break except import print class exec in raise continue finally is return def for lambda try

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

2.4 הצהרות

עריכה

הצהרה היא הוראה שמפענח פייתון יכול "להריץ". עד כה ראינו שני סוגים של הצהרות: הדפסה (print) והשמה.

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

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

למשל התסריט

print 1
x = 2
print x

תיצור את הפלט הבא:

1
2

הצהרת ההשמה לא גורמת לפלט.

2.5 סימול פעולות מתמטיות (אופרטורים) והערכים עליהם סמלים אלה פועלים (אופרנדים)

עריכה

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

הדוגמאות הבאות מציגות את האופרטורים של פעולות החשבון:

hour-1 hour*60+minute minute/60 5**2 (5+9)*(15-7)

משמעותם של הסמלים +, -, /, וסוגריים בפייתון זהה למשמעותם במתמטיקה. הכוכבית (*) מסמלת כפל, ו ** הוא סימן לחזקה.


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

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

>>> minute = 59
>>> minute/60
0

הערך במשתנה minute הוא 59, ובחשבון פשוט 59 חלקי 60 הוא 0.98333, לא 0. הסיבה לחוסר התאימות היא שפייתון מבצעת חלוקה עם עיגול כלפי מטה.

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

אם אחד מהאופרנדים הוא שבר (floating point), פייתון מבצע חילוק שברי, והתוצאה היא שבר.

>>> minute/60.0
0.98333333333333328

[1]

2.6 ביטויים

עריכה

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

>>> 1+1
2

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

>>> 17
17
>>> x
2

בתסריט, ביטוי בודד היא הצהרה חוקית, אבל הוא לא גורם לכלום. התסריט הבא לא מציג פלט בכלל:

17
3.2
’Hello, World!’
1+1

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

2.7 קדימותם של אופרטורים

עריכה

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

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

היות שהביטוי בתוך הסוגריים מחושב ראשון,

2* (3-1)

הוא 4, ו

(1+1)**(5-2)

הם 2 בחזקת 3 (8). ניתן להתשמש בסוגריים גם כדי לגרום לביטוי להיות מובן יותר, כמו למשל

(minute * 100) / 60

אף על פי שהסוגריים אינן משנות את התוצאה.

הקדימות הבאה שייכת להעלאה בחזקה, לכן

2**1+1

שווה 3 ולא 4. ו

3*1**3

שווה 3 ולא 27.

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

2*3-1

שווה 5, לא 4, ו

6+4/2

שווה 8, לא 5.

2.8 אופרטורים של מחרוזות

עריכה

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

'2'-'1'
'eggs' / 'easy'
'third'*'a charm'

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

first = 'throat'
second = 'warbler'
print first + second

התוכנה תציג את המילה throatwarbler.

האופרטור * עוד גם הוא על מרוזות. לדוגמא,

'Spam'*3

הוא

'SpamSpamSpam'.

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

במובן מסויים, השימוש הזה ב + ו * הגיוני כאנלוגיה לשימושם במתמטיקה. בדיוק כפי ש 3*4 הוא 4+4+4, אנו מצפים ש

'spam'*3

יהיה

'

spam'+'spam'+'spam'

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

חשוב על תכונה שקיימת בחיבור ובכפל, אך אינה קיימת בשירשור ובחזרה על מחרוזות.

2.9 הערות

עריכה

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

מסיבה זו, זהו רעיון טוב להוסיף הערות לתוכנות שלך כדי להסביר בשפה טבעית מה התונה עושה. בפייתון הערות מסומנות ב #:

  1. compute the percentage of the hour that has elapsed

percentage = (minute * 100) / 60 #percentage of an hour

פייתון תתעלם מכל מה שכתוב החל מ # ועד סוף השורה - אין להערה שום השפעה על התוכנה.

הערות הן מועילות ביותר כאשר הן מתעדות תכונות לא ברורות מאליהן בקוד. סביר להניח שהקורא יכול להבין מה הקוד עושה; הרבה יותר שימושי להסביר למה הוא עושה זאת.

ההערה הבאה מיותרת:

v=5 # assign 5 to v

ההערה הבאה מכילה מידע נוסף שאינו מצוי בקוד:

v=5 # velocity in meters/second

.

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

2.10 ניפוי שגיאות

עריכה

שגיאות התחביר הנפוצות ביותר שתעשה בשלב זה הן שמות משתנים לא חוקיים, כמו class או yield (שהן מלים שמורות) או odd~job ו US$ שמכילים תוים לא חוקיים.

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

>>> bad name = 5
SyntaxError: invalid syntax

במקרה של שגיאות תחביר, הודעת השגיאה לא עוזרת במיוחד. ברוב הפעמים ההודעות הן SyntaxError: invalid syntax ו SyntaxError: invalid token, בשני המקרים ההודעות לא מועילות במיוחד.

שגיאות זמן הריצה הכי נפוצות שתעשה בשלב זה הן “use before def;” כלומר, נסיון להתשתמש במשתנה לפני שהושם בו ערך. מצב כזה ייתכן אם אייתת את שם המשתנה בצורה שגויה:

>>> principal = 327.68
>>> interest = principle * rate
NameError: name ’principle’ is not defined

בשמות משתנים יש חשיבות לאות גדולה או קטנה, כך ש Bob הוא משתנה שונה מ bob.

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

>>> 1.0 / 2.0 * math.pi

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

מה שמביא אותנו לעקרון השני בניפוי שגיאות:

הדבר היחיד שגרוע יותר מלקבל הודעת שגיאה, הוא לא לקבל הודעת שגיאה.

2.11 תרגילים

עריכה

תרגל שימוש במפענח פייתון בתור מחשבון:

  • מהו היקף מעגל בעל רדיוס 5?
  • אם אתה רץ 10 קילומטרים ב 45 דקות ו 30 שניות, מהי היא מהירותך הממוצעת בשעה?

מהי מהירותך הממוצעת במייל לשניה? (רמז: במייל יש 1.61 קילומטרים).


לפרק הבא: פייתון/פונקציות

הערות

עריכה
  1. ^ שים לב ל 28 בסוף השבר - התוצאה האמיתית של חילוק 59 ב 60 מכילה אינסוף 3 אחרי 0.98 אך היות שהמחשב משתמש בספרות לייצוג השבר והספרות המוקצות לשבר מוגבלות ולא אינסופיות נעשה קירוב.