330 likes | 416 Views
Strings. Victor Norman CS104 Calvin College. Reading Quiz. Counts toward your grade. Question 1. What is printed by the following statements? s = “python” t = “rocks” print(s + t). Question 2. What is printed by the following statements? s = “python rocks” print(s[2] + s[-5]).
E N D
Strings Victor Norman CS104 Calvin College
Reading Quiz • Counts toward your grade.
Question 1 What is printed by the following statements? s = “python” t = “rocks” print(s + t)
Question 2 What is printed by the following statements? s = “python rocks” print(s[2] + s[-5])
Question 3 What is printed by the following statements? s = “python rocks” print(s[3:8])
Collection Data Type • a data type that consists of multiple “smaller” data items. • aka “composite data type”. • items may have to be one type or may be of multiple types. Data may be ordered or not. • string: each item is a single character. Ordered. • list: items may be any type. Ordered. • dictionary: items may be any type. Unordered. • objects: any type. Unordered.
String Type • consists of multiple characters, in order. • may be empty: “” • is immutable: • Cannot be changed once it is created. • Any string methods that seem like they may be changing the string mustbe returning a new string. • newName = name.capitalize() # returns new str, name unchanged
String Operations • +: concatenates two strings to make a new string. E.g., newStr = oldStr1 + oldStr2 • []: indexing/subscripting: stringname[index]. • index from 0 to n – 1. • result is a new string (of length 1). • upper(), lower(), strip() • produce new strings.
Come on and Click! What is the value of s after the following? s = ’abc’ s = ’d’ * 3 + s s = s + ’’ * 3 s = s + ’q’
CQ 2 What is the value of s after this code is executed? s = “What is your name?” s.upper()
Slicing Operation • Syntax and operation similar to indexing, but results in shorter new string derived from the original. • indexing: result string length is 1. • slicing: result string length may be > 1. • somestring[n:m:s] • start at character n in somestring. • go up to but not including character m. • by step s. • no n beginning; no m end; no s 1.
Comparing Strings • use == or !=. • can compare with <, >, etc.., but really not used very often.
Put on your red shoes and click the blues CQ 1: What is the output of this code? sketch = “argument clinic” print(sketch[7:-1])
CQ 2 What does t hold? s = “Knights of Ni!” t = s[:]
CQ 3 What does t hold? s = “Knights of Ni!” t = s[::-1]
Item-based vs Index-based Iteration • item-based: for <item> in <sequence>: • <item> is each item in the sequence. • index-based: for <idx> in range(len(<sequence>)): • code in the body has the index of what item to deal with, as someSeq[idx]).
Examples of each • Item-based for cheese in cheeses: print(cheese) • Index-based for idx in range(len(cheeses)): print(cheeses[idx])
When to use which? • Item-based: • simpler syntax, easier to read. • use when code does not need to know where the item is in the sequence. • Index-based: • harder to read. • accessing the item is more complicated (using indexing operator). • code can know where the item is in the sequence. • code can access other items around the item.
Example • What if we want to print out the cheeses like this: • Cheddar • Gouda • Venezuelan Beaver Cheese Need to use index-based:
Example continued for idx in range(len(cheeses)): # idx starts at 0, but we want to # print out as if indices start at 1, # so add 1. print(str(idx + 1) + “.”, cheeses[idx])
Accumulator Pattern resStr = “” # initialize var to empty or 0 for ch in someStr: # for each item if isConsonant(ch): resStr = resStr + ch # add to result • Used item-based, because didn’t care about where we were in the string. • someStr is a sequence, so syntax is legal. • results accumulated in resStr
Whiteboard/IDLE Activity Write the following function that returns a string that is the same as s except that spaces are removed. defremove_spaces(s):
Whiteboard/IDLE Activity Write the following function that returns a string that is the same as s except that spaces are removed. defremove_spaces(s): resStr = “” for ch in s: if ch != “ “: resStr = resStr + ch return resStr
while Loop vs Index-Based for Loop for i in range(len(s)): code here uses s[i] i = 0 while i < len(s): use s[i] i = i + 1 # better: i += 1
in and not in • very useful for searching a string to see if string is in the string or not. • returns Boolean: so you know if the target is in the string, but don’t know where. if “wherefore” in hamletText: print(“art thou”)
Optional Parameters • Terminology: • parameters may be optional in the call. • in function definition, optional params • must appear on the end of the parameter list. • indicated by being given a default value. • Code in the function is exactly the same.
Examples def weird(a, b, c=3): return a + b + c print(weird(3, 7)) print(weird(3, 7, 44)) def weirder(a=3, b=4, c=5): return a + b + c print(weirder()) print(weirder(7)) print(weirder(7, 8)) print(weirder(7, 8, 9))
Examples def something(a, b, debug=False): res = a + b if debug: print(“something returning “ + res) return res x = something(44, -10) x = something(44, -10, True) # turn on debugging
Activity Write a function that removes certain letters from a given string. If no letters are given, it removes all vowels (not including y). You can assume everything is lowercase. The result is returned. defremove_chars(s, <stuff>): # remove from s
Activity Write a function that removes certain letters from a given string. If no letters are given, it removes all vowels (not including y). You can assume everything is lowercase. The result is returned. defremove_chars(s, ch2rem=“aeiou”): res = “” for ch in s: if ch not in ch2rem: res = res + ch return res
Activity continued Given a string s, write code to call your function on s to remove all vowels. Then, write a function call to remove all letters from a to f, inclusive. Print the results. print(remove_chars(“Monty Python”)) # should print MntyPythn print(remove_chars(“Monty Python”, “My”)) # should print ontPthon
Assignment • LOTS of CodeLab questions about strings. • Very good practice.