לימודי Python תרגילים ופתרונות

עודכן לאחרונה: 31 אוגוסט, 2022

תרגילים בשפת Python

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

שפת Python  נחשבת כיום לאחת משפות התכנות הפופולריות והמבוקשות ביותר בתעשיית ההייטק.

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

היסטוריה על שפת תכנות Python

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

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

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

Python היא Open Source ולכן תכנות פייתון הוא חינמי. זהו אחד מיתרונותיה הבולטים – היא זמינה לשימוש ללא תשלום בצורה הבינארית שלה ובצורת המקור. בנוסף, שפת פייתון הינה שפה ניידת ועובדת במערכות ההפעלה השונות.

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

צוות Real Time College הכין במיוחד עבורכם תרגילים בשפת פייתון:

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

שאלה 2: כתבו תכנית בשפת פייתון שמקבלת רשימה של מספרים, ומספר נוסף. הפונקציה תשנה את הרשימה עצמה (IN-PLACE) כך שהיא לא תכיל מספרים שמתחלקים במספר הנוסף.

שאלה 3: כתבו קוד בפייתון שקולטת מחרוזת מהמשתמש ומדפיסה האם היא פלינדרום (מחרזות היא פלינדרום אם היא זהה להיפוכה. למשל level, noon ו-racecar הן מילים פלינדרומיות. 

שאלה 4: כתבו תכנית המדמה הגרלה. נקלוט מהמשתמש 3 מספרים שונים בין 0 ל-9. לאחר מכן התכנית תבחר באקראי 3 מספרים שונים מטווח זה (0-9). אם המספרים שנבחרו זהים לאלו שהמשתמש ניחש נדפיס "You Win" אחרת נדפיס "You Lose". 

שאלה 5: כתבו תכנית המקבלת כארגומנט ראשון שם של קובץ. הנח כי הקובץ הוא קובץ טקסט שמורכב משורות של מספרים. סכום מספרים אלו וכתוב לסוף הקובץ את הסכום שהתקבל.  

שאלה 6: כתבו פונקציה בשפת התכנות פייתון שמקבלת רשימה של מספרים מ-0 עד 9 ותחזיר רשימה חדשה שסופרת סכום נפרד עבור כל ספרה. למשל אם ברשימה שהתקבלה המספר 2 מופיע 7 פעמים אז ברשימה המוחזרת במקום ה-2 יהיה שמור הערך 7 

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

שאלה 8: מה ההבדל בין y לבין z בתוכנית הבאה? כתבו תכנית שמדגימה את ההבדל: 

שאלה 9: הסבירו למה משמשת המילה with בפיתוח פייתון? מהי חשיבותה של המילה זו (מדוע היא התווספה לשפה)? 

שאלה 10: נתון לנו קובץ בינרי שמכיל 8 בתים בשם "data.bin". ידוע שהמידע מייצג שני מספרים שלמים בגודל 4 בתים בשיטת big-endian. כתבו קוד שמדפיס את סכום המספרים הללו:

פתרונות תרגילי Python

תשובה לתרגיל 1

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)

 

תחומי לימוד הכי מבוקשים בהייטק בשנת 2024

© כל הזכויות שמורות Real Time Group