
מוקד מידע ורישום 077-7067057
מדריך פייתון – תרגילים ופתרונות
תרגילים ופתרונות בשפת Python

צוות Real Time Colleg הכין במיוחד עבורכם מדריך תרגילים ופתרונות בשפת פייטון – בואו לראות מה הרמה שלכם בשפה הכי חמה בתעשייה!
שאלה 1:
כתבו תוכנית שקולטת מספרים מהמשתמש עד שנקלט התו q. הדפס את ממוצע המספרים.
שאלה 2:
כתבו תכנית שמקבלת רשימה של מספרים, ומספר נוסף. הפונקציה תשנה את הרשימה עצמה (IN-PLACE) כך שהיא לא תכיל מספרים שמתחלקים במספר הנוסף.
תשובה 2
שאלה 3:
כתבו תכנית שקולטת מחרוזת מהמשתמש ומדפיסה האם היא פלינדרום (מחרזות היא פלינדרום אם היא זהה להיפוכה. למשל level, noon ו-racecar הן מילים פלינדרומיות.
תשובה 3
שאלה 4:
כתבו תכנית המדמה הגרלה. נקלוט מהמשתמש 3 מספרים שונים בין 0 ל-9. לאחר מכן התכנית תבחר באקראי 3 מספרים שונים מטווח זה (0-9). אם המספרים שנבחרו זהים לאלו שהמשתמש ניחש נדפיס "You Win" אחרת נדפיס "You Lose".
תשובה 4
שאלה 5:
כתבו תכנית המקבלת כארגומנט ראשון שם של קובץ. הנח כי הקובץ הוא קובץ טקסט שמורכב משורות של מספרים. סכום מספרים אלו וכתוב לסוף הקובץ את הסכום שהתקבל.
תשובה 5
שאלה 6:
כתבו פונקציה שמקבלת רשימה של מספרים מ-0 עד 9 ותחזיר רשימה חדשה שסופרת סכום נפרד עבור כל ספרה. למשל אם ברשימה שהתקבלה המספר 2 מופיע 7 פעמים אז ברשימה המוחזרת במקום ה-2 יהיה שמור הערך 7
תשובה 6
שאלה 7:
כתבו פונקציה שמקבלת רשימה. יש לבדוק שכל איברי הרשימה הם מספרים שלמים חיוביים אחרת יש לזרוק שגיאות מסוג ValueError עם הערות בהתאם לסוג השגיאה (טיפוס לא מתאים או טווח לא מתאים)
שאלה 8:
מה ההבדל בין y לבין z בתכנית הבאה? כתבו תכנית שמדגימה את ההבדל:
תשובה 8
שאלה 9:
הסבירו למה משמשת המילה with? מהי חשיבותה של המילה זו (מדוע היא התווספה לשפה)?
תשובה 9
שאלה 10:
נתון לנו קובץ בינרי שמכיל 8 בתים בשם "data.bin". ידוע שהמידע מייצג שני מספרים שלמים בגודל 4 בתים בשיטת big-endian. כתבו קוד שמדפיס את סכום המספרים הללו:
תשובה 10
להלן פתרונות תרגילי Python
s = 0 # sum of the numbers
c = 0 # count of the numbers
while 1:
n = input("enter a number:")
if n == 'q': # if the input was 'q' -> quit the loop
break
try:
n = int(n)
except ValueError:
print("please enter an integer or 'q'.")
else:
s += n
c += 1
print("average:{}".format(s/c))
תשובה לתרגיל 2
לשאלה זו מספר דרכי פתרון שכדאי לבחון
דרך פתרון 1
יש לשים לב ששימוש בלולאת for יכול להיות בעייתי אם מסירים איברים מהרשימה עליה הלולאה מטיילת. פיתרון אפשרי הוא לטייל בצורה "קלאסית" באמצעות לולאת while על האינדקסים ולדאוג לקדם את האינדקס רק כאשר לא מצאנו איבר למחיקה.
def remove_multiples(number_list, divnum):
i=0
while i < len(number_list):
if number_list[i] % divnum == 0:
number_list.pop(i)
else:
i+=1
דרך פתרון 2
פיתרון חלופי הוא לבנות רשימה חדשה שמכילה רק את האיברים הנחוצים ואז לדרוס את הרשימה הישנה:
def remove_multiples(number_list, divnum):
new_list = []
for num in number_list:
if num % divnum != 0:
new_list.append(num)
#[:] is required to change the objet itself, and not the reference
number_list[:] = new_list
דרך פתרון 3
ננצל את הפונקציה המובנית filter, המקבלת פונקציה שבאמצעותה היא מחליטה מה להשאיר, וכמו בפיתרון ב נדרוס את הרישמה הישנה. לfilter יש לספק פונקציה שיכולה לקבל איבר מתוך הרשימה ולהחזיר True או False עבור איבר זה. True משמעותו שיש להשאיר את האיבר ו-False משמעותו שיש להסירו:
def remove_multiples(number_list, divnum):
number_list[:] = filter(lambda num: (num % divnum)!=0, new_list)
דרך פתרון 4
כמו פיתרון ג, אך נשתמש ב-list comprehension כדי לסנן
def remove_multiples(number_list, divnum):
number_list[:] = (n for n in number_list if (n % divnum)!= 0)
תשובה לתרגיל 3
text = input("enter a word:").lower()
if text == text[::-1]:
print(text, "is a palindrome")
else:
print(text, "is not a palindrome")
תשובה 4
import random
numbers = list(range(1,10))
# we will read the line containing the numbers
guess = input("enter 6 different numbers from 1-37:")
# split it into a list of strings of these numbers
guess = guess.split()
# convert the string into integers
guess = [int(n) for n in guess]
# for the sake of bervity we didn't test the list for errors (not numbers, repeasting numbers not 6 exactly)
guess.sort()
result = random.sample(numbers, 3)
result.sort()
print("result:", result)
if result == guess:
print("You Win")
else:
print("You Lose")
תשובה לתרגיל 5
import sys #argv
#using update mode "r+" we can read the file until its end
#and then follow it with a write to the end of the file
f = open(sys.argv[1], "r+")
s = 0
for line in f:
s += int(line)
f.write("{}n".format(s))
תשובה 6
def sumlist(numbers):
result = [0] * 10
for n in numbers:
result[n]+=1
return result
תשובה 7
הקוד מייצר "שאריות" של תתי מחרוזות שה-Collector Garbage צריך לנקות. כדי למנוע זאת נוכל להשתמש ב-
StringBuilder שמצמצם ייצור של "שאריות":
def check_list(x):
for element in x:
if not isinstance(element, int):
raise ValueError(
"all elements of the list must be of type int")
elif not 1 <= int(element) <= 100:
raise ValueError(
"all elements of the list must be between 1-100")
תשובה לתרגיל 8
x[0]=9
print(y)
print(z)
print(x is y)
print(x is z)
תשובה לתרגיל 9
כותרת with משמשת עבור מקרים בהם יש לנו צורך לבצע פעולות של "לקיחה" ו"שחרור" של משאבים. השפה יודעת לשחרר את המשאב באופן אוטומטי כאשר יוצאים מה-scope של הכותרת. כך למשל נוכל לפתוח קבצי טקסט ומסדי נתונים מבלי לכתוב במפורש קוד לסגירה שלהם ואפילו לבצע acquire ו-release אוטומטי על mutex. השחרור של המשאבים מתבצע אפילו כאשר נזרקת שגיאה לא מטופלת (uncaught exception). המילה with מאפשרת לנו לכתוב קוד יותר מתומצת ויותר מוגן.
תשובה לתרגיל 10
f = open("data.bin", "rb")
data = f.read(4)
num1 = int.from_bytes(data, 'big')
data = f.read(4)
num2 = int.from_bytes(data, 'big')
print(num1 + num2)
מעוניינים לשפר את הידע בתכנות בשפת Python ולפתוח המון אפשרויות פיתוח חדשות בעולם ההייטק?
בוא ללמוד Python עם צוות Real Time College
לפרטים נוספים > קורס Python