pyexamgrading


Namepyexamgrading JSON
Version 0.0.1 PyPI version JSON
download
home_pagehttps://github.com/johndoe31415/pyexamgrading
SummaryManage grade computation of university exams
upload_time2024-06-25 18:25:46
maintainerNone
docs_urlNone
authorJohannes Bauer
requires_pythonNone
licensegpl-3.0
keywords python exam university
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # pyexamgrading
This is a collection of tools I'm using for grading university exams.

## Example
There are several anonymized files in the `test_files` directory to get you
started. Some have the exact format of a MOODLE document. First, you need to
create an exam JSON from a list of students who participated and a course
structure definition (which indicates how everything will be graded). Note that
you can have several course files which you all import:

```
$ pyexam new test_files/exam_definition_kryptologie.json graded.json test_files/course_99cs*
```

You can then start importing data from MOODLE (e.g., laboratory exercises). In
the given example exam, laboratory exercises are weighted 25% and final exam is
weighted 75%.

```
$ pyexam import graded.json test_files/moodle_export.csv
```

We can now view results but final grades will not be shown because data is
incomplete so far (only lab exercises has been imported):

```
$ pyexam print graded.json

3 students omitted with incomplete data.
```

We can force those to print:

```
$ pyexam print -a graded.json
⚠ 99CS1  Asmussen, Fips                           5.0      0.7 / 80.0 (0.9%)        39.5 pts missing for 4.0
⚠ 99CS2  Bar, Berta                               5.0      10.7 / 80.0 (13.4%)      29.5 pts missing for 4.0
⚠ 99CS2  Foo, Aaron                               5.0      11.4 / 80.0 (14.2%)      29.0 pts missing for 4.0

0 of 3 pass (0.0%), 3 failed (100.0%)
Average grade: 5.0 (7.6 points)

Grade histogram:
1.0 - 1.5: 0 (0.0%)
1.5 - 2.0: 0 (0.0%)
2.0 - 2.5: 0 (0.0%)
2.5 - 3.0: 0 (0.0%)
3.0 - 3.5: 0 (0.0%)
3.5 - 4.0: 0 (0.0%)
4.0 - 4.5: 0 (0.0%)
4.5 - 5.0: 3 (100.0%)     ********************************************************************************

Point histogram:
10.2 - 11.4: 2 (66.7%)    ********************************************************************************
9.1 - 10.2: 0 (0.0%)
8.0 - 9.1: 0 (0.0%)
6.8 - 8.0: 0 (0.0%)
5.7 - 6.8: 0 (0.0%)
4.6 - 5.7: 0 (0.0%)
3.4 - 4.6: 0 (0.0%)
2.3 - 3.4: 0 (0.0%)
1.1 - 2.3: 0 (0.0%)
0.0 - 1.1: 1 (33.3%)      ****************************************
```

Note that the exlamation mark in the beginning of each line means not all data
has been imported. We can also search for a particular student by name/student
number and get a detailed breakdown of their performance:

```
$ pyexam print -a -s asmussen -b graded.json
⚠ 99CS1  Asmussen, Fips                           5.0      0.7 / 80.0 (0.9%)        39.5 pts missing for 4.0
        • Klausur Aufgabe 1 0.0 / 10.0 (0.0%) -> 0.000 pts
        • Klausur Aufgabe 2 0.0 / 10.0 (0.0%) -> 0.000 pts
        • Klausur Aufgabe 3 0.0 / 10.0 (0.0%) -> 0.000 pts
        • Klausur Aufgabe 4 0.0 / 10.0 (0.0%) -> 0.000 pts
        • Klausur Aufgabe 5 0.0 / 10.0 (0.0%) -> 0.000 pts
        • Klausur Aufgabe 6 0.0 / 10.0 (0.0%) -> 0.000 pts
        • Labor 1 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts
        • Labor 1 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts
        • Labor 2 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts
        • Labor 2 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts
        • Labor 3 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts
        • Labor 3 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts
        • Labor 4 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts
        • Labor 4 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts
        • Labor 5 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts
        • Labor 5 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts
        • Labor 6 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts
        • Labor 6 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts
        • Labor 7 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts
        • Labor 7 / Teil 2 0.5 / 8.0 (6.2%) -> 0.069 pts
        • Labor 8 / Teil 1 0.0 / 8.0 (0.0%) -> 0.000 pts
        • Labor 8 / Teil 2 0.5 / 8.0 (6.2%) -> 0.069 pts
        • Labor 9 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts
        • Labor 9 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts
```

Internally, all values are computed as exact fractions, which we can also show:

```
$ pyexam print -a -s asmussen -b -vv graded.json
⚠ 99CS1  Asmussen, Fips                           5.0      25/36 / 80.0 (0.9%)      39.5 pts missing for 4.0
        • Klausur Aufgabe 1 0.0 / 10.0 (0.0%) -> 0.0% * 1 = 0 pts
        • Klausur Aufgabe 2 0.0 / 10.0 (0.0%) -> 0.0% * 1 = 0 pts
        • Klausur Aufgabe 3 0.0 / 10.0 (0.0%) -> 0.0% * 1 = 0 pts
        • Klausur Aufgabe 4 0.0 / 10.0 (0.0%) -> 0.0% * 1 = 0 pts
        • Klausur Aufgabe 5 0.0 / 10.0 (0.0%) -> 0.0% * 1 = 0 pts
        • Klausur Aufgabe 6 0.0 / 10.0 (0.0%) -> 0.0% * 1 = 0 pts
        • Labor 1 / Teil 1 0.5 / 8.0 (6.2%) -> 6.2% * 5/36 = 5/72 pts
        • Labor 1 / Teil 2 0.0 / 8.0 (0.0%) -> 0.0% * 5/36 = 0 pts
        • Labor 2 / Teil 1 0.5 / 8.0 (6.2%) -> 6.2% * 5/36 = 5/72 pts
        • Labor 2 / Teil 2 0.0 / 8.0 (0.0%) -> 0.0% * 5/36 = 0 pts
        • Labor 3 / Teil 1 0.5 / 8.0 (6.2%) -> 6.2% * 5/36 = 5/72 pts
        • Labor 3 / Teil 2 0.0 / 8.0 (0.0%) -> 0.0% * 5/36 = 0 pts
        • Labor 4 / Teil 1 0.5 / 8.0 (6.2%) -> 6.2% * 5/36 = 5/72 pts
        • Labor 4 / Teil 2 0.0 / 8.0 (0.0%) -> 0.0% * 5/36 = 0 pts
        • Labor 5 / Teil 1 0.5 / 8.0 (6.2%) -> 6.2% * 5/36 = 5/72 pts
        • Labor 5 / Teil 2 0.0 / 8.0 (0.0%) -> 0.0% * 5/36 = 0 pts
        • Labor 6 / Teil 1 0.5 / 8.0 (6.2%) -> 6.2% * 5/36 = 5/72 pts
        • Labor 6 / Teil 2 0.0 / 8.0 (0.0%) -> 0.0% * 5/36 = 0 pts
        • Labor 7 / Teil 1 0.5 / 8.0 (6.2%) -> 6.2% * 5/36 = 5/72 pts
        • Labor 7 / Teil 2 0.5 / 8.0 (6.2%) -> 6.2% * 5/36 = 5/72 pts
        • Labor 8 / Teil 1 0.0 / 8.0 (0.0%) -> 0.0% * 5/36 = 0 pts
        • Labor 8 / Teil 2 0.5 / 8.0 (6.2%) -> 6.2% * 5/36 = 5/72 pts
        • Labor 9 / Teil 1 0.5 / 8.0 (6.2%) -> 6.2% * 5/36 = 5/72 pts
        • Labor 9 / Teil 2 0.0 / 8.0 (0.0%) -> 0.0% * 5/36 = 0 pts
```

We can make a hypothethis how the grades will look when the remaining data has
the same average value, best-case or worst-case values:

```
$ pyexam print -a -s asmussen -b -H avg graded.json
    99CS1  Asmussen, Fips                           5.0      2.8 / 80.0 (3.5%)        37.5 pts missing for 4.0
        • Klausur Aufgabe 1 0.3 / 10.0 (3.5%) -> 0.347 pts
        • Klausur Aufgabe 2 0.3 / 10.0 (3.5%) -> 0.347 pts
        • Klausur Aufgabe 3 0.3 / 10.0 (3.5%) -> 0.347 pts
        • Klausur Aufgabe 4 0.3 / 10.0 (3.5%) -> 0.347 pts
        • Klausur Aufgabe 5 0.3 / 10.0 (3.5%) -> 0.347 pts
        • Klausur Aufgabe 6 0.3 / 10.0 (3.5%) -> 0.347 pts
        • Labor 1 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts
        • Labor 1 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts
        • Labor 2 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts
        • Labor 2 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts
        • Labor 3 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts
        • Labor 3 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts
        • Labor 4 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts
        • Labor 4 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts
        • Labor 5 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts
        • Labor 5 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts
        • Labor 6 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts
        • Labor 6 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts
        • Labor 7 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts
        • Labor 7 / Teil 2 0.5 / 8.0 (6.2%) -> 0.069 pts
        • Labor 8 / Teil 1 0.0 / 8.0 (0.0%) -> 0.000 pts
        • Labor 8 / Teil 2 0.5 / 8.0 (6.2%) -> 0.069 pts
        • Labor 9 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts
        • Labor 9 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts
[...]
⚠ Shown grades are hypothetical according to avg model. ⚠
```

Let us import the remainder of the data. This is easiest by replicating the CSV
format of MOODLE:

```
$ pyexam import graded.json test_files/final_exam.csv
```

Now we can print the final results:

```
$ pyexam print graded.json
    99CS1  Asmussen, Fips                           4.4      35.1 / 80.0 (43.9%)      5.0 pts missing for 4.0
    99CS2  Bar, Berta                               5.0      19.7 / 80.0 (24.6%)      20.5 pts missing for 4.0
    99CS2  Foo, Aaron                               2.8      56.4 / 80.0 (70.5%)      0.5 pts missing for 2.7

1 of 3 pass (33.3%), 2 failed (66.7%)
Average grade: 4.1 (37.1 points)

Grade histogram:
1.0 - 1.5: 0 (0.0%)
1.5 - 2.0: 0 (0.0%)
2.0 - 2.5: 0 (0.0%)
2.5 - 3.0: 1 (33.3%)      ********************************************************************************
3.0 - 3.5: 0 (0.0%)
3.5 - 4.0: 0 (0.0%)
4.0 - 4.5: 1 (33.3%)      ********************************************************************************
4.5 - 5.0: 1 (33.3%)      ********************************************************************************

Point histogram:
50.8 - 56.4: 1 (33.3%)    ********************************************************************************
45.1 - 50.8: 0 (0.0%)
39.5 - 45.1: 0 (0.0%)
33.8 - 39.5: 1 (33.3%)    ********************************************************************************
28.2 - 33.8: 0 (0.0%)
22.6 - 28.2: 0 (0.0%)
16.9 - 22.6: 1 (33.3%)    ********************************************************************************
11.3 - 16.9: 0 (0.0%)
5.6 - 11.3: 0 (0.0%)
0.0 - 5.6: 0 (0.0%)
```

If you want to enter data manually, you can use the enter mode, which will ask
you for a query key first (student number or parts of their last name). The
program will refuse to use ambiguous search keys (e.g., if two students have
the same name or their student number starts with the same digits):

```
$ pyexam enter graded.json
Student search key: asmus
Entering data for: Asmussen, Fips <s333333@student.dhbw-mannheim.de> (99CS1, 543890433)
Klausur Aufgabe 6 (max. 10.0 pts, currently no result): 4
Labor 9 / Teil 1 (max. 8.0 pts, currently no result): 7
Labor 9 / Teil 2 (max. 8.0 pts, currently no result): 6

Student search key:
```

Note also that the program will only query for results that are not yet entered.

Finally, once you are finished with data entry you can generate a TeX file that
is individual to each student and which shows a detailed breakdown of their
grade. This can be printed and attached to the finals, for example.

## License
GNU GPL-3.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/johndoe31415/pyexamgrading",
    "name": "pyexamgrading",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "python, exam, university",
    "author": "Johannes Bauer",
    "author_email": "joe@johannes-bauer.com",
    "download_url": "https://files.pythonhosted.org/packages/62/e8/e73e364bea4960ff1bb34b9b06f9ea7394db170b00fb22f57955e01d1a14/pyexamgrading-0.0.1.tar.gz",
    "platform": null,
    "description": "# pyexamgrading\nThis is a collection of tools I'm using for grading university exams.\n\n## Example\nThere are several anonymized files in the `test_files` directory to get you\nstarted. Some have the exact format of a MOODLE document. First, you need to\ncreate an exam JSON from a list of students who participated and a course\nstructure definition (which indicates how everything will be graded). Note that\nyou can have several course files which you all import:\n\n```\n$ pyexam new test_files/exam_definition_kryptologie.json graded.json test_files/course_99cs*\n```\n\nYou can then start importing data from MOODLE (e.g., laboratory exercises). In\nthe given example exam, laboratory exercises are weighted 25% and final exam is\nweighted 75%.\n\n```\n$ pyexam import graded.json test_files/moodle_export.csv\n```\n\nWe can now view results but final grades will not be shown because data is\nincomplete so far (only lab exercises has been imported):\n\n```\n$ pyexam print graded.json\n\n3 students omitted with incomplete data.\n```\n\nWe can force those to print:\n\n```\n$ pyexam print -a graded.json\n\u26a0 99CS1  Asmussen, Fips                           5.0      0.7 / 80.0 (0.9%)        39.5 pts missing for 4.0\n\u26a0 99CS2  Bar, Berta                               5.0      10.7 / 80.0 (13.4%)      29.5 pts missing for 4.0\n\u26a0 99CS2  Foo, Aaron                               5.0      11.4 / 80.0 (14.2%)      29.0 pts missing for 4.0\n\n0 of 3 pass (0.0%), 3 failed (100.0%)\nAverage grade: 5.0 (7.6 points)\n\nGrade histogram:\n1.0 - 1.5: 0 (0.0%)\n1.5 - 2.0: 0 (0.0%)\n2.0 - 2.5: 0 (0.0%)\n2.5 - 3.0: 0 (0.0%)\n3.0 - 3.5: 0 (0.0%)\n3.5 - 4.0: 0 (0.0%)\n4.0 - 4.5: 0 (0.0%)\n4.5 - 5.0: 3 (100.0%)     ********************************************************************************\n\nPoint histogram:\n10.2 - 11.4: 2 (66.7%)    ********************************************************************************\n9.1 - 10.2: 0 (0.0%)\n8.0 - 9.1: 0 (0.0%)\n6.8 - 8.0: 0 (0.0%)\n5.7 - 6.8: 0 (0.0%)\n4.6 - 5.7: 0 (0.0%)\n3.4 - 4.6: 0 (0.0%)\n2.3 - 3.4: 0 (0.0%)\n1.1 - 2.3: 0 (0.0%)\n0.0 - 1.1: 1 (33.3%)      ****************************************\n```\n\nNote that the exlamation mark in the beginning of each line means not all data\nhas been imported. We can also search for a particular student by name/student\nnumber and get a detailed breakdown of their performance:\n\n```\n$ pyexam print -a -s asmussen -b graded.json\n\u26a0 99CS1  Asmussen, Fips                           5.0      0.7 / 80.0 (0.9%)        39.5 pts missing for 4.0\n        \u2022 Klausur Aufgabe 1 0.0 / 10.0 (0.0%) -> 0.000 pts\n        \u2022 Klausur Aufgabe 2 0.0 / 10.0 (0.0%) -> 0.000 pts\n        \u2022 Klausur Aufgabe 3 0.0 / 10.0 (0.0%) -> 0.000 pts\n        \u2022 Klausur Aufgabe 4 0.0 / 10.0 (0.0%) -> 0.000 pts\n        \u2022 Klausur Aufgabe 5 0.0 / 10.0 (0.0%) -> 0.000 pts\n        \u2022 Klausur Aufgabe 6 0.0 / 10.0 (0.0%) -> 0.000 pts\n        \u2022 Labor 1 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts\n        \u2022 Labor 1 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts\n        \u2022 Labor 2 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts\n        \u2022 Labor 2 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts\n        \u2022 Labor 3 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts\n        \u2022 Labor 3 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts\n        \u2022 Labor 4 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts\n        \u2022 Labor 4 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts\n        \u2022 Labor 5 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts\n        \u2022 Labor 5 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts\n        \u2022 Labor 6 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts\n        \u2022 Labor 6 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts\n        \u2022 Labor 7 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts\n        \u2022 Labor 7 / Teil 2 0.5 / 8.0 (6.2%) -> 0.069 pts\n        \u2022 Labor 8 / Teil 1 0.0 / 8.0 (0.0%) -> 0.000 pts\n        \u2022 Labor 8 / Teil 2 0.5 / 8.0 (6.2%) -> 0.069 pts\n        \u2022 Labor 9 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts\n        \u2022 Labor 9 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts\n```\n\nInternally, all values are computed as exact fractions, which we can also show:\n\n```\n$ pyexam print -a -s asmussen -b -vv graded.json\n\u26a0 99CS1  Asmussen, Fips                           5.0      25/36 / 80.0 (0.9%)      39.5 pts missing for 4.0\n        \u2022 Klausur Aufgabe 1 0.0 / 10.0 (0.0%) -> 0.0% * 1 = 0 pts\n        \u2022 Klausur Aufgabe 2 0.0 / 10.0 (0.0%) -> 0.0% * 1 = 0 pts\n        \u2022 Klausur Aufgabe 3 0.0 / 10.0 (0.0%) -> 0.0% * 1 = 0 pts\n        \u2022 Klausur Aufgabe 4 0.0 / 10.0 (0.0%) -> 0.0% * 1 = 0 pts\n        \u2022 Klausur Aufgabe 5 0.0 / 10.0 (0.0%) -> 0.0% * 1 = 0 pts\n        \u2022 Klausur Aufgabe 6 0.0 / 10.0 (0.0%) -> 0.0% * 1 = 0 pts\n        \u2022 Labor 1 / Teil 1 0.5 / 8.0 (6.2%) -> 6.2% * 5/36 = 5/72 pts\n        \u2022 Labor 1 / Teil 2 0.0 / 8.0 (0.0%) -> 0.0% * 5/36 = 0 pts\n        \u2022 Labor 2 / Teil 1 0.5 / 8.0 (6.2%) -> 6.2% * 5/36 = 5/72 pts\n        \u2022 Labor 2 / Teil 2 0.0 / 8.0 (0.0%) -> 0.0% * 5/36 = 0 pts\n        \u2022 Labor 3 / Teil 1 0.5 / 8.0 (6.2%) -> 6.2% * 5/36 = 5/72 pts\n        \u2022 Labor 3 / Teil 2 0.0 / 8.0 (0.0%) -> 0.0% * 5/36 = 0 pts\n        \u2022 Labor 4 / Teil 1 0.5 / 8.0 (6.2%) -> 6.2% * 5/36 = 5/72 pts\n        \u2022 Labor 4 / Teil 2 0.0 / 8.0 (0.0%) -> 0.0% * 5/36 = 0 pts\n        \u2022 Labor 5 / Teil 1 0.5 / 8.0 (6.2%) -> 6.2% * 5/36 = 5/72 pts\n        \u2022 Labor 5 / Teil 2 0.0 / 8.0 (0.0%) -> 0.0% * 5/36 = 0 pts\n        \u2022 Labor 6 / Teil 1 0.5 / 8.0 (6.2%) -> 6.2% * 5/36 = 5/72 pts\n        \u2022 Labor 6 / Teil 2 0.0 / 8.0 (0.0%) -> 0.0% * 5/36 = 0 pts\n        \u2022 Labor 7 / Teil 1 0.5 / 8.0 (6.2%) -> 6.2% * 5/36 = 5/72 pts\n        \u2022 Labor 7 / Teil 2 0.5 / 8.0 (6.2%) -> 6.2% * 5/36 = 5/72 pts\n        \u2022 Labor 8 / Teil 1 0.0 / 8.0 (0.0%) -> 0.0% * 5/36 = 0 pts\n        \u2022 Labor 8 / Teil 2 0.5 / 8.0 (6.2%) -> 6.2% * 5/36 = 5/72 pts\n        \u2022 Labor 9 / Teil 1 0.5 / 8.0 (6.2%) -> 6.2% * 5/36 = 5/72 pts\n        \u2022 Labor 9 / Teil 2 0.0 / 8.0 (0.0%) -> 0.0% * 5/36 = 0 pts\n```\n\nWe can make a hypothethis how the grades will look when the remaining data has\nthe same average value, best-case or worst-case values:\n\n```\n$ pyexam print -a -s asmussen -b -H avg graded.json\n    99CS1  Asmussen, Fips                           5.0      2.8 / 80.0 (3.5%)        37.5 pts missing for 4.0\n        \u2022 Klausur Aufgabe 1 0.3 / 10.0 (3.5%) -> 0.347 pts\n        \u2022 Klausur Aufgabe 2 0.3 / 10.0 (3.5%) -> 0.347 pts\n        \u2022 Klausur Aufgabe 3 0.3 / 10.0 (3.5%) -> 0.347 pts\n        \u2022 Klausur Aufgabe 4 0.3 / 10.0 (3.5%) -> 0.347 pts\n        \u2022 Klausur Aufgabe 5 0.3 / 10.0 (3.5%) -> 0.347 pts\n        \u2022 Klausur Aufgabe 6 0.3 / 10.0 (3.5%) -> 0.347 pts\n        \u2022 Labor 1 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts\n        \u2022 Labor 1 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts\n        \u2022 Labor 2 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts\n        \u2022 Labor 2 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts\n        \u2022 Labor 3 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts\n        \u2022 Labor 3 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts\n        \u2022 Labor 4 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts\n        \u2022 Labor 4 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts\n        \u2022 Labor 5 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts\n        \u2022 Labor 5 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts\n        \u2022 Labor 6 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts\n        \u2022 Labor 6 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts\n        \u2022 Labor 7 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts\n        \u2022 Labor 7 / Teil 2 0.5 / 8.0 (6.2%) -> 0.069 pts\n        \u2022 Labor 8 / Teil 1 0.0 / 8.0 (0.0%) -> 0.000 pts\n        \u2022 Labor 8 / Teil 2 0.5 / 8.0 (6.2%) -> 0.069 pts\n        \u2022 Labor 9 / Teil 1 0.5 / 8.0 (6.2%) -> 0.069 pts\n        \u2022 Labor 9 / Teil 2 0.0 / 8.0 (0.0%) -> 0.000 pts\n[...]\n\u26a0 Shown grades are hypothetical according to avg model. \u26a0\n```\n\nLet us import the remainder of the data. This is easiest by replicating the CSV\nformat of MOODLE:\n\n```\n$ pyexam import graded.json test_files/final_exam.csv\n```\n\nNow we can print the final results:\n\n```\n$ pyexam print graded.json\n    99CS1  Asmussen, Fips                           4.4      35.1 / 80.0 (43.9%)      5.0 pts missing for 4.0\n    99CS2  Bar, Berta                               5.0      19.7 / 80.0 (24.6%)      20.5 pts missing for 4.0\n    99CS2  Foo, Aaron                               2.8      56.4 / 80.0 (70.5%)      0.5 pts missing for 2.7\n\n1 of 3 pass (33.3%), 2 failed (66.7%)\nAverage grade: 4.1 (37.1 points)\n\nGrade histogram:\n1.0 - 1.5: 0 (0.0%)\n1.5 - 2.0: 0 (0.0%)\n2.0 - 2.5: 0 (0.0%)\n2.5 - 3.0: 1 (33.3%)      ********************************************************************************\n3.0 - 3.5: 0 (0.0%)\n3.5 - 4.0: 0 (0.0%)\n4.0 - 4.5: 1 (33.3%)      ********************************************************************************\n4.5 - 5.0: 1 (33.3%)      ********************************************************************************\n\nPoint histogram:\n50.8 - 56.4: 1 (33.3%)    ********************************************************************************\n45.1 - 50.8: 0 (0.0%)\n39.5 - 45.1: 0 (0.0%)\n33.8 - 39.5: 1 (33.3%)    ********************************************************************************\n28.2 - 33.8: 0 (0.0%)\n22.6 - 28.2: 0 (0.0%)\n16.9 - 22.6: 1 (33.3%)    ********************************************************************************\n11.3 - 16.9: 0 (0.0%)\n5.6 - 11.3: 0 (0.0%)\n0.0 - 5.6: 0 (0.0%)\n```\n\nIf you want to enter data manually, you can use the enter mode, which will ask\nyou for a query key first (student number or parts of their last name). The\nprogram will refuse to use ambiguous search keys (e.g., if two students have\nthe same name or their student number starts with the same digits):\n\n```\n$ pyexam enter graded.json\nStudent search key: asmus\nEntering data for: Asmussen, Fips <s333333@student.dhbw-mannheim.de> (99CS1, 543890433)\nKlausur Aufgabe 6 (max. 10.0 pts, currently no result): 4\nLabor 9 / Teil 1 (max. 8.0 pts, currently no result): 7\nLabor 9 / Teil 2 (max. 8.0 pts, currently no result): 6\n\nStudent search key:\n```\n\nNote also that the program will only query for results that are not yet entered.\n\nFinally, once you are finished with data entry you can generate a TeX file that\nis individual to each student and which shows a detailed breakdown of their\ngrade. This can be printed and attached to the finals, for example.\n\n## License\nGNU GPL-3.\n",
    "bugtrack_url": null,
    "license": "gpl-3.0",
    "summary": "Manage grade computation of university exams",
    "version": "0.0.1",
    "project_urls": {
        "Download": "https://github.com/johndoe31415/pyexamgrading/archive/0.0.1.tar.gz",
        "Homepage": "https://github.com/johndoe31415/pyexamgrading"
    },
    "split_keywords": [
        "python",
        " exam",
        " university"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "62e8e73e364bea4960ff1bb34b9b06f9ea7394db170b00fb22f57955e01d1a14",
                "md5": "f6fc4383aa3bf589dd158d19b33b3bb7",
                "sha256": "05169cb8f27eecc347a640a8348789e0cdbb4cc221f1b922c3a2092b9073b97a"
            },
            "downloads": -1,
            "filename": "pyexamgrading-0.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "f6fc4383aa3bf589dd158d19b33b3bb7",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 34685,
            "upload_time": "2024-06-25T18:25:46",
            "upload_time_iso_8601": "2024-06-25T18:25:46.681300Z",
            "url": "https://files.pythonhosted.org/packages/62/e8/e73e364bea4960ff1bb34b9b06f9ea7394db170b00fb22f57955e01d1a14/pyexamgrading-0.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-06-25 18:25:46",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "johndoe31415",
    "github_project": "pyexamgrading",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "pyexamgrading"
}
        
Elapsed time: 0.25013s