Working with Strings in Python: Functions and Operations Explained

CS 115 Lecture 11
Strings
Taken from notes by Dr. Neil Moore & Dr. Debby Keen
Strings
We’ve been  using strings for a while. What can we do with them?
Read them from the user: 
mystr = input(“Name? “)
Print them to the screen: 
print(mystr)
Convert (type-cast) them into ints or floats:  num = int(userin)
Concatenate them with +:  
name = first + “ “ + last
Compare with other strings:  
if “A” <= name <= “K”:
Check whether they are all digits:  
if mystr.isdigit():
Strings in detail
Let’s see how to do more things with strings:
Find the length of a string
Get individual characters that are in a string
Extract ranges of characters (“slicing”)
Convert a string to upper/lower case
Search for characters or substrings in strings
Search and replace substrings
Remove whitespace from strings
String length
The 
length
 of a string is the number of characters in it.
Spaces count!
So do newlines and other escaped characters
To get the length of a string, use the len function:
 
name = “HAL 9000”
 
numchars = len(name)   # that’s 8 characters
Argument type: string
Return type: integer
What’s 
len(“”)?
zero
We’ll see later that 
len
 works with lists too.
Extracting individual characters from a string
The characters in a string are numbered from 0 to 
length
 -1
 
HAL 9000 
(length = 8)
            
01234567
Each number is called a position or index or subscript of the character
You can use square brackets to get the character at a given position
first = name[0]  # this is “H”
This is called 
subscripting
 or 
indexing
The position must be 
smaller than
 the length
print(name[8]) # ERROR: string index out of range
Extracting characters with negative subscripts
You can subscript with negative numbers, counting from the right end
name[-1]
 is the last, rightmost character
name[-2]
 is the next to last character
name[-len(name)] 
is the first, left most character
name[-i] 
is the same character as 
name[len(name) –i]
name[-9] 
is still out of range!
E
x
t
r
a
c
t
i
n
g
 
s
u
b
s
t
r
i
n
g
s
:
 
 
s
l
i
c
i
n
g
The square-bracket notation also lets us extract multiple characters.
 
HAL 9000 (length = 8)
    01234567
For example, “the first 3 characters” or “characters 2 through 4” or
“the fifth character” (a substring can be only one character long, or
can be empty too!)
Subscript using a 
slice
 (“slicing”)
Syntax: start position, a colon “:”, and stop position (one-past-the-end)
Similar semantics to 
range (start, stop)
The first three characters:  
name[0:3]   # is “HAL”
“Start at character 0 and stop before character 3”
E
x
t
r
a
c
t
i
n
g
 
s
u
b
s
t
r
i
n
g
s
:
 
s
l
i
c
i
n
g
Characters two through four:  name[2:5]  # is “L 9”
You can leave out either the start or the stop position (or both!)
Leaving out the start position means “start at the 0
th
 character”
 
first = name[:3] # “HAL”
Leaving out the stopping position means “go all the way to the end of the
string”
 
last = name[4:]  # “9000”
Leaving out both means “the whole string” (seems silly here)
 
copy = name[:]  # “HAL 9000”
Slicing does NOT change the original string, it makes (returns) a new
one!
Converting case
Python strings have several methods to change their capitalization (case)
These methods don’t change the original string!
They return a NEW string, so use them with assignment statements
Example:
name=“
albert Einstein
All lowercase:
lazy = name.lower()  # lazy is “albert einstein”
All uppercase:
telegraph = name.upper() # telegraph is “ALBERT EINSTEIN”
First letter uppercase:
almost = name.capitalize()  # almost is “Albert einstein”
First letter of each word uppercase:
nice = name.title() # nice is “Albert Einstein”
Converting case
One use for converting case methods
 
case-insensitive comparision
Asking for yes/no
The user might type in “Y” or “y” or “N” or “n”
Convert the input to all uppercase and compare that
 
if userin.upper() == “Y”  # handles “y” too
You can use a subscript to handle multi-character inputs
 
if userin[0].upper() == “Y”  # handles “YES” or
“Yes” or “Yep” or …
Searching inside a string
Python has two ways for searching inside a string, looking for a
substring
The 
in
 operator:   
needle in haystack
needle
 and 
haystack
 are both string variables (can also be lists)
Returns a boolean
if “ “ in name:  # True if name contains a space
The substring can appear anywhere in the string
if “CS” in class:  #  True for CS115, SCSI, 1CS
Case-sensitive!
 
if “cs” in “CS115”:  # False!
It must be contiguous:
if “C1” in “CS115”:   # False!
Searching inside a string
Sometimes you need to know not just whether the substring is there, but
also 
where
 it is.
The 
find
 method returns the location of a substring
 
pos = haystack.find(needle)
Find the 
first
 occurrence of the needle in the haystack
Returns the position where it was found (0 = first position, etc)
Returns -1 if the search string is not found
You can use another argument to start searching in the middle:
pos = haystack.find(needle, 4) # start looking at position 4
In a loop you can use the last match + 1
 
sp1 = haystack.find(“ “)   # first space in haystack
 
sp2 = haystack.find(“ “, sp1 + 1) # second space in haystack
Watch out – if first search fails, sp1 = -1!  sp2 would be searching from same location as sp1
Searching inside a string
rfind is similar, but searches backwards, from the right end to the left
So rfind finds the 
last
 occurrence in a string
 
text = “the
last space here”
 
lastsp = text.rfind(“ “) # 14
Combining find and slicing
You can use find and slicing to extract part of a string:
 
space = name.find(“ “)
 
if space != -1:
  
first = name[:space] # string before the space
  
last = name[space+1:] # string after the space
Exercise :
find all the words in a string (line of words 
sentence
)
 
Search and replace
Often you don’t really care where the substrings are, but just want to
replace them with something else
You can use the replace method
 
newstr = str.replace(“from”,”to”)
Finds all the occurrences of “from” and replaces them with “to”.
Does not modify the original string, it returns a 
new string
You can tell replace to only replace a certain number of occurrences
course = “CS 115 Introduction to Programming”
print(course.replace(“ “, “-”, 1)) # just the first occurrence
 
would print “CS-115 Introduction to Programming”
Strip
When getting input from a user or a file, sometimes there is extra
whitespace
The strip method removes whitespace from the beginning and the
end of the string
Whitespace:  space, tab, newline (and some other exotic characters)
Does not affect whitespace in the middle of the string!
Does 
not
 change the original string, it returns a new one
 
userin = “˽˽\tCS˽˽115˽\n”  # ˽ means space
 
clean = userin.strip()  # gives “CS˽˽115”
Strip
Can strip from only the left end or right end with 
lstrip
 and 
rstrip
 
lclean = userin.lstrip() # “CS˽˽115˽\n”
 
rclean = userin.rstrip() # “˽˽\tCS˽˽115”
 
print(userin) # what does this print?
       ……..
Traversing strings
The for loop in Python can iterate not only over integers but also over the
characters in a string:
 
for char in name:
Called “iterating over” or 
traversing
 (“walking across”) the string
As usual char is the name of a new variable (in line above)
In each iteration of the loop, char will be one character
In order
char is NOT a number!
So if name = “Hal”
The first time, char = “H”
Second time, char = “a”
Last time, char = “l”
String traversal examples
Let’s write a couple programs using strings and for loops to:
1.
Check to see if a string contains a digit.
How is this different from 
string.isdigit()
?
isdigit checks to see if 
all
 the characters are digits
hasdigit.py
2.
Remove vowels from a string
Remember, we cannot modify the original string
So we’ll need to build a new string for the result
We’ll concatenate to this new string to add on the letters we want
The string will be a kind of accumulator
Iterating with an index
Traversing a string gives you the characters but not their positions!
That’s fine for many uses, but sometimes you do care about the
position
There are three ways to do this:
1.
Loop over the string and keep a counter going
Initialize the counter to zero (start at left end of string)
Use the same loop as before, 
for char in name:
Increment the counter at the end of each iteration
Iterating with an index (cont’d)
2.
Loop over the range of indices
for i in range(len(name)):
Inside the loop, name[i] gives the character at that index
3.
Use enumerate to get both character and index at the same time
for i, char in enumerate(name):
Each iteration, i will be the index
… and 
char
 will be the character at that position
Iterating with an index
Let’s change our “
hasdigit
” function to “
finddigit
” in three
ways.
1.
finddigit-counter.py
2.
finddigit-range.py
3.
finddigit-enumerate.py
Slide Note
Embed
Share

Explore the usage of strings in Python, from basic operations like reading input and printing to advanced functions like finding string length, extracting characters, and more. Learn how to manipulate strings effectively by converting them, concatenating, comparing, and checking for digits. Dive into detailed string operations such as slicing, case conversion, searching, replacing, and removing whitespace. Understand concepts like string length, indexing characters, negative subscripts, and practical string manipulations.

  • Python strings
  • String operations
  • String manipulation
  • Python basics
  • Text processing

Uploaded on Oct 10, 2024 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. CS 115 Lecture 11 Strings Taken from notes by Dr. Neil Moore & Dr. Debby Keen

  2. Strings We ve been using strings for a while. What can we do with them? Read them from the user: mystr = input( Name? ) Print them to the screen: print(mystr) Convert (type-cast) them into ints or floats: num = int(userin) Concatenate them with +: name = first + + last Compare with other strings: if A <= name <= K : Check whether they are all digits: if mystr.isdigit():

  3. Strings in detail Let s see how to do more things with strings: Find the length of a string Get individual characters that are in a string Extract ranges of characters ( slicing ) Convert a string to upper/lower case Search for characters or substrings in strings Search and replace substrings Remove whitespace from strings

  4. String length The length of a string is the number of characters in it. Spaces count! So do newlines and other escaped characters To get the length of a string, use the len function: name = HAL 9000 numchars = len(name) # that s 8 characters Argument type: string Return type: integer What s len( )? zero We ll see later that len works with lists too.

  5. Extracting individual characters from a string The characters in a string are numbered from 0 to length -1 HAL 9000 (length = 8) 01234567 Each number is called a position or index or subscript of the character You can use square brackets to get the character at a given position first = name[0] # this is H This is called subscripting or indexing The position must be smaller than the length print(name[8]) # ERROR: string index out of range

  6. Extracting characters with negative subscripts You can subscript with negative numbers, counting from the right end name[-1] is the last, rightmost character name[-2] is the next to last character name[-len(name)] is the first, left most character name[-i] is the same character as name[len(name) i] name[-9] is still out of range!

  7. Extracting substrings: slicing slicing The square-bracket notation also lets us extract multiple characters. HAL 9000 (length = 8) 01234567 For example, the first 3 characters or characters 2 through 4 or the fifth character (a substring can be only one character long, or can be empty too!) Subscript using a slice ( slicing ) Syntax: start position, a colon : , and stop position (one-past-the-end) Similar semantics to range (start, stop) The first three characters: name[0:3] # is HAL Start at character 0 and stop before character 3

  8. Extracting substrings: slicing slicing Characters two through four: name[2:5] # is L 9 You can leave out either the start or the stop position (or both!) Leaving out the start position means start at the 0thcharacter first = name[:3] # HAL Leaving out the stopping position means go all the way to the end of the string last = name[4:] # 9000 Leaving out both means the whole string (seems silly here) copy = name[:] # HAL 9000 Slicing does NOT change the original string, it makes (returns) a new one!

  9. Converting case Python strings have several methods to change their capitalization (case) These methods don t change the original string! They return a NEW string, so use them with assignment statements Example: name= albert Einstein All lowercase: lazy = name.lower() # lazy is albert einstein All uppercase: telegraph = name.upper() # telegraph is ALBERT EINSTEIN First letter uppercase: almost = name.capitalize() # almost is Albert einstein First letter of each word uppercase: nice = name.title() # nice is Albert Einstein

  10. Converting case One use for converting case methods case-insensitive comparision Asking for yes/no The user might type in Y or y or N or n Convert the input to all uppercase and compare that if userin.upper() == Y # handles y too You can use a subscript to handle multi-character inputs if userin[0].upper() == Y # handles YES or Yes or Yep or

  11. Searching inside a string Python has two ways for searching inside a string, looking for a substring The in operator: needle in haystack needle and haystack are both string variables (can also be lists) Returns a boolean if in name: # True if name contains a space The substring can appear anywhere in the string if CS in class: # True for CS115, SCSI, 1CS Case-sensitive! if cs in CS115 : # False! It must be contiguous: if C1 in CS115 : # False!

  12. Searching inside a string Sometimes you need to know not just whether the substring is there, but also where it is. The find method returns the location of a substring pos = haystack.find(needle) Find the first occurrence of the needle in the haystack Returns the position where it was found (0 = first position, etc) Returns -1 if the search string is not found You can use another argument to start searching in the middle: pos = haystack.find(needle, 4) # start looking at position 4 In a loop you can use the last match + 1 sp1 = haystack.find( ) # first space in haystack sp2 = haystack.find( , sp1 + 1) # second space in haystack Watch out if first search fails, sp1 = -1! sp2 would be searching from same location as sp1

  13. Searching inside a string rfind is similar, but searches backwards, from the right end to the left So rfind finds the last occurrence in a string text = the last space here lastsp = text.rfind( ) # 14

  14. Combining find and slicing You can use find and slicing to extract part of a string: space = name.find( ) if space != -1: first = name[:space] # string before the space last = name[space+1:] # string after the space Exercise : find all the words in a string (line of words sentence)

  15. Search and replace Often you don t really care where the substrings are, but just want to replace them with something else You can use the replace method newstr = str.replace( from , to ) Finds all the occurrences of from and replaces them with to . Does not modify the original string, it returns a new string You can tell replace to only replace a certain number of occurrences course = CS 115 Introduction to Programming print(course.replace( , - , 1)) # just the first occurrence would print CS-115 Introduction to Programming

  16. Strip When getting input from a user or a file, sometimes there is extra whitespace The strip method removes whitespace from the beginning and the end of the string Whitespace: space, tab, newline (and some other exotic characters) Does not affect whitespace in the middle of the string! Does not change the original string, it returns a new one userin = \tCS 115 \n # means space clean = userin.strip() # gives CS 115

  17. Strip Can strip from only the left end or right end with lstrip and rstrip lclean = userin.lstrip() # CS 115 \n rclean = userin.rstrip() # \tCS 115 print(userin) # what does this print? ..

  18. Traversing strings The for loop in Python can iterate not only over integers but also over the characters in a string: for char in name: Called iterating over or traversing ( walking across ) the string As usual char is the name of a new variable (in line above) In each iteration of the loop, char will be one character In order char is NOT a number! So if name = Hal The first time, char = H Second time, char = a Last time, char = l

  19. String traversal examples Let s write a couple programs using strings and for loops to: 1. Check to see if a string contains a digit. How is this different from string.isdigit()? isdigit checks to see if all the characters are digits hasdigit.py 2. Remove vowels from a string Remember, we cannot modify the original string So we ll need to build a new string for the result We ll concatenate to this new string to add on the letters we want The string will be a kind of accumulator

  20. Iterating with an index Traversing a string gives you the characters but not their positions! That s fine for many uses, but sometimes you do care about the position There are three ways to do this: 1. Loop over the string and keep a counter going Initialize the counter to zero (start at left end of string) Use the same loop as before, for char in name: Increment the counter at the end of each iteration

  21. Iterating with an index (contd) 2. Loop over the range of indices for i in range(len(name)): Inside the loop, name[i] gives the character at that index 3. Use enumerate to get both character and index at the same time for i, char in enumerate(name): Each iteration, i will be the index and char will be the character at that position

  22. Iterating with an index Let s change our hasdigit function to finddigit in three ways. 1. finddigit-counter.py 2. finddigit-range.py 3. finddigit-enumerate.py

More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#