תכנית פייתון - רכיבי יסוד

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

הפונקציות שהשאלות עוסקות בהן הן אלו:

print, input, int, float, random, randint

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

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

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

הסימן ? משמעו ערך כלשהו.

בהצלחה!

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

152 173

152 * 173

152 * 173

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

3 5

3 ** 5

לפניכם ביטוי חסר. כיצד נשלים אותו כך שיחשב את החלוקה של 19 ב-6?


19 6

19 / 6

מה התוצאה של ביטוי זה?

3.7 + 2.3

תשובה: 6.0 (ולא 6). 

לפניכם ביטוי חסר. כיצד נשלים אותו כך שתוצאתו תהיה 2.0?

10 /

10 / 5

לפניכם ביטוי חסר. כיצד נשלים אותו כך שתוצאתו תהיה המנה מחלוקת 19 ב-6? 

19 6

19 // 6

לפניכם ביטוי חסר. כיצד נשלים אותו כך שתוצאתו תהיה השארית מחלוקת 19 ב-6?

19 6

19 % 6

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

1 + 4

1 + 4 * 6

לפניכם ביטוי חסר. הוסיפו לו סוגריים כך שייווצר ביטוי שתוצאתו 30.

1 + 4 * 6

(1 + 4) * 6

לפניכם ביטוי חשבוני שחסר בו סוגר. השלימו את הסוגר באופן שתוצאת הביטוי תהיה 10.0.

(4 – 1) * (8 + 2) / (5 – 2))

(4 – 1) * ((8 + 2) / (5 – 2))

נתונים שלושה ערכים. איזה מהם הוא מסוג int, איזה הוא מסוג float, ואיזה הוא מסוג str?

15.

’83’

15

תשובה: 15 הוא מסוג int.

.15 הוא מסוג float. 

’83’ הוא מסוג str.

הוראה זו שגויה. מדוע? הציעו תיקון.

my Name = ‘Mira’

תשובה: שם משתנה אינו יכול לכלול רווח. ההוראה התקינה:

myName = ‘Mira’

קוד זה ירוץ באופן תקין – נכון או לא נכון?

num1 

num2 = 20

 

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

    num1

NameError: name ‘num1’ is not defined

 

קוד זה מציב 7 במשתנה num. נכון או לא נכון?

7 = num

לא נכון. בכתיבת הוראה השמה ערך במשתנה, הערך נכתב מימין לסימן = ואילו שם המשתנה נכתב משמאל לסימן.

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

something

something = 5

לפניכם קוד חסר. השלימוהו באופן שהמחרוזת ‘Dani’ תוצב במשתנה myName.

myName

myName = ‘Dani’

קוד שגוי זה צריך להציב ב-x את המספר השלם 10000. תקנו אותו.

x = 5,000 * 2

x = 5000 * 2

לפניכם קטע קוד קצר. בסופו המשתנה num2 יכיל 83 והמשתנה num1 יכיל 45 – נכון או לא נכון?

num1 = 83
num2 = 45
num1 = num2

לא נכון, אמנם num1 יכיל 45 אך num2 יכיל גם כן 45. ההוראה האחרונה אינה מחליפה את הערכים בשני המשתנים זה בזה.

לפניכם קוד חסר. השלימוהו באופן שבסוף הרצתו המשתנה myName יכיל את המחרוזת ‘Dani’.

myName = ‘Dani’
myName = ‘Yoni’

myName = ‘Dani’
myName = ‘Yoni’
myName = ‘Dani’

שלוש הוראות אלו הן כולן הוראות השמה תקינות – נכון או לא נכון?

author = ‘Orwell’

1984author = ‘Orwell’

print = ‘Orwell’

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

נתון קטע קוד חסר זה:

a = 7

a = 9

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

a = 7
a = 9
print(a)

ההשלמה שגויה. הסבירו מדוע ונסו לשער מדוע טעה רוני. בנוסף הציעו השלמה תקינה.

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

a = 7

a = 9

print(7)

מה מדפיס הקוד הזה?

print(5)
print(9)

5

9

 

מה מדפיס הקוד הזה? המחרוזת בהוראת ה-print הראשונה היא מחרוזת ריקה.

print(5, end = ”)
print()
print(9)

5

9

 

מה הערכים שיש במשתנים a ו-b בסוף ביצוע הקוד הזה?

a = 5

b = 9

a = b

תשובה: הערך שיש במשתנה a הוא 9 וגם הערך שיש במשתנה b הוא 9.

הוראה זו יוצרת פונקציה מתמטית המגדירה קשר בין y ל-x: לכל ערך של x יש ב-y מכפלה של ערך זה ב-2. 

y = 2*x

תשובה: לא נכון. הוראה זו אינה קובעת קשר בין שני משתנים אלא מבצעת פעולה: השמת ערך במשתנה. הערך המוצב במשתנה y הוא פעמיים הערך המוצב בתוך המשתנה x.

קוד זה ירוץ באופן תקין – נכון או לא נכון?

booksNum = 5

price = BooksNum * 10

תשובה: לא נכון. ההוראה השנייה מנסה לגשת למשתנה ששמו BooksNum. משתנה בשם זה לא הוגדר בתכנית. המשתנה שהוגדר לפניו שמו booksNum, ב-b “קטנה” (lower case), ולא ב-B “גדולה” (upper case) כמו בשם BooksNum.

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

bananas = 5
apples = 10
fruits

bananas = 5

apples = 10

fruits = bananas + apples

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

bananas = 5

apples = 10

melons = 9

fruits

bananas = 5
apples = 10
melons = 9
fruits = bananas + apples + melons

ההוראה השנייה בקוד זה שגויה כיוון שהיא מנסה להציב את המספר 50 במספר 30 – נכון או לא נכון?

num1 = 30

num1 = num1 + 20

תשובה: לא נכון. ההוראה מציבה 50 במשתנה num1 (במקום הערך 30 שהוצב בו בהוראה הראשונה).

איזה ערך יש במשתנה num1 בסוף ביצוע קוד זה? 

num1 = 30

num1 = num1 + 20

num1 = num1 + 30

תשובה: המספר 80. 

הוסיפו לקוד זה הוראה המגדילה את התשלום ב-2 (ולא פי 2).

payment = 10

payment = 10
payment = payment + 2

לפניכם קוד שגוי. מי שכתבוהו רצו להציב במשתנה c את סכום הערכים שיש במשתנים a ו-b. תקנו את הקוד.

a + b = c

c = a + b

כתבו ביטוי חשבוני המכפיל תוכן של משתנה בשם something ב-10 ומחלק את התוצאה ב-5.

something * 10 / 5

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

num1 =
num2 = num1
result = num2 ** 2

num1 = 5
num2 = num1
result = num2 ** 2

לפניכם קוד המגדיר שני משתנים ומציב בהם מספרים כלשהם (לדוגמה 3 ו-5). השלימו את הקוד באופן שבסוף הרצתו יוחלפו זה בזה הערכים בשני המשתנים (כלומר בסוף הרצת הקוד יוצב במשתנה var2 הערך שהוצב במשתנה var1 בהוראה הראשונה, ובמשתנה var1 – הערך שהוצב במשתנה var2 בהוראה השנייה).

var1 = ?

var2 = ?

var1 = ?

var2 = ?

var3 = var1

var1 = var2

var2 = var3

מה תוצאת הרצת הקוד הזה? מדוע?

num1 = 5

adding = num1 + num2

adding = num1 + num2

NameError: name ‘num2’ is not defined

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

מה תוצאת הרצת הקוד הזה? מדוע?

something = ‘problem’
power = something ** 88

power = something ** 8

TypeError: unsupported operand type(s) for ** or pow(): ‘str’ and ‘int’

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

כתבו הוראה הממירה את המחרוזת ’35’ למספר שלם ומציבה את התוצאה במשתנה result.

result = int(’35’)

כתבו הוראה הממירה את המחרוזת ’35-‘ למספר שלם ומציבה את התוצאה במשתנה result.

result = int(‘-35’)

כתבו הוראה המציבה במשתנה result את הערך השלם של המספר העשרוני 2.73 (כלומר 2).

result = int(2.73)

כתבו הוראה המציבה במשתנה result את הערך השלם של המספר העשרוני 2.73 (כלומר 2) ועוד 5.

result = int(2.73) + 5

תארו את פעילות הקוד הזה במפורט ככל האפשר.

something = ‘7’

somethingNum = int(something)

תשובה: ההוראה הראשונה בקוד היא הוראת השמה. היא מגדירה משתנה חדש בשם something ומציבה בו את המחרוזת ‘7’. ההוראה השנייה היא גם כן הוראת השמה. היא מזמנת את הפונקציה int ונותנת לה בתור ארגומנט את הערך שהוצב במשתנה something, כלומר את המחרוזת ‘7’. הפונקציה מחזירה את המספר 7, המרה של של המחרוזת ‘7’ למספר. המספר 7 מוצב במשתנה חדש בשם somethingNum .

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

numS = ?

numS = ?

result = int(numS)

מה מחזיר הזימון הזה של הפונקציה int? מדוע?

int(‘try me’)

  int(‘try me’)
ValueError: invalid literal for int() with base 10: ‘try me’

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

מה מחזיר הזימון הזה של הפונקציה int? מדוע?

int(‘83.7’)

  int(‘83.7’)
ValueError: invalid literal for int() with base 10: ‘83.7’

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

כתבו הוראה הממירה את המחרוזת ‘8.32’ למספר עשרוני ומציבה את התוצאה במשתנה result.

result = float(‘8.23’)

להלן הוראה חסרה. השלימוה כך שתציב במשתנה result את המספר 95.0. אין לכתוב 95.0. 

result = float()

result = float(95)

לפניכם קוד חסר. הוא מציב במשתנה numS מחרוזת המייצגת מספר עשרוני כלשהו, כגון ‘83.7’. השלימו את הקוד באופן שיציב במשתנה result את המחרוזת שיש במשתנה numS בתור מספר עשרוני.

numS = ?

numS = ?

result = float(numS)

הקדימו לקוד זה הערת תיעוד המסבירה את פעולתו.

num1 = 5

num2 = 10

num3 = 15

result = num1 * num2 * num3

# Defining three variables, 

# initializing them, 

# and calculating their multiplication.
num1 = 5
num2 = 10
num3 = 15
result = num1 * num2 * num3

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

something = input(‘Please enter some value: ‘) 

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

מה מדפיס הקוד הזה?

bookName = input(‘Please enter the name of your favorite book: ‘)

print(bookName)

תשובה: הקוד מדפיס את המחרוזת שקולטת הפונקציה input ומוצבת במשתנה bookName. לפי ההנחיה מחרוזת זו היא שם של ספר.

הרצנו את הקוד הזה, המשתמשת הקישה על צירוף המקשים America (כלומר המקש A, אחר כך המקש m, אחר כך המקש e, וכו’), ולבסוף הקישה ENTER. כאן תיפסק הרצת הקוד ונקבל הודעת שגיאה, כיוון שלא פעלה לפי ההנחיה שניתנה לה – כלומר שתכניס את גילה  – נכון או לא נכון?

age = input(‘Please enter your age: ‘)

print(age)

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

הקוד הזה שגוי כיוון שלא העברנו מחרוזת לפונקציה input – נכון או לא נכון?

bookName = input()

print(bookName)

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

קוד זה שגוי כיוון שאנו מבקשים מהמשתמשת גיל ושמים אותו במשתנה ששמו name – נכון או לא נכון?

name = input(‘Please enter your age: ‘)

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

מה מבצע הקוד הזה? 

num1 = int(input(‘Please enter an integer: ‘)) 

num2 = int(input(‘Please enter an integer: ‘))

result = (num1 – num2) * 2

 

תשובה: קולט שתי מחרוזות המייצגות (כך אנו מניחים) מספרים שלמים (לדוגמה ’32’ ו-’52’), ממיר אותן למספרים שלמים, מחשב את ריבוע ההפרש ביניהם, ומציב את התוצאה במשתנה result.

כתבו הוראה המדפיסה ל-shell את המספר 9.72-.

print(-9.72)

הוראה שגויה זו אמורה לשאול את המשתמשת לשלומה. מדוע ההוראה שגויה? הציעו תיקון.

print(How are you?)

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

print(‘How are you?’)

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

something = ?

something = ?

print(something)

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

something = ?

something = ?

print(something + 5)

לפניכם קוד חסר. הוא מציב מספרים כלשהם במשתנים num1 ו-num2. הוסיפו לקוד הוראה אחת המדפיסה את תכני המשתנים num1 ו-num2 בשורה אחת.

num1 = ?

num2 = ?

num1 = ?

num2 = ?

print(num1, num2)

לפניכם קוד חסר. הוא מציב מחרוזות כלשהן במשתנים name1 ו-name2. השלימו את הקוד באופן שידפיס את המחרוזת – כל אחת בשורה נפרדת.

name1 = ?

name2 = ?

name1 = ?

name2 = ?

print(name1)

print(name2)

לפניכם הוראה חסרה. השלימוהּ כך שתדפיס 100.

print(1 + “99”)

print(1 + int(“99”))

לפניכם הוראה חסרה. השלימוהּ כך שתדפיס 100.00.

print(1 + “99”)

print(1 + float(“99”))

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

yourName = input()

כתבו קוד הקולט מהמשתמשת את שמה, מציב את השם במשתנה, ומדפיס את השם בתבנית זו:

Your name is Dana Mor.

השם לא חייב להיות ‘Dana Mor’.

yourName = input(“Please enter your name: “)

print(‘Your name is’, yourName)

כתבו קוד הקולט מהמשתמשת את גילה, מציב את הגיל במשתנה, ומדפיס את הגיל בתבנית זו:

Your age is 37.

הגיל הנקלט לא חייב להיות (המחרוזת המייצגת את המספר) 37.

yourAge = input(“Please enter your age: “)

print(‘Your age is’, yourAge)

כתבו קוד הקולט מהמשתמשת את גילה, מציב את הגיל במשתנה, ומדפיס את הגיל בעוד 10 שנים בתבנית זו:

Your age is 47.

הגיל הנקלט לא חייב להיות (המחרוזת המייצגת את המספר) 37.

yourAge = input(“Please enter your age: “)

print(‘Your age is’, int(yourAge) + 10) 

הרצנו את הקוד הזה והוא הדפיס את המספר 17. מה המחרוזת שהכניסה המשתמשת?

num = int(input(‘Please enter an integer: ‘))

print(4 ** 2 + num)

תשובה: ‘1’. 

הרצנו את הקוד הזה והוא הדפיס את המספר 27.0. מה המחרוזת שהכניסה המשתמשת?

num = float(input())

print(num ** 3)

תשובה: ‘3.0’. 

קצרו את הקוד הזה וכתבו אותו בשורה אחת בלבד ובלי שיגדיר את המשתנה s.

s = input(‘Please enter your age: ‘)

age = int(s)

age = int(input(‘Please enter your age: ‘))

אלו שתי פונקציות מזומנות בקוד הזה? ואיזו מהן מחזירה ערך לפני שהאחרת מחזירה?

num = int(input(‘Please enter an integer: ‘))

תשובה: הקוד מזמן את הפונקציות int ו-input. הפונקציה input מחזירה ערך ראשונה (המחרוזת שמכניסה המשתמשת). הערך הזה הוא הכרחי לפעולתה של הפונקציה int.

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

Please enter first number: 7

Please enter second number: 8

Please enter third number: 9

Please enter fourth number: 6

אז הפלט של התכנית יהיה זה:

6 7 8 9

הנה קוד חסר של התכנית. השלימוהו.

num1 = int(input(‘Please enter first number: ‘))

num2 = int(input(‘Please enter second number: ‘))

num3 = int(input(‘Please enter third number: ‘))

num4 = int(input(‘Please enter fourth number: ‘))

print()

num1 = int(input(‘Please enter first number: ‘))

num2 = int(input(‘Please enter second number: ‘))

num3 = int(input(‘Please enter third number: ‘))

num4 = int(input(‘Please enter fourth number: ‘))

print(num4, num1, num2, num3)

לפניכם קוד חסר. השלימוהו באופן שידפיס מספר שלם אקראי בין 5 (כולל) ל-10 (כולל).

booksNum =

print(booksNum)

import random

booksNum = random.randint(5, 10)

print(booksNum)

לפניכם קוד חסר. השלימוהו באופן שידפיס מספר אקראי בטווח שבין 0 (כולל) ל-1 (לא כולל).

xCoordinate =

print(xCoordinate)

import random

xCoordinate = random.random()

print(xCoordinate)

הרצנו את הקוד הזה: 

booksNum = random.randint(-5, 2)

וקיבלנו הודעת שגיאה זו: 

  booksNum = random.randint(-5, 2)
NameError: name ‘random’ is not defined

מה פשר השגיאה?

הקוד מזמן את הפונקציה random. פונקציה זו משתייכת למודול, המודול random, וכדי להשתמש בה יש לזמן את המודול במפורש באמצעות ההוראה import. כך:

import random

booksNum = random.randint(-5, 2)

הרצנו את הקוד הזה: 

import random

xCoordinate = random()

וקיבלנו הודעת שגיאה זו: 

  booksNum = random()
TypeError: ‘module’ object is not callable

מה פשר השגיאה?

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

import random

xCoordinate = random.random()

מה טווח הערכים שהקוד הזה יכול להציב במשתנה num?

import random

num = random.randint(5, 10) + 7

תשובה: הפונקציה random.randint מחזירה מספר שלם בטווח בין 5 ל-10, ולאחר הוספת 7 המספר המוצב במשתנה יכול להיות כל מספר שלם בין 12 ל-17.

לפניכם קוד חסר. השלימוהו באופן שידפיס מספר עשרוני אקראי בין 5 (כולל) ל-6 (לא כולל).

num =

print(num)

import random

num = random.random() + 5

print(num)

לפניכם קוד חסר. השלימוהו באופן שידפיס מספר עשרוני אקראי בין 0 (כולל) ל-30 (לא כולל).

num =

print(num)

import random

num = random.random() * 30 

print(num)

לפניכם קוד חסר. השלימוהו באופן שידפיס מספר עשרוני אקראי בין 2 (כולל) ל-32 (לא כולל).

num =

print(num)

import random

num = (random.random() * 30) + 2

print(num)