Contents
- ./broken_speeding_ticket.py
- ./grade_elif.py
- ./grade_function.py
- ./grade.py
- ./multiples.py
- ./speedingticket.py
./broken_speeding_ticket.py 1/6
[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
./grade_elif.py 2/6
[top][prev][next]
# Compute the letter grade, based on the numeric grade.
# By CSCI 111
numericGrade = float(input("Enter the numeric grade: "))
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 letter grade is", letterGrade)
./grade_function.py 3/6
[top][prev][next]
# Compute the letter grade, based on the numeric grade.
# Written using a function. Below are a few different options
# for implementation
# 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 4/6
[top][prev][next]
# Compute the letter grade, based on the numeric grade.
# Written using a function.
# By CSCI 111
numericGrade = float(input("Enter the numeric grade: "))
if numericGrade >= 90:
letterGrade = "A"
else:
if numericGrade >= 80:
letterGrade = "B"
else:
if numericGrade >= 70:
letterGrade = "C"
else:
if numericGrade >= 60:
letterGrade = "D"
else:
letterGrade = "F"
print("Your grade is", letterGrade)
./multiples.py 5/6
[top][prev][next]
# Checking multiples
# -- mostly demonstrating use of elif and how the cases are mutually exclusive
# -- Shows an alternative to what is likely the expected behavior.
# by CSCI111
print("This program determines if the input is a multiple of 2 or 3")
print()
x = int(input("Enter x: "))
if x % 2 == 0:
print(x, "is a multiple of 2")
elif x % 3 == 0:
print(x, "is a multiple of 3")
else:
print(x, "is not a multiple of 2 or 3")
print()
print("-"*40)
print("Implement the expected behavior...")
# this code does something different than the above code:
# it shows if a number is evenly divisible by 2 or 3 or neither
isNotDivisibleBy2Or3 = True
if x % 2 == 0:
print(x, "is a multiple of 2")
isNotDivisibleBy2Or3 = False
if x % 3 == 0:
print(x, "is a multiple of 3")
isNotDivisibleBy2Or3 = False
if isNotDivisibleBy2Or3:
print(x, "is not a multiple of 2 or 3")
./speedingticket.py 6/6
[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
#
# By CSCI 111
import test
def main():
print("This program ...")
clockedSpeed = eval(input("Enter your speed: "))
speedLimit = eval(input("Enter the speed limit: "))
# two different approaches shown below...
# you would only use one of these in a "real"/finished program
if clockedSpeed > speedLimit:
fine = calculateFine(speedLimit, clockedSpeed)
print("Your fine is $", fine)
else:
print("Continue safe driving practices")
fine = calculateFine(speedLimit, clockedSpeed)
if fine == 0:
print("Continue safe driving practices")
else:
print("Your fine is $", fine)
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 ($50 plus $5 for each mph over the limit plus
a penalty of $200 for any speed over 90 mph) or 0 if not speeding
"""
# are they speeding?
if limit >= speed:
# not speeding
return 0
else:
# calc fine
fine = (speed - limit)*5 + 50
if speed > 90:
fine = fine + 200
return fine
def testCalculateFine():
# not speeding
test.testEqual(calculateFine(0, 0), 0)
test.testEqual(calculateFine(35, 35), 0)
test.testEqual(calculateFine(35, 30), 0)
test.testEqual(calculateFine(100, 91), 0)
# speeding
test.testEqual(calculateFine(35, 40), 75)
test.testEqual(calculateFine(80, 90), 100)
# excessive speeding
test.testEqual(calculateFine(80, 91), 305)
test.testEqual(calculateFine(90, 91), 255)
#testCalculateFine()
main()
Generated by GNU Enscript 1.6.5.90.