#
!/usr/bin/python -tt
#
Copyright 2010 Google Inc.
#
Licensed under the Apache License, Version 2.0
#
http://www.apache.org/licenses/LICENSE-2.0
#
Google's Python Class
#
http://code.google.com/edu/languages/google-python-class/
#
Basic string exercises
#
Fill in the code for the functions below. main() is already set up
#
to call the functions with a few different inputs,
#
printing 'OK' when each function is correct.
#
The starter code for each function includes a 'return'
#
which is just a placeholder for your code.
#
It's ok if you do not complete all the functions, and there
#
are some additional functions to try in string2.py.
#
A. donuts
#
Given an int count of a number of donuts, return a string
#
of the form 'Number of donuts: <count>', where <count> is the number
#
passed in. However, if the count is 10 or more, then use the word 'many'
#
instead of the actual count.
#
So donuts(5) returns 'Number of donuts: 5'
#
and donuts(23) returns 'Number of donuts: many'
def
donuts(count):
#
+++your code here+++
if
count
<
10
:
s1
=
"
Number of donuts:
"
+
str(count)
print
s1
elif
count
>=
10
:
s1
=
"
Number of donuts: many
"
print
s1
else
:
s1
=
"
Please double check your input
"
print
s1
return
s1
#
B. both_ends
#
Given a string s, return a string made of the first 2
#
and the last 2 chars of the original string,
#
so 'spring' yields 'spng'. However, if the string length
#
is less than 2, return instead the empty string.
def
both_ends(s):
#
+++your code here+++
if
len(s)
<
2
:
print
"
the length of string is less than 2
"
s2
=
""
elif
len(s)
>=
2
:
s2
=
s[0:
2
]
+
s[
-
2
:]
print
s2
return
s2
#
C. fix_start
#
Given a string s, return a string
#
where all occurences of its first char have
#
been changed to '*', except do not change
#
the first char itself.
#
e.g. 'babble' yields 'ba**le'
#
Assume that the string is length 1 or more.
#
Hint: s.replace(stra, strb) returns a version of string s
#
where all instances of stra have been replaced by strb.
def
fix_start(s):
#
+++your code here+++
strlen
=
len(s)
if
strlen
<=
1
:
print
'
the string length is less than 1
'
return
s
elif
strlen
>
1
:
i
=
0
s
=
s[0]
+
s[
1
:].replace(s[0],
'
*
'
)
return
s
#
D. MixUp
#
Given strings a and b, return a single string with a and b separated
#
by a space '<a> <b>', except swap the first 2 chars of each string.
#
e.g.
#
'mix', pod' -> 'pox mid'
#
'dog', 'dinner' -> 'dig donner'
#
Assume a and b are length 2 or more.
def
mix_up(a, b):
#
+++your code here+++
temp
=
a
a
=
a.replace(a[0:
2
],b[0:
2
])
b
=
b.replace(b[0:
2
],temp[0:
2
])
return
a
+
'
'
+
b
#
Provided simple test() function used in main() to print
#
what each function returns vs. what it's supposed to return.
def
test(got, expected):
if
got
==
expected:
prefix
=
'
OK
'
else
:
prefix
=
'
X
'
print
'
%s got: %s expected: %s
'
%
(prefix, repr(got), repr(expected))
#
Provided main() calls the above functions with interesting inputs,
#
using test() to check if each result is correct or not.
def
main():
print
'
donuts
'
#
Each line calls donuts, compares its result to the expected for that call.
test(donuts(
4
),
'
Number of donuts: 4
'
)
test(donuts(
9
),
'
Number of donuts: 9
'
)
test(donuts(
10
),
'
Number of donuts: many
'
)
test(donuts(
99
),
'
Number of donuts: many
'
)
print
print
'
both_ends
'
test(both_ends(
'
spring
'
),
'
spng
'
)
test(both_ends(
'
Hello
'
),
'
Helo
'
)
test(both_ends(
'
a
'
),
''
)
test(both_ends(
'
xyz
'
),
'
xyyz
'
)
print
print
'
fix_start
'
test(fix_start(
'
babble
'
),
'
ba**le
'
)
test(fix_start(
'
aardvark
'
),
'
a*rdv*rk
'
)
test(fix_start(
'
google
'
),
'
goo*le
'
)
test(fix_start(
'
donut
'
),
'
donut
'
)
print
print
'
mix_up
'
test(mix_up(
'
mix
'
,
'
pod
'
),
'
pox mid
'
)
test(mix_up(
'
dog
'
,
'
dinner
'
),
'
dig donner
'
)
test(mix_up(
'
gnash
'
,
'
sport
'
),
'
spash gnort
'
)
test(mix_up(
'
pezzy
'
,
'
firm
'
),
'
fizzy perm
'
)
#
Standard boilerplate to call the main() function.
if
__name__
==
'
__main__
'
:
main()