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