תחביר בסיסי

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

1. פקודות בסיסיות

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

x = 10
y = 15
z = 20

sum = x + y + z
avg = sum / 3

print "Sum is:", sum
print "Average is:", avg

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

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

print "Who are you?"
name = raw_input()

print "Hello! %s, Nice to meet you" % name

שימו לב לשימוש ב %s בתוך שורת ה print, שמתאים לו סימן ה-% בסוף השורה. פעולת ה-% היא פעולת פענוח מחרוזות וכך אנו מבקשים מפייתון לשתול ערך בתוך מחרוזת. ניתן לשתול ערך מחרוזתי באמצעות סימן %s או ערך מספרי באמצעות סימן %d (ובהמשך נראה ערכים מסוגים נוספים שניתן לשתול בתוך מחרוזת).

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

print "I have %d dollars and %d cents. I can buy some %s" % (10, 2, "Snakes")

2. משתנים ומידע

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

x = raw_input()
y = raw_input()

sum = x + y
print "x + y =", sum

נסיון להריץ את התוכנית עם הקלטים 10 ו 20 יציג את התוצאה המפתיעה:

10 + 20 = 1020

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

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

print "7 / 2 = ", 7/2

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

print "7 / 2 = ", 7.0/2

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

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

print "Type in two numbers:"
x = int(raw_input())
y = int(raw_input())

print "The sum is: ", x+y

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

3. רווחים ב Python

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

פייתון צריך לדעת איזה שורות קשורות לפקודת הנקודותיים- לדוגמא הפקודה if גורמת להפעלת כל השורות ״הקשורות״ אליה, או הבלוק שלה, אם התנאי מתקיים.

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

הנה למשל פקודת if:

  
if 2 < 5:
  print "I can see"
  print "you know math"

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

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

for x in range(10):
  print "Another Round..."  
  if x % 2 == 0:
    print "I can see"
    print "you know math"

פקודת ההדפסה ופקודה ה if שייכות לבלוק של פקודת ה for ולכן יבוצעו 10 פעמים. שתי פקודות ה print אחרי ה if שייכות אליו ויבוצעו רק במידה והתנאי אמיתי. במקרה כזה שני רווחים מציינים שהפקודה ״שייכת״ ל for, ו-4 רווחים מציינים שהפקודה שייכת ל if.

 


בשעור זה נכיר את פייתון כשפת תכנות. נלמד לכתוב תוכניות פשוטות, להגדיר משתנים ולהשתמש בלולאות ומבני בקרה. להלן דוגמאות הקוד שראינו במדריך. תוכלו למצוא דוגמאות אלו גם בתיקיית הדוגמאות של הקורס בקישור:
https://github.com/ynonp/python-examples/tree/master/02_syntax

תוכנית ראשונה intro.py:

"""
Python Introduction and Basic Syntax

1. Variables
2. Reading User Input
3. Data Types
"""

name = "Ynon Perek"
number =  7

x = 10
y = 20
z = 25

total = x + y + z

print total

תוכנית שניה user_input.py:

"""
Reading user input demo
"""

print "Type in your name:"
name = raw_input()

print "Hello", name

תוכנית שלישית sum_from_user.py:

"""
Read 3 numbers from the user
and print their total sum
"""

print "Type in 3 numbers:"
x = raw_input()
y = raw_input()
z = raw_input()

total = float(x) + float(y) + float(z)

print "Sum of the numbers is: ", total