Preliminaries - Important Please Read Carefully
Read carefully the plagiarism statement at: http://www.bbk.ac.uk/registry/policies/documents/assessment-offences-policy. pdf
Once you have read it, add to the top of Term2cw1.py as a multi-line comment, the following:
I have read and understood the sections of plagiarism in the College Policy on assessment offences and confirm that the work is my own,
with the work of others clearly acknowledged.
I give my permission to submit my work to the plagiarism testing database that the College is using and test it using plagiarism detection software, search engines or meta-searching software.
You will get 0 marks if this is not included in your submission
Do not use Github or any publicly accessible site to store your This will be regarded as a plagiarism offence.
Do not be tempted to use contractor websites to find somebody to do the coursework for
Download from Moodle py, testscript.py, PGS.dat, EGL.dat, BatchQueries.dat, BatchQueriesout.dat. Place them all in the same di- rectory of your choosing. I have provided you with a
file Term2cw1.py which has the function
definitions you need to implement, add any further functions you wish to write into this
file. testscript.py will test your script for correctness. Please note that passing these tests only demonstrates that you have understood the ex- amples provided in this document. To check for correctness, I shall run
own script on your submitted work. I shall release this script as part of the coursework feedback. Run testscript.py. You should get the following output:
Step 1 Success! - outcomes
Step 1 Success! - property names Step 1 Success! - ranges
Step 2 Success! - Outcome
Step 2 Success! - Bad Properties Step 3 Success!
If you have been successful in writing the code, running this script again will display the following
Step 1 Failed - outcomes
Step 1 Failed - property names Step 1 Failed - ranges
Step 2 Failed - Outcome
Step 2 Failed - Bad Properties Step 3 Failed
Note I have not provided a test for Step 4.
The Coursework
Introduction to Software Development has 4 courseworks. Each coursework contributes equally to the overall coursework mark.
By doing this coursework you will get experience in reading from and writing to files and you will get experience in automatically processing data.
The Exercise - Overview
There exist several gem institutes that grade diamonds. They all have different systems for classification. For example, EGL1 considers
Measurement |
Good Quality |
Table width |
Between 53.0 to 58.0 inclusive |
Crown Height |
Between 13.0 to 17.0 inclusive |
Crown Angle |
Between 33.0 to 36.0 inclusive |
Pavilion Depth |
Between 42.0 to 44.0 inclusive |
Pavilion Angle |
Between 40.0 to 41.2 inclusive |
Total Depth |
Between 58.5 to 62.5 inclusive |
In reality EGL and PGS use more properties than the ones shown
If the diamond is inside of these ranges then it is classed as Ideal cut otherwise it is classed as Not Ideal cut.
Another gem institute, PGS, uses fewer properties and has different intervals:
Measurement |
Good Quality |
Table width |
Between 53.0 to 57.0 inclusive |
Crown Height |
Between 14.0 to 16.5 inclusive |
Crown Angle |
Between 33.5 to 35.5 inclusive |
Pavilion Depth |
Between 42.5 to 44.0 inclusive |
Pavilion Angle |
Between 40.5 to 41.0 inclusive |
If the diamond is inside of these ranges then it is classed as Excellent Ideal cut
otherwise it is classed as Not Excellent Ideal cut.
You are to write a batch processor for answering queries about diamonds using the data from gem institutes. You program will accept a filename that consists of queries, one query from one user on each line, such as: UID86903202,PGS,53.1,14.2,33.5,42.5,40.5 UID76963403,EGL,53.1,14.2,33.5,42.5,40.5,59.0 UID83240543,EGL,58.0,15.1,35.25,43.0,41.2,62.5 UID94470534,PGS,53.1,14.2,33.5,42.5,41.5 UID24642541,ABC,53.1,14.2,33.5,42.5,41.5 UID98730542,PGS,fifty,14.2,33.5,42.5,41.5 UID98037245,PGS,53.1,14.2,33.5,42.5
Your program will write file containing the answer for each query in the same order keeping the user ID. For example:
UID86903202, Excellent Ideal cut UID76963403, Ideal cut UID83240543, Ideal cut
UID94470534, Not Excellent Ideal cut, Pavilion Angle UID24642541, Data for this Institute not currently available UID98730542, Input values not valid
UID98037245, Number of input values do not match the number of properties
The data used to answer the queries are stored in files that you must be able to read. The following sections will guide you through the process and provide all the necessary detail. The questions are ordered such that you can incrementally build up to the complete solution.
The Questions
There are 4 parts. This coursework is marked out of 50. All questions must be answered using Python 3 programming language.
Always keep backup copies of all assignments. If your assignment gets lost, a backup copy will make things easier for you. Review both Coursework 1 and Coursework 2 using my sample solutions
(10 marks)
Before we can answer a query we will need to be able to read in the relevant data.
Write a function called LoadData, this function has 1 argument called
sName.
The function returns a tuple containing 3 lists. This function reads in a data file containing all the information relevant to a query. For example, the content of EGL.dat is:
Table width,53.0,58.0 Crown Height,13.0,17.0 Crown Angle,33.0,36.0 Pavilion Depth,42.0,44.0 Pavilion Angle,40.0,41.2 Total Depth,58.5,62.5
Ideal cut
Not Ideal cut
The format of this file is as follows. First there is a block properties and their ranges, one on each line. Then there is a divider (--------------- ), the
there are two outputs, the first is the classification of a good diamond and the second is the classification of a bad diamond Below is the content of PGS.dat.
Table width,53,57 Crown Height,14.0,16.5 Crown Angle,33.5,35.5
Pavilion Depth,42.5,44.0 Pavilion Angle,40.5,41.0
Excellent Ideal cut
Not Excellent Ideal cut
Your function accepts a string such as ’PGS’ and opens a file called ’PGS.dat’. It will be assumed that this and any other file are in the current working directory so you do not need to include a path.
Your function will return a tuple of 3 lists. The first list will be the list of possible answers (as strings), followed by a list of possible types (as strings) and finally a list of lists containing the range values which will always be floating point numbers. For the PGS.dat file, this would be:
([’Excellent Ideal cut’, ’Not Excellent Ideal cut’],
[’Table width’, ’Crown Height’, ’Crown Angle’, ’Pavilion Depth’, ’Pavilion Angle’], [[53.0, 57.0], [14.0, 16.5], [33.5, 35.5], [42.5, 44.0], [40.5, 41.0]])
You can assume that there are no errors in the file, and that the file exists,
i.e. do not include any exception handling in this function. Do not test to see if you can cast to float.
I shall test the correctness of your function by adding new data files that you have not been supplied with, so do not hard-code any of the data from the supplied data files.
(10 marks) Read through my sample solution for Term 1 Coursework 2, you may reuse any code you see fit to answer the following
Write a function that has the following name and arguments:
GetFeedback(outcomes, propertyNames, ranges, inputProperties)
The arguments outcomes, propertyNames, ranges are the values re- turned from LoadData():
(outcomes, propertyNames, ranges) = LoadData("PGS")
The argument inputProperties is a list of the properties of a diamond to be classified.
This function returns a tuple containing 2 strings; the answer as string and a validation string :
(outcomes, propertyNames, ranges) = LoadData("PGS") print(GetFeedback(outcomes, propertyNames, ranges,[53.1,14.2,33.5,10.5,41.5]))
displays
(’Not Excellent Ideal cut’, [’Pavilion Depth’, ’Pavilion Angle’])
The first element of the returned list is outcome of the classification, the second element is a list of the names all the properties that failed.
(10 marks)
Only continue to the remaining questions if you have success- fully written the above code. You will receive a mark of zero for parts 3 and 4 if the code you have so far written either does not work or has data hard-coded into it.
Write a function that has the following name and arguments:
ProcessQuery(gemInstitute, inputProperties)
gemInstitute is a string containing the name of the file to open. inputProperties
is defined in the same way as for the function GetFeedback. This function does a lot of the error checking as follows:
If the call to LoadData() fails for any reason then return
(’Data for this Institute not currently available’,’’)
If the length of the list inputProperties does not equal the number of property names then return
(’Number of input values do not match the number of properties’,’’)
If you are unable to cast all the elements in inputProperties to float then return
(’Input values not valid’,’’)
Finally if all the above tests are fine, then return a tuple with the first element
"Inputs are all valid"
The second element is the output from GetFeedback
For ProcessQuery("PGS",[50.1,14.2,33.5,42.5,41.5])
The returned value is
(’Inputs are all valid’, (’Not Excellent Ideal cut’, [’Table width’, ’Pavilion Angle’])
(10 marks)
Write a function called:
ProcessBatch(filename)
This function appends .dat to the filename and opens this file to read. It also appends out.dat to the filename to produce a file to write its output to.
For example ProcessBatch(’batch’), opens a file called batch.dat and writes output to batchout.dat.
If the program fails in any way, catch the issue and print ”Could not process file” to the screen. You must close the files when the function ends.
A batch file consists of multiple queries, one on each line:
UID8693202,PGS,53.1,14.2,33.5,42.5,40.5 UID76963403,EGL,53.1,14.2,33.5,42.5,40.5,59.0 UID83240543,EGL,58.0,15.1,35.25,43.0,41.2,62.5 UID94470534,PGS,50.1,14.2,33.5,42.5,41.5 UID24642541,ABC,53.1,14.2,33.5,42.5,41.5 UID98730542,PGS,fifty,14.2,33.5,42.5,41.5 UID9803245,PGS,53.1,14.2,33.5,42.5
Each line has the following pieces of information: A user ID, a gem insti- tute (that corresponds to a file name used to store the relevant data), a list of a diamond’s properties. The information is comma separated.
Your function must write out a corresponding file that has the answer or feedback about the validity of the input, if the inputs are not correct. If the file holding the data does not exist the output for that particular user query must be:
’Data for this Institute not currently available’
For the above input file, the content of the corresponding output file is the following: (Note that there is no institute called ABC.)
UID86903202, Excellent Ideal cut UID76963403, Ideal cut UID83240543, Ideal cut
UID94470534, Not Excellent Ideal cut, Table width, Pavilion Angle UID24642541, Data for this Institute not currently available UID98730542, Input values not valid
UID98037245, Number of input values do not match the number of properties
(10 marks)
For code quality and for correctly following the submission instructions below. Please ensure you have the following:
See function comments in Section 5.2
Appropriate variable, function and argument
Submitting the assignment:
Do not forget the plagiarism declaration comment at the top of your You will get 0 marks if it is not there.
Do not include a main() function in your
Do not hardcode a directory into your
Only include function Do not have any test or example code that will be evaluated if your file is run.
Include a further comment directly after the plagiarism declaration that has your name, the name of the programme you are taking (e.g., MSc IT, etc.), and the submission
Submit only your py do not zip your file. Do not rename this file.
Submission is only through
To submit your file, follow the Upload Submission for Term2 - Course- work1 link on the ISD Moodle
DescriptionIn this final assignment, the students will demonstrate their ability to apply two ma
Path finding involves finding a path from A to B. Typically we want the path to have certain properties,such as being the shortest or to avoid going t
Develop a program to emulate a purchase transaction at a retail store. Thisprogram will have two classes, a LineItem class and a Transaction class. Th
1 Project 1 Introduction - the SeaPort Project series For this set of projects for the course, we wish to simulate some of the aspects of a number of
1 Project 2 Introduction - the SeaPort Project series For this set of projects for the course, we wish to simulate some of the aspects of a number of