מדריך פייתון
מה זה פייתון?
במדריך קצר זה תמצא הסבר על פייתון - שפת המחשב הפופולרית מאוד - בזכות מגוון שימושים וקלות כתיבה. בנוסף, תוכלו לגלות כיצד גם אתם תוכלו ללמוד את השפה המועדפת על ידי חברות, סטרטאפים ומתכנתים בעולם.
איך להתחיל ללמוד פייתון? שלום עולם וסביבת העבודה
אחת הבעיות הגדולות למי שמעולם לא למד תכנות היא איפה כותבים את הקוד ואיך מריצים. במדריך זה תמצא הסבר על איך לכתוב ולהריץ פייתון - מהדרכים הפשוטות ביותר שמתאימות למתחילים גמורים ועד לסביבות הפיתוח בהם משתמשים מקצועני התוכנה.
מדריך פייתון: משתנים, ערכים ו-print
גם בתכנות קיימים משתנים והם יכולים לקבל איזה ערך שנציב לתוכם. ניתן להציב בהם מספרים, טקסט (מחרוזת), וסוגים נוספים שעליהם נלמד במדריכים בסדרה ללימוד פייתון.
לולאת for - במקום לחזור על עצמך תריץ לולאה
אחד היתרונות של שימוש במחשב הוא שהוא יכול לבצע את אותה הפעולה אינסוף פעמים (כמעט) בלי לקטר, בלי להתייאש ובלי לטעות. כדי לבצע את אותה הפעולה אפשר לכתוב את אותו קוד מספר פעמים אבל למה להתאמץ. עדיף להשתמש בלולאה בתוכה נריץ את אותו קוד כמה פעמים שנרצה. במדריך זה נלמד את הנושא של לולאת for.
לולאת while פייתונית
במדריך הקודם בסידרה ללימוד פייתון למדנו על לולאות for שכדי להפעיל אותה צריך להגדיר מראש את טווח הערכים שבתוכה הלולאה פועלת. במדריך זה נלמד על לולאת while שרצה עד שהיא פוגשת בתנאי שגורם לה להפסיק או עד שהיא מגיעה ל-break.
רשימות של פייתון
רשימה של פייתון list היא משתנה שיכול להכיל מספר פריטים יחדיו. שם נוסף לרשימה הוא מערך. במדריך זה תלמדו כיצד לעבוד עם רשימות פייתוניות.
תנאים של פייתון באמצעות if, elif ו-else
תנאים של פייתון מאפשרים לנו לבצע קוד רק בתנאי שהוא עומד בתנאים. במדריך זה היכרות ראשונית עם הנושא ההכרחי לכל מתכנת.
טאפלים של פייתון - רשימות שלא ניתן לשנות
במדריך קודם למדנו אודות רשימות שהם סוג הנתונים הפופולרי ביותר כשרוצים לאחסן אוסף של נתונים. במדריך זה נלמד אודות טאפל שהם רשימות שאי אפשר לשנות ובכל זאת הם מאוד שימושיות.
כל מתכנת חייב שיהיו ברשותו כלים מתמטיים, ואכן פייתון כוללת שפע של פונקציות וספריות מתמטיות, ואף נחשבת לשפה המובילה בתחום של יישומי מתמטיקה בתכנות. במדריך זה נלמד את הבסיס של שימוש במתמטיקה בשפת הפייתון.
פעולות על מחרוזות בפייתון
שפת ה-Python כוללת שפע של פונקציות שתפקידן לטפל בטקסטים. פונקציות אילה הן פונקציות מחרוזת. בפייתון קיימות כמה עשרות פונקציות מחרוזת, ובמדריך זה אציג מספר פונקציות ופעולות שימושיות במיוחד.
איך לכתוב פונקציות בפייתון?
פונקציה מכילה מספר פקודות שמקובצות ביחד תחת שם אחד באופן שניתן לקרוא לה מאיפה שצריך, מתי שצריך. פונקציות משמשות בכל מקום בפייתון ולכן חשוב מאוד ללמוד לכתוב אותם.
ארבעת התחומים (scope) של פייתון
אחד הדברים הכי חשובים למתכנת בכל שפת תכנות הוא התחום של משתנים (scope) שמאפשר לגשת למשתנים בהתאם לתחום שבו הם מוגדרים. בפייתון תקף כלל LEGB שקובע את הסדר שבו ניתן לגשת לתחומים. LEGB הם ראשי תיבות של שמות ארבעת התחומים הפייתוניים.
יבוא קבצים ומודולים
כשאנחנו עובדים על משימת התכנות שלנו מהר מאוד נגלה שאנחנו צריכים להשתמש ביותר מקובץ אחד משלוש סיבות עיקריות: הקוד שאנחנו כותבים הופך לארוך מדי וקשה לנו לנהל אותו, צוות של מתכנתים עובדים במקביל על אותו פרויקט או שאנו רוצים להפחית את מידת המאמץ על ידי יבוא פונקציות שכתבו מתכנתים אחרים, וארוזות בתוך מודולים. במדריך זה נלמד כיצד לייבא קבצים שלנו ומודולים שכתבה קהילת הפייתון.
מודול os - הקשר של פייתון עם מערכת ההפעלה
מודול os של פייתון מאפשר לנו לעבוד עם מערכת ההפעלה (OS). להריץ פקודות של מערכת ההפעלה ולעבוד עם מערכת הקבצים, ובכלל כך לנווט בתוך מערכת הקבצים, ולשנות את שמם של קבצים ותיקיות.
קריאה וכתיבה של קבצים בפייתון
אחת המשימות הנפוצות ביותר בתכנות פייתון היא קריאה וכתיבת של קבצים. בין אם זה כתיבה לקובץ טקסט פשוט, או העתקת תמונה, כל המשימות האילה מחייבים קריאה או כתיבה של קבצים. במדריך זה תכירו את הפקודות הבסיסיות של קריאת וכתיבת קבצים ב-python.
עבודה עם תאריכים בפייתון
ישנם כמה ספריות לעבודה עם זמנים בפייתון. במדריך זה נכיר את הספריות החשובות ביותר.
מדריך ביטויים רגולריים בפייתון
ביטויים רגולריים regex משמשים למציאת התאמות בטקסט ומהווים חלק חשוב מפייתון. במדריך זה תלמדו את הבסיס של regex שמאפשר לעשות הרבה במעט קוד.
עבודה עם פייתון במסד נתונים mySQL
במדריך זה תקבל הסבר על עבודה עם מסד נתונים מסוג mySQL, מפני שהוא נפוץ ביותר בשימוש באפליקציות מבוססות פייתון.
טיפול בחריגים בפייתון באמצעות הבלוקים try ו-except
טיפול בחריגים Exceptions היא דרך מקובלת לטיפול בשגיאות באופן אלגנטי. לדוגמה, אם נכשל הניסיון שלנו להתחבר למסד הנתונים, אנחנו יכולים לטפל בשגיאה ע"י הפנייה למקור נתונים חלופי או לפחות לספק הודעת שגיאה אינפורמטיבית. במדריך זה הסבר כיצד לטפל בחריגים בפייתון.
פייתון בעולם האמיתי
JSON וצריכת API בפייתון
במדריך נלמד איך להשתמש ב-JSON בפייתון. בסוף המדריך כללתי מיני-פרוייקט במסגרתו נוריד את התמונה היומית מה-API של סוכנות החלל האמריקאית, NASA.
קוד אסינכרוני בפייתון באמצעות ספריית asyncio
פייתון משתמש בשתי גישות להרצת קוד code execution. הגישה הסינכרונית בה הקוד מבוצע שורה אחרי שורה כאשר הגישה החלופית מאפשרת לכמה משימות להתבצע בו-זמנית concurrent מה שיכול לקצר את משך הביצוע. הגישה הא-סינכרונית עובדת עם אותו ה- thread אבל קופצת בין ביצוע של כמה משימות במקום לחכות להשלמת כל פעולה בנפרד מה שמקצר משמעותית את זמן הביצוע. במדריך זה נלמד איך לכתוב קוד אסינכרוני באמצעות ספריית asyncio של פייתון.
בדיקות יחידה unit test בפייתון באמצעות pytest
Unit tests הוא סוג של בדיקת קוד שתפקידה לבחון האם חלקים של הקוד עובדים, היא עובדת לרוב ברמת הפונקציה או המתודה הבודדות. התפקיד של Unit test הוא לוודא שכל חלק של התוכנה עובד כמצופה כשהוא מבודד מהיתר, ולזהות באגים ובעיות כמה שיותר מוקדם בתהליך הפיתוח.
עבודה עם selenium ספרייה לבדיקות תוכנה אוטומטיות
חבילת selenium של פייתון משמשת לביצוע בדיקות אוטומטיות של אתרים כי היא שולטת בדפדפן ומאפשרת לכוון את ההתנהגות שלו. לדוגמה, ניתן להשתמש ב-selenium כדי לבחון את ההתנהגות של טופס בתרחישים שונים ובדפדפנים שונים ואז להריץ את הסקריפט על אוטומט בכל יום באותה שעה כדי לוודא שהטופס תקין. במדריך אשתמש ב- selenium כדי לאתר קישורים שבורים בדף.
גירוד דפי רשת (Web scraping) באמצעות פייתון
גירוד דפי רשת היא טכנולוגיה שמאפשרת לנו להעתיק את תוכנם של דפי אינטרנט ומקורות מידע ברשת למאגרי הנתונים שברשותנו. במדריך זה נלמד לגרד דפי רשת באמצעות ספריית BeautifulSoup של פייתון וכיצד לאחסן את המידע שהורדנו במסד הנתונים ועל קבצי csv במחשב/ בשרת שלנו.
לוגים של פייתון ב-5 צעדים פשוטים
מאוד קל לכתוב הודעות לקונסולה של פייתון וזה גם מה שרובנו עושים כשאנחנו מפתחים תוכנה אבל כשמעלים את הקוד ל-production מועיל יותר לכתוב את ההודעות לקבצי לוגים בגלל שאנחנו רוצים שהתוכנה תשאיר תיעוד של הפעולות שהיא עושה בפרט אם משהו השתבש. איך כותבים קבצי לוגים בקלות וביעילות? לצורך זה פייתון נותן לנו את המודול logging אותו נלמד לבצע ב-5 צעדים פשוטים.
עבודה עם תמונות בפייתון
אחת המשימות הנפוצות ביותר בתכנות פייתון היא עבודה עם תמונות. במדריך זה הסבר על ספרית Pillow שהופכת את העבודה עם תמונות ובכלל כך פתיחה, עריכה ושימוש בפילטרים לפשוטה מאוד.
למה ואיך לעבוד עם סביבה וירטואלית בפייתון
המצב הרגיל הוא שכל הפרויקטים שאנחנו כותבים בפייתון תלויים באותם חבילות גלובליות שהתקנו על המחשב שלנו. הבעיה מתחילה כשאנחנו רוצים לעדכן את החבילות ואז חלק מהפרויקטים מפסיקים לעבוד בשל בעיית תאימות לאחור. הפתרון הוא שימוש בסביבה וירטואלית שמאפשרת לנהל את החבילות באופן נפרד עבור כל פרויקט. והאמת היא שאין דבר קל מכך בגלל שפייתון מציע את המודול venv לניהול סביבה וירטואלית כחלק מהספרייה הסטנדרטית מה שאומר שלא צריך להתקין אותו.
מה זה data classes בפייתון ואיך להשתמש בזה
data classes נוספו לפייתון גרסה 3.7. הם דומים לקלאסים רגילים של פייתון ומספקים תכונות שמקלות על עבודה עם תכנות מונחה עצמים עבור קלאסים שעיקר תפקידם להכיל מידע data classes.
כדאי לדעת
מדריך פייתון : list comprehensions
אחד הפינוקים שמציעה שפת הפייתון הוא list comprehension שפועל כמו לולאות על רשימות בתחביר קומפקטי וקריא יותר.
סטים בשפת פייתון
set הוא אוסף לא מסודר של אלמנטים ייחודיים. יש נטייה להזניח את הלימוד של הנושא כשרק מתחילים ללמוד פייתון אבל השימוש בסטים חיוני לכל מי שרוצה לקדם את ידיעתו והבנתו בתחום תכנות ה-Python.
מה זה generator של פייתון? ואיך משתמשים בו
האם קרה לך פעם שרצית להריץ לולאה מספר רב של פעמים אבל המחשב קרס באמצע. אם זה המצב או שאתה פשוט סקרן לדעת מהו generator של פייתון אז הגעת למקום הנכון. generator של פייתון הם שימושיים אם צריך להריץ את אותה הפונקציה מספר רב של פעמים. לדוגמה, ביצוע פעולה על מספר רב של רשומות אותם שולפים ממסד הנתונים או כשרוצים לבצע פעולה מתמטית על סדרה ארוכה של מספרים. במקום שפונקציה רגילה תרוץ על כל הנתונים, generator יאפשר למחשב לעבוד על פריט אחד בכל פעם מה שחוסך מקום בזיכרון ומפחית את העומס על המחשב.
פונקציות למדא (lambda) אנונימיות בפייתון
אחת התכונות הנפלאות של פייתון היא התחביר העשיר. שמצד אחד, מאפשר להגיע לאותה תוצאה במגוון דרכים אבל גם עלול להכשיל את המתכנתים החדשים שעלולים מהר מאוד להיתקל בתחביר לא מוכר בשעה שהם קוראים קוד שמישהו אחר כתב. אז במיוחד בשביל אותם מתכנתים חדשים, כתבתי מדריך שמסביר אודות פונקציות למדא, שנקראות גם פונקציות אנונימיות, פונקציות ללא שם, או ביטויי למדא.
מדריך map, filter, reduce
הפונקציות map, filter, reduce משמשות בפייתון כדי לבצע את אותה הפעולה על כל אחד מהפריטים ברשימה ללא צורך בלולאה. במדריך זה תלמדו אודות הפונקציות ומתי כדאי להשתמש בהם.
args ו-kwargs בפייתון מוסברים בשפה פשוטה
אחרי שקצת השתמשת בספריות של פייתון ודאי נתקלת בשני ארגומנטים שניתן להעביר לפונקציות ששמם args ו-kwargs. במדריך זה נסביר מהם.
דקורטורים של פייתון : דפוס, הבנה ויישום הלכה למעשה
decorator של פייתון מאפשר לשנות את הפעולה של פונקציה על ידי כך שעוטפים אותה בפונקציה אחרת. הפונקציה העוטפת מכונה decorator. היא מקבלת את הפונקציה המקורית כארגומנט ומחזירה גרסה שונה שלה.
מה זה __name__ == "__main__" בפייתון?
למה להשתמש בתנאי? התשובה הקצרה היא ששימוש בתנאי בתוך סקריפט מאפשר להריץ קוד רק כאשר מריצים את הסקריפט ישירות ולא כשמייבאים מודול. לאחר שענינו בקצרה ניגש לתשובה המפורטת שתסביר מה זה __name__, מה זה מודול, מה זה __main__, ותפרט סיבות לשימוש.
מתודות ותכונות קסם בפייתון
מתודות קסם, 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 בפייתון.
Linked list - רשימה מקושרת - תיאוריה, קוד ואתגרים תכנותיים
Linked list רשימה מקושרת היא מבנה נתונים פשוט למדי המורכב מאיברים nodes כשכל איבר מצביע refers על האיבר הבא ברשימה. היתרון הגדול של רשימה מקושרת נובע מאופייה הדינמי. בניגוד למערכים, אורכם של רשימות מקושרות יכול להתרחב או להתכווץ בלי לדרוש הקצאת מקום בזיכרון מראש. הגמישות הזו הופכת את הרשימה לפתרון אותו יש לשקול עבור מקרים בהם מספר הנתונים עשוי להשתנות בחדות לאורך זמן.
General Tree data structure עץ נתונים
אחד היתרונות המרכזיים של עץ כללי Tree data structure הוא יכולתו לייצג מערכות יחסים והיררכיות מורכבות בצורה טבעית ואינטואיטיבית. הוא מאפשר ארגון ואחזור יעיל של נתונים, כמו גם ביצוע פעולות וסריקות traversal המותאמים למבני עצים. תוכל להשתמש בו לייצוג קשרים בין אובייקטים תכנותיים ולתפעל ביעילות יחסים היררכיים בתחום התוכנה.
יישום עץ בינארי בפייתון - המדריך למתחילים
עץ בינארי הוא מבנה נתונים עוצמתי לחיפוש, הכנסה ומחיקה יעילים. במדריך זה תקבל הסבר וקוד פייתון ליישום עץ בינארי.
ערימה בינארית Binary Heap ותור עדיפויות Priority Queue
ערימה בינארית binary heap היא עץ בינארי המציית לכללים המסדירים את ארגון הצמתים שלו. יתרון עיקרי לשימוש בערימה הוא יכולתה לאחזר במהירות את הפריט הגדול או הקטן ביותר. זה הופך אותה לפתרון מועדף ליישומי תור עדיפויות (priority queue), שם פריטים מעובדים על פי מידת הקדימות שלהם - קודם הדחוף ביותר.
אלגוריתם Selection Sort מיון בחירה
אלגוריתם מיון בחירה Selection sort הוא כמעט האלגוריתם הקל ביותר לכתיבה ולהסבר המשמש לסידור פריטים בסדר עולה או יורד. עיקרון הפעולה של האלגוריתם הוא פשוט. מחלקים את מערך הפריטים שאותו צריך לסדר לשניים: בצד אחד הפריטים המסודרים, ובצד השני הפריטים שעוד צריך לסדר. בשביל הסידור נעזרים בלולאה. בכל פעם שהלולאה רצה היא מוצאת את הפריט הקטן ביותר, ומעבירה אותו מהרשימה הלא מסודרת לסוף הרשימה המסודרת.
להבין את מיון מיזוג - merge sort - אלגוריתם הפרד ומשול יעיל
במדריך הזה, נלמד על אחד מתהליכי המיון הפופולריים והיעילים ביותר: merge sort. מיון מיזוג מפריד את בעיית מיון הרשימה לבעיות קטנות יותר ויותר עד שהן ניתנות למיון טריוויאלי. אחר כך, האלגוריתם מאחד את תת-הבעיות הממוינות לרשימה ממוינות. מדריך זה יסביר את עקרונות האלגוריתם, יציג קוד פייתון ליישומו, וידון במורכבות הזמן של הפתרון. בסוף המדריך תהיה לך הבנה טובה יותר של אלגוריתם מיון מיזוג merge sort וכיצד להשתמש בו למיון יעיל של נתונים.
האלגוריתם Quicksort ותהליך החלוקה
Quicksort הוא אלגוריתם יעיל במיוחד לסידור פריטים. Quicksort מבוסס על גישת "הפרד ומשול" Divide and conquer שמפצלת בעיה גדולה לבעיות משנה שקל יותר לפתור. אם בעיות המשנה הם לא מספיק קלות לפתרון מפצלים גם אותם. וחוזר חלילה עד שמגיעים לבעיות שקל לפתור. האלגוריתם פותר את בעיות המשנה שקל לפתור, וממזג את הפתרונות חזרה לפתרון הבעיה הגדולה.
יישום תורת הגרפים בפייתון - חלק א
במדריך הראשון בנושא של יישום תורת הגרפים ב-Python תקבל הסבר מאוד פשוט על מה הם גרפים ואיך לייצג אותם.
יישום רשימת סמיכויות adjacency list - חלק ב בסדרה על גרפים
במדריך השני בסדרה על יישום גרפים בפייתון תקבל הסבר כיצד ליישם גרף באמצעות רשימת סמיכויות adjacency list.
חלק ג בסדרה על גרפים - Pyviz - ספרייה להצגת גרפים אינטראקטיביים
במדריך השלישי בסדרה נסביר על ספריית PyViz של פייתון המשמשת להצגת גרפים באופן אינטראקטיבי.
הבנת אלגוריתם חיפוש לרוחב - BFS - סריקה של גרפים ומציאת הנתיב הקצר ביותר
חיפוש לרוחב Breadth-first search) BFS) הוא אלגוריתם בסיסי לסריקת צמתים וקשׂתות של גרף באופן שיטתי ובשכבות. הוא מתחיל בצומת מסויים, חוקר את שכניו, ואז עובר לשכבת השכנים הבאה באמצעות מבנה נתונים של תור queue כדי לעקוב אחר סדר הסריקה. לחיפוש לרוחב יש מורכבות זמן של O(V + E) והוא שימושי במיוחד למציאת הנתיב הקצר ביותר בגרפים חסרי משקל וכן כבסיס לאלגוריתמים אחרים בתורת הגרפים.
אלגוריתם חיפוש לעומק DFS - מהבנה ליישום
אלגוריתם חיפוש לעומק Depth First Search DFS הוא אחד מאלגוריתמי הסריקה המקובלים ביותר המשמשים לסרוק ולבקר בכל הצמתים של גרף פעם אחת באופן שיטתי. הוא מתחיל מצומת מוצא וסורק רחוק ככל האפשר לאורך ענף עד סופו לפני שהוא חוזר. מכאן השם חיפוש לעומק.
אלגוריתם דייקסטרה Dijkstra למציאת הנתיב הקצר ביותר בגרף ממושקל
מטרת אלגוריתם דייקסטרה Dijkstra היא למצוא את הנתיב הקצר ביותר בין צומת התחלה לכל יתר הצמתים בגרף מכוון ממושקל. במדריך זה תמצא הסבר מפורט וקוד ליישום.
מיון טופולוגי באמצעות אלגוריתם Kahn
הבעיה בהבנת מיון טופולוגי topological sort קשורה יותר בשם המפחיד אבל הפעולה של מיון טופולוגי דומה לדברים שאנחנו עושים מדי יום. לדוגמה, שגרת בוקר. במדריך זה נסביר מהו סדר טופולוגי ונדגים כיצד ניתן ליישם אותו באמצעות פייתון.
שימוש בטכניקות שני המצביעים לפתרון בעיות תכנותיות
השימוש בטכניקת שני המצביעים Two pointers technique מקובל כשרוצים לפתור בעיות הקשורות לרצפים כמו מחרוזות, מערכים ורשימות מקושרות linked list. הטכניקה כרוכה בשימוש במצביעים כדי לעבור על רצף בדרך מסוימת במטרה לבחון פריטים או תווים תוך שמירה על יחס בין המצביעים.
אתגר תכנותי: חיפוש במערך מסובב
נתון מערך מספרים `nums` המסודרים בסדר עולה, אך הם עשויים להיות מסובבים סביב נקודת ציר כלשהי. מערך מסובב הוא מערך בו נקודת ציר מחלקת את המערך, והמספרים מסתדרים סביב הציר כמו ציר של דלת. בהינתן מערך לאחר הסיבוב ומספר מטרה, עליך להחזיר את האינדקס בו נמצאת המטרה או -1 אם המטרה לא קיימת במערך. הדרישה היא לכתוב אלגוריתם עם סיבוכיות זמן של O(log N).
אתגר תכנותי: מציאת מינימום במערך מסובב
האתגר הוא לכתוב פונקציה המקבלת מערך מסובב, ומחזירה את הפריט בעל הערך הנמוך ביותר. בנוסף, סיבוכיות הזמן של הקוד צריך להיות O(LOG N).
טכניקת חלון ההזזה sliding window לפתרון בעיות ברצפים
הטכניקה התכנותית sliding window היא היא שימושית ביותר לפתרון בעיות במבני נתונים סדרתיים, דוגמת: מערכים או מחרוזות. במדריך זה נסביר את הטכניקה ובעיקר נדגים פתרון בעיות.
פתרון בעיות אופטימיזיציה באמצעות אלגוריתם חמדן
אלגוריתם חמדן greedy algorithm הוא גישה לפתרון בעיות מיטוב (אופטימיזציה) באמצעות תכנות על ידי בחירת האפשרות הטובה ביותר האפשרית בכל שלב מבלי לקחת בחשבון את התוצאה הכוללת וללא אפשרות להפוך החלטה שגויה שבוצעה באחד השלבים.
תכנות דינמי מלמטה למעלה ובחזרה - מדריך לתכנות דינאמי שמתחיל מהבסיס
השם תכנות דינאמי נשמע מפחיד אבל הבנה של הרעיונות בבסיסו ואימון על פתרון אתגרים תכנותיים יכול להפוך את הנושא למובן הרבה יותר. במדריך זה נסביר את הרעיונות העומדים בבסיס השיטה של תכנות דינאמי וגם נציג בעיות קלאסיות ופתרונות שהכרתם יעזרו רבות לכל מתכנת שמעוניין להוסיף כלי חשוב ומשמעותי זה לארגז הכלים שלו.
אתגר תכנותי: שודד הבתים
נותנים לך מערך המתאר את כמות הכסף שאפשר לגנוב מכל בית פרטי ברחוב. עליך למצוא את מירב הכסף שניתן לשדוד מהרחוב כאשר התנאי הוא שאסור לשדוד שני בתים סמוכים כי אם שודדים שני בתים סמוכים מופעלת אזעקה, ובאה המשטרה.
פתרון בעיית הקיטבג knapsack באמצעות תכנות דינמי
בעיית הקיטבג knapsack מופיעה בווריאציות שונות בפרדיגמות שונות של תכנות. במדריך זה נלמד לפתור אותה באמצעות רקורסיה ותכנות דינמי dynamic programming. הגרסה שאני מכיר של בעיית הקיטבג מספרת על גנב שפורץ לחנות מחשבים ועכשיו הוא צריך למלא את השק שלו בכמה שיותר פריטים. אם הוא יתמהמה יותר מדי המשטרה תתפוס אותו. לכן הוא צריך לחשוב מהר. הבעיה היא שהשק מוגבל מבחינת משקל החפצים שהוא יכול לשאת אז כדאי לו לקחת חפצים כמה שיותר יקרים אחרת הוא מסתכן לחינם.
מבוא לbacktracking או מציאת כל השילובים באמצעות אלגוריתם גישוש נסוג
אלגוריתם גישוש נסוג backtrack משמש למציאת כל השילובים לפתרון בעיה. במדריך זה נבין למה משתמשים בו, ונדגים על בעיה שכדי לפתור אותה צריך למצוא את כל הקומבינציות.
שימוש באלגוריתם backtracking גישוש נסוג לפתרון האתגר של N מלכות
האתגר של הצבת N מלכות על לוח השחמט ללא אפשרות לתקוף אחת את השנייה הוא קומבינטורי ודורש את כל הפתרונות האפשריים מה שמצביע על אפשרות לפתור באמצעות אלגוריתם
קוד לפתרון סודוקו בעזרת אלגוריתם backtracking גישוש נסוג
הרעיון של אלגוריתם backtracking גישוש נסוג הוא לנסות אפשרות מסוימת, ואם בהמשך מגלים שהיא לא עובדת, לחזור למצב הקודם לפני שעשינו את הניסוי, וממצב זה לנסות אפשרות אחרת עד שמוצאים אפשרות שעובדת או עד שמנסים את כל האפשרויות. במקרה שלנו, כדי לפתור פאזל סודוקו, הקוד ינסה להציב, אם אפשר, מספר בתא ריק של טבלת הסודוקו. אם המספר ניתן להצבה, כי אין קונפליקטים עם ספרות זהות באותה שורה, עמודה או תת טבלה, האלגוריתם קורא לעצמו באופן רקורסיבי כדי למצוא פתרונות החל מהתא הריק הבא. אם יסתבר בהמשך שהמספר שהוצב מוביל למצב שאינו מאפשר את פתרון הפאזל, הקוד יחזור לאחור backtrack וינסה להציב מספר אחר בתא.
אתגרים תכנותיים
אתגר תכנותי: twoSum
נתון מערך של מספרים שלמים `nums` ומספר שלם `target`, החזירו את האינדקסים של שני מספרים הקיימים במערך שסכומם שווה ל-`target`. אתם יכולים להניח שכל קלט יהיה בעל פתרון אחד בלבד, ולא להשתמש באותו פריט מערך יותר מפעם אחת. ניתן להחזיר את התשובה בכל סדר.
אתגר תכנותי: תת מערך בעל סכום מירבי
בהינתן מערך של מספרים שלמים `nums`, עליך למצוא תת מערך רציף שסכום פריטיו הוא הגבוה ביותר.
אתגר תכנותי: איסוף ערכי המקסימום בתוך חלון הזזה Sliding window maxima
בהינתן מערך של מספרים שלמים וחלון הזזה sliding window שאורכו קבוע, מצא את האיבר המקסימלי בכל מיקום של החלון אשר מוזז לאורך המערך כשהוא נע משמאל לימין.
אתגר תכנותי: מכפלת הכל לבד מהנוכחי
יש לכתוב פונקציה `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.
חידה תכנותית: מציאת הפריטים הקרובים ביותר לערך מטרה בתוך מערך
נתון לך מערך `arr` של מספרים שלמים ממוינים בסדר עולה מהפריט הנמוך לגבוה, וערך מטרה `target`. עליך למצוא את k הפריטים הקרובים ביותר לערך המטרה במערך. במקרה של שוויון יש להעדיף את הפריטים הקטנים יותר.
אתגר תכנותי: מציאת הנתיב העולה הארוך ביותר במטריצה
נתונה מטריצה דו-ממדית, matrix, עליך למצוא את אורך המסלול העולה הארוך ביותר. מסלול עולה מוגדר כמסלול שבו כל תא במסלול מכיל ערך גבוה יותר מהערך בתא הקודם.
FastAPI - היכרות עם ספרית הקוד הטובה ביותר של פיתון להקמת אפליקציות אינטרנט
FastAPI הוא פריימוורק חדש למדי של פייתון להקמת אפליקציות ברשת האינטרנט ובכל זאת הוא נחשב בעיני רבים לטוב שבהם. במדריך הנוכחי נקים API מאפס כולל: הוספה, קריאה, עדכון ומחיקה באמצעות הפריימוורק.
מדריכים נוספים בסדרה על FastApi
יצירת קשר בין קלאסים וטבלאות במסד הנתונים באמצעות relationships
שליחת מייל עם FastApi עבודה עם פונקציה א-סינכרונית
פייתון מונחה עצמים
פייתון מונחה עצמים 1: מחלקות, אובייקטים, תכונות ומתודות
תכנות מונחה עצמים הוא סגנון כתיבה בו מקבצים את כל המשתנים והפונקציות של נושא מסוים בתוך מחלקה (class). סגנון זה נחשב ליעיל יותר מהסגנון הרגיל (הפרוצדורלי) של תכנות כי הוא גורם לקוד מאורגן יותר, הכולל פחות קוד ופחות חזרות. במדריך זה נלמד את אבני היסוד של תכנות מונחה עצמים: מחלקות, אובייקטים, תכונות ומתודות
פייתון מונחה עצמים 2: משתנה אובייקט ומשתנה מחלקה
בפייתון מונחה עצמים ישנם שני סוגי משתנים: משתני אובייקט (instance variables) ומשתני מחלקה (class variables). במדריך זה נסביר ונדגים את שניהם.
פייתון מונחה עצמים 3: הורשה
אחד המאפיינים של תכנות מונחה עצמים הוא שימוש בהורשה - העברת תכונות ומתודות ממחלקה הורה super class למחלקות היורשות אותה sub class. הורשה מיעלת את כתיבת הקוד, שאותו נכתוב פעם אחת בהורה ואחר כך נשתמש בו במחלקות היורשות במקום לכתוב את אותו הקוד שוב ושוב בכל מחלקה בנפרד.
פייתון מונחה עצמים 4: פולימורפיזם ושמות של מתודות
פולימורפיזם polymorphism הוא עיקרון תכנותי שאומר שאם מתודות מבצעות את אותו התפקיד אז צריך לקרוא להם בשם זהה. במדריך זה נלמד כיצד להשתמש בעיקרון בפייתון מונחה עצמים.
פייתון מונחה עצמים 5: קומפוזיציה
אחרי שבמדריכים קודמים בסדרת הפייתון למדנו את היסודות של תכנות מונחה עצמים ובפרט הורשה ופולימורפיזם, במדריך זה נכיר את עקרון הקומפוזיציה שאומר שאם רוצים לתת לאובייקט את התכונות של אובייקטים אחרים אז עדיף להשתמש בהכלה במקום בהורשה. במדריך זה נדגים את עקרון הקומפוזיציה בפייתון באמצעות שלוש דוגמאות שימושיות.
ואידך זיל גמור...