Contents

  1. broken_speeding_ticket.py
  2. eval_cond.py
  3. grade_elif.py
  4. grade_function.py
  5. grade.py
  6. speedingticket_notes.py
  7. speedingticket.py
  8. test.py

broken_speeding_ticket.py 1/8

[
top][prev][next]
# This is NOT a correct solution.  Why is it incorrect?
# What test cases reveal the errors?
# 
# Any speed clocked over the limit results in a fine of at least $50, plus $5
# for each mph over the limit, plus a penalty of $200 for any speed over 90mph.
# 
# Input: speed limit and the clocked speed
# Output: either (a) that the clocked speed was under the limit or 
# (b) the appropriate fine
#
# By CSCI 111


def calculateFine(speed, speedLimit):
    # what happens in this solution?  Why is it not correct behavior?
    if speed > speedLimit:
        fine = 50 + 5*(speed-speedLimit)
        return fine
    if speed > 90: 
        fine += 200
        return fine
    if speed <= speedLimit:
        return 0

eval_cond.py 2/8

[
top][prev][next]
# Examples of advanced conditionals
# by Sara Sprenkle

x = 2
y = 3
z = 4

b = x==2
c = not b

# Note: because of precedence, we don't _need_ parentheses
# I added parentheses for readability/emphasis
d = (y<4) and (z<3)
print("d =", d)

d = (y<4) or (z<3)
print("d =", d)

d = not d
print(b, c, d)


grade_elif.py 3/8

[
top][prev][next]
# Compute the letter grade, based on the numeric grade.
# Written using a function.
# By CSCI 111

import test

def main():
    numericGrade = float(input("Enter the numeric grade: "))
    letter_grade = determineLetterGrade(numericGrade)
    print("Your letter grade is", letter_grade)

def determineLetterGrade( numGrade ):
    """
    Given a numeric grade (between 0 and 100, inclusive), 
    return the letter grade
    """
    if numGrade >= 90:
        return "A"
    elif numGrade >= 80:
        return "B"
    elif numGrade >= 70:
        return "C"
    elif numGrade >= 60:
        return "D"
    else:
        return "F"

def testDetermineLetterGrade():
    test.testEqual( determineLetterGrade(110), "A")
    test.testEqual( determineLetterGrade(95), "A")
    test.testEqual( determineLetterGrade(90), "A")
    test.testEqual( determineLetterGrade(89.99999), "B")
    test.testEqual( determineLetterGrade(85), "B")
    test.testEqual( determineLetterGrade(80), "B")
    test.testEqual( determineLetterGrade(79.99999), "C")
    test.testEqual( determineLetterGrade(71), "C")
    test.testEqual( determineLetterGrade(70), "C")
    test.testEqual( determineLetterGrade(69.99999), "D")
    test.testEqual( determineLetterGrade(68), "D")
    test.testEqual( determineLetterGrade(60), "D")
    test.testEqual( determineLetterGrade(59.99999), "F")
    test.testEqual( determineLetterGrade(0), "F")
    test.testEqual( determineLetterGrade(-20), "F")
    


testDetermineLetterGrade()

#main()

grade_function.py 4/8

[
top][prev][next]
# Compute the letter grade, based on the numeric grade.
# Written using a function.
# By CSCI 111

import test

def main():
    numericGrade = float(input("Enter the numeric grade: "))
    letter_grade = determineLetterGrade(numericGrade)
    print("Your letter grade is", letter_grade)

def determineLetterGrade( numGrade ):
    """
    Given a numeric grade (a float), 
    return the letter grade (a string)
    Parameter:
     - numGrade: a float representing the numeric grade
    Returns the letter grade associated with the letter grade
    """
    if numGrade >= 90:
        letter_grade = "A" 
    else:
        if numGrade >=80:
            letter_grade = "B"
        else:
            if numGrade >= 70:
                letter_grade = "C"
            else:
                if numGrade >= 60:
                    letter_grade = "D"
                else:
                    letter_grade = "F"
    return letter_grade           
    
    """ 
    Alternative 1, with "interleaved?" return statements: 
    if numGrade >= 90:
        return "A"
    else:
        if numGrade >= 80:
            return "B"
        else:
            if numGrade >= 70:
                return "C"
            else:
                if numGrade >= 60:
                    return "D"
                else:
                    return "F"
    """      
    
    """ 
    Alternative 2, without elses because we know that the return means
    exit from the function
   
    if numGrade >= 90:
        return "A"
    if numGrade >= 80:
        return "B"
    if numGrade >= 70:
        return "C"
    if numGrade >= 60:
        return "D"
    return "F"
    """

def testDetermineLetterGrade():
    test.testEqual( determineLetterGrade(110), "A" )
    test.testEqual( determineLetterGrade(95), "A" )
    test.testEqual( determineLetterGrade(90), "A" )
    test.testEqual( determineLetterGrade(89.99999), "B" )
    test.testEqual( determineLetterGrade(85), "B" )
    test.testEqual( determineLetterGrade(80), "B" )
    test.testEqual( determineLetterGrade(79.99999), "C" )
    test.testEqual( determineLetterGrade(71), "C" )
    test.testEqual( determineLetterGrade(70), "C" )
    test.testEqual( determineLetterGrade(69.99999), "D" )
    test.testEqual( determineLetterGrade(68), "D" )
    test.testEqual( determineLetterGrade(60), "D" )
    test.testEqual( determineLetterGrade(59.99999), "F" )
    test.testEqual( determineLetterGrade(0), "F" )
    test.testEqual( determineLetterGrade(-20), "F" )
    

testDetermineLetterGrade()

#main()

grade.py 5/8

[
top][prev][next]
# Compute the letter grade, based on the numeric grade.
# Written using a function.
# By CSCI 111

import test

numericGrade = float(input("Enter the numeric grade: "))

"""
if numericGrade >= 90:
    letterGrade = "A"
else:
    if numericGrade >= 80:
        letterGrade = "B"
    else:
        if numericGrade >= 70:
            letterGrade = "C"
"""

if numericGrade >= 90:
    letterGrade = "A"
elif numericGrade >= 80:
    letterGrade = "B"
elif numericGrade >= 70:
    letterGrade = "C"
elif numericGrade >= 60:
    letterGrade = "D"
else:
    letterGrade = "F"

print("Your grade is", letterGrade)


"""
def calculateLetterGrade(numericGrade):
    if numericGrade >= 90:
        letterGrade = "A"
    else:
        if numericGrade >= 80:
            letterGrade = "B"
        else:
            if numericGrade >= 70:
                letterGrade = "C"\
"""

speedingticket_notes.py 6/8

[
top][prev][next]
# Any speed clocked over the limit results in a fine of at least $50, plus $5
# for each mph over the limit, plus a penalty of $200 for any speed over 90mph.
#
# Input: speed limit and the clocked speed
# Output: either (a) that the clocked speed was under the limit or 
# (b) the appropriate fine
# CSCI 111

EXCESSIVE_SPEED=90

print("This program determines whether you were speeding and your fine,")
print("if appropriate.")

# getting the necessary input from the user
speed = eval(input("Enter your speed: "))
speedlimit = eval(input("Enter the speed limit: "))






def calculateFine2(speedlimit, clockedspeed):
    # another implementation of the function
    if clockedspeed > speedlimit:
        mphOver = clockedspeed-speedlimit
        fine = mphOver*5 + 50
        if clockedspeed > 90:
            fine += 200
        return fine
    else:
        return 0
        
user_calculate_fine = calculateFine(speedLimit, clockedSpeed)
    
    # Alternative 1
    if user_calculate_fine > 0:
        print("Your fine is $", user_calculate_fine)
    else:
        print("Keep safe driving")

    # Alternative 2
    if clockedSpeed > speedLimit:
        user_calculate_fine = calculateFine(speedLimit, clockedSpeed)
        print("Your fine is $", user_calculate_fine)
    else:
        print("Keep safe driving")

speedingticket.py 7/8

[
top][prev][next]
# Any speed clocked over the limit results in a fine of at least $50, plus $5
# for each mph over the limit, plus a penalty of $200 for any speed over 90mph.
#
# Input: speed limit and the clocked speed
# Output: either (a) that the clocked speed was under the limit or 
# (b) the appropriate fine
#
# Several alternatives for the implementation are commented out.
# 
# CSCI 111

import test

def main():
    print("This program determines whether you were speeding and your fine,")
    print("if appropriate.")
    
    # getting the necessary input from the user
    clockedSpeed = eval(input("Enter your speed: "))
    speedLimit = eval(input("Enter the speed limit: "))
    
    fine = calculateFine(speedLimit, clockedSpeed)
    
    if fine == 0:
        print("Continue safe driving!")
    else:
        print("Your fine is $", fine, sep="")
    
def calculateFine(limit, speed):
    '''
    Calculates and returns the fine if the speed is greater than the
    limit.
    Parameters:
    - limit: a non-negative integer representing the speed limit
    - speed: a non-negative integer representing the speed
    Returns the fine or 0 if not speeding
    '''
    if speed > limit:
        fine = 50 + (speed-limit) * 5
        if speed > 90:
            fine += 200
    else: 
        fine = 0
    return fine
    
    
    """
    if speed > limit:
        fine = 50 + (speed-limit) * 5
        if speed > 90:
            fine += 200
        return fine
    else: 
        return 0
        
     if speed <= limit:
         return 0
     else:
         fine = 50 + (speed-limit) * 5
         if speed > 90:
             fine += 200
         return fine
    """

def calculateFine2(limit, speed):
    """
    Calculates and returns the fine if the speed is greater than the
    limit.
    Parameters:
    - limit: a non-negative integer representing the speed limit
    - speed: a non-negative integer representing the speed
    Returns the fine or 0 if not speeding
    """
    fine = 0
    if speed > limit:
        fine = 50 + (speed-limit) * 5
        if speed > 90:
            fine += 200
    return fine



def testCalculateFine():
    #not speeding
    test.testEqual(calculateFine(35, 34), 0)
    test.testEqual(calculateFine(35, 35), 0)
    test.testEqual(calculateFine(100, 95), 0)

    # speeding
    test.testEqual(calculateFine(35, 40), 75)
    test.testEqual(calculateFine(89, 90), 55)
    
    # aggressive speeding
    test.testEqual(calculateFine(70, 91), 355)
    
    
#testCalculateFine()
main()

test.py 8/8

[
top][prev][next]
# From How to Think Like a Computer Scientist textbook

def testEqual(actual,expected,places=5):
    '''
    Does the actual value equal the expected value?
    For floats, places indicates how many places, right of the decimal, must be correct
    '''
    if isinstance(expected,float):
        if abs(actual-expected) < 10**(-places):
            print('\tPass')
            return True
    else:
        if actual == expected:
            print('\tPass')
            return True
    print('\tTest Failed: expected {} but got {}'.format(expected,actual))
    return False

Generated by GNU Enscript 1.6.6.