תחי ישראל - אין לנו ארץ אחרת

תחי ישראל -אין לנו ארץ אחרת

מדריך פייתון

מה זה פייתון?

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

איך להתחיל ללמוד פייתון? שלום עולם וסביבת העבודה

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

איך להתחיל ללמוד פייתון? שלום עולם וסביבת העבודה

מדריך פייתון: משתנים, ערכים ו-print

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

מדריך פייתון: משתנים, ערכים ו-print

לולאת for - במקום לחזור על עצמך תריץ לולאה

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

מדריך לולאת for פייתון

לולאת while פייתונית

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

לולאת while פייתונית

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

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

מדריך ללימוד רשימות של פייתון

תנאים של פייתון באמצעות if, elif ו-else

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

תנאים של פייתון באמצעות if, elif ו-else

טאפלים של פייתון - רשימות שלא ניתן לשנות

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

טאפלים של פייתון - רשימות שלא ניתן לשנות

מילונים בשפת פייתון

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

מילונים בשפת פייתון

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

מתמטיקה בפייתון

פעולות על מחרוזות בפייתון

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

פעולות על מחרוזות בפייתון

איך לכתוב פונקציות בפייתון?

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

איך לכתוב פונקציות בפייתון?

ארבעת התחומים (scope) של פייתון

אחד הדברים הכי חשובים למתכנת בכל שפת תכנות הוא התחום של משתנים (scope) שמאפשר לגשת למשתנים בהתאם לתחום שבו הם מוגדרים. בפייתון תקף כלל LEGB שקובע את הסדר שבו ניתן לגשת לתחומים. LEGB הם ראשי תיבות של שמות ארבעת התחומים הפייתוניים.

ארבעת התחומים (scope) של פייתון

יבוא קבצים ומודולים

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

מודול os - הקשר של פייתון עם מערכת ההפעלה

מודול os של פייתון מאפשר לנו לעבוד עם מערכת ההפעלה (OS). להריץ פקודות של מערכת ההפעלה ולעבוד עם מערכת הקבצים, ובכלל כך לנווט בתוך מערכת הקבצים, ולשנות את שמם של קבצים ותיקיות.

מודול os - הקשר שלך עם מערכת ההפעלה

קריאה וכתיבה של קבצים בפייתון

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

מדריך פייתון קריאה וכתיבה של קבצים python

עבודה עם תאריכים בפייתון

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

עבודה עם תאריכים בפייתון

מדריך ביטויים רגולריים בפייתון

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

מדריך ביטויים רגולריים בפייתון

מדריך CSV בפייתון

במדריך זה נלמד איך להשתמש בקובץ CSV הדומה לאקסל והרבה יותר שימושי למתכנתים.

מדריך CSV בפייתון

עבודה עם פייתון במסד נתונים mySQL

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

עבודה עם פייתון במסד נתונים mySQL

טיפול בחריגים בפייתון באמצעות הבלוקים try ו-except

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

טיפול בחריגים בפייתון באמצעות הבלוקים try ו-except

פייתון בעולם האמיתי

JSON וצריכת API בפייתון

במדריך נלמד איך להשתמש ב-JSON בפייתון. בסוף המדריך כללתי מיני-פרוייקט במסגרתו נוריד את התמונה היומית מה-API של סוכנות החלל האמריקאית, NASA.

JSON וצריכת API בפייתון

קוד אסינכרוני בפייתון באמצעות ספריית asyncio

פייתון משתמש בשתי גישות להרצת קוד code execution. הגישה הסינכרונית בה הקוד מבוצע שורה אחרי שורה כאשר הגישה החלופית מאפשרת לכמה משימות להתבצע בו-זמנית concurrent מה שיכול לקצר את משך הביצוע. הגישה הא-סינכרונית עובדת עם אותו ה- thread אבל קופצת בין ביצוע של כמה משימות במקום לחכות להשלמת כל פעולה בנפרד מה שמקצר משמעותית את זמן הביצוע. במדריך זה נלמד איך לכתוב קוד אסינכרוני באמצעות ספריית asyncio של פייתון.

בדיקות יחידה unit test בפייתון באמצעות pytest

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

בדיקות יחידה unit test בפייתון באמצעות pytest

עבודה עם selenium ספרייה לבדיקות תוכנה אוטומטיות

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

גירוד דפי רשת (Web scraping) באמצעות פייתון

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

גירוד דפי רשת (Web scraping) באמצעות פייתון

לוגים של פייתון ב-5 צעדים פשוטים

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

עבודה עם תמונות בפייתון

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

עבודה עם תמונות בפייתון pillow

למה ואיך לעבוד עם סביבה וירטואלית בפייתון

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

virtual environment python

מה זה data classes בפייתון ואיך להשתמש בזה

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

מה זה data classes בפייתון ואיך להשתמש בזה

כדאי לדעת

מדריך פייתון : list comprehensions

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

מדריך פייתון : list comprehensions

סטים בשפת פייתון

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

סטים בשפת פייתון

מה זה generator של פייתון? ואיך משתמשים בו

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

מה זה generator של פייתון? ואיך משתמשים בו

פונקציות למדא (lambda) אנונימיות בפייתון

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

פונקציות למדא (lambda) אנונימיות בפייתון

מדריך map, filter, reduce

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

מדריך map, filter, reduce

args ו-kwargs בפייתון מוסברים בשפה פשוטה

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

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

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

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

מה זה __name__ == "__main__" בפייתון?

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

מה זה __name__ == __main__ בפייתון?

עבודה עם מספרים בינאריים ואופרציות Bitwise בפייתון

אופרציות Bitwise (Bitwise Operations) מאפשרות לעבוד ישירות עם ביטים בודדים. פעולות אלו משמשות למשימות כמו קריפטוגרפיה, דחיסה, תקשורת נתונים, ועוד. במדריך זה תלמד אודות האופרטורים AND, OR, XOR, NOT ואודות הזזת ביטים bit shifts.

עבודה עם מספרים בינאריים ואופרציות Bitwise בפייתון

מתודות ותכונות קסם בפייתון

מתודות קסם, magic methods, מתודות מיוחדות, dunder methods (קיצור של double underscoremethods) כולם שמות לקבוצה של פונקציות פייתוניות שמספקות התנהגות מיוחדת. במדריך זה תקבל הסבר תמציתי על המתודות שארגז הכלים של שום מכשף (סליחה מתכנת 😄 לא יכול להיות שלם בלעדיהם.

מבני נתונים ואלגוריתמים

big-O ביטוי ליעילות הקוד

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

רקורסיה בפייתון - כל מה שרצית לדעת ועוד כמה דברים חשובים

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

רקורסיה בפייתון - כל מה שרצית לדעת ועוד כמה דברים חשובים

אלגוריתם חיפוש בינארי - מהבנה ליישום

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

אלגוריתם חיפוש בינארי - מהבנה ליישום

stacks, ערימות וחידות

ערימה stack היא מבנה נתונים שעובד לפי העיקרון של אחרון נכנס ראשון יוצא (Last-In-First-Out) LIFO. במדריך זה נבין איך זה עובד (רמז: זה לא קשה בכלל), ניישם באמצעות קוד פייתון, והכי חשוב ננסה לפתור כמה חידות באמצעותו.

תורים Queues - הבנה ויישום בפייתון

תור queue הוא מבנה נתונים המשמש לאחסון רשימה של אלמנטים בסדר מסוים. כאשר משתמשים בתור queue הפריטים מתווספים בצד אחד הידוע כאחורי התור (rear ,tail), ומוסרים מהצד השני, הידוע בתור ראש התור head of the queue. סדר זה של ראשון נכנס - ראשון יוצא מכונה FIFO, First-In First-Out. ב-Queues משתמשים לצורך ניהול משימות ברשת האינטרנט או אירועים events בתוכנה לפי הסדר בו התקבלו. במדריך זה ניישם queues בפייתון.

תורים Queues - הבנה ויישום בפייתון

Linked list - רשימה מקושרת - תיאוריה, קוד ואתגרים תכנותיים

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

Linked list - רשימה מקושרת - תיאוריה, קוד ואתגרים תכנותיים

General Tree data structure עץ נתונים

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

General Tree data structure עץ נתונים

יישום עץ בינארי בפייתון - המדריך למתחילים

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

יישום עץ בינארי בפייתון - המדריך למתחילים

ערימה בינארית Binary Heap ותור עדיפויות Priority Queue

ערימה בינארית binary heap היא עץ בינארי המציית לכללים המסדירים את ארגון הצמתים שלו. יתרון עיקרי לשימוש בערימה הוא יכולתה לאחזר במהירות את הפריט הגדול או הקטן ביותר. זה הופך אותה לפתרון מועדף ליישומי תור עדיפויות (priority queue), שם פריטים מעובדים על פי מידת הקדימות שלהם - קודם הדחוף ביותר.

ערימה בינארית Binary Heap ותור קדימויות Priority Queue

אלגוריתם Selection Sort מיון בחירה

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

אלגוריתם Selection Sort מיון בחירה

להבין את מיון מיזוג - merge sort - אלגוריתם הפרד ומשול יעיל

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

להבין את מיון מיזוג - merge sort - אלגוריתם הפרד ומשול יעיל

האלגוריתם Quicksort ותהליך החלוקה

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

האלגוריתם Quicksort ותהליך החלוקה

יישום תורת הגרפים בפייתון - חלק א

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

יישום תורת הגרפים בפייתון - חלק א

יישום רשימת סמיכויות adjacency list - חלק ב בסדרה על גרפים

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

חלק ג בסדרה על גרפים - Pyviz - ספרייה להצגת גרפים אינטראקטיביים

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

הבנת אלגוריתם חיפוש לרוחב - BFS - סריקה של גרפים ומציאת הנתיב הקצר ביותר

חיפוש לרוחב Breadth-first search) BFS) הוא אלגוריתם בסיסי לסריקת צמתים וקשׂתות של גרף באופן שיטתי ובשכבות. הוא מתחיל בצומת מסויים, חוקר את שכניו, ואז עובר לשכבת השכנים הבאה באמצעות מבנה נתונים של תור queue כדי לעקוב אחר סדר הסריקה. לחיפוש לרוחב יש מורכבות זמן של O(V + E) והוא שימושי במיוחד למציאת הנתיב הקצר ביותר בגרפים חסרי משקל וכן כבסיס לאלגוריתמים אחרים בתורת הגרפים.

הבנת אלגוריתם חיפוש לרוחב - BFS - סריקה של גרפים ומציאת הנתיב הקצר ביותר

אלגוריתם חיפוש לעומק DFS - מהבנה ליישום

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

אלגוריתם חיפוש לעומק DFS - מהבנה ליישום

אלגוריתם דייקסטרה Dijkstra למציאת הנתיב הקצר ביותר בגרף ממושקל

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

אלגוריתם דייקסטרה Dijkstra למציאת הנתיב הקצר ביותר בגרף ממושקל

מיון טופולוגי באמצעות אלגוריתם Kahn

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

מיון טופולוגי באמצעות אלגוריתם Kahn

שימוש בטכניקות שני המצביעים לפתרון בעיות תכנותיות

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

שימוש בטכניקות שני המצביעים לפתרון בעיות תכנותיות

אתגר תכנותי: חיפוש במערך מסובב

נתון מערך מספרים `nums` המסודרים בסדר עולה, אך הם עשויים להיות מסובבים סביב נקודת ציר כלשהי. מערך מסובב הוא מערך בו נקודת ציר מחלקת את המערך, והמספרים מסתדרים סביב הציר כמו ציר של דלת. בהינתן מערך לאחר הסיבוב ומספר מטרה, עליך להחזיר את האינדקס בו נמצאת המטרה או -1 אם המטרה לא קיימת במערך. הדרישה היא לכתוב אלגוריתם עם סיבוכיות זמן של O(log N).

אתגר תכנותי: חיפוש במערך מסובב

אתגר תכנותי: מציאת מינימום במערך מסובב

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

אתגר תכנותי: מציאת מינימום במערך מסובב

טכניקת חלון ההזזה sliding window לפתרון בעיות ברצפים

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

טכניקת חלון ההזזה sliding window לפתרון בעיות ברצפים

פתרון בעיות אופטימיזיציה באמצעות אלגוריתם חמדן

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

פתרון בעיות אופטימיזיציה באמצעות אלגוריתם חמדן

תכנות דינמי מלמטה למעלה ובחזרה - מדריך לתכנות דינאמי שמתחיל מהבסיס

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

תכנות דינמי מלמטה למעלה ובחזרה - מדריך לתכנות דינאמי שמתחיל מהבסיס

אתגר תכנותי: שודד הבתים

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

אתגר תכנותי: שודד הבתים

פתרון בעיית הקיטבג knapsack באמצעות תכנות דינמי

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

מבוא לbacktracking או מציאת כל השילובים באמצעות אלגוריתם גישוש נסוג

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

מבוא ל backtracking או מציאת כל השילובים באמצעות אלגוריתם גישוש נסוג

שימוש באלגוריתם backtracking גישוש נסוג לפתרון האתגר של N מלכות

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

שימוש באלגוריתם backtracking גישוש נסוג לפתרון האתגר של N מלכות

קוד לפתרון סודוקו בעזרת אלגוריתם backtracking גישוש נסוג

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

קוד לפתרון סודוקו בעזרת אלגוריתם backtracking גישוש נסוג

אתגרים תכנותיים

אתגר תכנותי: twoSum

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

אתגר תכנותי: האם מספר שמח 😄

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

אתגר תכנותי: האם מספר שמח 😄

אתגר תכנותי: תת מערך בעל סכום מירבי

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

חידה תכנותית: תת מערך בעל סכום מירבי

אתגר תכנותי: איסוף ערכי המקסימום בתוך חלון הזזה Sliding window maxima

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

אתגר תכנותי: איסוף ערכי המקסימום בתוך חלון הזזה Sliding window maxima

אתגר תכנותי: מכפלת הכל לבד מהנוכחי

יש לכתוב פונקציה `product_except_self` שתקבל קלט מערך מספרים באורך n כאשר תפקידה של הפונקציה הינו לייצר מהמערך המקורי מערך מספרים גם כן באורך n כאשר כל פריט שמיקומו i במערך הפלט הינו מכפלה של כל המספרים במערך המקורי לבד מהמספר במיקום i.

אתגר תכנותי: מציאת תת מערך רציף שיש לו מכפלה מקסימלית

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

אתגר תכנותי: מציאת תת מערך רציף שיש לו מכפלה מקסימלית

אתגר תכנותי: מיכל עם הכי הרבה מים

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

חידה תכנותית: מיכל עם הכי הרבה מים

חידה תכנותית: מטריצה ספירלית

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

חידה תכנותית: מטריצה ספירלית

חידה תכנותית: האם אנגרמה?

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

חידה תכנותית: מכפלת כל הפריטים במערך מלבד הנוכחי

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

חידה תכנותית: מכפלת כל הפריטים במערך מלבד הנוכחי

חידה תכנותית: כמה דרכים שונות לטפס מדרגות

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

חידה תכנותית: סידור של תלוית

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

חידה תכנותית : סריקת עץ בינארי על פי סדר הרמות

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

חידה תכנותית : מציאת האב המשותף הרחוק ביותר LCA בעץ בינארי

האב המשותף הנמוך ביותר (LCA = Lowest Common Ancestor) של שני צמתים השייכים לעץ בינארי, p ו-q, הוא הצומת הרחוק ביותר משורש העץ שיש לו את שני הצמתים כצאצאים. עליך לכתוב פונקציה שמוצאת את ה-LCA של עץ נתון עבור שני הצמתים: p ו-q.

חידה תכנותית : מציאת האב המשותף הרחוק ביותר LCA בעץ בינארי

חידה תכנותית: מציאת הפריטים הקרובים ביותר לערך מטרה בתוך מערך

נתון לך מערך `arr` של מספרים שלמים ממוינים בסדר עולה מהפריט הנמוך לגבוה, וערך מטרה `target`. עליך למצוא את k הפריטים הקרובים ביותר לערך המטרה במערך. במקרה של שוויון יש להעדיף את הפריטים הקטנים יותר.

אתגר תכנותי: מציאת הפריטים הקרובים ביותר לערך מטרה בתוך מערך

אתגר תכנותי: מציאת הנתיב העולה הארוך ביותר במטריצה

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

אתגר תכנותי: איזה מספר חסר

נתון מערך `nums` המכיל n מספרים מובחנים בטווח [0, n]. עליך להחזיר את המספר היחיד בטווח שאינו מופיע במערך.

אתגר תכנותי: איזה מספר חסר

אתגר תכנותי: מציאת מספר הביטים שהם 1 במספר בינארי

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

אתגר תכנותי: מציאת מספר הביטים שהם 1 במספר בינארי

אתגר תכנותי: היפוך ביטים של מספר בינארי באמצעות אופרציות Bitwise

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

אתגר תכנותי: היפוך ביטים של מספר בינארי באמצעות אופרציות Bitwise

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

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

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

קלאס משתמש באפליקציית FastApi

יצירת קשר בין קלאסים וטבלאות במסד הנתונים באמצעות relationships

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

פייתון מונחה עצמים

פייתון מונחה עצמים 1: מחלקות, אובייקטים, תכונות ומתודות

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

פייתון מונחה עצמים 2: משתנה אובייקט ומשתנה מחלקה

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

פייתון מונחה עצמים 3: הורשה

אחד המאפיינים של תכנות מונחה עצמים הוא שימוש בהורשה - העברת תכונות ומתודות ממחלקה הורה super class למחלקות היורשות אותה sub class. הורשה מיעלת את כתיבת הקוד, שאותו נכתוב פעם אחת בהורה ואחר כך נשתמש בו במחלקות היורשות במקום לכתוב את אותו הקוד שוב ושוב בכל מחלקה בנפרד.

פייתון מונחה עצמים 4: פולימורפיזם ושמות של מתודות

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

פייתון מונחה עצמים 5: קומפוזיציה

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

exception handling tutorial python

ואידך זיל גמור...

 

הוסף תגובה חדשה

 

 

ענה על השאלה הפשוטה הבאה כתנאי להוספת תגובה:

מתי הוקמה המדינה?

 

תמונת המגיב

נתי גרוסמן בתאריך: 11.03.2020

מדריך פ33ההההה

תמונת המגיב

מנדי בתאריך: 09.07.2020

יוסי תותח על תודה רבה על העזרה

תמונת המגיב

יוסי בתאריך: 29.07.2020

ואו תודה!

תמונת המגיב

ארי בתאריך: 02.08.2020

כל הכבוד על המדריך
מאד יפה ועזר לי מאד

תמונת המגיב

בועז בתאריך: 04.10.2020

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

תמונת המגיב

אשר בתאריך: 14.10.2020

יוסי יא מלך !

תמונת המגיב

שלמה בתאריך: 02.11.2020

ברוך ה שיש אנשים טובים כמוך בעולם

תמונת המגיב

נתי גרסימוב בתאריך: 03.11.2020

מדריך מדהים מקווה שתוסיפו עוד מידע על ספריות נוספות

תמונת המגיב

שוש בתאריך: 04.11.2020

תודהה!!!!
עוזר לי מאוד!!

תמונת המגיב

אליחי בתאריך: 14.12.2020

ואווו אין מילים איזה יופי באמת שאפו!

תמונת המגיב

דוד בתאריך: 29.01.2021

תודה לך
שיעורים מדהימים.
אתה מתכנן אולי עוד שיעורים על בניית חלונות עם Tkinter?

תמונת המגיב

יוסי בן הרוש בתאריך: 05.02.2021

הי דוד, אני מתעניין בפייתון בגלל השימוש בה לצורך למידת מכונה.

תמונת המגיב

נעה בתאריך: 31.01.2021

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

תמונת המגיב

שבי בתאריך: 13.07.2021

יש אפשרות בפייתון לאתחל משתנה בפונקציה רק בפעם הראשונה שקראו לה

תמונת המגיב

יוני בתאריך: 19.09.2021

תודה אין עליך אחלה אתר!!!

תמונת המגיב

אביטל בתאריך: 12.10.2021

מדריך מעולה, מושקע ברור ומובן מאוד!

תמונת המגיב

עדן בתאריך: 28.10.2021

אפשר לפתוח קובץ csv בתוך מחלקה כלשהי או רק מתוך ה main? הכוונה שבפונקציית ה init שלי אני אקבל 2 קבצים ואפתח ואקרא אותם ואהפוך לרשימה? או רק שב main אפתח אקרא ואהפוך לרשימה ואז ב init אקבל 2 רשימות?

תמונת המגיב

כרמית בתאריך: 14.01.2022

מדהים

תמונת המגיב

דן עוגן בתאריך: 22.06.2022

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

תמונת המגיב

ירון בתאריך: 10.07.2022

מדריך מושלם הכי טוב בעברית תודה רבה !

תמונת המגיב

מאיר בתאריך: 26.07.2022

מקיף מאוד מאוד!! לא מצאתי עוד מדריך בכזה סדר גודל בעברית, וזה נחוץ ביותר.

תמונת המגיב

יוני בתאריך: 06.09.2022

אשמח אם תוכל (אם אפשרי, כמובן) להסביר לי מה לא בסדר בקוד שלי. אני מנסה לכתוב תוכנה שתמצא מספרים ראשוניים. import math a = math.sqrt x = 3 while x > 0: b = int(a(x)) list1 = [] list2 = [] for i in range(2, b): c = str(i) if x % i == 0: list1.append(c) else: list2.append(c) if list2 == []: print(x) x += 1 if x == 100: break

תמונת המגיב

שולום בתאריך: 19.01.2023

למדתי מלא תודה

תמונת המגיב

הראל בתאריך: 14.08.2024

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

תמונת המגיב

מעיין בתאריך: 17.12.2024

המדריך הכי יעיל שקיים