Contents

  1. broken_speeding_ticket.py
  2. eval_cond.py
  3. grade_elif.py
  4. grade_function.py
  5. speedingticket.py

broken_speeding_ticket.py 1/5

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

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: "))
    
    # ...  Focus on why brokenCalculateFine is incorrect
    


def brokenCalculateFine(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

main()

eval_cond.py 2/5

[
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/5

[
top][prev][next]
# Compute the letter grade, based on the numeric grade.
# Written using a function, using elif
# 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/5

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

speedingticket.py 5/5

[
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
# TODO: main
# 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: "))
    
    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")

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 limit>=speed:
        return 0
    mphOver = speed-limit
    fine = mphOver*5+50
    if speed > 90:
        fine = fine + 200    
    return fine

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

def testCalculateFine():
    #not speeding
    test.testEqual(calculateFine(35, 35), 0)
    test.testEqual(calculateFine(35, 34), 0)
    test.testEqual(calculateFine(100, 91), 0)
    # speeding
    test.testEqual(calculateFine(35, 36), 55)
    test.testEqual(calculateFine(35, 40), 75)
    test.testEqual(calculateFine(70, 90), 150)
    # aggressive speeding
    test.testEqual(calculateFine(50, 100), 500)
    test.testEqual(calculateFine(70, 91), 355)
    
    
#testCalculateFine()
main()

Generated by GNU Enscript 1.6.6.