#!/usr/bin/python2.4 -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/

# Additional basic string exercises


# D. verbing
# Given a string, if its length is at least 3,
# add 'ing' to its end.
# Unless it already ends in 'ing', in which case
# add 'ly' instead.
# If the string length is less than 3, leave it unchanged.
# Return the resulting string.
def verbing(s):
    # +++your code here+++
    return


# E. not_bad
# Given a string, find the first appearance of the
# substring 'not' and 'bad'. If the 'bad' follows
# the 'not', replace the whole 'not'...'bad' substring
# with 'good'.
# Return the resulting string.
# So 'This dinner is not that bad!' yields:
# This dinner is good!
def not_bad(s):
    # +++your code here+++
    return


# F. front_back
# Consider dividing a string into two halves.
# If the length is even, the front and back halves are the same length.
# If the length is odd, we'll say that the extra char goes in the front half.
# e.g. 'abcde', the front half is 'abc', the back half 'de'.
# Given 2 strings, a and b, return a string of the form
#  a-front + b-front + a-back + b-back
def front_back(a, b):
    # +++your code here+++
    return


# Simple provided 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)))


# main() calls the above functions with interesting inputs,
# using the above test() to check if the result is correct or not.
def main():
    print('verbing')
    test(verbing('hail'), 'hailing')
    test(verbing('swiming'), 'swimingly')
    test(verbing('do'), 'do')

    print()
    print('not_bad')
    test(not_bad('This movie is not so bad'), 'This movie is good')
    test(not_bad('This dinner is not that bad!'), 'This dinner is good!')
    test(not_bad('This tea is not hot'), 'This tea is not hot')
    test(not_bad("It's bad yet not"), "It's bad yet not")

    print()
    print('front_back')
    test(front_back('abcd', 'xy'), 'abxcdy')
    test(front_back('abcde', 'xyz'), 'abcxydez')
    test(front_back('Kitten', 'Donut'), 'KitDontenut')


if __name__ == '__main__':
    main()

@@ -263,17 +263,38 @@
 ercises%0A
+from math import ceil
 %0A
-
 %0A# D. ve
@@ -553,41 +553,109 @@
     
-# +++your code here+++%0A    return
+if len(s) %3C 3:%0A        return s%0A    return s + 'ing' if len(s) %3E= 3 and s%5B-3:%5D != 'ing' else s + 'ly'
 %0A%0A%0A#
@@ -959,41 +959,225 @@
     
-# +++your code here+++%0A    return
+not_index = s.find('not')%0A    bad_index = s.find('bad')%0A    bool_expression = not_index == -1 or bad_index == -1 or bad_index %3C not_index%0A    return s if bool_expression else s%5B:not_index%5D + 'good' + s%5Bbad_index + 3:%5D
 %0A%0A%0A#
@@ -1573,41 +1573,130 @@
     
-# +++your code here+++%0A    return
+index_a = ceil(len(a) / 2)%0A    index_b = ceil(len(b) / 2)%0A    return a%5B:index_a%5D + b%5B:index_b%5D + a%5Bindex_a:%5D + b%5Bindex_b:%5D
 %0A%0A%0A#

String 2