CSC111 Lab 9 Solutions 2011
--D. Thiebaut 15:51, 2 November 2011 (EDT)
Functions
def boxIt( string ):
"""
# unintelligent boxIt
noChars = len( string )
print( "-" * ( 2 + noChars + 2 ) )
print( "| " + string + " |" )
print( "-" * ( 2 + noChars + 2 ) )
"""
# intelligent boxIt
noChars = len( string )
if noChars==0:
return
print( "-" * ( 2 + noChars + 2 ) )
print( "| " + string + " |" )
print( "-" * ( 2 + noChars + 2 ) )
def boxIt3( s1, s2, s3 ):
boxIt( s1 )
boxIt( s2 )
boxIt( s3 )
def multipleBoxes( L ):
for item in L:
boxIt( item )
def median3( a, b, c ):
L = [a, b, c]
L.sort()
return L[1]
def secondSmallest( L ):
if len( L ) < 2:
return None
L.sort()
return L[1]
def betterSecondSmallest( L ):
if len( L ) < 2:
return None
L2 = L[:] # make a copy of L into L2
L2.sort()
return L2[1]
def makeUserName( name ):
words = name.lower().split()
first = words[0]
last = words[-1]
firstInitial = first[0]
return firstInitial+last
def main():
"""
boxIt( "hello!" )
boxIt( "This is a very long string!" )
boxIt( "" ) # empty string
boxIt3( "hello", "there", "Smith College!" )
boxIt3( "hello", "", "previous one was empty" )
"""
"""
multipleBoxes( [ "Doc", "Grumpy", "Happy", "Sleepy", "Bashful", "Sneezy", "Dopey" ] )
print( "\n\n---<<< >>>---\n\n" )
multipleBoxes( [ "Hello", "", "", "There!" ] )
print( "\n\n---<<< >>>---\n\n" )
multipleBoxes( "Hello Smith College!" . split() )
print( "\n\n---<<< >>>---\n\n" )
"""
print( median3( 10, 10, 20 ) )
print( median3( 1, 2, 3 ) )
print( median3( 6, 5, 7 ) )
print( median3( 8, 10, 9 ) )
print( "\n\n---<<< >>>---\n\n" )
L = [ 1, 10, 2, 3, 30, 40, 50 ]
ss = secondSmallest( L )
print( ss )
print( "\n\n---<<< >>>---\n\n" )
L = [ 30 ]
print( secondSmallest( L ) )
print( "\n\n---<<< >>>---\n\n" )
L = [ 1, 10, 2, 3, 30, 40, 50 ]
print( "L = ", L )
print( "second smallest = ", betterSecondSmallest( L ) )
print( "L = ", L )
print( "\n\n---<<< >>>---\n\n" )
user = makeUserName( "Alex Andra" )
print( user )
print( makeUserName( "Mini Driver" ) )
print( makeUserName( "Alan J. Smith" ) )
main()
Graphics
With Coordinates
from graphics import *
def isInside( xc, yc, x1, y1, x2, y2 ):
if x1 <= xc <= x2 and y1 <= yc <= y2:
return 1
return 0
def main():
w = 600
h = 400
x1 = 20
y1 = 30
x2 = w // 3
y2 = h - y1
win = GraphWin( "Click me to stop!", w, h )
c = Circle( Point( w//2, h//4 ), 20 )
c.setFill( "yellow" )
c.draw( win )
r = Rectangle( Point( x1, y1 ), Point( x2, y2 ) )
r.setWidth(3)
r.draw( win )
dirX = 5
dirY = 3
while True:
c.move( dirX, dirY )
xc = c.getCenter().getX()
yc = c.getCenter().getY()
if not ( 0 <= xc <= w ): dirX = -dirX
if not ( 0 <= yc <= h ): dirY = -dirY
if isInside( xc, yc, x1, y1, x2, y2 )== 1:
# center inside rectangle
c.setFill( "red" )
else:
# center outside rectangle
c.setFill( "yellow" )
if win.checkMouse() != None:
break
win.close()
main()
with points
from graphics import *
def isInside( center, P1, P2 ):
if ( P1.getX() <= center.getX() <= P2.getX()
and P1.getY() <= center.getY() <= P2.getY() ):
return 1
return 0
def main():
w = 600
h = 400
x1 = 20
y1 = 30
x2 = w // 3
y2 = h - y1
win = GraphWin( "Click me to stop!", w, h )
c = Circle( Point( w//2, h//4 ), 20 )
c.setFill( "yellow" )
c.draw( win )
P1 = Point( x1, y1 )
P2 = Point( x2, y2 )
r = Rectangle( P1, P2 )
r.setWidth(3)
r.draw( win )
dirX = 5
dirY = 3
while True:
c.move( dirX, dirY )
xc = c.getCenter().getX()
yc = c.getCenter().getY()
if not ( 0 <= xc <= w ): dirX = -dirX
if not ( 0 <= yc <= h ): dirY = -dirY
if isInside( c.getCenter(), P1, P2 )== 1:
# center inside rectangle
c.setFill( "red" )
else:
# center outside rectangle
c.setFill( "yellow" )
if win.checkMouse() != None:
break
win.close()
main()
With Objects
from graphics import *
def isInside( circle, rect ):
if ( rect.getP1().getX() <= circle.getCenter().getX() <= rect.getP2().getX()
and rect.getP1().getY() <= circle.getCenter().getY() <= rect.getP2().getY() ):
return 1
return 0
def main():
w = 600
h = 400
x1 = 20
y1 = 30
x2 = w // 3
y2 = h - y1
win = GraphWin( "Click me to stop!", w, h )
c = Circle( Point( w//2, h//4 ), 20 )
c.setFill( "yellow" )
c.draw( win )
P1 = Point( x1, y1 )
P2 = Point( x2, y2 )
r = Rectangle( P1, P2 )
r.setWidth(3)
r.draw( win )
P1 = Point( x1+300, y1 )
P2 = Point( x2+300, y2 )
r2 = Rectangle( P1, P2 )
r2.setWidth( 3 )
r2.draw( win )
dirX = 5
dirY = 3
while True:
c.move( dirX, dirY )
xc = c.getCenter().getX()
yc = c.getCenter().getY()
if not ( 0 <= xc <= w ): dirX = -dirX
if not ( 0 <= yc <= h ): dirY = -dirY
if isInside( c, r )== 1:
# center inside rectangle
c.setFill( "red" )
elif isInside( c, r2 ) == 1:
c.setFill( "blue" )
else:
# center outside rectangles
c.setFill( "yellow" )
if win.checkMouse() != None:
break
win.close()
main()