Contents
- broken_speeding_ticket.py
- eval_cond.py
- grade_elif.py
- grade_function.py
- grade.py
- speedingticket_notes.py
- speedingticket.py
- 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.