Chapter 12: Strings
Part 1: What is a String? A Simple Analogy
Imagine you have a magnetic poetry kit. You have individual word tiles (characters) that you can arrange on your refrigerator to form sentences.
-
Characters: These are your individual tiles: ‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘ ‘, ‘W’, ‘o’, ‘r’, ‘l’, ‘d’, ‘!’.
-
String: The entire sequence you create by putting the tiles together: “Hello World!”.
In programming, a string is exactly that: an ordered, immutable sequence of characters. “Immutable” is a key concept we’ll explore later—it means once you create that sequence, you can’t change the individual tiles themselves. You can only take the whole sequence down and build a new one.
Part 2: Creating and Defining Strings
In most languages, you create a string by enclosing characters in quotes.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<span class="token comment"># Using double quotes</span> greeting <span class="token operator">=</span> <span class="token string">"Hello, World!"</span> <span class="token comment"># Using single quotes (works the same way)</span> name <span class="token operator">=</span> <span class="token string">'Alice'</span> <span class="token comment"># Using triple quotes for multi-line strings</span> long_text <span class="token operator">=</span> <span class="token triple-quoted-string string">"""This is a string</span> that spans multiple lines. It's very useful for long text blocks.""" <span class="token keyword">print</span><span class="token punctuation">(</span>long_text<span class="token punctuation">)</span> |
Why both single and double quotes? It makes it easy to include one type of quote inside your string.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<span class="token comment"># Double quotes inside single quotes</span> sentence <span class="token operator">=</span> <span class="token string">'He said, "Python is awesome!"'</span> <span class="token keyword">print</span><span class="token punctuation">(</span>sentence<span class="token punctuation">)</span> <span class="token comment"># Single quote inside double quotes</span> another_sentence <span class="token operator">=</span> <span class="token string">"It's a beautiful day."</span> <span class="token keyword">print</span><span class="token punctuation">(</span>another_sentence<span class="token punctuation">)</span> <span class="token comment"># Using escape characters for the same quote</span> escaped_sentence <span class="token operator">=</span> <span class="token string">'It\'s a beautiful day.'</span> <span class="token keyword">print</span><span class="token punctuation">(</span>escaped_sentence<span class="token punctuation">)</span> |
The backslash (\) is an escape character. It tells the interpreter, “Treat the next character specially.” \' means “a single quote inside the string,” and \n means “a newline.”
Part 3: Strings as Sequences – Indexing and Slicing
This is where strings show their true power. Because a string is a sequence, you can access its individual parts by their position (index). This is a concept shared with lists and tuples.
Indexing: Accessing a Single Character
In programming, we almost always start counting from 0. So the first character is at index 0, the second at index 1, and so on.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
text <span class="token operator">=</span> <span class="token string">"PYTHON"</span> <span class="token comment"># Index: 0:P, 1:Y, 2:T, 3:H, 4:O, 5:N</span> first_char <span class="token operator">=</span> text<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token comment"># 'P'</span> third_char <span class="token operator">=</span> text<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span> <span class="token comment"># 'T'</span> last_char <span class="token operator">=</span> text<span class="token punctuation">[</span><span class="token number">5</span><span class="token punctuation">]</span> <span class="token comment"># 'N'</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"First: </span><span class="token interpolation"><span class="token punctuation">{</span>first_char<span class="token punctuation">}</span></span><span class="token string">, Third: </span><span class="token interpolation"><span class="token punctuation">{</span>third_char<span class="token punctuation">}</span></span><span class="token string">, Last: </span><span class="token interpolation"><span class="token punctuation">{</span>last_char<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># You can also use negative indices to count from the end.</span> <span class="token comment"># -1 is the last character, -2 is the second last, etc.</span> last_char_negative <span class="token operator">=</span> text<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token comment"># 'N'</span> second_last <span class="token operator">=</span> text<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">]</span> <span class="token comment"># 'O'</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Last (negative): </span><span class="token interpolation"><span class="token punctuation">{</span>last_char_negative<span class="token punctuation">}</span></span><span class="token string">, Second last: </span><span class="token interpolation"><span class="token punctuation">{</span>second_last<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> |
Visualizing String Indexing:
|
0 1 2 3 4 5 6 7 8 |
String: P Y T H O N Index: 0 1 2 3 4 5 NegIdx: -6 -5 -4 -3 -2 -1 |
Slicing: Accessing a Substring
Slicing allows you to extract a portion of a string. The syntax is [start:stop:step].
-
start: The index to begin the slice (inclusive).
-
stop: The index to end the slice (exclusive). This means the character at the
stopindex is not included. -
step: (Optional) The number of steps to take between characters (e.g.,
2for every second character). The default is 1.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
text <span class="token operator">=</span> <span class="token string">"PROGRAMMING"</span> <span class="token comment"># Get characters from index 0 up to (but not including) 4 -> "PROG"</span> slice1 <span class="token operator">=</span> text<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">:</span><span class="token number">4</span><span class="token punctuation">]</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"text[0:4]: </span><span class="token interpolation"><span class="token punctuation">{</span>slice1<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Get characters from index 4 to the end -> "RAMMING"</span> slice2 <span class="token operator">=</span> text<span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">:</span><span class="token punctuation">]</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"text[4:]: </span><span class="token interpolation"><span class="token punctuation">{</span>slice2<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Get characters from the beginning up to index 4 -> "PROG" (same as slice1)</span> slice3 <span class="token operator">=</span> text<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token number">4</span><span class="token punctuation">]</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"text[:4]: </span><span class="token interpolation"><span class="token punctuation">{</span>slice3<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Get the last 3 characters using negative indices -> "ING"</span> slice4 <span class="token operator">=</span> text<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">3</span><span class="token punctuation">:</span><span class="token punctuation">]</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"text[-3:]: </span><span class="token interpolation"><span class="token punctuation">{</span>slice4<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Get characters from index 1 to 7, stepping by 2 -> "RGA" (R, G, A)</span> slice5 <span class="token operator">=</span> text<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">:</span><span class="token number">8</span><span class="token punctuation">:</span><span class="token number">2</span><span class="token punctuation">]</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"text[1:8:2]: </span><span class="token interpolation"><span class="token punctuation">{</span>slice5<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># A Python trick: Reverse a string using slicing with a step of -1</span> reversed_text <span class="token operator">=</span> text<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Reversed: </span><span class="token interpolation"><span class="token punctuation">{</span>reversed_text<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> |
Instructor’s Note: Slicing is an incredibly powerful and efficient operation. Mastering it is a rite of passage for any programmer. Spend some time experimenting with different start, stop, and step values.
Part 4: String Immutability
This is a critical concept. Strings are immutable, which means once a string object is created, its content cannot be changed. Any operation that seems to modify a string actually creates a new string object.
|
0 1 2 3 4 5 6 7 8 9 |
name <span class="token operator">=</span> <span class="token string">"Edward"</span> <span class="token comment"># Let's try to change the 'd' to 't' to make it "Edwart"</span> <span class="token comment"># name[5] = 't' # This would cause a TypeError!</span> |
You cannot change an existing string. You can only create a new one based on the old one.
|
0 1 2 3 4 5 6 7 8 9 |
name <span class="token operator">=</span> <span class="token string">"Edward"</span> new_name <span class="token operator">=</span> name<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token number">5</span><span class="token punctuation">]</span> <span class="token operator">+</span> <span class="token string">"t"</span> <span class="token comment"># Create a new string: name[0:5] is "Edwar", then add "t"</span> <span class="token keyword">print</span><span class="token punctuation">(</span>new_name<span class="token punctuation">)</span> <span class="token comment"># Output: Edwart</span> <span class="token keyword">print</span><span class="token punctuation">(</span>name<span class="token punctuation">)</span> <span class="token comment"># Output: Edward (the original is unchanged)</span> |
Think of it like writing on a whiteboard. You can’t erase a single letter without smudging the whole thing. Instead, you have to wipe the board clean and write a new sentence.
Why immutability? This design choice has several benefits:
-
Security: You can trust that a string won’t be modified unexpectedly when passed to a function.
-
Hashing: Strings are often used as keys in dictionaries. Immutability makes their hash value stable and reliable.
-
Performance: The interpreter can make certain optimizations knowing the object won’t change.
Part 5: Essential String Operations and Methods
Programming languages provide a rich set of tools, called methods, to work with strings. Methods are functions that belong to an object. You call them with the dot notation: string.method().
Let’s explore some of the most common and useful ones.
1. Changing Case
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
message <span class="token operator">=</span> <span class="token string">"Hello, Python Learners!"</span> upper_case <span class="token operator">=</span> message<span class="token punctuation">.</span>upper<span class="token punctuation">(</span><span class="token punctuation">)</span> lower_case <span class="token operator">=</span> message<span class="token punctuation">.</span>lower<span class="token punctuation">(</span><span class="token punctuation">)</span> title_case <span class="token operator">=</span> message<span class="token punctuation">.</span>title<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># Capitalizes the first letter of each word</span> capitalized <span class="token operator">=</span> message<span class="token punctuation">.</span>capitalize<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># Capitalizes only the very first letter</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Original: </span><span class="token interpolation"><span class="token punctuation">{</span>message<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Upper: </span><span class="token interpolation"><span class="token punctuation">{</span>upper_case<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Lower: </span><span class="token interpolation"><span class="token punctuation">{</span>lower_case<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Title: </span><span class="token interpolation"><span class="token punctuation">{</span>title_case<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Capitalized: </span><span class="token interpolation"><span class="token punctuation">{</span>capitalized<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> |
2. Searching and Counting
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
sentence <span class="token operator">=</span> <span class="token string">"The quick brown fox jumps over the lazy dog. The fox is quick."</span> <span class="token comment"># find(): Returns the index of the first occurrence, or -1 if not found.</span> index_of_fox <span class="token operator">=</span> sentence<span class="token punctuation">.</span>find<span class="token punctuation">(</span><span class="token string">"fox"</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"First 'fox' found at index: </span><span class="token interpolation"><span class="token punctuation">{</span>index_of_fox<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># rfind(): Returns the index of the last occurrence.</span> last_fox <span class="token operator">=</span> sentence<span class="token punctuation">.</span>rfind<span class="token punctuation">(</span><span class="token string">"fox"</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Last 'fox' found at index: </span><span class="token interpolation"><span class="token punctuation">{</span>last_fox<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># count(): Counts how many times a substring appears.</span> num_quick <span class="token operator">=</span> sentence<span class="token punctuation">.</span>count<span class="token punctuation">(</span><span class="token string">"quick"</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"'quick' appears </span><span class="token interpolation"><span class="token punctuation">{</span>num_quick<span class="token punctuation">}</span></span><span class="token string"> time(s)."</span></span><span class="token punctuation">)</span> <span class="token comment"># in operator: A simple way to check if a substring exists.</span> <span class="token keyword">if</span> <span class="token string">"brown"</span> <span class="token keyword">in</span> sentence<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"The word 'brown' is in the sentence."</span><span class="token punctuation">)</span> |
3. Validation (Checking Content)
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<span class="token comment"># These methods return True or False.</span> text_num <span class="token operator">=</span> <span class="token string">"12345"</span> text_alpha <span class="token operator">=</span> <span class="token string">"Hello"</span> text_alnum <span class="token operator">=</span> <span class="token string">"Hello123"</span> text_space <span class="token operator">=</span> <span class="token string">" "</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"'</span><span class="token interpolation"><span class="token punctuation">{</span>text_num<span class="token punctuation">}</span></span><span class="token string">'.isdigit(): </span><span class="token interpolation"><span class="token punctuation">{</span>text_num<span class="token punctuation">.</span>isdigit<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># True (all digits)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"'</span><span class="token interpolation"><span class="token punctuation">{</span>text_alpha<span class="token punctuation">}</span></span><span class="token string">'.isalpha(): </span><span class="token interpolation"><span class="token punctuation">{</span>text_alpha<span class="token punctuation">.</span>isalpha<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># True (all letters)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"'</span><span class="token interpolation"><span class="token punctuation">{</span>text_alnum<span class="token punctuation">}</span></span><span class="token string">'.isalnum(): </span><span class="token interpolation"><span class="token punctuation">{</span>text_alnum<span class="token punctuation">.</span>isalnum<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># True (letters and numbers)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"'</span><span class="token interpolation"><span class="token punctuation">{</span>text_space<span class="token punctuation">}</span></span><span class="token string">'.isspace(): </span><span class="token interpolation"><span class="token punctuation">{</span>text_space<span class="token punctuation">.</span>isspace<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># True (all whitespace)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"'</span><span class="token interpolation"><span class="token punctuation">{</span>text_alpha<span class="token punctuation">}</span></span><span class="token string">'.islower(): </span><span class="token interpolation"><span class="token punctuation">{</span>text_alpha<span class="token punctuation">.</span>islower<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># False (has capital H)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"'</span><span class="token interpolation"><span class="token punctuation">{</span>text_alpha<span class="token punctuation">.</span>lower<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">'.islower(): </span><span class="token interpolation"><span class="token punctuation">{</span>text_alpha<span class="token punctuation">.</span>lower<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>islower<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># True</span> |
4. Removing Whitespace
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
messy_text <span class="token operator">=</span> <span class="token string">" Hello, World! \n"</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Original: '</span><span class="token interpolation"><span class="token punctuation">{</span>messy_text<span class="token punctuation">}</span></span><span class="token string">'"</span></span><span class="token punctuation">)</span> <span class="token comment"># strip(): Removes leading and trailing whitespace.</span> clean_text <span class="token operator">=</span> messy_text<span class="token punctuation">.</span>strip<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"strip(): '</span><span class="token interpolation"><span class="token punctuation">{</span>clean_text<span class="token punctuation">}</span></span><span class="token string">'"</span></span><span class="token punctuation">)</span> <span class="token comment"># lstrip(): Removes only leading (left) whitespace.</span> left_clean <span class="token operator">=</span> messy_text<span class="token punctuation">.</span>lstrip<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"lstrip(): '</span><span class="token interpolation"><span class="token punctuation">{</span>left_clean<span class="token punctuation">}</span></span><span class="token string">'"</span></span><span class="token punctuation">)</span> <span class="token comment"># rstrip(): Removes only trailing (right) whitespace.</span> right_clean <span class="token operator">=</span> messy_text<span class="token punctuation">.</span>rstrip<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"rstrip(): '</span><span class="token interpolation"><span class="token punctuation">{</span>right_clean<span class="token punctuation">}</span></span><span class="token string">'"</span></span><span class="token punctuation">)</span> |
5. Splitting and Joining
These are among the most powerful string methods for data processing.
-
split()breaks a string into a list of substrings based on a delimiter. -
join()does the opposite: it combines a list of strings into one single string, using a delimiter.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<span class="token comment"># SPLITTING</span> data <span class="token operator">=</span> <span class="token string">"apple,banana,grape,orange"</span> fruits <span class="token operator">=</span> data<span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token string">","</span><span class="token punctuation">)</span> <span class="token comment"># Split on commas</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Split result: </span><span class="token interpolation"><span class="token punctuation">{</span>fruits<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> sentence <span class="token operator">=</span> <span class="token string">"This is a sentence."</span> words <span class="token operator">=</span> sentence<span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># Default delimiter is any whitespace</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Words: </span><span class="token interpolation"><span class="token punctuation">{</span>words<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># JOINING</span> new_fruit_string <span class="token operator">=</span> <span class="token string">" | "</span><span class="token punctuation">.</span>join<span class="token punctuation">(</span>fruits<span class="token punctuation">)</span> <span class="token comment"># Join the list with " | "</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Joined with ' | ': </span><span class="token interpolation"><span class="token punctuation">{</span>new_fruit_string<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> dash_string <span class="token operator">=</span> <span class="token string">"-"</span><span class="token punctuation">.</span>join<span class="token punctuation">(</span>words<span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Joined with '-': </span><span class="token interpolation"><span class="token punctuation">{</span>dash_string<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> |
6. Replacing Substrings
|
0 1 2 3 4 5 6 7 8 |
template <span class="token operator">=</span> <span class="token string">"Hello [NAME]! Welcome to [PLACE]."</span> message <span class="token operator">=</span> template<span class="token punctuation">.</span>replace<span class="token punctuation">(</span><span class="token string">"[NAME]"</span><span class="token punctuation">,</span> <span class="token string">"Alice"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>replace<span class="token punctuation">(</span><span class="token string">"[PLACE]"</span><span class="token punctuation">,</span> <span class="token string">"Python Land"</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span>message<span class="token punctuation">)</span> |
Remember, replace() returns a new string; the original template remains unchanged.
Part 6: String Formatting (f-Strings)
As you may have noticed in our examples, we’ve been using f"...". This is called an f-string (formatted string literal), and it’s the modern, preferred way to embed expressions inside strings in Python.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
name <span class="token operator">=</span> <span class="token string">"Bob"</span> age <span class="token operator">=</span> <span class="token number">30</span> city <span class="token operator">=</span> <span class="token string">"New York"</span> <span class="token comment"># Old way (using %-formatting)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Hello, %s. You are %d years old."</span> <span class="token operator">%</span> <span class="token punctuation">(</span>name<span class="token punctuation">,</span> age<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Old way (using .format())</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Hello, {}. You are {} years old from {}."</span><span class="token punctuation">.</span><span class="token builtin">format</span><span class="token punctuation">(</span>name<span class="token punctuation">,</span> age<span class="token punctuation">,</span> city<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Modern way: f-strings (Python 3.6+)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Hello, </span><span class="token interpolation"><span class="token punctuation">{</span>name<span class="token punctuation">}</span></span><span class="token string">. You are </span><span class="token interpolation"><span class="token punctuation">{</span>age<span class="token punctuation">}</span></span><span class="token string"> years old from </span><span class="token interpolation"><span class="token punctuation">{</span>city<span class="token punctuation">}</span></span><span class="token string">."</span></span><span class="token punctuation">)</span> <span class="token comment"># You can even put expressions inside the braces</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"In 5 years, </span><span class="token interpolation"><span class="token punctuation">{</span>name<span class="token punctuation">}</span></span><span class="token string"> will be </span><span class="token interpolation"><span class="token punctuation">{</span>age <span class="token operator">+</span> <span class="token number">5</span><span class="token punctuation">}</span></span><span class="token string"> years old."</span></span><span class="token punctuation">)</span> |
F-strings are incredibly readable and efficient. They are the tool you should reach for most of the time when you need to build strings from variables.
Part 7: A Practical Example – Putting It All Together
Let’s combine several of these concepts into a real-world example: cleaning and processing some user input.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<span class="token comment"># Imagine we get this messy input from a form</span> raw_user_input <span class="token operator">=</span> <span class="token string">" John DOE, 30, NEW YORK, john.doe@email.com "</span> <span class="token comment"># 1. Clean the string by stripping whitespace</span> cleaned_input <span class="token operator">=</span> raw_user_input<span class="token punctuation">.</span>strip<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># 2. Split the comma-separated values into a list</span> parts <span class="token operator">=</span> cleaned_input<span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token string">","</span><span class="token punctuation">)</span> <span class="token comment"># 3. Strip any extra whitespace from each part</span> parts <span class="token operator">=</span> <span class="token punctuation">[</span>part<span class="token punctuation">.</span>strip<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">for</span> part <span class="token keyword">in</span> parts<span class="token punctuation">]</span> <span class="token comment"># This is a list comprehension</span> <span class="token comment"># 4. Assign to variables with proper formatting</span> name <span class="token operator">=</span> parts<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> age <span class="token operator">=</span> <span class="token builtin">int</span><span class="token punctuation">(</span>parts<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># Convert age string to an integer</span> city <span class="token operator">=</span> parts<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">.</span>title<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># Convert city to Title Case</span> email <span class="token operator">=</span> parts<span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">.</span>lower<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># Convert email to lowercase</span> <span class="token comment"># 5. Validate the email (simple check)</span> <span class="token keyword">if</span> <span class="token string">"@"</span> <span class="token keyword">not</span> <span class="token keyword">in</span> email <span class="token keyword">or</span> <span class="token string">"."</span> <span class="token keyword">not</span> <span class="token keyword">in</span> email<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Warning: Email might be invalid."</span><span class="token punctuation">)</span> <span class="token comment"># 6. Create a formatted summary string</span> summary <span class="token operator">=</span> <span class="token string-interpolation"><span class="token string">f"""</span></span> --- User Profile --- Name: <span class="token interpolation"><span class="token punctuation">{</span>name<span class="token punctuation">}</span></span> Age: <span class="token interpolation"><span class="token punctuation">{</span>age<span class="token punctuation">}</span></span> City: <span class="token interpolation"><span class="token punctuation">{</span>city<span class="token punctuation">}</span></span> Email: <span class="token interpolation"><span class="token punctuation">{</span>email<span class="token punctuation">}</span></span> -------------------- """ <span class="token keyword">print</span><span class="token punctuation">(</span>summary<span class="token punctuation">)</span> |
This example shows how strings are not just static text but dynamic data that can be parsed, cleaned, transformed, and reconstructed.
Summary
-
A string is an ordered, immutable sequence of characters used to represent text.
-
You can create them with quotes (
',","""). -
Indexing (
[i]) gives you a single character. -
Slicing (
[start:stop:step]) gives you a substring. -
Strings are immutable; operations that seem to change them actually create new strings.
-
Python provides a wealth of string methods for searching, validating, transforming, splitting, and joining.
-
f-strings are the best way to format strings with variables.
Strings are your primary tool for handling text-based data, which is at the heart of almost every program. Master these techniques, and you’ll be well on your way to becoming a proficient programmer. Happy coding!
