כמה פרצופים יש בתמונה? הזמנה לסדנת זיהוי פנים
יודעים כמה פרצופים יש בתמונה? יודעים לכתוב קוד פייתון שסופר אותם? אם זה נשמע לכם מעניין אשמח שתבואו ללמוד איתי על זיהוי פנים בפייתון בסדנא מעשית בנושא שתתקיים בשבוע הבא.
טיפים קצרים וחדשות למתכנתים
יודעים כמה פרצופים יש בתמונה? יודעים לכתוב קוד פייתון שסופר אותם? אם זה נשמע לכם מעניין אשמח שתבואו ללמוד איתי על זיהוי פנים בפייתון בסדנא מעשית בנושא שתתקיים בשבוע הבא.
קבלו חידת ביטויים רגולריים פשוטה לפתוח את הבוקר: נתון הטקסט I am :the: walrus
ואנחנו רוצים לפצל אותו לשני חלקים כך שהחלק הראשון כולל את כל מה שמופיע עד הנקודותיים השניים (כולל הנקודותיים) והחלק השני כל מה שבא אחרי הרווחים.
כמו כן אם בהמשך יהיו עוד מקומות עם נקודותיים ואחריהם רווח נרצה לחזור על אותו פיצול.
טוב אז ברור ש split רגיל של מחרוזת לא יעבוד כאן - split יבלע לי את הנקודותיים ואת הרווח שאחריהן:
text = 'I am :the: walrus'
text.split(': ')
['I am :the', ' walrus']
אפשר לשפר את המצב במעבר לביטויים רגולאריים אבל זה עדיין לא מספיק טוב כי מקבלים שלושה חלקים במקום 2:
import re
text = 'I am :the: walrus'
re.split('(: )', text)
['I am :the', ': ', ' walrus']
וכן ראיתם נכון - בגלל ששמתי את הנקודותיים והווח בתוך סוגריים פייתון שמר אותם כאיבר נוסף ברשימת התוצאה. בלי הסוגריים התוצאה תהיה זהה ל str#split.
מנועי ביטויים רגולאריים תומכים במגוון סוגים של "הצצות". בניגוד לחיפוש רגיל, הצצה לא תופסת את החלק בקלט שמצאנו ומיועדת לסמן מיקום. בעברית נוכל להסביר שאני רוצה לפצל את השורה בתו רווח שלפניו יש נקודותיים. השם המקצועי של זה הוא Positive Lookbehind ובפייתון זה מסומן כך:
import re
text = 'I am :the: walrus'
re.split('(?<=:) ', text)
# or if you don't need the spaces before the walrus
re.split('(?<=:) +', text)
['I am :the:', 'walrus']
באופן כללי ובפרט בפייתון ארבעת סוגי ההצצות והסימנים שלהן הם:
הצצה קדימה - Positive Lookahead מסומן באמצעות (?=foo)
. חיפוש המקום בקלט שאחריו מופיעה המילה foo.
הצצה אחורה - Positive Lookbehind מסומן באמצעות (?<=foo)
. חיפוש המקום בקלט שלפניו מופיעה המילה foo.
הצצה קדימה שלילית -Negative Lookahead מסומן באמצעות (?!foo)
. חיפוש מקום בקלט שאחריו לא מופיעה המילה foo.
הצצה אחורה שלילית - Negative Lookbehind מסומן באמצעות (?<!foo)
חיפוש המקום בקלט שלפניו לא מופיעה המילה foo.
לדוגמאות נוספות על Lookahead ו Lookbehind שווה להעיף מבט בקישור כאן:
href='http://www.rexegg.com/regex-lookaround
** בואו לכתוב איתי קוד: החודש אני מתחיל לקיים מפגשי תרגול בהם אנחנו כותבים יחד קוד ומדברים על הקוד שכתבנו. במפגשים תקבלו אינספור רעיונות חדשים איך לפתור בעיות. קראו עוד בעמוד מפגשי התרגול **
שידרגתם לפייתון3 ולא בטוחים מה יצא לכם מזה? הנה שלושה שיפורים שאני ממש שמחתי לגלות. ותודה למאיר על ההערה מהפוסט הקודם שבזכותה התחלתי את החיפוש הזה.
חבר שכנע אותי להסתכל על החידות של אתר האקרראנק. למי שלא מכיר זה אתר שעושה כל מיני תחרויות תכנות ועוזר לחברות עם ביצוע ראיונות טכניים. בכל מקרה לא אהבתי את הסגנון כי התחושה שהשאלות מאוד סגורות ומנסות להוביל אותך לפיתרון שהם רוצים.
אבל אז במחשבה שניה נראה לי שלהבין ולדעת להיכנס לראש שלהם זה אולי לא כזה רע (גם אם לא יצירתי במיוחד) כמו שתראו בדוגמא הבאה.
אחרי הרבה זמן של התלבטויות ובחינה של כל מיני טכנולוגיות הצלחתי לחבר פורום. הבקצרה זה שמעכשיו אם יש לכם משתמש באתר אתם יכולים ללחוץ למעלה על הקישור "פורום" ולהגיע לפורום שלנו, לפרסם שם שאלות ולשתף דברים שמעניינים אתכם.
רקורסיה היא אחד הנושאים האלה שקל לדבר עליהם ולהבין בתיאוריה, אבל כשבאים לפתור בעיות בצורה רקורסיבית לא תמיד ברור איך להתחיל, או למה בכלל צריך את זה. דרך אחת להשתכנע היא פשוט לכתוב קוד אז הפעם הפוסט הוא יותר משימה בשבילכם. את כל התרגילים הבאים אפשר לפתור באמצעות רקורסיה או באמצעות לולאות, אבל אני חושב שהפיתרון באמצעות רקורסיה יוצא נקי יותר.
כתבתי כאן בעבר על הצפנת הודעות קצרות בפייתון והפוסט ההוא עדיין רלוונטי. אבל המעבר לקבצים גדולים יותר מכיל מספר אתגרים שלא קיבלו מענה שם. השבוע זה זמן טוב לפתוח שוב את הנושא ולראות את האתגרים וגם את הקוד שמתמודד איתם.
נו אז התחלתם ללמוד פייתון ועכשיו רוצים גם להראות לחברים כמה זה מדליק. הבעיה שתוכניות טקסט בלבד לא עושות רושם מי יודע מה. עם המדריך הבא תוכלו להתחיל לכתוב תוכניות פייתון שגם מציגות חלונות כמו אפליקציות אמיתיות.
הי כולם, כבר הרבה זמן אני חושב להעלות קורס תכנות ממש בסיסי שייתן לאנשים מושג מה זה תכנות בדרך ידידותית שכל אחד יוכל לעקוב אחריה. בניגוד לקורסים אחרים כאן באתר הקורס הזה מיועד לאנשים ללא רקע קודם בתכנות ומציע ליווי ממש מהצעד הראשון. פרטים וצ'ופר בהמשך הפוסט.
את ruby ו python למדתי באותו הזמן, אחרי שנים של עבודה עם perl. מטבע הדברים תקופה ארוכה הרגשתי הרבה יותר בבית ב ruby, אבל לקח לי זמן להסביר לעצמי ולעולם למה. פוסט זה הוא ניסיון לשים את האצבע על פערי התרבויות בין השפות ruby ו python וההשלכות שלהן על מבנה השפה.