Python基础之字符串的练习

 

练习1

#!/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:

    return "Number of donuts: "+str(count)

  else: return "Number of donuts: many"



# 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 :

    return s[:2]+s[-2:]

  else: return ''



# 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+++

  return s[0]+s.replace(s[0],'*')[1:]





# 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+++

  return a.replace(a[:2],b[:2])+" "+b.replace(b[:2],a[:2])





# 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()

 

练习2

 

#!/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/



# 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+++

  if len(s) < 3 : return s

  elif s.endswith('ing') : return s+'ly'

  else : return s+'ing'

  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+++

  not_p=s.find('not')

  bad_p=s.find('bad')

  

  if not_p>bad_p:

    return s

  else: return s.replace(s[not_p:bad_p+3],'good')

   

  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+++

  a_odd=len(a)%2

  b_odd=len(b)%2

  if a_odd:

    a_front=a[:len(a)//2+1]

    a_back=a[len(a)//2+1:]

  else:

    a_front=a[:len(a)//2]

    a_back=a[len(a)//2:]

    

  if b_odd:

    b_front=b[:len(b)//2+1]

    b_back=b[len(b)//2+1:]

  else:

    b_front=b[:len(b)//2]

    b_back=b[len(b)//2:]

  return a_front + b_front + a_back + b_back





# 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()

 

 

你可能感兴趣的:(python)