Skip to main content

A markdown subset for quickly making multiple-choice questions.

Project description

quizdown PyPI version Rust

Markdown, but for creating multiple-choice quizzes. Especially helpful if you routinely want syntax-highlighting in your question, answers, or distractors.

Try a live version (beta) on my website.

Off-line Quick-Start

Install (from PyPI)

Maybe in a virtualenv? This may need to be pip3.

pip install quizdown

Preview a Markdown file in the browser.

python -m quizdown 01_syllabus.md --output 01_syllabus.html --browser

Export to Moodle:

# Use the .moodle extension
python -m quizdown 01_syllabus.md --output 01_syllabus.moodle
# If you'd rather .xml:
python -m quizdown 01_syllabus.md --format=moodle --output 01_syllabus.xml

More options:

python -m quizdown --help
usage: quizdown MARKDOWN_FILE --output (out.moodle|preview.html)

positional arguments:
  INPUT_FILE            Markdown file containing quiz questions.

optional arguments:
  -h, --help            show this help message and exit
  --output OUTPUT_FILE  Where to save the processed output: a .moodle or .html
                        extension.
  --format {HtmlSnippet,HtmlFull,MoodleXml}
                        Output format, if we cannot figure out from file
                        extension.
  --name QUIZ_NAME      This is the name of the quiz or question category upon
                        import. INPUT_FILE if not defined.
  --theme SYNTAX_THEME  Syntax highlighting-theme; default=InspiredGitHub
                        {'Solarized (dark)', 'base16-ocean.light',
                        'base16-ocean.dark', 'base16-eighties.dark',
                        'Solarized (light)', 'InspiredGitHub',
                        'base16-mocha.dark'} available.
  --lang LANG           Language string to assume for syntax-highlighting of
                        un-marked code blocks; default='text'; try 'python' or
                        'java'.
  --browser             Directly open a preview in the default web-browser.

What is quizdown?

This is a tool for quickly specifying 5-20 multiple choice questions in a markdown subset. Right now you can export to both MoodleXML and HTML.

Why would I use this over Moodle's built-in editor?

  • Less clicks! Make as many questions as you want with just your keyboard. Then import them in bulk to a "Question Bank" and then from there to a new "Quiz".
  • You teach CS/Data Science/STEM and you want or NEED some good syntax highlighting for your class.
  • Sane defaults: all questions are "select as many as apply", with no partial credit.

Limitations

  • ONLY Multiple choice questions are supported.
  • Any partial credit must be done post-export via Moodle.
  • No way to upload images. You could theoretically embed SVG and base64 images but I haven't looked into it.
  • Error messages are limited (I just figured out how to get position information from the markdown library; need to sprinkle it through). For now, treat it like LaTeX: binary search for your errors ;p

Roadmap

  • Other question types, e.g., Essay questions? #1
  • Better error messages. (No line/col or question # information right now) #2
  • QTI/Blackboard export support. #3
  • File an issue: https://github.com/jjfiv/quizdown/issues

How to write a bunch of questions (in words):

  • Use headings (whatever level you want; be consistent) to separate questions.
  • Questions end with a github-style task list -- if you want moodle to shuffle, use unordered lists, otherwise make them ordered.
  • Tasks marked as "complete" are correct answers.
  • We're building on pulldown_cmark; a CommonMark-compatible markdown implementation with the "github tables" "github task lists" and "strikethrough" extensions.

Example

Source Question

Let's imagine we're teaching Python and want to make sure students (A) understand list-append, and (B) remember that lists should never be used as default arguments.

### A. Python Lists

```python
xs = [1,2,3]
xs.append(7)
print(sum(xs))
```

What gets printed?

1. [ ] It's impossible to know.
1. [x] 13
1. [ ] Something else.


### B. Python Lists and Default Arguments

```python
def take_default_list(xs = []):
    xs.append(7)
    return sum(xs)
```

What is the output of ``take_default_list([1,2,3])``?

1. [x] It's impossible to know.
1. [ ] 13
1. [ ] Something else.

Example (rendered)

I have a private github repo for each class, with files labeled by lecture number and topic, e.g., 05_Lists.md -- Any old Markdown renderer is close enough for 99% of questions.

Here's someone's README.md rendering of the above example questions.

A. Python Lists

xs = [1,2,3]
xs.append(7)
print(sum(xs))

What gets printed?

  1. It's impossible to know.
  2. 13
  3. Something else.

B. Python Lists and Default Arguments

def take_default_list(xs = []):
    xs.append(7)
    return sum(xs)

What is the output of take_default_list([1,2,3])?

  1. It's impossible to know.
  2. 13
  3. Something else.

Why'd you write this in Rust?

Because my first version (in Python w/BeautifulSoup) was a bit of a disaster, maintenance-wise. Also, I wanted to have the ability to host an editor online. So this one compiles to WASM.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

quizdown-0.3.2-cp36-abi3-manylinux2010_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.6+ manylinux: glibc 2.12+ x86-64

quizdown-0.3.2-cp36-abi3-manylinux1_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.6+

quizdown-0.3.2-cp36-abi3-macosx_10_7_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.6+ macOS 10.7+ x86-64

File details

Details for the file quizdown-0.3.2-cp36-abi3-manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for quizdown-0.3.2-cp36-abi3-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 376b26d2b45c479df47f50171b9eb2f383a619bc1d790f50a936d59cecf2bb82
MD5 3e840dced1fe1da0847c24dee9a35d3f
BLAKE2b-256 017f509fe094f16bb859400dacd1557c532e1818c3a2ad408bb81966a2096cef

See more details on using hashes here.

File details

Details for the file quizdown-0.3.2-cp36-abi3-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for quizdown-0.3.2-cp36-abi3-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 411940f76728296c34ab4cc4cfa6dc7607fe979291a59faf673a2f44f05775da
MD5 727d31f267e7cd30feb15ef88732ad37
BLAKE2b-256 b43d187ef8b6c4492c0c0d603f5f045d90cca13c77518efa04aebe94b9261039

See more details on using hashes here.

File details

Details for the file quizdown-0.3.2-cp36-abi3-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for quizdown-0.3.2-cp36-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 f81fb61a225e80d87b3af9b62770b2c1f6d4363f7723fc0b3e98c9f83e0e58ef
MD5 2064334815a2d82bac2b296d85514adb
BLAKE2b-256 1e1b95fb07c7e797bd8a5d6aa3d78333b179c989775ed923bd3a23e53832171e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page