Menu

מחרוזות ב-Python (Strings): f-Strings, Slicing וכל מתודות המחרוזת שתצטרכו

עבודה עם טקסט ב-Python: יצירת מחרוזות, שימוש ב-f-strings, slicing והמתודות היומיומיות כמו split, join, replace ו-strip.

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

טקסט, אבל עם מתודות

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

יוצרים אחת עם מירכאות: בודדות, כפולות או משולשות:

מירכאות בודדות וכפולות ניתנות להחלפה. השתמשו באלה שחוסכות לכם escape של תו. "don't" נקי, ו-'don\'t' צריך לוכסן הפוך.

מחרוזות הן בלתי ניתנות לשינוי. ברגע שמחרוזת קיימת, אי אפשר לשנות תו שלה במקום. כל פעולה שנראית כאילו היא משנה מחרוזת בעצם מחזירה מחרוזת חדשה. לכן כותבים text = text.upper() ולא רק text.upper(): בלי ההשמה מחדש, המחרוזת החדשה באותיות גדולות הייתה נזרקת.

חיבור וחזרה

שני אופרטורים עושים את רוב שילובי המחרוזות שתצטרכו:

+ משרשר מחרוזות. * חוזר על מחרוזת. שניהם מחזירים מחרוזת חדשה.

שרשור של חלקים רבים עם + נהיה מכוער מהר. כשמשלבים ערכים מטיפוסים שונים בהודעה, השתמשו ב-f-strings במקום, ראו בסעיף הבא.

f-Strings: הדרך שבה תעצבו בדרך כלל

שימו f לפני המירכאה הפותחת, והמחרוזת הופכת לתבנית. כל מה שבתוך {...} מוחלף בערך של אותו ביטוי:

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

f-strings תומכות גם במפרטי עיצוב אחרי נקודתיים, לשליטה בעיצוב מספרים, ריפוד ויישור:

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

Slicing: לבחור חתיכה

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

הדפוס [start:stop:step] מופיע גם ברשימות וברצפים אחרים, כך שהשקעה של כמה דקות בהפנמתו משתלמת בכל מקום.

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

  • אינדקס ה-stop אינו כלול: word[0:2] כולל את האינדקסים 0 ו-1, לא את 2.
  • אינדקסים שליליים סופרים מהסוף: -1 הוא התו האחרון, -2 הוא זה שלפניו, וכן הלאה.

איך הופכים מחרוזת

למחרוזות אין מתודת .reverse(), כי הן אינן ניתנות לשינוי, אבל slicing עם צעד של -1 עושה את העבודה בשורה אחת:

את word[::-1] קוראים כ"מההתחלה ועד הסוף, בצעדים של 1 אחורה". התוצאה היא מחרוזת חדשה לגמרי, והמקורית לא נגעה. אם צריך לעבור על התווים בסדר הפוך בלי ליצור מחרוזת חדשה, reversed(word) מחזירה iterator עצל.

איך בודקים את האורך של מחרוזת

len(text) מחזירה את מספר התווים:

שימו לב ש-len סופרת Unicode code points, לא בתים. len("café") הוא 4, לא 5, למרות שהקידוד ב-UTF-8 תופס יותר בתים, ובדרך כלל זה מה שרוצים.

איך בודקים אם מחרוזת מכילה תת-מחרוזת

האופרטור in הוא הבדיקה האידיומטית, והוא נקרא כמו אנגלית:

לבדיקות שאינן רגישות לאותיות גדולות וקטנות, נרמלו קודם את שני הצדדים:

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

מתודות מחרוזת נפוצות

למחרוזות יש עשרות מתודות. בקומץ הזה תשתמשו כל הזמן:

פיצול וחיבור:

.split(separator) הופכת מחרוזת לרשימה. separator.join(list_of_strings) מדביקה אותה חזרה. שתי המתודות האלה נושאות חלק לא פרופורציונלי מעבודת המחרוזות בעולם האמיתי.

עוד זוג שימושי:

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

לבדוק מה יש בפנים

כמה מתודות מחזירות ערכים בוליאניים, שימושיים בתנאי if:

השתמשו בהן במשורה: הן לא מטפלות בכל המוזרויות של Unicode כפי שאולי הייתם מצפים. לכל מה שמעבר ל-ASCII, הישענו על מודול ה-regex או על המודול unicodedata.

Escape לתווים מיוחדים

חלק מהתווים צריכים לוכסן הפוך כדי להופיע בתוך מחרוזת:

אם אתם כותבים נתיבי Windows או ביטויים רגולריים, raw strings מקלות על החיים. שימו r לפני המירכאה, והלוכסנים ההפוכים מפסיקים להיות תווי escape:

מחרוזות נמצאות בכל מקום, אז שמרו על קריאוּת

שלושה הרגלים ששומרים על קוד עתיר מחרוזות מלהפוך לדייסה:

  1. השתמשו ב-f-strings לשילוב ערכים. אל תשרשרו + בין טיפוסים שונים.
  2. בצעו השמה מחדש כשאתם "משנים". text = text.strip(), ולא text.strip() לבד.
  3. השתמשו ב-.split() וב-.join() לפני שאתם כותבים לולאות ידניות לפענוח או להרכבת טקסט. הן מהירות יותר, ברורות יותר וקשה יותר לטעות בהן.

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

שאלות נפוצות

מה זה f-string ב-Python?

f-string היא מחרוזת ליטרלית עם הקידומת f, שבה כל מה שבתוך {...} מוחלף בערך של אותו ביטוי. לדוגמה: f"Hello, {name}!" משבצת את הערך הנוכחי של name לתוך המחרוזת בזמן ריצה.

איך הופכים מחרוזת ב-Python?

השתמשו ב-slicing עם צעד של -1: reversed_text = original[::-1]. זה מחזיר מחרוזת חדשה שמורכבת מאותם תווים בסדר הפוך. המחרוזת המקורית לא משתנה, כי מחרוזות ב-Python אינן ניתנות לשינוי.

איך מפצלים מחרוזת ב-Python?

קראו ל-.split() על המחרוזת. בלי ארגומנט היא מפצלת לפי כל רווח לבן: "a b c".split() מחזירה ['a', 'b', 'c']. אפשר להעביר מפריד מסוים: "a,b,c".split(",") מחזירה ['a', 'b', 'c'].

האם מחרוזות ב-Python ניתנות לשינוי?

לא. מחרוזות אינן ניתנות לשינוי (immutable): ברגע שמחרוזת קיימת, אי אפשר לשנות אף אחד מהתווים שלה במקום. כל מתודה ש"משנה" מחרוזת בעצם מחזירה מחרוזת חדשה. לכן רואים דפוסים כמו text = text.strip(): מבצעים השמה מחדש של המשתנה למחרוזת החדשה.

איך משרשרים מחרוזות ב-Python?

השתמשו ב-+ כדי לחבר שתי מחרוזות: "hello" + " " + "world". כדי לשלב ערך בתוך משפט, העדיפו f-string: f"Hello, {name}". כדי לחבר חלקים רבים מרשימה, השתמשו ב-separator.join(pieces): זה מהיר יותר וקריא יותר משרשרת של +.

איך בודקים את האורך של מחרוזת ב-Python?

קראו לפונקציה המובנית len(text). היא מחזירה את מספר התווים (Unicode code points), כך ש-len("café") הוא 4. לאורך בבתים, קודדו קודם: len(text.encode("utf-8")).

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל