Skip to content

Instantly share code, notes, and snippets.

@flaviolopes
Created May 21, 2017 23:56
Show Gist options
  • Save flaviolopes/876c156e86712c6fac2900dec5874d98 to your computer and use it in GitHub Desktop.
Save flaviolopes/876c156e86712c6fac2900dec5874d98 to your computer and use it in GitHub Desktop.
Exercicios - WTTD
#!/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):
if len(s) < 3:
return s
if len(s) >= 3 and s[-3:] == "ing":
return s + 'ly'
if len(s) >= 3 and s[-3:] != "ing":
return s + "ing"
# 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):
padrao1 = "not"
padrao2 = "bad"
inicio = s.find(padrao1)
fim = s.find(padrao2)
# print("Início: ", inicio)
# print("Fim: ", fim)
if (inicio != -1 and fim != -1) and (fim > inicio):
primeiro_bloco = s[ : inicio]
segundo_bloco = s[inicio : fim + len(padrao2)]
terceiro_bloco = s[fim + len(padrao2):]
# print(primeiro_bloco)
# print(segundo_bloco)
s = ''.join([primeiro_bloco, segundo_bloco.replace(segundo_bloco, "good"), terceiro_bloco])
return s
else:
return s
# 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):
if (len(a) % 2 == 0) and (len(b) % 2 == 0):
string1_parte1 = a[: int(len(a) / 2)]
string1_parte2 = a[int(len(a) / 2):]
string2_parte1 = b[: int(len(b) / 2)]
string2_parte2 = b[int(len(b) / 2):]
string_final = ''.join([string1_parte1, string2_parte1, string1_parte2, string2_parte2])
return string_final
if len(b) <= 3:
if (len(a) % 2 != 0) and (len(b) % 2 != 0):
string1_parte1 = a[: 3]
string1_parte2 = a[3:]
string2_parte1 = b[: 2]
string2_parte2 = b[2:]
string_final = ''.join([string1_parte1, string2_parte1, string1_parte2, string2_parte2])
return string_final
else:
if (len(a) % 2 == 0) and (len(b) % 2 != 0):
string1_parte1 = a[: 3]
string1_parte2 = a[3:]
string2_parte1 = b[: 3]
string2_parte2 = b[3:]
string_final = ''.join([string1_parte1, string2_parte1, string1_parte2, string2_parte2])
return string_final
# 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')
# 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!
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()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment