Going Deeper with Strings
13. Exercises
Exercise 1
Read the documentation of the string methods at http://docs.python.org/3/library/stdtypes.html#string-methods.
You might want to experiment with some of them to make sure you understand how they work. strip
and replace
are particularly useful.
The documentation uses a syntax that might be confusing. For example, in find(sub[, start[, end]])
, the brackets indicate optional arguments. So sub
is required, but start
is optional, and if you include start
, then end
is optional.
Exercise 2 There is a string method called count that is similar to the function in Section 8.7. Read the documentation of this method and write an invocation that counts the number of a’s in '
banana
'.
Exercise 3 A string slice can take a third index that specifies the “step size”; that is, the number of spaces between successive characters. A step size of 2 means every other character; 3 means every third, etc.
>>> fruit ='banana' >>> fruit[0:5:2] 'bnn'A step size of -1 goes through the word backwards, so the slice
[::-1]
generates a reversed string. Use this idiom to write a one-line version of is_palindrome
from Exercise 3.
Exercise 4 The following functions are all intended to check whether a string contains any lowercase letters, but at least some of them are wrong. For each function, describe what the function actually does (assuming that the parameter is a string).
def any_lowercase1(s): for c in s: if c.islower(): return True else: return False def any_lowercase2(s): for c in s: if 'c'.islower(): return 'True' else: return 'False' def any_lowercase3(s): for c in s: flag = c.islower() return flag def any_lowercase4(s): flag = False for c in s: flag = flag or c.islower() return flag def any_lowercase5(s): for c in s: if not c.islower(): return False return True
Exercise 5 A Caesar cypher is a weak form of encryption that involves “rotating” each letter by a fixed number of places. To rotate a letter means to shift it through the alphabet, wrapping around to the beginning if necessary, so ’A’ rotated by 3 is ’D’ and ’Z’ rotated by 1 is ’A’.
To rotate a word, rotate each letter by the same amount. For example, “cheer” rotated by 7 is “jolly” and “melon” rotated by -10 is “cubed”. In the movie 2001: A Space Odyssey, the ship computer is called HAL, which is IBM rotated by -1.
Write a function called rotate_word
that takes a string and an integer as parameters, and returns a new string that contains the letters from the original string rotated by the given amount.
You might want to use the built-in function ord
, which converts a character to a numeric code, and chr
, which converts numeric codes to characters. Letters of the alphabet are encoded in alphabetical order, so for example:
>>> ord('c') - ord('a') 2Because '
c
' is the two-eth letter of the alphabet. But beware: the numeric codes for upper case letters are different. Potentially offensive jokes on the Internet are sometimes encoded in ROT13, which is a Caesar cypher with rotation 13. If you are not easily offended, find and decode some of them.
Solution: http://thinkpython2.com/code/rotate.py.