CSC111 Programs for Week 9 2015

From dftwiki3
Revision as of 12:08, 2 April 2015 by Thiebaut (talk | contribs) (car3randomColors.py)
Jump to: navigation, search

--D. Thiebaut (talk) 09:03, 30 March 2015 (EDT)


Die


# dice.py
# D. Thiebaut
# Program for Week 9
# an example program that defines a Die class, and
# demonstrates how to create 2 objects from this class.

import random


class Die:
    """a class implementing a Die, with a given number
    of sides, and a value (the number of the top face)"""
    
    def __init__( self, n ):
        """initializes the die with n faces, and a value 1,
        by default"""
        self.noSides = n
        self.value   = 1

    def roll( self ):
        """roll the die and pick a new random value for it"""
        self.value = random.randrange( 1, self.noSides+1 )

    def getValue( self ):
        """return the current value, i.e. the number on the top
        side"""
        return self.value


def main():
    # Create 2 dice, one with 6 sides, one with 8
    d1 = Die( 6 )
    d2 = Die( 8 )

    while True:
        # Roll both dice
        d1.roll( )
        d2.roll( )

        # display their value
        print( "Die 1: ",  d1.getValue() )
        print( "Die 2: ",  d2.getValue() )

        ans = input( "Press enter to continue.  Any other key to quit: " )
        if len( ans.strip() )!= 0:
            break

if __name__=="__main__":
    main()


Cats


# cats1.py
# D. Thiebaut
# program developed in class on 4/1/15
#
class Cat:
    """Cat class.  contains information about a cat: name,
    whether vaccinated, breed, and age"""
    def __init__( self, na, vacc, bree, ag ):
        self.name       = na
        self.vaccinated = vacc
        self.breed      = bree
        self.age        = ag

    def __str__( self ):
        """default string representation for a cat.  Will be use by print() if
        we ask it to print a cat object."""
        if self.vaccinated:
            vac = "vaccinated"
        else:
            vac = "not vaccinated"
        # create the string representation of the object
        s = "{0:10} ==> ({1:1}), {2:1}, {3:1}".format(
            self.name, self.breed, self.age, vac )

        # return the string representation
        return s
    
    def getName( self ):
        """returns the name of the cat"""
        return self.name

    def isVaccinated( self ):
        """returns True if the cat is vaccinated, False otherwise."""
        #if self.vaccinated:
        #    return True
        #else:
        #    return False
        return self.vaccinated

# -------------------------------------------------------------
#                          MAIN
# -------------------------------------------------------------

def main():
    # create an empty list of cats
    catList = []

    # Create 3 cat objects and add them to the list
    # Minou, 3, vaccinated, stray
    #catList.append( Cat( "Minou", True, "stray", 3 ) )
    #catList.append( Cat( "Ralph", False, "Burmese", 1 ) )
    #catList.append( Cat( "Garfield", True, "Orange Tabby", 10 ) )

    # open csv file containing cats.  Example of line in file shown below.
    # Winston, 1, not vaccinated,  stray
    file = open( "cats.csv", "r" )
    lines = file.readlines()
    file.close()

    # the contents of the file is now in a list of strings.  The list is called lines.

    # for each line in the list of lines...
    for line in lines:
        #print( line )

        # split the line into 4 fields
        fields = line.split( ',' )

        # if the line doesn't contain 4 fields, it must be invalid.  Skip it!
        if len( fields ) != 4:
            continue

        # assign each one of the 4 items in the list fields to 4 different variables
        name, age, vacc, breed = fields

        # transform vacc from "vaccinated" or "not vaccinated" to True or False
        if vacc.lower().strip() == "vaccinated":
            vacc = True
        else:
            vacc = False

        # add a new cat with this information to the list of cats
        cat = Cat( name.strip(), vacc, breed.strip(), int(age.strip()) ) 
        catList.append( cat )   
        
    # list all the cats in the list
    for cat in catList:
        print( cat )


    
main()


Graphics


The programs below are not fully documented. Just examples of putting a program together in class.

skeletonGraphics.py


# skeleton.py
# D. Thiebaut
# a skeleton program to get started with the graphics
# 
from graphics import *

# define geometry (constants)
WIDTH  = 700
HEIGHT = 600


#----------------------------------------------------------------
def waitForClick( win, message ):
    """ waitForClick: stops the GUI and displays a message.  
    Returns when the user clicks the window. The message is erased."""

    # wait for user to click mouse to start
    startMsg = Text( Point( win.getWidth()/2, win.getHeight()/2 ), message )
    startMsg.draw( win )    # display message
    win.getMouse()          # wait
    startMsg.undraw()       # erase


def main():
    global W, H
    win = GraphWin( "wheel demo", WIDTH, HEIGHT )

    waitForClick( win, "click to start" )

    center = Point( WIDTH//4, HEIGHT//4 )
    c1 = Circle( center, 30 )
    c1.setFill( "red" )
    c1.draw( win )

    waitForClick( win, "click to end" )
    win.close()
    
main()


wheel1.py


# wheel1.py
# D. Thiebaut
# a skeleton program to get started with the graphics
# 
from graphics import *

# define geometry (constants)
WIDTH  = 700
HEIGHT = 600


class Wheel:
    """a Wheel is 2 concentric circles, the larger one black,
    the smaller one grey."""

    def __init__(self, centr, rad1, rad2 ):
        # make circ1 the smaller of the 2 circles
        self.circ1   = Circle( centr, min( rad1, rad2 ) )
        self.circ2   = Circle( centr, max( rad1, rad2 ) )
        self.circ1.setFill( "grey" )
        self.circ2.setFill( "black" )
        
    def draw( self, win ):
        self.circ2.draw( win )
        self.circ1.draw( win )

class Car:
    """a class containing a rectangle and 2 wheels, forming
    a simple car"""

    def __init__( self, refPoint ):
        # create rectangle
        P1  = refPoint
        xP1 = P1.getX()
        yP1 = P1.getY()
        xP2 = xP1 + 180
        yP2 = yP1 + 60
        P2  = Point( xP2, yP2 )
        self.body = Rectangle( P1, P2 )
        self.body.setFill( "yellow" )

        # create the Wheels
        self.w1 = Wheel( Point( xP1+40, yP1+60 ), 10, 20 )
        self.w2 = Wheel( Point( xP1+140, yP1+60 ), 10, 20 )

    def draw( self, win ):
        self.body.draw( win )
        self.w1.draw( win )
        self.w2.draw( win )
    
#----------------------------------------------------------------
def waitForClick( win, message ):
    """ waitForClick: stops the GUI and displays a message.  
    Returns when the user clicks the window. The message is erased."""

    # wait for user to click mouse to start
    startMsg = Text( Point( win.getWidth()/2, win.getHeight()/2 ), message )
    startMsg.draw( win )    # display message
    win.getMouse()          # wait
    startMsg.undraw()       # erase

def main():
    global W, H
    win = GraphWin( "wheel demo", WIDTH, HEIGHT )

    waitForClick( win, "click to start" )

    #w1 = Wheel( Point( WIDTH//4, HEIGHT//4 ), 30, 50 )
    #w1.draw( win )
    car1 = Car( Point( WIDTH//4, HEIGHT//4 ) )
    car1.draw( win )
    
    waitForClick( win, "click to end" )
    win.close()
    
main()



wheel2.py


# wheel1.py
# D. Thiebaut
# a skeleton program to get started with the graphics
# 
from graphics import *

# define geometry (constants)
WIDTH  = 700
HEIGHT = 600


class Wheel:
    """a Wheel is 2 concentric circles, the larger one black,
    the smaller one grey."""

    def __init__(self, centr, rad1, rad2 ):
        # make circ1 the smaller of the 2 circles
        self.circ1   = Circle( centr, min( rad1, rad2 ) )
        self.circ2   = Circle( centr, max( rad1, rad2 ) )
        self.circ1.setFill( "grey" )
        self.circ2.setFill( "black" )
        
    def draw( self, win ):
        self.circ2.draw( win )
        self.circ1.draw( win )

class Car:
    """a class containing a rectangle and 2 wheels, forming
    a simple car"""

    def __init__( self, refPoint ):
        # create rectangle
        P1  = refPoint
        xP1 = P1.getX()
        yP1 = P1.getY()
        xP2 = xP1 + 180
        yP2 = yP1 + 60
        P2  = Point( xP2, yP2 )
        self.body = Rectangle( P1, P2 )
        self.body.setFill( "yellow" )

        # create the Wheels
        self.w1 = Wheel( Point( xP1+40, yP1+60 ), 10, 20 )
        self.w2 = Wheel( Point( xP1+140, yP1+60 ), 10, 20 )

    def draw( self, win ):
        self.body.draw( win )
        self.w1.draw( win )
        self.w2.draw( win )
    
#----------------------------------------------------------------
def waitForClick( win, message ):
    """ waitForClick: stops the GUI and displays a message.  
    Returns when the user clicks the window. The message is erased."""

    # wait for user to click mouse to start
    startMsg = Text( Point( win.getWidth()/2, win.getHeight()/2 ), message )
    startMsg.draw( win )    # display message
    win.getMouse()          # wait
    startMsg.undraw()       # erase

def main():
    global W, H
    win = GraphWin( "wheel demo", WIDTH, HEIGHT )

    waitForClick( win, "click to start" )

    #w1 = Wheel( Point( WIDTH//4, HEIGHT//4 ), 30, 50 )
    #w1.draw( win )
    car1 = Car( Point( WIDTH//4, HEIGHT//4 ) )
    car1.draw( win )

    # animation loop
    while True:
        car1.setSpeed( 5, 0 )
        
    waitForClick( win, "click to end" )
    win.close()
    
main()



car1.py


# wheel1.py
# D. Thiebaut
# a skeleton program to get started with the graphics
# 
from graphics import *

# define geometry (constants)
WIDTH  = 700
HEIGHT = 600


class Wheel:
    """a Wheel is 2 concentric circles, the larger one black,
    the smaller one grey."""

    def __init__(self, centr, rad1, rad2 ):
        # make circ1 the smaller of the 2 circles
        self.circ1   = Circle( centr, min( rad1, rad2 ) )
        self.circ2   = Circle( centr, max( rad1, rad2 ) )
        self.circ1.setFill( "grey" )
        self.circ2.setFill( "black" )
        
    def draw( self, win ):
        self.circ2.draw( win )
        self.circ1.draw( win )

class Car:
    """a class containing a rectangle and 2 wheels, forming
    a simple car"""

    def __init__( self, refPoint ):
        # create rectangle
        P1  = refPoint
        xP1 = P1.getX()
        yP1 = P1.getY()
        xP2 = xP1 + 180
        yP2 = yP1 + 60
        P2  = Point( xP2, yP2 )
        self.body = Rectangle( P1, P2 )
        self.body.setFill( "yellow" )

        # create the Wheels
        self.w1 = Wheel( Point( xP1+40, yP1+60 ), 10, 20 )
        self.w2 = Wheel( Point( xP1+140, yP1+60 ), 10, 20 )

    def draw( self, win ):
        self.body.draw( win )
        self.w1.draw( win )
        self.w2.draw( win )
    
#----------------------------------------------------------------
def waitForClick( win, message ):
    """ waitForClick: stops the GUI and displays a message.  
    Returns when the user clicks the window. The message is erased."""

    # wait for user to click mouse to start
    startMsg = Text( Point( win.getWidth()/2, win.getHeight()/2 ), message )
    startMsg.draw( win )    # display message
    win.getMouse()          # wait
    startMsg.undraw()       # erase

def main():
    global W, H
    win = GraphWin( "wheel demo", WIDTH, HEIGHT )

    waitForClick( win, "click to start" )

    #w1 = Wheel( Point( WIDTH//4, HEIGHT//4 ), 30, 50 )
    #w1.draw( win )
    car1 = Car( Point( WIDTH//4, HEIGHT//4 ) )
    car1.draw( win )

    
        
    waitForClick( win, "click to end" )
    win.close()
    
main()



car2.py


# wheel1.py
# D. Thiebaut
# a skeleton program to get started with the graphics
# 
from graphics import *

# define geometry (constants)
WIDTH  = 700
HEIGHT = 600


class Wheel:
    """a Wheel is 2 concentric circles, the larger one black,
    the smaller one grey."""

    def __init__(self, centr, rad1, rad2 ):
        # make circ1 the smaller of the 2 circles
        self.circ1   = Circle( centr, min( rad1, rad2 ) )
        self.circ2   = Circle( centr, max( rad1, rad2 ) )
        self.circ1.setFill( "grey" )
        self.circ2.setFill( "black" )
        
    def draw( self, win ):
        self.circ2.draw( win )
        self.circ1.draw( win )

    def move( self, dx, dy ):
        self.circ1.move( dx, dy )
        self.circ2.move( dx, dy )
        
class Car:
    """a class containing a rectangle and 2 wheels, forming
    a simple car"""

    def __init__( self, refPoint ):
        # create rectangle
        P1  = refPoint
        xP1 = P1.getX()
        yP1 = P1.getY()
        xP2 = xP1 + 180
        yP2 = yP1 + 60
        P2  = Point( xP2, yP2 )
        self.body = Rectangle( P1, P2 )
        self.body.setFill( "yellow" )

        # create the Wheels
        self.w1 = Wheel( Point( xP1+40, yP1+60 ), 10, 20 )
        self.w2 = Wheel( Point( xP1+140, yP1+60 ), 10, 20 )

        # set the initial speed
        self.dx = 1
        self.dy = 0

    def setSpeed( self, deltaX, deltaY ):
        self.dx = deltaX
        self.dy = deltaY
        
    def draw( self, win ):
        self.w1.draw( win )
        self.body.draw( win )
        self.w2.draw( win )

    def autoMove( self ):
        self.w1.move( self.dx, self.dy )
        self.w2.move( self.dx, self.dy )
        self.body.move( self.dx, self.dy )

    def reverseDirection( self ):
        self.dx = -self.dx

    def getX( self ):
        return self.body.getP1().getX()
        
#----------------------------------------------------------------
def waitForClick( win, message ):
    """ waitForClick: stops the GUI and displays a message.  
    Returns when the user clicks the window. The message is erased."""

    # wait for user to click mouse to start
    startMsg = Text( Point( win.getWidth()/2, win.getHeight()/2 ), message )
    startMsg.draw( win )    # display message
    win.getMouse()          # wait
    startMsg.undraw()       # erase

def main():
    global W, H
    win = GraphWin( "wheel demo", WIDTH, HEIGHT )

    waitForClick( win, "click to start" )


    car1 = Car( Point( WIDTH//4, HEIGHT//4 ) )
    car1.draw( win )
    car1.setSpeed( 5, 0 )

    while True:
        car1.autoMove()
    
        if car1.getX() > WIDTH or car1.getX() < 0:
            car1.reverseDirection()
            
    waitForClick( win, "click to end" )
    win.close()
    
main()



car3.py


# wheel1.py
# D. Thiebaut
# a skeleton program to get started with the graphics
# 
from graphics import *
import random

# define geometry (constants)
WIDTH  = 700
HEIGHT = 600


class Wheel:
    """a Wheel is 2 concentric circles, the larger one black,
    the smaller one grey."""

    def __init__(self, centr, rad1, rad2 ):
        # make circ1 the smaller of the 2 circles
        self.circ1   = Circle( centr, min( rad1, rad2 ) )
        self.circ2   = Circle( centr, max( rad1, rad2 ) )
        self.circ1.setFill( "grey" )
        self.circ2.setFill( "black" )
        
    def draw( self, win ):
        self.circ2.draw( win )
        self.circ1.draw( win )

    def move( self, dx, dy ):
        self.circ1.move( dx, dy )
        self.circ2.move( dx, dy )
        
class Car:
    """a class containing a rectangle and 2 wheels, forming
    a simple car"""

    def __init__( self, refPoint ):
        # create rectangle
        P1  = refPoint
        xP1 = P1.getX()
        yP1 = P1.getY()
        xP2 = xP1 + 180
        yP2 = yP1 + 60
        P2  = Point( xP2, yP2 )
        self.body = Rectangle( P1, P2 )
        self.body.setFill( "yellow" )

        # create the Wheels
        self.w1 = Wheel( Point( xP1+40, yP1+60 ), 10, 20 )
        self.w2 = Wheel( Point( xP1+140, yP1+60 ), 10, 20 )

        # set the initial speed
        self.dx = 1
        self.dy = 0

    def setSpeed( self, deltaX, deltaY ):
        self.dx = deltaX
        self.dy = deltaY
        
    def draw( self, win ):
        self.w1.draw( win )
        self.body.draw( win )
        self.w2.draw( win )

    def autoMove( self ):
        self.w1.move( self.dx, self.dy )
        self.w2.move( self.dx, self.dy )
        self.body.move( self.dx, self.dy )

    def reverseDirection( self ):
        self.dx = -self.dx

    def getX( self ):
        return self.body.getP1().getX()
        
#----------------------------------------------------------------
def waitForClick( win, message ):
    """ waitForClick: stops the GUI and displays a message.  
    Returns when the user clicks the window. The message is erased."""

    # wait for user to click mouse to start
    startMsg = Text( Point( win.getWidth()/2, win.getHeight()/2 ), message )
    startMsg.draw( win )    # display message
    win.getMouse()          # wait
    startMsg.undraw()       # erase

def main():
    global W, H
    win = GraphWin( "wheel demo", WIDTH, HEIGHT )

    waitForClick( win, "click to start" )

    cars = []
    for x in range( 10, WIDTH, 80 ):
        car1 = Car( Point( x, random.choice( [10,50,100, 125, 175, 300 ]) ) )
        car1.draw( win )
        car1.setSpeed( random.choice( [-5, 3, 2, 5, 4] ), 0 )
        cars.append( car1 )
        
    while True:
        for car1 in cars:
            car1.autoMove()
        
            if car1.getX() > WIDTH or car1.getX() < 0:
                car1.reverseDirection()
            
    waitForClick( win, "click to end" )
    win.close()
    
main()



car3randomColors.py


# wheel1.py
# D. Thiebaut
# a skeleton program to get started with the graphics
# 
from graphics import *
import random

# define geometry (constants)
WIDTH  = 700
HEIGHT = 600


class Wheel:
    """a Wheel is 2 concentric circles, the larger one black,
    the smaller one grey."""

    def __init__(self, centr, rad1, rad2 ):
        # make circ1 the smaller of the 2 circles
        self.circ1   = Circle( centr, min( rad1, rad2 ) )
        self.circ2   = Circle( centr, max( rad1, rad2 ) )
        self.circ1.setFill( "grey" )
        self.circ2.setFill( "black" )
        
    def draw( self, win ):
        self.circ2.draw( win )
        self.circ1.draw( win )

    def move( self, dx, dy ):
        self.circ1.move( dx, dy )
        self.circ2.move( dx, dy )
        
class Car:
    """a class containing a rectangle and 2 wheels, forming
    a simple car"""

    def __init__( self, refPoint ):
        # create rectangle
        P1  = refPoint
        xP1 = P1.getX()
        yP1 = P1.getY()
        xP2 = xP1 + 180
        yP2 = yP1 + 60
        P2  = Point( xP2, yP2 )
        self.body = Rectangle( P1, P2 )
        self.body.setFill( random.choice( ["yellow", "black", "beige",
                                           "magenta"] ) )

        # create the Wheels
        self.w1 = Wheel( Point( xP1+40, yP1+60 ), 10, 20 )
        self.w2 = Wheel( Point( xP1+140, yP1+60 ), 10, 20 )

        # set the initial speed
        self.dx = 1
        self.dy = 0

    def setSpeed( self, deltaX, deltaY ):
        """change the speed of the car"""
        self.dx = deltaX
        self.dy = deltaY
        
    def draw( self, win ):
        """draw the car on the window"""
        self.w1.draw( win )
        self.body.draw( win )
        self.w2.draw( win )

    def autoMove( self ):
        """move the car in the current direction (dx, dy)"""
        self.w1.move( self.dx, self.dy )
        self.w2.move( self.dx, self.dy )
        self.body.move( self.dx, self.dy )

    def reverseDirection( self ):
        """reverses the direction of movement.  If going right (dx>0),
        change to going left (dx<0).  If going left, change to going right."""
        self.dx = -self.dx

    def getX( self ):
        """return the x-coordinate of the top-left point of the rectangle"""
        return self.body.getP1().getX()
        
#----------------------------------------------------------------
def waitForClick( win, message ):
    """ waitForClick: stops the GUI and displays a message.  
    Returns when the user clicks the window. The message is erased."""

    # wait for user to click mouse to start
    startMsg = Text( Point( win.getWidth()/2, win.getHeight()/2 ), message )
    startMsg.draw( win )    # display message
    win.getMouse()          # wait
    startMsg.undraw()       # erase

def main():
    global W, H
    win = GraphWin( "wheel demo", WIDTH, HEIGHT )

    # wait for user to click the window...
    waitForClick( win, "click to start" )

    # create a list of several cars, with random positions and random
    # speeds
    cars = []
    for x in range( 10, WIDTH, 120 ):
        # create a new car at a random height in the window
        car1 = Car( Point( x, random.choice( [10,50,100, 125, 175, 300 ]) ) )

        # draw the car
        car1.draw( win )

        # set its speed randomly
        car1.setSpeed( random.choice( [-5, 30, 2, 15, -4] ), 0 )

        # add the car to the list
        cars.append( car1 )


    # animation loop: keep on going as long as the user does not click
    # on the window.
    while win.checkMouse()==None:

        # move each car of the list
        for car1 in cars:
            # move it
            car1.autoMove()

            # if it's hitting a left or right edge of the window
            # change the direction of movement of the car.
            if car1.getX() > WIDTH or car1.getX() < 0:
                car1.reverseDirection()

    # wait for the user to click one last time...
    waitForClick( win, "click to end" )
    win.close()
    
main()