Testing schedule
This is a problem set. Some of these are easy, others are far more difficult. The purpose of these problems sets are:
- to build your skill applying computational thinking to a problem
- to assess your knowledge and skills of different programming practices
What is this problem set trying to do[edit]
Our goals are to solve a real-world problem. We will need to use file operations, iteration, selection, and the python datetime library.
The Problem[edit]
Construct a python program which speaks the time and a students name 3 minutes before their appointment. The lists of times and students are included on this page as a plain text file.
You will need this file to complete this problem set.
For example, Ben might have an appointment at 9:45. At 9:42 I should hear "Ben has an appointment in 3 minutes and should now go to the testing center" from your computer speakers.
Good luck. This is very real-world type of problem.
How you will be assessed[edit]
Your solution will be graded using the following axis:
Scope
- To what extent does your code implement the features required by our specification?
- To what extent is there evidence of effort?
Correctness
- To what extent did your code meet specifications?
- To what extent did your code meet unit tests?
- To what extent is your code free of bugs?
Design
- To what extent is your code written well (i.e. clearly, efficiently, elegantly, and/or logically)?
- To what extent is your code eliminating repetition?
- To what extent is your code using functions appropriately?
Style
- To what extent is your code readable?
- To what extent is your code commented?
- To what extent are your variables well named?
- To what extent do you adhere to style guide?
References[edit]
A possible solution[edit]
Click the expand link to see one possible solution, but NOT before you have tried and failed!
import os
from datetime import datetime, timedelta
timeList = []
prevIndex = 0
found = False
file = (open("/FULL_PATH_TO_FILE_HERE/testing_schedule.txt", "r")).read()
classList = file.split(' ')
for i in classList:
if ':' in i:
index = classList.index(i)
timeList.append((classList[prevIndex:index]))
prevIndex = index
timeList = timeList[1:]
for i in range(0,3):
for i in timeList:
if len(i) != 3:
timeList.remove(i)
def sayNames(timeList, currentTime):
for i in timeList:
if i[0] == currentTime:
os.system("say '{} and {} have testing in 3 minutes.'".format(i[1], i[2]))
return True
while True:
if found == True:
break
now = datetime.now() + timedelta(minutes=3)
currentTime = now.strftime("%H:%M:%S")
found = sayNames(timeList, currentTime)