Skip to main content
ALPHA    This is new software undergoing tests! Thank you for your patience.

Candidate: Khadija Khadija Assessed by: Nicholas Tollervey ntoll

Python (2023) ~ Grade 2 (Elementary)

Roman Number To Integer Calculator

Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. For example, 2 is written as II in Roman numeral, just two ones added together. 12 is written as XII, which is simply X + II. The number 27 is written as XXVII, which is XX + V + II. Roman numerals are usually written from largest to smallest and from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used: I can be placed before V (5) and X (10) to make 4 and 9. X can be placed before L (50) and C (100) to make 40 and 90. C can be placed before D (500) and M (1000) to make 400 and 900. Given a roman numeral, convert it to an integer.

Attached files
Filename (click to download) Size Uploaded by
Screen_Shot_2022-12-05_at_11.13.47.png 911.8 KB Khadija
Markdown code
![...](/media/assessment/9619ad05/2022-12-05/11-15-35/Screen_Shot_2022-12-05_at_11.13.47.png "...")
roman_error.png 49.0 KB ntoll
Markdown code
![roman_error.png](/media/assessment/9619ad05/2022-12-06/11-31-50/roman_error.png "roman_error.png")
numerals.png 17.8 KB ntoll
Markdown code
![numerals.png](/media/assessment/9619ad05/2022-12-06/11-46-43/numerals.png "numerals.png")
probem_number.png 17.7 KB ntoll
Markdown code
![probem_number.png](/media/assessment/9619ad05/2022-12-06/11-48-02/probem_number.png "probem_number.png")
Screen_Shot_2022-12-07_at_11.31.58.png 1.4 MB Khadija
Markdown code
![...](/media/assessment/9619ad05/2022-12-07/11-34-25/Screen_Shot_2022-12-07_at_11.31.58.png "...")
Screen_Shot_2022-12-09_at_12.06.07.png 545.7 KB Khadija
Markdown code
![...](/media/assessment/9619ad05/2022-12-09/12-07-22/Screen_Shot_2022-12-09_at_12.06.07.png "...")
Screen_Shot_2022-12-09_at_13.44.03.png 1.0 MB Khadija
Markdown code
![...](/media/assessment/9619ad05/2022-12-09/13-44-40/Screen_Shot_2022-12-09_at_13.44.03.png "...")
Screen_Shot_2022-12-09_at_13.44.03.png 1.0 MB Khadija
Markdown code
![...](/media/assessment/9619ad05/2022-12-09/13-45-11/Screen_Shot_2022-12-09_at_13.44.03.png "...")
Screen_Shot_2022-12-09_at_13.46.57.png 963.5 KB Khadija
Markdown code
![...](/media/assessment/9619ad05/2022-12-09/13-47-30/Screen_Shot_2022-12-09_at_13.46.57.png "...")
newline_bug.gif 191.1 KB ntoll
Markdown code
![newline_bug.gif](/media/assessment/9619ad05/2022-12-14/10-52-35/newline_bug.gif "newline_bug.gif")
Demo_gradio.mov 9.2 MB Khadija
Markdown code
[Demo_gradio.mov](/media/assessment/9619ad05/2022-12-15/17-02-56/Demo_gradio.mov){target="_blank"}
Demo_gradio_copy.mkv 9.2 MB Khadija
Markdown code
[Demo_gradio_copy.mkv](/media/assessment/9619ad05/2022-12-16/11-37-23/Demo_gradio_copy.mkv){target="_blank"}
Screen_Shot_2022-12-16_at_12.01.11.png 575.8 KB Khadija
Markdown code
![...](/media/assessment/9619ad05/2022-12-16/12-02-08/Screen_Shot_2022-12-16_at_12.01.11.png "...")
Screen_Shot_2022-12-16_at_12.09.55.png 540.7 KB Khadija
Markdown code
![...](/media/assessment/9619ad05/2022-12-16/12-11-44/Screen_Shot_2022-12-16_at_12.09.55.png "...")
roman_numeral_calculator.gif 145.1 KB ntoll
Markdown code
![roman_numeral_calculator.gif](/media/assessment/9619ad05/2022-12-17/17-09-04/roman_numeral_calculator.gif "roman_numeral_calculator.gif")
Screen_Shot_2022-12-22_at_09.17.26.png 552.4 KB Khadija
Markdown code
![...](/media/assessment/9619ad05/2022-12-22/09-19-41/Screen_Shot_2022-12-22_at_09.17.26.png "...")
Screen_Shot_2022-12-22_at_01.36.33.png 1.3 MB Khadija
Markdown code
![...](/media/assessment/9619ad05/2022-12-22/09-23-02/Screen_Shot_2022-12-22_at_01.36.33.png "...")
Screen_Shot_2022-12-22_at_09.24.36.png 2.3 MB Khadija
Markdown code
![...](/media/assessment/9619ad05/2022-12-22/09-25-08/Screen_Shot_2022-12-22_at_09.24.36.png "...")
Final_calculator.mov 13.5 MB Khadija
Markdown code
[Final_calculator.mov](/media/assessment/9619ad05/2022-12-22/10-11-49/Final_calculator.mov){target="_blank"}
Screen_Shot_2022-12-26_at_15.58.12.png 849.3 KB Khadija
Markdown code
![...](/media/assessment/9619ad05/2022-12-26/15-58-45/Screen_Shot_2022-12-26_at_15.58.12.png "...")
oops_gradio.png 10.6 KB ntoll
Markdown code
![oops_gradio.png](/media/assessment/9619ad05/2023-01-03/16-18-36/oops_gradio.png "oops_gradio.png")
Screen_Shot_2023-01-03_at_20.38.33.png 357.6 KB Khadija
Markdown code
![...](/media/assessment/9619ad05/2023-01-03/20-39-09/Screen_Shot_2023-01-03_at_20.38.33.png "...")
Screen_Shot_2023-01-03_at_20.38.33.png 357.6 KB Khadija
Markdown code
![...](/media/assessment/9619ad05/2023-01-03/20-52-25/Screen_Shot_2023-01-03_at_20.38.33.png "...")
Screen_Shot_2023-01-04_at_13.47.22.png 2.7 MB Khadija
Markdown code
![...](/media/assessment/9619ad05/2023-01-04/13-48-23/Screen_Shot_2023-01-04_at_13.47.22.png "...")

Feedback and results


Project purpose:
5/5

Was the purpose of the project, its aims and objectives and the needs of those interacting with it clearly articulated?

Well done. You have clearly explored and explained your aims and objectives in some detail, including an appreciation of the limitations of Roman numerals. I also appreciated your engagement with the problems you encountered during the development of your project, such as how to deal with out-of-range numbers or nonsense input from the user.


User engagement:
4/5

How well did the candidate engage and empathise with their project's expected users, their needs and potential stumbling blocks?

I was delighted to see good evidence of user focus. You gathered feedback then responded to their suggestions and any problems they encountered. To get a higher mark, next time users should be involved earlier and in more steps in the development process.

For example, before coding you might describe how you imagine a user interacting with your app, then, once you have the first draft version of your app working, you could ask for feedback from trusted potential users and check your assumptions were right.

Finally, you might also spend some time focusing on how users with more complex needs might interact with your project (for example, how usable is your app on a mobile device owned by an elderly user who might have a visual impairment?).


Running the project:
5/5

How clear and accurate were the instructions for executing the project, and how robust was the project when run?

The instructions you've provided for running your project are clear and engaging (just click on the link!). Your code is easy to run, works as expected without any obvious bugs and engages the user in a supportive and helpful manner when things go wrong. Well done.


Architecture and design:
5/5

How well was the project designed, architected and put together?

The architecture, design and organisation of your project is clear, simple and logical. I also appreciate the care you have taken with commentary in your code for future maintainers and collaborators. Well done on separating the UI, validation, error handling and calculation aspects of your app - should you wish to migrate the functionality of the app to another mode of presentation, all the core logic is cleanly organised and easy to refactor.


User experience:
4/5

In terms of the presentation and interface of the project, what is the user's experience of interacting with the project?

The user interface is clean and simple with an appropriate amount of context setting and help for new users. I particularly appreciate how this aspect of the project has been refined and improved from the rather limited first draft. You also make simple yet idiomatic use of the gradio UI layer.

To achieve the very highest of marks in this section show an awareness and appreciation of expected use cases (from different sorts of users' points of view) and how they apply to the design of the UI (rather than merely focusing on exposing the underlying logic).

In future grades you should also show an awareness of internationalization (so your project can be used by folks who don't speak English) and accessibility (so folks, for whom typical computing devices pose problems, are able to engage).


Core concepts:
5/5

Does the candidate understand and display knowledge of the core concepts for this, and all previous, grades?

You have clearly mastered the core concepts for this grade and show understanding, fluency and idiomatic use of such concepts in your project. Well done!

I also appreciated how, when asked, you explained and illustrated such concepts in considerable depth while also demonstrating an appreciation of how such concepts interact with each other.

However, I also think the high mark for this grade also indicates that you are, perhaps, of a higher level of knowledge and skill than grade 2. In future grades, it would be great to see you really stretch yourself, explore unfamiliar aspects of coding and grow through a really challenging project. You can do it..!


Code quality:
4/5

Is the code idiomatic, efficient, simply written and well organised?

You clearly understand how to write idiomatic code that is easy to read and understand for this level of grading. You are thoughtful to name things in a way that makes the code easy to understand, and the layout of the code is also neat and clean, helping those reading your code to comprehend how it works.

I especially appreciated how you explained your algorithms in the comments, so it was easy to engage with and understand the code that followed.

To get the very highest of marks, next time consider using a coding standard (such as PEP8) or tools (such as black) to ensure things like line-length and code layout is done in a consistent "style".


Understanding and technical engagement:
5/5

How well does the candidate apply their knowledge and understanding of the core concepts to address the requirements of their project?

This is a first class effort in writing code that is idiomatic, efficient and expressive. I appreciate the care and attention that has gone into refactoring the code from the first draft, so, as the project has matured, it remains easy to read, understand and follow. Well done and keep it up.


Creativity and imagination:
4/5

How unique, surprising, delightful and/or authentic is the approach of this project?

That you didn't just create a library of functions, that you effectively used a UI framework to present your project and that you rose to the challenge set for you to create a fully functional Roman numeral calculator app demonstrates your imaginative approach.

A Roman numeral calculator is a classic "job interview" question, and you have answered with a thoughtful and engaging solution.

To achieve the highest mark requires a unique, original or surprising approach that significantly enhances the project or the user's engagement. For example, when folks use it for the first time they say, "that's cool" or it makes them smile. For instance, you could have imagined your project as an app created by Romans and given it a Roman look, or provided a Latin translation.

In future gradings, don't be afraid to really let your imagination fly.


Collaboration, community and compassion:
5/5

How did the candidate approach, behave and react to interactions and contributions from others, relating to this project?

Interactions and engagement with you on this project shows you are an empathetic, compassionate and respectful collaborator. Your contributions are clear, concise and engaging while retaining a collaborative and friendly tone. I also appreciated that you asked for clarifications and explanations when I was not clear in my interactions with you. Such inquisitiveness is how colleagues and collaborators see your investment in the task in hand.

I also saw your positive attitude in the way you engaged with others during the process of obtaining user feedback. As a result, your project is a great example of how to actively engage in promoting a healthy, respectful, diverse and technically effective community.

This was wonderful to see, please keep up such great work, and thank you for embodying such a positive style of programming.


Documentation and comments:
4/5

Was the project's documentation appropriate for this level of grading and were the comments in code helpful?

Your commentary as part of the grading process and comments in the source code are clear and well written. As already mentioned, comments in the code enhance the readability of your code. The help found in the application itself is also well written, context sensitive, empathetic towards the user/reader and engaging to read.

To get the highest mark would require the addition of something like a README.txt file containing two sorts of things:


Development practices:
4/5

How well did the candidate understand and make appropriate use of effective development practices? (e.g. testing, CI, debugging, refactoring, source control, issue tracking etc...)

Well done. Not only have you refined and improved your project through coherent development practices and tooling (I see you have used Git), but you show you are adaptable and have the foresight to code for change - as you demonstrated when you turned the relatively simple first draft into a fully fledged Roman numeral calculator.

Your coding process is of a high quality resulting in a high quality project.


Tools and third-party technology:
4/5

How well did the candidate understand and make appropriate use of core tools used for software development? (e.g. a code editor, debugger, the command line, vcs etc...)

Well done on the effective use of notebook-like environment and integrating a UI library like gradio. I also notice from the final version of the app hosted on Hugging Face, that you are familiar with Git. You effectively understand the various tools, frameworks and APIs needed to implement your project. Furthermore, you understand how to use them together for the benefit of your project.

However, this suggests to me (again) that grade 2 is perhaps well within your comfort zone and current level of skill and knowledge. As I mentioned earlier, in future please go for a grade that is just beyond your current level and use it as a vehicle for stretching and challenging yourself.

To get the highest mark in this area, you need to be more demonstrative and explicit in how you use the tools, frameworks and APIs. A key aspect of software development is acquiring and effectively using such knowledge - and (for example), if you don't mention or demonstrate you use Git, or have a highly developed skill with certain sorts of environment (such as notebooks), then we can't acknowledge this in your final mark.


Learning and research:
5/5

Is the candidate an effective and autonomous learner from documentation and other educational resources related to the technology and tools used in their project?

It's clear you are a confident, careful and curious consumer of documentation and the educational resources needed to understand the technology used in your project. I was especially pleased to see this demonstrated when you researched, acknowledged your sources, and implemented the code needed to turn an integer to a Roman numeral.


Effectiveness:
5/5

Did the candidate achieve their aims and objectives for the project?

This is great work.

Your project has exceeded its original aims and scope and is engaging to use. Furthermore, it does so in a creative and highly effective manner. Well done!


Overall impression of the project:
9/10

For this level of grading: requires significant improvement (1-3), working towards the expected level (4-5), achieving the expected level (6-7), a high quality project (8-9), and exceptional project (10).

Very high quality.

The first draft of your project was small and simple in scope, but over the course of the mentoring process you have grown, refined and improved your project into something that is clearly a user-friendly and engaging solution to a classic coding problem.


Overall impression of the candidate's attainment:
9/10

For this level of grading: requires significant improvement (1-3), working towards the expected level (4-5), achieving the expected level (6-7), a high quality candidate (8-9), exceptional(10).

Very high quality.

You are an engaged, inquisitive and thoughtful coder. I appreciated the care and attention you took to explain yourself and your code and thoughtfulness when asking questions. I was also delighted to see you step up, refactor and "craft" your code into a well organised and effective solution that demonstrated your clear understanding of the requirements needed for this level of grading. Well done.


Candidate's level of achievement:
5/5

How did the candidate meet the level of achievement expected for this grade?

I'm delighted to report that you have FAR EXCEEDED the required level of attainment expected for this grade.


Total marks:
91/100

(Pass: 60, Merit: 75, Distinction: 90)


Khadija,

I have really enjoyed watching this project grow and take shape. You thoroughly deserve this very highest of distinction level pass for your project. Your strong result reflects your technical strength, knowledge and the way in which you applied yourself to create a well engineered, simple and effective project. Well done.

However, I can't help but feel that grade 2 is a several levels too low for you, given the level of attainment provided in the evidence you presented. I believe, should you take another grade (and I hope you do), you must select a grade at a level that will stretch and challenge you.

Not only will such a grade allow you to demonstrate your creativity, skill and knowledge (as you've done so well with this grade), but it will encourage you grow. The higher grades give you an opportunity to show how you overcome difficult problems and encounter aspects of coding that can only be found at such deeper and challenging ways of working.

Clearly you have a talent for Python, but software engineering isn't just about writing code. While technical knowledge and skill is necessary, it is not sufficient to become an excellent engineer.

An appreciation of and empathy for those who encounter our code, a cultivated ethical view about the purpose and implications of our work, and a connoisseur's "nose" for how our code expresses our aims, objectives and values is just as important as knowing how list comprehensions work.

As you grow as a developer, perhaps through future projects submitted for higher grades on this site, I hope you find a way to explore and embody these less obvious aspects of software engineering.

Once again, many congratulations on passing your grade 2.

I hope this process has given you wind in your sails and the momentum to step into coding with greater confidence, a spirit of inquiry and the courage to challenge yourself with yet more difficult and subtle projects.

Best of luck and well done.

Back to top