מלאו פרטים לקבלת יעוץ
תוכן עניינים
  • תרגילים בשפת Python
  • להלן פתרונות תרגילי Python

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

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

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

ועוד,

צוות Real Time Colleg הכין במיוחד עבורכם מדריך תרגילים ופתרונות בשפת פייטון - בואו לראות מה הרמה שלכם בשפה הכי חמה בתעשייה!

תרגול שפת פייתון

שאלה 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)


מעוניינים לשפר את הידע בתכנות בשפת Python ולפתוח המון אפשרויות פיתוח חדשות בעולם ההייטק?
בוא ללמוד Python עם צוות Real Time College
לפרטים נוספים > קורס Python

מאמרים בהמשך לתרגול בשפת פייתון