Repository files navigation

Exercism Python Track

Build StatusRequirements StatusJoin the chat at https://gitter.im/exercism/python

Exercism exercises in Python

Contributing Guide

Please see the Exercism contributing guide and the Python track contributing guide

Working on the Exercises

We welcome both improvements to the existing exercises and new exercises. A list of missing exercise can be found here: exercism#417 (comment)

Conventions

  • We use minimalistic stub files for all exercises (#272).
  • We use unittest (Python Standard Library) and no 3rd-party-framework.
  • We use the parameter order self.assertEqual(actual, expected) (#440).
  • We use context managers (with self.assertRaises(\<exception type\>):) for testing for exceptions (#477).
  • We use an established utility method to confirm that expected exceptions contain a non-empty message. This method must be included for any test class with an exception-based test case (#1080).
  • We use assertIs(actual, True) and assertIs(actual, False) rather than assertTrue(actual) or assertFalse(actual) (#419).
  • We use a comment string in the test file to reference the version of the exercise's canonical-data.json that tests were adapted from (wording can be found in: #784).

Testing

All exercises must be compatible with Python versions 2.7 and 3.4 upwards.

To test a single exercise (e.g., with Python 2.7):

python2.7 test/check-exercises.py [exercise-name]

To test all exercises (e.g., with Python 3):

python3 test/check-exercises.py

Code Style

The Python code in this repo is meant to follow the PEP8 style guide (a stylized version http://pep8.org).

This repo uses flake8 with default settings to enforce the coding standard.

CI build

This repo uses travis-ci in the following configuration: travis.yml

It will automatically check the code style, the problem configuration, and run the unittests with all supported Python versions.

Pull Requests

We ❤️ pull requests! We even 💖 them if they contain well written commit messages!

Please write the first line of your commit message in the following style:

exercise-name: Change some things

Please try to follow the The seven rules of a great Git commit message like to capitalize the subject line and use the imperative mood. If there are more details to add, put those into the body of the commit message.

If you're interested, Tim Pope even has an entire blog post on good commit messages.

If you're new to Git, take a look at this short guide.

License

This repository uses the MIT License.

About

Exercism exercises in Python.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Exercism Python Track

Build StatusRequirements StatusJoin the chat at https://gitter.im/exercism/python

Exercism exercises in Python

Contributing Guide

Please see the Exercism contributing guide and the Python track contributing guide

Working on the Exercises

We welcome both improvements to the existing exercises and new exercises. A list of missing exercise can be found here: exercism#417 (comment)

Conventions

  • We use minimalistic stub files for all exercises (#272).
  • We use unittest (Python Standard Library) and no 3rd-party-framework.
  • We use the parameter order self.assertEqual(actual, expected) (#440).
  • We use context managers (with self.assertRaises(\<exception type\>):) for testing for exceptions (#477).
  • We use an established utility method to confirm that expected exceptions contain a non-empty message. This method must be included for any test class with an exception-based test case (#1080).
  • We use assertIs(actual, True) and assertIs(actual, False) rather than assertTrue(actual) or assertFalse(actual) (#419).
  • We use a comment string in the test file to reference the version of the exercise's canonical-data.json that tests were adapted from (wording can be found in: #784).

Testing

All exercises must be compatible with Python versions 2.7 and 3.4 upwards.

To test a single exercise (e.g., with Python 2.7):

python2.7 test/check-exercises.py [exercise-name]

To test all exercises (e.g., with Python 3):

python3 test/check-exercises.py

Code Style

The Python code in this repo is meant to follow the PEP8 style guide (a stylized version http://pep8.org).

This repo uses flake8 with default settings to enforce the coding standard.

CI build

This repo uses travis-ci in the following configuration: travis.yml

It will automatically check the code style, the problem configuration, and run the unittests with all supported Python versions.

Pull Requests

We ❤️ pull requests! We even 💖 them if they contain well written commit messages!

Please write the first line of your commit message in the following style:

exercise-name: Change some things

Please try to follow the The seven rules of a great Git commit message like to capitalize the subject line and use the imperative mood. If there are more details to add, put those into the body of the commit message.

If you're interested, Tim Pope even has an entire blog post on good commit messages.

If you're new to Git, take a look at this short guide.

License

This repository uses the MIT License.

About

Exercism exercises in Python.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Exercism Python Track

Build StatusRequirements StatusJoin the chat at https://gitter.im/exercism/python

Exercism exercises in Python

Contributing Guide

Please see the Exercism contributing guide and the Python track contributing guide

Working on the Exercises

We welcome both improvements to the existing exercises and new exercises. A list of missing exercise can be found here: exercism#417 (comment)

Conventions

  • We use minimalistic stub files for all exercises (#272).
  • We use unittest (Python Standard Library) and no 3rd-party-framework.
  • We use the parameter order self.assertEqual(actual, expected) (#440).
  • We use context managers (with self.assertRaises(\<exception type\>):) for testing for exceptions (#477).
  • We use an established utility method to confirm that expected exceptions contain a non-empty message. This method must be included for any test class with an exception-based test case (#1080).
  • We use assertIs(actual, True) and assertIs(actual, False) rather than assertTrue(actual) or assertFalse(actual) (#419).
  • We use a comment string in the test file to reference the version of the exercise's canonical-data.json that tests were adapted from (wording can be found in: #784).

Testing

All exercises must be compatible with Python versions 2.7 and 3.4 upwards.

To test a single exercise (e.g., with Python 2.7):

python2.7 test/check-exercises.py [exercise-name]

To test all exercises (e.g., with Python 3):

python3 test/check-exercises.py

Code Style

The Python code in this repo is meant to follow the PEP8 style guide (a stylized version http://pep8.org).

This repo uses flake8 with default settings to enforce the coding standard.

CI build

This repo uses travis-ci in the following configuration: travis.yml

It will automatically check the code style, the problem configuration, and run the unittests with all supported Python versions.

Pull Requests

We ❤️ pull requests! We even 💖 them if they contain well written commit messages!

Please write the first line of your commit message in the following style:

exercise-name: Change some things

Please try to follow the The seven rules of a great Git commit message like to capitalize the subject line and use the imperative mood. If there are more details to add, put those into the body of the commit message.

If you're interested, Tim Pope even has an entire blog post on good commit messages.

If you're new to Git, take a look at this short guide.

License

This repository uses the MIT License.

About

Exercism exercises in Python.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Exercism Python Track

Build StatusRequirements StatusJoin the chat at https://gitter.im/exercism/python

Exercism exercises in Python

Contributing Guide

Please see the Exercism contributing guide and the Python track contributing guide

Working on the Exercises

We welcome both improvements to the existing exercises and new exercises. A list of missing exercise can be found here: exercism#417 (comment)

Conventions

  • We use minimalistic stub files for all exercises (#272).
  • We use unittest (Python Standard Library) and no 3rd-party-framework.
  • We use the parameter order self.assertEqual(actual, expected) (#440).
  • We use context managers (with self.assertRaises(\<exception type\>):) for testing for exceptions (#477).
  • We use an established utility method to confirm that expected exceptions contain a non-empty message. This method must be included for any test class with an exception-based test case (#1080).
  • We use assertIs(actual, True) and assertIs(actual, False) rather than assertTrue(actual) or assertFalse(actual) (#419).
  • We use a comment string in the test file to reference the version of the exercise's canonical-data.json that tests were adapted from (wording can be found in: #784).

Testing

All exercises must be compatible with Python versions 2.7 and 3.4 upwards.

To test a single exercise (e.g., with Python 2.7):

python2.7 test/check-exercises.py [exercise-name]

To test all exercises (e.g., with Python 3):

python3 test/check-exercises.py

Code Style

The Python code in this repo is meant to follow the PEP8 style guide (a stylized version http://pep8.org).

This repo uses flake8 with default settings to enforce the coding standard.

CI build

This repo uses travis-ci in the following configuration: travis.yml

It will automatically check the code style, the problem configuration, and run the unittests with all supported Python versions.

Pull Requests

We ❤️ pull requests! We even 💖 them if they contain well written commit messages!

Please write the first line of your commit message in the following style:

exercise-name: Change some things

Please try to follow the The seven rules of a great Git commit message like to capitalize the subject line and use the imperative mood. If there are more details to add, put those into the body of the commit message.

If you're interested, Tim Pope even has an entire blog post on good commit messages.

If you're new to Git, take a look at this short guide.

License

This repository uses the MIT License.

About

Exercism exercises in Python.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Exercism Python Track

Build StatusRequirements StatusJoin the chat at https://gitter.im/exercism/python

Exercism exercises in Python

Contributing Guide

Please see the Exercism contributing guide and the Python track contributing guide

Working on the Exercises

We welcome both improvements to the existing exercises and new exercises. A list of missing exercise can be found here: exercism#417 (comment)

Conventions

  • We use minimalistic stub files for all exercises (#272).
  • We use unittest (Python Standard Library) and no 3rd-party-framework.
  • We use the parameter order self.assertEqual(actual, expected) (#440).
  • We use context managers (with self.assertRaises(\<exception type\>):) for testing for exceptions (#477).
  • We use an established utility method to confirm that expected exceptions contain a non-empty message. This method must be included for any test class with an exception-based test case (#1080).
  • We use assertIs(actual, True) and assertIs(actual, False) rather than assertTrue(actual) or assertFalse(actual) (#419).
  • We use a comment string in the test file to reference the version of the exercise's canonical-data.json that tests were adapted from (wording can be found in: #784).

Testing

All exercises must be compatible with Python versions 2.7 and 3.4 upwards.

To test a single exercise (e.g., with Python 2.7):

python2.7 test/check-exercises.py [exercise-name]

To test all exercises (e.g., with Python 3):

python3 test/check-exercises.py

Code Style

The Python code in this repo is meant to follow the PEP8 style guide (a stylized version http://pep8.org).

This repo uses flake8 with default settings to enforce the coding standard.

CI build

This repo uses travis-ci in the following configuration: travis.yml

It will automatically check the code style, the problem configuration, and run the unittests with all supported Python versions.

Pull Requests

We ❤️ pull requests! We even 💖 them if they contain well written commit messages!

Please write the first line of your commit message in the following style:

exercise-name: Change some things

Please try to follow the The seven rules of a great Git commit message like to capitalize the subject line and use the imperative mood. If there are more details to add, put those into the body of the commit message.

If you're interested, Tim Pope even has an entire blog post on good commit messages.

If you're new to Git, take a look at this short guide.

License

This repository uses the MIT License.

About

Exercism exercises in Python.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Exercism Python Track

Build StatusRequirements StatusJoin the chat at https://gitter.im/exercism/python

Exercism exercises in Python

Contributing Guide

Please see the Exercism contributing guide and the Python track contributing guide

Working on the Exercises

We welcome both improvements to the existing exercises and new exercises. A list of missing exercise can be found here: exercism#417 (comment)

Conventions

  • We use minimalistic stub files for all exercises (#272).
  • We use unittest (Python Standard Library) and no 3rd-party-framework.
  • We use the parameter order self.assertEqual(actual, expected) (#440).
  • We use context managers (with self.assertRaises(\<exception type\>):) for testing for exceptions (#477).
  • We use an established utility method to confirm that expected exceptions contain a non-empty message. This method must be included for any test class with an exception-based test case (#1080).
  • We use assertIs(actual, True) and assertIs(actual, False) rather than assertTrue(actual) or assertFalse(actual) (#419).
  • We use a comment string in the test file to reference the version of the exercise's canonical-data.json that tests were adapted from (wording can be found in: #784).

Testing

All exercises must be compatible with Python versions 2.7 and 3.4 upwards.

To test a single exercise (e.g., with Python 2.7):

python2.7 test/check-exercises.py [exercise-name]

To test all exercises (e.g., with Python 3):

python3 test/check-exercises.py

Code Style

The Python code in this repo is meant to follow the PEP8 style guide (a stylized version http://pep8.org).

This repo uses flake8 with default settings to enforce the coding standard.

CI build

This repo uses travis-ci in the following configuration: travis.yml

It will automatically check the code style, the problem configuration, and run the unittests with all supported Python versions.

Pull Requests

We ❤️ pull requests! We even 💖 them if they contain well written commit messages!

Please write the first line of your commit message in the following style:

exercise-name: Change some things

Please try to follow the The seven rules of a great Git commit message like to capitalize the subject line and use the imperative mood. If there are more details to add, put those into the body of the commit message.

If you're interested, Tim Pope even has an entire blog post on good commit messages.

If you're new to Git, take a look at this short guide.

License

This repository uses the MIT License.

About

Exercism exercises in Python.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Exercism Python Track

Build StatusRequirements StatusJoin the chat at https://gitter.im/exercism/python

Exercism exercises in Python

Contributing Guide

Please see the Exercism contributing guide and the Python track contributing guide

Working on the Exercises

We welcome both improvements to the existing exercises and new exercises. A list of missing exercise can be found here: exercism#417 (comment)

Conventions

  • We use minimalistic stub files for all exercises (#272).
  • We use unittest (Python Standard Library) and no 3rd-party-framework.
  • We use the parameter order self.assertEqual(actual, expected) (#440).
  • We use context managers (with self.assertRaises(\<exception type\>):) for testing for exceptions (#477).
  • We use an established utility method to confirm that expected exceptions contain a non-empty message. This method must be included for any test class with an exception-based test case (#1080).
  • We use assertIs(actual, True) and assertIs(actual, False) rather than assertTrue(actual) or assertFalse(actual) (#419).
  • We use a comment string in the test file to reference the version of the exercise's canonical-data.json that tests were adapted from (wording can be found in: #784).

Testing

All exercises must be compatible with Python versions 2.7 and 3.4 upwards.

To test a single exercise (e.g., with Python 2.7):

python2.7 test/check-exercises.py [exercise-name]

To test all exercises (e.g., with Python 3):

python3 test/check-exercises.py

Code Style

The Python code in this repo is meant to follow the PEP8 style guide (a stylized version http://pep8.org).

This repo uses flake8 with default settings to enforce the coding standard.

CI build

This repo uses travis-ci in the following configuration: travis.yml

It will automatically check the code style, the problem configuration, and run the unittests with all supported Python versions.

Pull Requests

We ❤️ pull requests! We even 💖 them if they contain well written commit messages!

Please write the first line of your commit message in the following style:

exercise-name: Change some things

Please try to follow the The seven rules of a great Git commit message like to capitalize the subject line and use the imperative mood. If there are more details to add, put those into the body of the commit message.

If you're interested, Tim Pope even has an entire blog post on good commit messages.

If you're new to Git, take a look at this short guide.

License

This repository uses the MIT License.

About

Exercism exercises in Python.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Exercism Python Track

Build StatusRequirements StatusJoin the chat at https://gitter.im/exercism/python

Exercism exercises in Python

Contributing Guide

Please see the Exercism contributing guide and the Python track contributing guide

Working on the Exercises

We welcome both improvements to the existing exercises and new exercises. A list of missing exercise can be found here: exercism#417 (comment)

Conventions

  • We use minimalistic stub files for all exercises (#272).
  • We use unittest (Python Standard Library) and no 3rd-party-framework.
  • We use the parameter order self.assertEqual(actual, expected) (#440).
  • We use context managers (with self.assertRaises(\<exception type\>):) for testing for exceptions (#477).
  • We use an established utility method to confirm that expected exceptions contain a non-empty message. This method must be included for any test class with an exception-based test case (#1080).
  • We use assertIs(actual, True) and assertIs(actual, False) rather than assertTrue(actual) or assertFalse(actual) (#419).
  • We use a comment string in the test file to reference the version of the exercise's canonical-data.json that tests were adapted from (wording can be found in: #784).

Testing

All exercises must be compatible with Python versions 2.7 and 3.4 upwards.

To test a single exercise (e.g., with Python 2.7):

python2.7 test/check-exercises.py [exercise-name]

To test all exercises (e.g., with Python 3):

python3 test/check-exercises.py

Code Style

The Python code in this repo is meant to follow the PEP8 style guide (a stylized version http://pep8.org).

This repo uses flake8 with default settings to enforce the coding standard.

CI build

This repo uses travis-ci in the following configuration: travis.yml

It will automatically check the code style, the problem configuration, and run the unittests with all supported Python versions.

Pull Requests

We ❤️ pull requests! We even 💖 them if they contain well written commit messages!

Please write the first line of your commit message in the following style:

exercise-name: Change some things

Please try to follow the The seven rules of a great Git commit message like to capitalize the subject line and use the imperative mood. If there are more details to add, put those into the body of the commit message.

If you're interested, Tim Pope even has an entire blog post on good commit messages.

If you're new to Git, take a look at this short guide.

License

This repository uses the MIT License.

About

Exercism exercises in Python.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages