No description, website, or topics provided.
Clone or download
RJ Bamrah RJ Bamrah
RJ Bamrah and RJ Bamrah finished solutions
Latest commit 23ddd0f Jan 12, 2020
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
python3 finished solutions Jan 13, 2020
.gitignore IDEA folder added to .gitignore and .hgignore Dec 21, 2017
.hgignore IDEA folder added to .gitignore and .hgignore Dec 21, 2017
.travis.yml updated readme, travis Sep 9, 2018
Contributor Notes.txt fixed tiny typo Feb 7, 2018
MIT-LICENSE Update Lisence Jul 25, 2018
README.rst updated readme, travis Sep 9, 2018

README.rst

Python Koans

https://travis-ci.org/gregmalcolm/python_koans.png?branch=master

Python Koans is a port of Edgecase's "Ruby Koans" which can be found at http://rubykoans.com/.

https://user-images.githubusercontent.com/2614930/28401740-ec6214b2-6cd0-11e7-8afd-30ed3102bfd6.png

Python Koans is an interactive tutorial for learning the Python programming language by making tests pass.

Most tests are fixed by filling the missing parts of assert functions. Eg:

self.assertEqual(__, 1+2)

which can be fixed by replacing the __ part with the appropriate code:

self.assertEqual(3, 1+2)

Occasionally you will encounter some failing tests that are already filled out. In these cases you will need to finish implementing some code to progress. For example, there is an exercise for writing some code that will tell you if a triangle is equilateral, isosceles or scalene.

As well as being a great way to learn some Python, it is also a good way to get a taste of Test Driven Development (TDD).

Getting Started

Jake Hebbert has created a couple of screencasts available here:

http://www.youtube.com/watch?v=e2WXgXEjbHY&list=PL5Up_u-XkWgNcunP_UrTJG_3EXgbK2BQJ&index=1

Or if you prefer to read:

From a terminal go to the python koans\python_3 folder and run:

python3 contemplate_koans.py

In my case I'm using Python 3 with windows, so I fire up my command shell (cmd.exe) and run this:

https://user-images.githubusercontent.com/2614930/28401747-f723ff00-6cd0-11e7-9b9a-a6993b753cf6.png

Apparently a test failed:

AssertionError: False is not True

It also tells me exactly where the problem in, its an assert on line 12 of .\koans\about_asserts.py. This one is easy, just change False to True to make the test pass.

Sooner or later you will likely encounter tests where you are not sure what the expected value should be. For example:

class Dog:
    pass

def test_objects_are_objects(self):
    fido = self.Dog()
    self.assertEqual(__, isinstance(fido, object))

This is where the Python Command Line can come in handy. In this case I can fire up the command line, recreate the scenario and run queries:

https://user-images.githubusercontent.com/2614930/28401750-f9dcb296-6cd0-11e7-98eb-c20318eada33.png

Sniffer Support

Sniffer allows you to run the tests continuously. If you modify any files files in the koans directory, it will rerun the tests.

To set this up, you need to install sniffer:

$ pip install sniffer

You should also run one of these libraries depending on your system. This will automatically trigger sniffer when a file changes, otherwise sniffer will have to poll to see if the files have changed.

On Linux:

$ pip install pyinotify

On Windows:

$ pip install pywin32

(If that failed, try:

$ pip install pypiwin32

)

On Mac OS X:

$ pip install MacFSEvents

Once it is set up, you just run:

$ sniffer

Just modify one of the koans files and you'll see that the tests are triggered automatically. Sniffer is controlled by scent.py

Getting the Most From the Koans

Quoting the Ruby Koans instructions:

"In test-driven development the mantra has always been, red, green,
refactor. Write a failing test and run it (red), make the test pass
(green), then refactor it (that is look at the code and see if you
can make it any better). In this case you will need to run the koan
and see it fail (red), make the test pass (green), then take a
moment and reflect upon the test to see what it is teaching you
and improve the code to better communicate its intent (refactor)."

Content

The Python Koans is a made up of about 2/3 Ruby Koans ported material and 1/3 Python specific tests. The content ported from Ruby Koans includes all the assignment projects.

Content for Python 3 is a little different to the Python 2 flavor due to big changes between the two different versions of the language. For example, in the Python 2 variant the differences between old and new style classes are covered. This loses relevance in in the Python 3 version, but there are some extra tests covering new functionality.

Finding More Koan Projects

There are number of other great Koan projects out there for various languages and frameworks. Most of them can be found in github. Also there is a little koans activity on bitbucket.

Acknowledgments

Thanks go to Jim Weirich and Joe O'Brien for the original Ruby Koans that the Python Koans is based on! Also the Ruby Koans in turn borrows from Metakoans so thanks also go to Ara Howard for that!

Also thanks to everyone who has contributed to Python Koans! I got a great headstart by taking over a code base initiated by the combined Mikes of FPIP. So here's a little plug for their very cool Python podcast:

http://frompythonimportpodcast.com/