From ad71fe70e694ea05aafe359ec72ef037e178269d Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 11 Aug 2016 17:20:34 +0300 Subject: [PATCH 001/329] fix typo --- using-functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/using-functions.md b/using-functions.md index afe18b0..269096c 100644 --- a/using-functions.md +++ b/using-functions.md @@ -152,7 +152,7 @@ Enter something: hello - `function()` calls a function without any arguments, and `function(1, 2, 3)` calls a function with 1, 2 and 3 as arguments. `x = function()` calls a function, and assigns the return value of - the call to y. + the call to x. - When a function is called, it does something and returns something. - Python comes with `print` and `input`. They are built-in functions. From 1ee81ed206dbd100d486b5a90db1d53efbcc171d Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 12 Aug 2016 10:29:18 +0300 Subject: [PATCH 002/329] add my stuff --- answers.md | 37 +++++ defining-functions.md | 333 +++++++++++++++++++++++++++++++++++++++--- introduction.md | 4 +- lists.md | 2 +- variables.md | 3 + 5 files changed, 356 insertions(+), 23 deletions(-) diff --git a/answers.md b/answers.md index a2fb54d..8830422 100644 --- a/answers.md +++ b/answers.md @@ -195,6 +195,43 @@ These are answers for exercises in the chapters. In programming, there's always print("Wrong username or password.") ``` +## Defining functions + +1. Use `-value` to get tha negative in the abs function, and for loops + in the other two functions. + + ```py + def my_abs(value): + if value < 0: + return -value + # actually, this else is useless because returning ends the + # function anyway + else: + value + + def my_any(a_list): # don't call this "list", see summary in the Lists chapter + for item in a_list: + if item: + return True # ends the function + return True + + def my_all(a_list): + for item in a_list: + if not item: + return False + return True + ``` + +2. Like this: + + ```py + def box(message, character='*'): + number_of_characters = len(message) + 4 + print(character * number_of_characters) + print(message) + print(character * number_of_characters) + ``` + *** You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). diff --git a/defining-functions.md b/defining-functions.md index 497d58c..5cba897 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -11,37 +11,33 @@ Have a look at this code: print("************") print("Hello World!") print("************") -print() -print("********************") -print("Enter your password:") -print("********************") -print() +print("*************") +print("Enter a word:") +print("*************") word = input() if word == 'python': - print("********") - print("Welcome!") - print("********") - print() + print("*******************") + print("You entered Python!") + print("*******************") else: - print("**************") - print("Access denied.") - print("**************") - print() + print("**************************") + print("You didn't enter Python :(") + print("**************************") ``` Then compare it to this code: ```py print_box("Hello World!") -print_box("Enter your password:") +print_box("Enter a word:") word = input() if word == 'python': - print_box("Welcome!") + print_box("You entered Python!") else: - print_box("Access denied.") + print_box("You didn't enter Python :(") ``` That's nice, but where do we a box function like that? @@ -90,6 +86,9 @@ Hi! It's working. How about printing a variable in the function? ```py +>>> def print_message(): +... print(message) +... >>> message = "Hello World!" >>> print_message() Hello World! @@ -99,10 +98,11 @@ Hello World! Again, it works. How about setting a variable in the function? ```py ->>> def set_username(): -... username = 'me' +>>> def get_username(): +... username = input("Username: ") ... ->>> set_username() +>>> get_username() +Username: me >>> username Traceback (most recent call last): File "", line 1, in @@ -121,12 +121,303 @@ program, even in functions. ```py >>> a = 1 >>> b = "hi" ->>> c = "hello there" +>>> c = "hello" >>> def print_abc(): ... print(a, b, c) ... >>> print_abc() -1 hi hello there +1 hi hello +>>> +``` + +But there are also **local variables**. They exist only inside +functions, and they are deleted when the function exits. + +```py +>>> def thingy(): +... d = "hello again, i'm a local variable" +... print('inside thingy:', d) +... +>>> thingy() +inside thingy: hello again, i'm a local variable +>>> d +Traceback (most recent call last): + File "", line 1, in +NameError: name 'd' is not defined +>>> +``` + +However, modifying a global variable in-place from a function is easy. + +```py +>>> foo = ['global foo'] +>>> def bar(): +... foo.append('bar foo') +... +>>> bar() +>>> foo +['global foo', 'bar foo'] +>>> +``` + +This doesn't work if the value is of an immutable type, like string or +integer. Fortunately, Python will tell you if something's wrong. + +```py +>>> foo = 1 +>>> def bar(): +... foo += 1 +... +>>> bar() +Traceback (most recent call last): + File "", line 1, in + File "", line 2, in bar +UnboundLocalError: local variable 'foo' referenced before assignment +>>> +``` + +## Input + +So far our functions seem to be really isolated from the rest of our +code, and it sucks! But they really are not as isolated as you might +think they are. + +Let's think about what the built-in function input does. It takes an +argument, and returns a value. Maybe a custom function could do that +also? + +``` +>>> def print_twice(message): +... print(message) +... print(message) +... +>>> +``` + +This function can be called in two ways: + +- Using a **positional argument**. + + This is the recommended way for functions that take only one or two + arguments. I would do this in my code. + + >>> print_twice("hi") + hi + hi + >>> + + Positional arguments are great for simple things like + `print("hello")`, but if your function takes many positional + arguments it may be hard to tell which argument is which. + +- Using a **keyword argument**: + + >>> print_twice(message="hi") + hi + hi + >>> + + Keyword arguments are great when your function needs to take many + arguments, because each argument has a name and it's easy to see + which argument is which. + + Also note that there are no spaces around the `=` sign. That's + because we are not assigning to a variable, we are giving the + function a keyword argument and it can do whatever it wants with + it. + +Personally, I would use this function with a positional argument. It +only takes one argument. + +Now it's time to solve our box printing problem: + +```py +def print_box(message): + print('*' * len(message)) + print(message) + print('*' * len(message)) +``` + +## Output + +The built-in input function returns a value. Can our function return a +value also? + +```py +>>> def times_two(x): +... return x * 2 +... +>>> times_two(3) +6 +>>> times_two("hello") +'hellohello' +>>> +``` + +Yes, it can. + +Note that **returning from a function ends it immediately**. + +```py +>>> def return_before_print(): +... return None +... print("This never gets printed.") +... +>>> return_before_print() +>>> +``` + +If we don't have any return statements or we have a return statement +that doesn't specify what to return, our function will return None. + +```py +>>> def return_none_1(): +... print("This will return None.") +... +>>> def return_none_2(): +... print("This will also return None.") +... return +... +>>> x = return_none_1() +This will return None. +>>> y = return_none_2() +This will also return None. +>>> print(x, y) +None None >>> ``` +## Default values + +What if we want to print different characters instead of always +printing stars? + +We could change our print_box function to take two arguments: + +```py +def print_box(message, character): + print(character * len(message)) + print(message) + print(character * len(message)) +``` + +Then we could change our existing code to always call print_box with a +star as the second argument: + +```py +print_box("Hello World", "*") +... +``` + +But we don't need to change our existing code. We can make the second +argument **optional** by giving it a **default value**. + +```py +def print_box(message, character='*'): + print(character * len(message)) + print(message) + print(character * len(message)) +``` + +We can print a row of stars using the function without specifying a +different character in two ways: + +- Using a positional argument. + + print_box("Hello World!") + +- Using a keyword argument. + + print_box(message="Hello World!") + +Or we can give it a different character in a few different ways if we +need to: + +- Using two positional arguments. + + print_box("Enter a word:", "?") + +- Using two keyword arguments. + + print_box(message="Enter a word:", character="?") + print_box(character="?", message="Enter a word:") + +- Using one positional argument and one keyword argument. + + I would probably do this. If an argument has a default value, I + like to use a keyword argument to change it if needed. + + print_box("Enter a word:", character="?") + + However, this doesn't work: + + print_box(character="?", "Enter a word:") + + The problem is that we have a keyword argument before a positional + argument. Python doesn't allow this. You don't need to worry about + this, because if you accidentally call a function like this you + will get an error message. + +## Exercises + +**There is a lot to learn with functions, and I don't expect you to +learn everything at once.** However, there's also lots and lots of free +Python exercises about defining functions you can do. Do many of them +and spend a lot of time with them, so you'll get used to defining +functions. + +1. Python comes with many built-in functions. Some of the simplest ones + are abs, all and any. They can be used like this: + + - abs returns the absolute value of its only argument. + + >>> abs(1) + 1 + >>> abs(-1) + 1 + >>> + + - any returns True if any of the elements of a list is true, and + False otherwise. + + >>> any([True, False, True]) + True + >>> any([False, False, False]) + False + >>> + + - all returns True if all elements of a list are true, and False + otherwise. + + >>> all([True, True, True]) + True + >>> all([True, False, True]) + False + >>> + + Define functions my_abs, my_all and my_any that work the same way + without using built-in functions. Then run the program with IDLE, + or with `py -i file.py` on Windows or `python3 -i file.py` on other + operating systems. Then try the above examples with your functions. + +2. The box printing function doesn't really print a box, it prints a + message between two lines. + + ************ + Hello World! + ************ + + Modify it to print an actual box: + + **************** + * Hello World! * + **************** + +3. Back in [Lists](lists.md), you needed to skip parts of the tutorial + and all the exercises because you didn't know how to define + functions. Read those parts now, and do the exercises. + +4. Use a search engine (e.g. Google) to find more exercises about + defining functions. + +Answers for the first and second exercise are [here](answers.md). diff --git a/introduction.md b/introduction.md index db16923..0d7b9e2 100644 --- a/introduction.md +++ b/introduction.md @@ -13,7 +13,9 @@ something the first time you read it? - Read the example code and the explanation for it again. - Try the example yourself. - If there's something you haven't seen before in the tutorial and it's - not explained, try to find it from the previous chapters. + not explained, try to find it from the previous chapters. Also feel + free to come back to previous chapters of this tutorial while doing + the exercises! - If you still have trouble understanding the tutorial or any other problems with the tutorial, please [tell me](contact-me.md). I want to improve the tutorial so other readers won't have the same diff --git a/lists.md b/lists.md index e2a0ba9..0545067 100644 --- a/lists.md +++ b/lists.md @@ -71,7 +71,7 @@ we haven't talked about that yet. ```py >>> a = [] - >>> b = a # this does not copy anything + >>> b = a # this does not copy anything, see the state diargams >>> b += [1, 2, 3] >>> a [1, 2, 3] diff --git a/variables.md b/variables.md index a0a53fd..aa11ab0 100644 --- a/variables.md +++ b/variables.md @@ -199,6 +199,9 @@ later. Another way to combine operations is chaining. For example, `a < b < c` does the same thing as `a < b and b < c`. +`not` can be used for negations. If `value` is true, `not value` is +False, and if `value` is false, `not value` is True. + There's also `is`, but don't use it instead of `==` unless you know what you are doing. We'll learn more about it later. From 6ba2dda5a0494b75225819bec0133aac8d8c2c84 Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 12 Aug 2016 22:57:46 +0300 Subject: [PATCH 003/329] explain geany more --- editor-setup.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/editor-setup.md b/editor-setup.md index d2bf94e..af3bfe8 100644 --- a/editor-setup.md +++ b/editor-setup.md @@ -101,7 +101,18 @@ If the version starts with 2, it's too old. ### Geany 1. Go to *Build*, then *Set Build Commands*. -2. Replace `python` or `python2` with `python3` everywhere. +2. Replace `python` or `python2` with `python3` everywhere. Or if you + are using Windows, run `python` on a terminal and enter these + commands: + + ```py + >>> import sys + >>> print(sys.executable) + ``` + + You'll get a path to your python.exe. Replace `python` in the build + commands with this path. Most importantly, your *Execute* command + should be `"C:\your\path" "%f"`. ### gedit, pluma and Mousepad From 2eac22e988bae3d2318163432eeefad962a23660 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 15 Aug 2016 11:10:08 +0300 Subject: [PATCH 004/329] better foobar --- defining-functions.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defining-functions.md b/defining-functions.md index 5cba897..a3b0e9f 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -152,11 +152,11 @@ However, modifying a global variable in-place from a function is easy. ```py >>> foo = ['global foo'] >>> def bar(): -... foo.append('bar foo') +... foo.append('local foo') ... >>> bar() >>> foo -['global foo', 'bar foo'] +['global foo', 'local foo'] >>> ``` From 915a813ff5b97be7f03ef45ec23b115db322083f Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 15 Aug 2016 11:17:08 +0300 Subject: [PATCH 005/329] less useless printing --- defining-functions.md | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/defining-functions.md b/defining-functions.md index a3b0e9f..3797874 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -206,9 +206,9 @@ This function can be called in two ways: hi >>> - Positional arguments are great for simple things like - `print("hello")`, but if your function takes many positional - arguments it may be hard to tell which argument is which. + Positional arguments are great for simple things, but if your + function takes many positional arguments it may be hard to tell + which argument is which. - Using a **keyword argument**: @@ -227,7 +227,8 @@ This function can be called in two ways: it. Personally, I would use this function with a positional argument. It -only takes one argument. +only takes one argument, so I don't need to worry about which argument +is which. Now it's time to solve our box printing problem: @@ -272,16 +273,13 @@ that doesn't specify what to return, our function will return None. ```py >>> def return_none_1(): -... print("This will return None.") +... pass ... >>> def return_none_2(): -... print("This will also return None.") ... return ... >>> x = return_none_1() -This will return None. >>> y = return_none_2() -This will also return None. >>> print(x, y) None None >>> From a70800762dede4e7c77ce6d7224fa04239b8ad52 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 15 Aug 2016 11:40:22 +0300 Subject: [PATCH 006/329] formatting --- defining-functions.md | 117 +++++++++++++++++++++++++----------------- 1 file changed, 71 insertions(+), 46 deletions(-) diff --git a/defining-functions.md b/defining-functions.md index 3797874..40186d2 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -40,7 +40,7 @@ else: print_box("You didn't enter Python :(") ``` -That's nice, but where do we a box function like that? +That's nice, but where do we get a `print_box` function like that? ## First functions @@ -186,7 +186,7 @@ Let's think about what the built-in function input does. It takes an argument, and returns a value. Maybe a custom function could do that also? -``` +```py >>> def print_twice(message): ... print(message) ... print(message) @@ -201,10 +201,12 @@ This function can be called in two ways: This is the recommended way for functions that take only one or two arguments. I would do this in my code. - >>> print_twice("hi") - hi - hi - >>> + ```py + >>> print_twice("hi") + hi + hi + >>> + ``` Positional arguments are great for simple things, but if your function takes many positional arguments it may be hard to tell @@ -212,10 +214,12 @@ This function can be called in two ways: - Using a **keyword argument**: - >>> print_twice(message="hi") - hi - hi - >>> + ```py + >>> print_twice(message="hi") + hi + hi + >>> + ``` Keyword arguments are great when your function needs to take many arguments, because each argument has a name and it's easy to see @@ -278,10 +282,10 @@ that doesn't specify what to return, our function will return None. >>> def return_none_2(): ... return ... ->>> x = return_none_1() ->>> y = return_none_2() ->>> print(x, y) -None None +>>> print(return_none_1()) +None +>>> print(return_none_2()) +None >>> ``` @@ -299,8 +303,8 @@ def print_box(message, character): print(character * len(message)) ``` -Then we could change our existing code to always call print_box with a -star as the second argument: +Then we could change our existing code to always call `print_box` with +a star as the second argument: ```py print_box("Hello World", "*") @@ -322,34 +326,46 @@ different character in two ways: - Using a positional argument. - print_box("Hello World!") + ```py + print_box("Hello World!") + ``` - Using a keyword argument. - print_box(message="Hello World!") + ```py + print_box(message="Hello World!") + ``` Or we can give it a different character in a few different ways if we need to: - Using two positional arguments. - print_box("Enter a word:", "?") + ```py + print_box("Enter a word:", "?") + ``` - Using two keyword arguments. - print_box(message="Enter a word:", character="?") - print_box(character="?", message="Enter a word:") + ```py + print_box(message="Enter a word:", character="?") + print_box(character="?", message="Enter a word:") + ``` - Using one positional argument and one keyword argument. I would probably do this. If an argument has a default value, I like to use a keyword argument to change it if needed. - print_box("Enter a word:", character="?") + ```py + print_box("Enter a word:", character="?") + ``` However, this doesn't work: - print_box(character="?", "Enter a word:") + ```py + print_box(character="?", "Enter a word:") + ``` The problem is that we have a keyword argument before a positional argument. Python doesn't allow this. You don't need to worry about @@ -359,9 +375,9 @@ need to: ## Exercises **There is a lot to learn with functions, and I don't expect you to -learn everything at once.** However, there's also lots and lots of free -Python exercises about defining functions you can do. Do many of them -and spend a lot of time with them, so you'll get used to defining +learn everything at once.** However, there's also lots of free Python +exercises about defining functions you can do. Do many of them and +spend a lot of time with them, so you'll get used to defining functions. 1. Python comes with many built-in functions. Some of the simplest ones @@ -369,34 +385,41 @@ functions. - abs returns the absolute value of its only argument. - >>> abs(1) - 1 - >>> abs(-1) - 1 - >>> + ```py + >>> abs(1) + 1 + >>> abs(-1) + 1 + >>> + ``` - any returns True if any of the elements of a list is true, and False otherwise. - >>> any([True, False, True]) - True - >>> any([False, False, False]) - False - >>> + ```py + >>> any([True, False, True]) + True + >>> any([False, False, False]) + False + >>> + ``` - all returns True if all elements of a list are true, and False otherwise. - >>> all([True, True, True]) - True - >>> all([True, False, True]) - False - >>> + ```py + >>> all([True, True, True]) + True + >>> all([True, False, True]) + False + >>> + ``` - Define functions my_abs, my_all and my_any that work the same way - without using built-in functions. Then run the program with IDLE, - or with `py -i file.py` on Windows or `python3 -i file.py` on other - operating systems. Then try the above examples with your functions. + Define functions `my_abs`, `my_all` and `my_any` that work the same + way without using the built-in functions. Then run the program with + IDLE, or with `py -i file.py` on Windows or `python3 -i file.py` on + other operating systems. Try the above examples with your + functions. 2. The box printing function doesn't really print a box, it prints a message between two lines. @@ -415,7 +438,9 @@ functions. and all the exercises because you didn't know how to define functions. Read those parts now, and do the exercises. -4. Use a search engine (e.g. Google) to find more exercises about + + +5. Use a search engine (e.g. Google) to find more exercises about defining functions. Answers for the first and second exercise are [here](answers.md). From 433e73009c5d26e0bf77ad6fdd38f42e2eea5be2 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 15 Aug 2016 12:55:48 +0300 Subject: [PATCH 007/329] little fixes --- defining-functions.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/defining-functions.md b/defining-functions.md index 40186d2..3320870 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -182,9 +182,8 @@ So far our functions seem to be really isolated from the rest of our code, and it sucks! But they really are not as isolated as you might think they are. -Let's think about what the built-in function input does. It takes an -argument, and returns a value. Maybe a custom function could do that -also? +Let's think about what the print function does. It takes an argument +and prints it. Maybe a custom function could also take an argument? ```py >>> def print_twice(message): @@ -312,7 +311,7 @@ print_box("Hello World", "*") ``` But we don't need to change our existing code. We can make the second -argument **optional** by giving it a **default value**. +argument **optional** by giving it a default value. ```py def print_box(message, character='*'): @@ -438,9 +437,7 @@ functions. and all the exercises because you didn't know how to define functions. Read those parts now, and do the exercises. - - -5. Use a search engine (e.g. Google) to find more exercises about +4. Use a search engine (e.g. Google) to find more exercises about defining functions. Answers for the first and second exercise are [here](answers.md). From 04b82d635996ef4af2166189458a253a103dbac0 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 15 Aug 2016 22:21:58 +0300 Subject: [PATCH 008/329] add stuff --- answers.md | 6 +++--- the-way-of-the-program.md | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/answers.md b/answers.md index 8830422..632a4c0 100644 --- a/answers.md +++ b/answers.md @@ -4,9 +4,9 @@ These are answers for exercises in the chapters. In programming, there's always ## ThinkPython: The way of the program -1. The strings get added together. -2. We get an error. -3. We get a floating point number. +1. With +, the strings get added together, and with * we get an error. +2. With + we get an error, and with * the string is repeated multiple times. +3. Python calculates the result and echoes it. ## Using if, else and elif diff --git a/the-way-of-the-program.md b/the-way-of-the-program.md index 1621ffa..5ccc8a5 100644 --- a/the-way-of-the-program.md +++ b/the-way-of-the-program.md @@ -30,11 +30,11 @@ learned everything. ## More exercises 1. What happens if you use + between two strings, like - `"hello" + "world"`? -1. What happens if you use + between a string and an integer, like - `"hello" + 123`? -2. What happens if you use + between a float and an integer, like - `3.14 + 123`? + `"hello" + "world"`? How about `"hello" * "world"`? +2. What happens if you use + between a string and an integer, like + `"hello" + 3`? How about `"hello" * 3`? +3. What happens if you use + between a float and an integer, like + `0.5 + 3`? How about `0.5 * 3`? *** From 0f0311875ebc7db34f498b673814c349aa878d6b Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 22 Aug 2016 17:18:13 +0300 Subject: [PATCH 009/329] reorganizing --- defining-functions.md | 94 +++++++++++++++++++++---------------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/defining-functions.md b/defining-functions.md index 3320870..8c0daa1 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -242,58 +242,12 @@ def print_box(message): print('*' * len(message)) ``` -## Output - -The built-in input function returns a value. Can our function return a -value also? - -```py ->>> def times_two(x): -... return x * 2 -... ->>> times_two(3) -6 ->>> times_two("hello") -'hellohello' ->>> -``` - -Yes, it can. - -Note that **returning from a function ends it immediately**. - -```py ->>> def return_before_print(): -... return None -... print("This never gets printed.") -... ->>> return_before_print() ->>> -``` - -If we don't have any return statements or we have a return statement -that doesn't specify what to return, our function will return None. - -```py ->>> def return_none_1(): -... pass -... ->>> def return_none_2(): -... return -... ->>> print(return_none_1()) -None ->>> print(return_none_2()) -None ->>> -``` - ## Default values What if we want to print different characters instead of always printing stars? -We could change our print_box function to take two arguments: +We could change our `print_box` function to take two arguments: ```py def print_box(message, character): @@ -371,6 +325,52 @@ need to: this, because if you accidentally call a function like this you will get an error message. +## Output + +The built-in input function returns a value. Can our function return a +value also? + +```py +>>> def times_two(x): +... return x * 2 +... +>>> times_two(3) +6 +>>> times_two("hello") +'hellohello' +>>> +``` + +Yes, it can. + +Note that **returning from a function ends it immediately**. + +```py +>>> def return_before_print(): +... return None +... print("This never gets printed.") +... +>>> return_before_print() +>>> +``` + +If we don't have any return statements or we have a return statement +that doesn't specify what to return, our function will return None. + +```py +>>> def return_none_1(): +... pass +... +>>> def return_none_2(): +... return +... +>>> print(return_none_1()) +None +>>> print(return_none_2()) +None +>>> +``` + ## Exercises **There is a lot to learn with functions, and I don't expect you to From 4bd0e2db5cbb4f6e7fecfe8da14be6f50551626d Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 27 Aug 2016 09:15:39 +0300 Subject: [PATCH 010/329] move images to a separate directory --- if.md | 2 +- idle-new.png => images/idle-new.png | Bin idle.png => images/idle.png | Bin installing-python.md | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) rename idle-new.png => images/idle-new.png (100%) rename idle.png => images/idle.png (100%) diff --git a/if.md b/if.md index 8c0ad10..713aab5 100644 --- a/if.md +++ b/if.md @@ -52,7 +52,7 @@ At this point it's easier to put your code into a file and use it there. If you use IDLE, go to File at top left and select New File, or just press Ctrl+N. -![New File in IDLE](idle-new.png) +![New File in IDLE](images/idle-new.png) If you don't use IDLE, please take the time to [set up your editor correctly](editor-setup.md). diff --git a/idle-new.png b/images/idle-new.png similarity index 100% rename from idle-new.png rename to images/idle-new.png diff --git a/idle.png b/images/idle.png similarity index 100% rename from idle.png rename to images/idle.png diff --git a/installing-python.md b/installing-python.md index d2a3930..eeac8df 100644 --- a/installing-python.md +++ b/installing-python.md @@ -61,7 +61,7 @@ programming tools are not going to help you with this at all. Launch Python's IDLE like any other program. You should see something like this: -![IDLE](idle.png) +![IDLE](images/idle.png) From now on, I'll instead show everything like this, so I don't have to take more screenshots: From 95810cccc302205fa6101c644137adb3bd5ebc23 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 27 Aug 2016 13:05:45 +0300 Subject: [PATCH 011/329] add string stuff --- handy-stuff-strings.md | 355 +++++++++++++++++++++++++++++++++++++++++ images/drawings.odg | Bin 0 -> 15607 bytes images/indexing1.png | Bin 0 -> 10950 bytes images/indexing2.png | Bin 0 -> 11100 bytes images/indexing3.png | Bin 0 -> 17452 bytes images/slicing1.png | Bin 0 -> 11285 bytes images/slicing2.png | Bin 0 -> 11121 bytes images/slicing3.png | Bin 0 -> 17854 bytes 8 files changed, 355 insertions(+) create mode 100644 handy-stuff-strings.md create mode 100644 images/drawings.odg create mode 100644 images/indexing1.png create mode 100644 images/indexing2.png create mode 100644 images/indexing3.png create mode 100644 images/slicing1.png create mode 100644 images/slicing2.png create mode 100644 images/slicing3.png diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md new file mode 100644 index 0000000..33d5004 --- /dev/null +++ b/handy-stuff-strings.md @@ -0,0 +1,355 @@ +# Handy stuff: Strings + +Python strings are just pieces of text. + +```py +>>> our_string = "Hello World!" +>>> our_string +'Hello World!' +>>> +``` + +So far we know how to add them together. + +```py +>>> "I said: " + our_string +'I said: Hello World!' +>>> +``` + +We also know how to repeat them multiple times. + +```py +>>> our_string * 3 +'Hello World!Hello World!Hello World!' +>>> +``` + +Also note that everything returns a new string, and the original string +is never modified. + +```py +>>> our_string = "Hello World!" +>>> our_string +'Hello World!' +>>> +``` + +Python strings are **immutable**. That's basically a fancy way to say that +they cannot be changed in-place, and you need to create a new string to +change them. Even `some_string += another_string` creates a new string. +Python will treat that as `some_string = some_string + another_string`, +so it creates a new string but it puts it back to the same variable. + +`+` and `*` are nice, but what else can we do with strings? + +## Slicing + +Slicing is really simple. It just means getting a part of the string. +For example, to get all characters between the second place between the +characters and the fifth place between the characters, we can do this: + +```py +>>> our_string[2:5] +'llo' +>>> +``` + +So the syntax is like `some_string[start:end]`. + +This picture shows you how the slicing works: + +![Slicing with non-negative values](images/slicing1.png) + +But what happens if we slice with negative values? + +```py +>>> our_string[-5:-2] +'orl' +>>> +``` + +It turns out that slicing with negative values simply starts counting +from the end of the string. + +![Slicing with negative values](images/slicing2.png) + +If we don't specify the beginning it defaults to 0, and if we don't +specify the end it defaults to the length of the string. For example, we +can get everything except the first or last character like this: + +```py +>>> our_string[1:] +'ello World!' +>>> our_string[:-1] +'Hello World' +>>> +``` + +Remember that strings can't be changed in-place. + +```py +>>> our_string[:5] = 'Howdy' +Traceback (most recent call last): + File "", line 1, in +TypeError: 'str' object does not support item assignment +>>> +``` + +There's also a step argument we can give to our slices, but I'm not +going to talk about it in this tutorial. + +## Indexing + +So now we know how slicing works. But what happens if we forget the `:`? + +```py +>>> our_string[1] +'e' +>>> +``` + +That's interesting. We got a string that is only one character long. But +the first character of `Hello World!` should be `H`, not `e`, so why did +we get an e? + +Prograhttps://pyformat.info/mming starts at zero. Indexing strings also starts at zero. The +first character is `our_string[0]`, the second character is +`our_string[1]`, and so on. + +So string indexes work like this: + +![Indexing with non-negative values](images/indexing1.png) + +How about negative values? + +```py +>>> our_string[-1] +'!' +>>> +``` + +But why didn't that start at zero? `our_string[-1]` is the last +character, but `our_string[1]` is not the first character! + +That's because 0 and -0 are equal, so indexing with -0 would do the same +thing as indexing with 0. + +So indexing with negative values works like this: + +![Indexing with negative values](images/indexing2.png) + +## The in keyword + +We can use `in` and `not in` to check if a string contains another +string: + +```py +>>> "Hello" in our_string +True +>>> "Python" in our_string +False +>>> "Python" not in our_string +True +>>> +``` + +## String methods + +Python's strings have many useful methods. [The official documentation] +(https://docs.python.org/3/library/stdtypes.html#string-methods) covers +them all, but I'm going to just show some of the most commonly used ones +briefly. **You don't need to remember all of these string methods, just +learn to use the link above so you can find them when you need them.** +Python also comes with built-in documentation about the string methods. +You can run `help(str)` to read it. + +Remember that nothing can modify strings in-place. Most string methods +return a new string, but things like `our_string = our_string.upper()` +still work because the new string is assigned to the old variable. + +Here's some of the most commonly used string methods: + +- `upper` and `lower` can be used for converting to uppercase and + lowercase. + + ```py + >>> our_string.upper() + 'HELLO WORLD!' + >>> our_string.lower() + 'hello world!' + >>> + ``` + +- To check if a string starts or ends with another string we could just + slice the string and compare with to the slice. + + ```py + >>> our_string[:5] == 'Hello' + True + >>> our_string[-2:] == 'hi' + False + >>> + ``` + + But that gets a bit complicated if we don't know the length of the + substring beforehand. + + ```py + >>> substring = 'Hello' + >>> our_string[:len(substring)] == substring + True + >>> substring = 'hi' + >>> our_string[-len(substring):] == substring + False + >>> + ``` + + That's why it's recommended to use `startswith` and `endswith`: + + ```py + >>> our_string.startswith('Hello') + True + >>> our_string.endswith('hi') + False + >>> + ``` + +- If we need to find out where a substring is located, we can do that + with `index`: + + ```py + >>> our_string.index('World') + 6 + >>> our_string[6:] + 'World!' + >>> + ``` + +- The `join` method joins a list of other strings. We'll talk more about + lists later. + + ```py + >>> '-'.join(['Hello', 'World', 'test']) + 'Hello-World-test' + >>> + ``` + + The `split` method is the opposite of joining, it splits a string to + a list. + + ```py + >>> 'Hello-World-test'.split('-') + ['Hello', 'World', 'test'] + >>> + +- Last but not least, we can use `strip`, `lstrip` and `rstrip` to + remove spaces, newlines and some other whitespace characters from + the end of a string. `lstrip` strips from the left side, `lstrip` + strips from the right side and `strip` strips from both sides. + + ```py + >>> ' hello 123 \n '.lstrip() + 'hello 123 \n ' + >>> ' hello 123 \n '.rstrip() + ' hello 123' + >>> ' hello 123 \n '.strip() + 'hello 123 + >>> + ``` + +It's also possible to combine string methods with slicing and other +string methods: + +```py +>>> our_string.upper()[:7].startswith('HELLO') +True +>>> +``` + +## String formatting + +To add a string in the middle of another string, you can do something +like this: + +```py +>>> name = 'Akuli' +>>> 'My name is ' + name + '.' +'My name is Akuli.' +>>> +``` + +But that gets complicated if you have many things to add. + +```py +>>> channel = '##learnpython' +>>> network = 'freenode' +>>> "My name is " + name + " and I'm on the " + channel + " channel on " + network + "." +"My name is Akuli and I'm on the ##learnpython channel on freenode." +>>> +``` + +Instead it's recommended to use string formatting. It means putting +other things in the middle of a string. + +Python has two ways to format strings. One is not better than the other, +they are just different. The two ways are: + +- `.format()`-formatting, also known as new-style formatting. This + formatting style has a lot of features, but it's a little bit more + typing than `%s`-formatting. + + ```py + >>> "Hello {}.".format(name) + 'Hello Akuli.' + >>> "My name is {} and I'm on the {} channel on {}.".format(name, channel, network) + "My name is Akuli and I'm on the ##learnpython channel on freenode." + >>> + ``` + +- `%s`-formatting, also known as printf-formatting and old-style + formatting. This has less features than `.format()`-formatting, but + `'Hello %s.' % name` is shorter and faster to type than + `'Hello {}.'.format(name)`. + + ```py + >>> "Hello %s." % name + 'Hello Akuli.' + >>> "My name is %s and I'm on the %s channel on %s." % (name, channel, network) + "My name is Akuli and I'm on the ##learnpython channel on freenode." + >>> + ``` + +Both formatting styles have many other features also: + +```py +>>> 'Three zeros and number one: {:04d}'.format(1) +'Three zeros and number one: 0001' +>>> 'Three zeros and number one: %04d' % 1 +'Three zeros and number one: 0001' +>>> +``` + +If you need to know more about formatting I recommend reading +[this](https://pyformat.info/). + +## Summary + +- Slicing returns a copy of a string with indexes from one index to + another index. The indexes work like this: + + ![Slicing](images/slicing3.png) + +- Indexing returns one character of a string. Remember that you don't + need a `:` with indexing. The indexes work like this: + + ![Indexing](images/indexing3.png) + +- The `in` keyword can be used for checking if a string contains another + string. + +- Python has many string methods. Use [the documentation] + (https://docs.python.org/3/library/stdtypes.html#string-methods) + when you don't rememeber something about them. + +- String formatting means adding other things to the middle of a string. diff --git a/images/drawings.odg b/images/drawings.odg new file mode 100644 index 0000000000000000000000000000000000000000..930b3460a72bbab9972eba1fab250b8727fe8553 GIT binary patch literal 15607 zcmeHub9AQ5)@Rb`*tVUHI(9m?ZL?$BwvCQ$cWm40SRLERyt#MIckaF4xp!vGS~Gu5 zz3VMKwfFPXuBzYOC0PlO&nQ4Z5I{gBve;tTAhdm7fPjEL{(vkXOEXI&2Ui;-JsTSf zGXp&bGixh4Co4l*Ydw22ds=H7BP&B|14m0ED+gK=J3SjyGXs0se`07nq?$&E3Iz1= z#{e)?G3MEl;rNXI&_?c!T!*fZ5 z3IrE&za}Bn7Kj>_8A>6QWSt*7d+)P%jym#A7NtG%u+FyWc(2*7A8@SRvY%hGXWLgk zyV{u;8j=JI1+5LXf@}u}KOx}F1YgAP1O(p@a^=Hs5qd(v9|^dK;`a#rUwSlT>uG3c zxI2>gg&0z&W#S0!ojK)b%x!SgioFuvo!)&S!|GT^xO&N!Nh|FI96cBw|7|Cl*H5_)kBH~$%9HqtZ5K3bQ&(h>*>hwf%O^Q;Qnm=i%KQ6b{iYj*VW6V zq71tc>(19klgTW`2{z)i<#N~Ep;#TS#{&5R@suDUaCkftdm?t@Ipt#69L7nmc!z=W zgKTfOyc8o#6n2|UphZw* zdT+*`aK7jZWbt}?;n^QdWbX3b&M8ppXERA5;$@eXDwbSXF9dUATm7)v>gjxY`W{Op zl!6?Z&-r*ch(DS{GYU$K8!k7-p*fcFbtf3#Ybc(4vLIPoy~WOm!GMqP65G118#Kvs zxt7$frcc$$tb)AMfGknwbegA#_ulUAt|B`-0At!Hk9 zUt=FBW+(s>S(@{dNw~@NdcUyIG*))LT&)g^)ha^j(7VIqQS{~Q`Md@`x=U-;QyM-- zCT$zuKCbDP+wsL#@At(@sgWR9Y`2@kukLpzf_B?!3{$|5@VFc|CP+xhG#Wv}Jg+yi zYc2MR#d09=%jSM=XtbK5-J}vpbAXqaPUphdV-U_@BEd)z#V@HBc?olH>{u2O#jaX+ zwgbd@2ooGD8nqoS!!umJAHSVM-nxP$cC8OHxPI(9~I*1q@o?sr)_w~DSR=c;hNBWcIM%qj>paJ zXDtV5;?2zZeGnPm#|srTg;IPPZsN(b+-5T*46LS8K%>Izbj&*g&ZjF4PNyq%6CB|} zkvU;^BwZ@zx~38d6g9Rx!X*8QjdB}pu8ej}gI&85l`O~X{^MF)m}fStjh0erOh;2W zAU&r`H3lb_ErpFz=`1yCidEXU_{eShp<+KLc`+>Pvk1lM$tU~Tk1Jd0X?y)Oyl&@J z#+~xxyX*B+`Z4*F$kUy+k_s550e$ukFj6K&t0ixa7taT3FS$F?@x2QPUqGc0$9t{k9KTrq4W&fHF@wQoTkWwC8CzUM3_a2nJKWNE$a^ z(iZ0%wS3`$3mk`VU`Sk$OC_?0MzWP>1Rl5B*;U?uUtF_x3nSNTR(5NdPZ-X!*m(Cbs-~-FRuK}$fkbOdnCuW~U zKBlyab_;2xWHy<=K_Py>d@omT2$MVb6rDMQ0&ed-p2qBWya4FoCYSU1n;Dl~?+&*O zY`VYNTpvKVxau-mqQ2;#gd*F5l?cV46N}r37dPv6`w2&4)v!!+bbRIwHb?=C%%p~8 zw_x!l9fzYCQ0s0t!NB9is>vC-WpTmg$cf+cWx;5z&gW6YIgU>_;{ti)QTj6#(XqrL z+78n~ng}jPm2W!mb_c&Yy?OVw>rLgBPM9oLn2d=JKC=+}ovNgkh%j!Yq0H1V{bU{t z8_*(SJw02h@rO=A4bazEqy7$UG@48|nL7{&I``GK4~ta4U!|s;K-sRA7pjO2tm7cy zisEPie4wE}9a^Hh`SJR|q_&p4kHbQC`6%|`c2Or-eknZAzmqTW<3%N&=GZwiwkkK%(vxIjU8!*xr}zvn`${ck3Do?&k5 z&F4p$0v?y9C9}9vfk5lFPse{mP>krB4o2aoi{f$XdA=Zg{|pjwY_-~Wnr_`OZ0w7| zDK%Ux0mGv0`_*7qm0FbnfiDmW)dE^vEu6xjA+UFC4$5*|pUywq<@I*)`+TX8W#g&& zbS|j-;@#;gvNzZLnmvRcC@B}*b--=7MsYluojJ@Kq}e<;8T7tx{$tuu!Vm!T#@#&n zQB~-_Kd#i7$i&CuDy_R7WMZ>em@Zc0+5*MuE}_%cM|0mT3BYp$8mrzH1e_rNW|;jT zLqPxhS9>rVuJ|&K=Mz1bg-+dS=h7o8)_D5ocOCXnTpyzG6LUsA!l@K{2G0a)wOW-b z?cQMcgIGDpsDN!Q-Bl7M!EuUT$^}!f+ttWapT**Ns2RE>8$ZYNP+ZNUSy(8RtA5RW zs_J+ObM0M1p;1quXK_Zd(8?E$z1$hB^UWu?#=e$I$DLfP)OrStbh7Cv$r#-1&vAgB zZV+xrj+P(89;>KvQvg|^z}vJ`LGWo+lyO&4w91rrZlJkvK^V-5gAIfhL$Pf37xFZM z*3YBD^dXm!O!lS+{IXWqq`is0s}K8$@{YIkpXgfWN4g=n}G zoD+~fp1gDejjwxxpd-70a)B$y*+pW|CF5$0jLfXm$Kuo_kTf_5wG}utA;&S^z91r7 z(X40Tgl@{S1@ketybPN+=1efP+*diQb0ml@*^y1}$FEsA5gSilYM?jW>=hRc;`HqAv#8FRsa8lx~o z%<$>vNTEo&{p{!QiIK4jtgt0K&jZ0%@S1$3vqfVXr2CqH8c9J;fcfD8Q0f3{0jGkd z74D%Sl}(i=jn!H@AM+SUDM#zmq$#3${=Qys(7MyAPU6fl2ZW$7D3F*1=%6%g+>0P4P3jybz=U zXuNVjud8lQNO$xhYQ6!WbO78EXB$ATB3R0nN@sE?r_cIU4@6=z25m`JM7Ce{g(9~C zV6xeEX9^g38(>F8Gh)!|`hYgx<$9qiS44Dm)Eb}?I6Q+`Me7BtE#4MC!!}S2S z6(ZF5(_Q5I?Ogje30wtF?B4cp_3P8(Hg$MOy9e z9hl~CINft150few5uvWnnr z0_?3SSU#84TJ!Y;C*2BgtFHA}P?Qq2p)@bRoMo(p{gyIC=+E6~i7pU}fZ2C~YDG$< z9|l*dqj6H?C8yuOj$5rj&2msPSOa4;nk0n3rAa>jDIpTAhM32y#$NgqDCcV>s3k7l zL9A%+lRoE(E&)Wl6t5lfLVlw51x_@Rf4XYc%Tcne9oD7)yqCk!Uk&cOxS{hg9cRq?&eE{zT;79FPsJu) zE^hUTKDQX7*%f|`f<$XIq)8`;c;=;Mu)y#V&5S=^UQ_drM(U!fOoi9XmE2c&38iw; z8*<8;!O%A(Zk1h;--IS}GoLUoq(VjIUEBiwI)YF<4|~-BuA7&8qpmG+KB(4 zf_mE40%aT=L9fq_j9~}w?zbM9;5izVA_dkY9{P;KTet8J#S;0u^d5RfJJLy|2yruW&5JH{w?Y36|C_ zw%lZR@@SwwgYt5$0?fT52kPCLM})B+ny~8dsK!KTJ7s()o}qmw0C<2xpHc&&#i}sh0D!a8iEi&&nMxJFiqbGH zv)t_R)wBTEUR^%GE`ggbm^%P1Hq}HXm9|v!B^4fz3t)tbpbU^X4aE>@G+K1Wb6*V+ zGcmbd?E)-elZgy=rBcO~y(A5UZa~3Pv9F^ElnM*wYS%BTzEyjE*4pH~44qbSa^uES8#wjf`6 zTEEp!Z}06TBfraZHd`V%_TOcvAL{mwg`65ZG=J3u!el&6D7LyCreX@1j42Dq))1$a zlvX}}h;_q5z*N5z8ip2p(edVRy3uk~I)xtCQ}y1)j@#|#hk?h3c?0NdQ|<1~1L#qxBFc^*Fvvu62N$$mNBo(ZY|7qXxorkr~I70@(G{Yt2#BZ$@?%Tm`bs@ ztFN{udST!y+FwjCiHc#fY{Ttb>935ctP+|oVj9gFhW*=!3N~QvkELeB>?QO5L ztg;7rQ>*8gDZMZPFt}-uQ>_K~!2xdzgns}??Glz$JOQFY_Sz^}>kgoNX23_yxJ_ck z8~n{^xm1Rb$Kql=ga+$d9{1C28S63pmL1}vu4k1i)VZ(67*$XGplL;MTK!)){oz@x z)IWYYDOaE6Ce;b57}IN)F9=}1vU9eV ztb@10ZMO>nO#zIIsJb%{Y3mh&3IL}LaMf0)QxSa604Kn_St>xVm`~KonDG7O@w!Ml zGwh%`d5kRW{TAUBl)Vf-y^l?PAO+%!J{oa9@9I@l7qytLR9f^sAs@1<1F%IhMtXxE~cHBMom5YG#s9 z*WLsRK@B6lR`=9Sr5w)6aNN<2jb1dFPQPMjH+qK~H-=X?!5rmKCqeO!hF55gnO&dO zRM0Icvn%&`usyHN2|x?4M-3}%(LVoJ0$Zh}QZ7#!(u}5FXOU`Qm~_fp*PRGBpiwSY zz0u1v<_jsg6T>zO-{}ey8Mv=N%uFF;e4X=-AE4=?+4Ixwx$*5Hy{JuJUDJJrQ z7{nXP0HR+-+Pi)M;-ktfZ8@#9bB;26w!lk;)SAAMt-62cc!OzxI#65Cn8&w9D%1ae*ZRgro&4`E~vNzN`uX0r9tW+K(rH zxWBE_8ae3Ex>#C7#*as()1w65dqV9_puK>Q=mHZv$~k^j`of&}Gd$!}Y~3%?f-&D( zhn|p>Q7*CI^nA_U!&8eZYlX}OaX`F6+=uw{r<|01d0dGL&-<@qT?V(6Qt8L!j>QQ}#lc~~#93lg$rrK0`-m0L}c?Fe~ z0Eg%;j~?#_1_Gl03_3`+U47MVn+?Hpqe@inxmrWxGj@-~ z52V7e{w_FrT?>M?;l@wmhQp-8Uw4mHSYq^=4KX->rK#hIRu|Z-S2R93^sXNy23Khl z?1aQUXSh}DRub42hYxM@n54SBvD~-Zt>Sum2*Q>BoP*>N70ePK+(qyrEkf2_U+b6z zjZmcA3{io+AgF>W6898!nk{|KEBm^ zE}P9qo8uD#+Yw>oJ;75UFifnj8CHwg&YLa&WbDACS697sk(;}Q!jkQr*AjeDpgFzN zCcv$;VzG1X0Sa+N8yGr(SK($b|J;BQ( zB+crSi3)i#v0svkHp5w)yjA3Toe9*bWzuxydDb;gGTOjjxQJ*q`R-$&gNj(cWD)N~ zR?yX81ZmxONz$f71ZdKPK{Kb4ufViub=(dDw@Fb3`RtnefzrdaO;E5qTw*^EcX1KA zB}YSENMY4@w4HL^5UO_Z=t2v+IFU@d!y~#RZG)`c%zODoO{KP_u#d)!m{6qm!`OCl z`ZQzM!3OKT<{e52p}Ch0cj;4SGkJKq$BBG{CWc2O*o@hBJZa2oBd8BKo2$uBLM1&i zk7}u1%02bE=~CZs7x3uXDoX#!VF`fS(;vj<7pRi!T#%`rLkT0Lw@dZ5S*%ceg z)7*F$s@AW3Uk5u7;)CUYFVl9@%On{=WMrn)z-r(8t$qhY7hxLg^790Y{n$F<7A-a) zt`fwiM`I`ea>8K0j7_(3cb)>Fib5I`*%TIw0V8kt&d>bNNrz#D{PShok1*#k*3VM5 zi;e4hdnw8I^G4U?Y8ISU^2lxZR_N^r++*8($q(WdENpJhe7Gnnb8Qo0WaC^NI$AG=GkWyS& zLUr!XNe@sd!GOsBt^vEv?J${ZU?klOF6~g&AlFWfkEn-yVE9^;9)rx|2Lvs~iB>cp zpiWIb|1AqvE7Mq^s}a*C*5flWr$uZ;6G%Y3M{<%_^e?&?#7N?ALBO_x7nOc8i!GsH zmmCF?7{;@3Yvjcs2khZ?CfPgd1IFe^uC>Oqb79ktB)>-0jvzUP9Q88L8IRHja1fse z%DjxnbctZHHD-)x3r4t1*Ir`fslGqFdD55WCb+#T$Uv=oGytS}S%t*!($nj2A zFKrq$@&$*-Dv588&`s^zv_*E?!zN`)oG1G1lkuXdj&=(Qc*s3_v6 zD3$$w8UE-x5_eoEWw%r>>o_y*T=||aExb@x#hKY19;rBcs(Uu^)FY2>zEM7T7bMMG zQ3ble)5K)S9`*L~%JM`hW_lqpxTeuO<_Sx3bi`w!0;BG!Osfr1d6;4~bGYngxVOt9 zFn-G0mMg+iA7Foa)nw1bYCVbAa;-ZvzYo*Szdn}h97XTG_oI5JV7jnn(w$BKv2r;c zxl~%a4hD^n>5kPvC4GoUN=NE=O7%p;5Jh4)VrOKQeV&ySaY1Y#y z2l~t_Zc4N_jdZI?#B*B#x&Q+Us!Zuv^Nc}XML*jeJLl2U?XsS z^jL)4VP35!2??wBTIHWaZTC{At}i(m4iBh~n;B?vUSD!;&cHbuyn#Q|%89e{HZB+t z&^GaZQY+8^wPIjxf2vB{*m9CMspWa_cCq4`Afs{}RxbLADD&JpA%-%p=GhLs!Kt3IX`vQ4FVKdn z%t`q>ptd54siZdLY9Qg8SM(h!y=nEwGPy%yt4#X$uVA`Pq$%&$$ZOr_JhC2i>s#{L z-b;PCR!vf@c}iocc*zL5ORFsx(O`u}L7CJ;@NTWctFvgug1diy9rv;mh##L)qfPE@ ztN(POWV@<`v@h4eNFVDZ0Aht8toLW}%Q%ZD%e`)V3 zX!%4?AGgGl+Y+m(vS=LeNzqm_&6#`Mb_%Hv`_pQB9`&5`A#KLc%(tUc+`yPm_fyL$nT|9AS$&b z0}IUS{a)PyvEQ!RNX5Fs*XXMn<0c4dQD@MKs0R(UU}gwVV=kubm68?RvBXa)j9^pO zs~uXA%tsBhk+@koaXZCII+Z7j9aOc`q-%fPUF=y4Xd7P>X2Y8Au|g_j);M~nETX)s za+JfBFTV_Ex8l`!ZU-K{2J3s2!oi14;@oH6id@aV4q9C-N6vPWV<`+`RqO2{j9E=2 za~?OHB^7om5Qpb2eB0D+UM1Jr8N)~sa8_n^(eI}#Z_>86g_4f) zJ~djqlZsYET9vAwV)dozed|16zqT$Gq#igJ-*wRwA3hH|BX4kIG?nXHFCTu3qb4}= z0nyz^p0aNH1PjtRWNaHE6~{l4M9MpM{a#Mwfg7NQs)<{o|N7Ed8vsuRllq-^hU6jj zDt5%FSGN}|p{kV$dV$V-6Io=xJxB;Ry)%X(jC}PMiGww7obL6|KurU7A*c-hnKY^0 z%bVa#a8=*v9p9a(GiK)kDNsJp#v{# zIdVGWp1|p?!;{2J26$2bY_%?j`tf|ZK>WsKsL9A^)T@3|(X7$!efFud-{FV@I8os=`TA!OP5sx9N^jPtIZhcMm@O}0M| zLSrR)Fo~v45ScEfoz;L!Y7V7t5E>xBR1F$noh=)i!l4$3FB_Yr(e$dU&(`)aGIc9> zy+NWESX`FjB(6por!C7v3ma{@yEs(nuif;0qMHxCy4-pV_Mn`^CqfH<(zlx6TGvb15ykQH4sHF=mTw`q8s~huS}Fwb9kxb$0xja+ zn<{>s7%p@pDOqe=q$BZU6`P+pj+E{Z{hE84R~F2O2?KUu!b9=Ry?H;GhSQP1Z7h;? zekb9#;;N?qg<01ZZ|X9MBFwfoT-Z162m4=|_2u_6eK08yeuDMH`f!qhA%JijEtK9r z1e6{TCDc?Tfbo;@cJ`2<1Q|{nIgFk@%$T5`WWAxjA4nsir=y^tb>@$2#L^PQ>d;GRssgokYnb!%=QF-9@-M7*tnyrM1MfzBhs}l<{w_BAi zBZWMgs5)#HAJC{eLPM-`w$mLVtxLAk!yb~TI?NUy0uuQlZOA^Mgh>R{O(1em^|S;` z$ssyR?4{MO00}E@fi$x|XfQ@D4YnDO;YiX(qG)pglwK7%xxlk{PsXnJ0 z6ZqODoU4Aj8+c#O7ZB>fjP)Y9n)ZX-h_7@PIB*hmEzUHjSc!bTF<)sp+q=1WJ{_V3 z#oL8l-XhJfVjD=@C7(MCCdt8iEj>q4%+ujTEEZ-BfKbfC=Kowe4NLfG{&0Za*W5uN znLQhkycR1#lq*(kvuJ_!{PulvY6ZLw`%;vbm-h=ECmH3i zU!@Nm$+fhK9&rm!IorpYFl~yLV&;1VVO8$zx1yjF&>bRFJz1njI62g5&WZu+qfdiW z{725A7O%53!%ged(VWoIuRh`KWd`;+hgskiYVeDrXw7^MWA_@u*10< znqT}TA-~)`&KwS(ocB25JpAc>vFCwGtr5s%TY(8)f^>U?*^zzjumd1b9)O2B`BJ_O zfART*14#M`gmm#0cV!EGJNyXoq4-3*KhhI?#UG&~O8_2DK-jUiX&%BOHQ`lGdoIEw zKwc(XrN5itBuLA~XKM~#{;`EZk1BV4|swei$ zmgF!m=?aA0Y~+iNbWS$%6FX*uN~o7~p@m9rc046#(&2&ONFnJHdupxq-?Fs;*>P#3U_*%89Ay(A&wEeh;XKa zuoY#H<#y&6I5`&Z8A7b@@FdcD(>TR+spJ%p=&hhjbddJ4NH!8}na#)vpA$mrXC3|G zeBw%+;-qDfWciom$00{PnVV}svGb{Yi*%KMC8vOXNDoiCl9ENcU=^iFOt1dJqRHCC z^uxDc>!-?uDX)FfolDS)!5m(;&}Z{#K!0c$3_|c-F%Ss(c3MLy_~UK~gG|;P&>xDq zSpp&F@X~t##iaBA#U4<8>*ufjgsr7kKJJB36QTH&Q3mu(FR(yBtJLYkhlBV1?5n7?M4Xc3f# z9T^9U=#VER_9n97pMY8qH5#@gpq-+NsU79*yjsRebwiKU&m3nh7oBcvSnjTDWDc z1*b~5g}S8dd%|dD*@qwZ^Cuv?9o{z5PR&W8QjXTSstVv|J7k@S=xF6>Cf&|616Y0d zMrt1!XWDBR@(q?T zBnZ;nMFxM0RKntKG>johA4x|4;*TUZV@MVtscGs@kw#eD ze3Ho0QF`-Wh1gMAzZ?YcQA~RwbdTV>)>OE3U}v}*Vd0zK#tf}S&Y06|D*w$4?VxDa_d zp;i@0booOL!LK$vmmhE8vXbpug4<(vrWrMz_wV2zQ$%&H3f$kYKtMXi!2e<8@#CPb zy@RWT(cjk{HNIQzupzy57SS`MycQkm6>(lVF)V>&Vdye&E@iEEf~e+L|7abEd;!$$%ce#nI;mpUWa61ZZgE~#s$JO+C?LTSW;p0C@_MNCPv zPn8y)VSJn4GS0oIk&4*9v~-lVoKU=T%4t8W|1tqc<4V+G0@A<=?ruZ_(j9co z=@6_)X3{9DvD;a7CubvSl!=qv)^*DnmW3w#wC$T$S2MG7!kfigqY}f+DmbnQ3Tx#T zesx`Ct_r0?s*f>?Xp~=OK@;@^3Tu;V_f(}`#-y0HV<*Av;* zXPWI-mPqbg7BWPhwouBI`ChkQSosutuf0sIBuWmR1-9W96AfQYn`2qIcOc{N7^WXr6VI8dz&V8*Pn*w|fI9pY#vBP!b z>@Zj`?3Udif`h52X_#@X!Fe~N?>V8&PKPd*Wp2zUSt4ofn7%z6*f+Oqh2a>%<}8-; za@}k+^k~)E5$^@4OnL{PJA!P;6Qsft zG9;N)88At)89D-Nl1L+K8WD+5SNW%J#2Cc7^$phWArGLD)?r5*C!dKJyb==Ne2inW zsC-#bwn}Xkk~O`%rr^=ZT}Ac;->m{($`bSqNcu8vS#7=d9+16}p5jZa2e#6jkh?IP zL2xt!-wu>-Q^@jnl^zws)y-NGNOWq3N?glKSd(MY^YvwEx1IvywxfDpeW9BPy%{sx zImsCZAyVllut%OR7(%;Pk-lzp$yW}IYq25I@-*@92_m(tnS7DzG2Dui4<#a3&8bO& z>J@kCAYxu|O%*Dgiz-|Un$D~+BR(yPTKyW^+kMnH@uYg< zIa!oX`ONLQ*}ixab_IiM!%3uS@?&al1b#1-Bv^O%?#DlEP>GkVFw9(SPSXZYWcf5L zms!xTJ`v1Sto*fGX%br%1V8Q~0eU z$kAO_X#Az?zH>egi@gvVBIuS+(yGXHv69N0t$1z_PZy9enCl^mF;;M>J6&H25IJ zQghPka;>7O1h~3~EIx1z>LOp~p;*WKsaSD(#aXFA%vo>r`oUG}J*Sy;5Dkjmvq&gS zn2x@R*PPW2^8`^L)bn+ldvQ*XiE;ZG~FvT>4aKzl-S;L;K^7Dq5ny_=womzgT3DN5FOX zyRe@IRnF}TX*G>|*Qf2Lz1&i{3a(GJ-!1mfiL#~C(h}>G5KbD4U^0}Vv;|4~(^YuH zk7%=5M%@$HBVxMaY+Vi_^0?DlSxI<3vsBuHi6IFkC+jR?M%dcbjas>HQe&7RFa=~? zdum2^;XK_G8`kEM4E)@@B_0KtQZb$AA!O^-dtHas>B0J5LfGKUhUgdOccVVQopu{Y=Q%|e3>%&?pgj5q+s!V z&|$F?P@z{>SYpfKBvY4hs+yu(mQbGjX*0+r24!20908YYQ7a zD)HJWO8mc|G_%w*F|w!QH*>Jmv$6l5#D8^& zfc!6r^$ZM*EQ|nOZ*50s;Am&}Keq!w0A?Zh$DsqDkGokP?%&tumHl&OSu)-lON*wAd(Ax^6yd{U!@D3 zBb!Yyo44y-dV7Zl3EmlB-iG>$8I9_`M^_Fs*YR~p>15|cyQ9XSos%uFFi`NSgCdAW zGP+uyJ@D6*JmM4)2}4V|oRRf38G- zU)oUH>5s3a`8?nH6(JT(g#=QY^?S*6J9c-q6u0yp^tUmiu1Q;E6bH!o?n&X7Dr_){ zI1mipDAB?5ALxfrmHeF@yG8%#W(TEaF-U-O5Whe^x*6~%6rg{9 zS@EMQ{^|a>y7;eD|9T_wPYO9e^xxf2{DaFMW9J{wXZ&p}{1=;IKnnvdP5$jT&c9Oq z(_@38Do zIv(c#KBoT>+5Wka{-pamw*8rQ`U^h)jCB8=(+Af5>8k&N(|<$0zcc%z{XU5QfUghi z`_rBN1+#yHg#SrqA87Qa6J+`CGW!z;|9w6GnTy+BaQPD#|981m{{@#naq{1D`9Qos z-Tq&2`A6LR-{pe`(4zmUA^s6Z|IX)+X8T7tK>hP$05N3%pTERaSqV_UhBpup0^r92 LI89Z?_L2G@D!%0> literal 0 HcmV?d00001 diff --git a/images/indexing1.png b/images/indexing1.png new file mode 100644 index 0000000000000000000000000000000000000000..16a8ff68c353c04a5f4ba0bff800d347ad987ac9 GIT binary patch literal 10950 zcmc(FWmJ?=*ER@BgGi~MARy96cQe3%^w3BMQUa3FDBTUxHS~aVONhV_N_RO-WImBql^7Vp{t zU*u8RPm|pl2Rer(p}Vf7zb31VW_`kIPXG3jIMx-kiqkhqVB+h2I z#t$8Cetv#V&f&MANX?YXlPwtt2tTXP6_|Br+e7RW^psiPL|8cD^&A{UT(#G7EF8os|Lj)2^%KdjSQuH?QCzGY4 zV^w~Bel&>__|_xMk^TMsnfEG#G^?D*7%A##Ap%)wye#b#oB!{JP<{;JCT++CMrPPMeNr($uN8gzz>sH7TVF zZ48}2XP%9(Z1JC{zTTBz>4~3QSWIAjZx2zm6Zol}D@SspNf!;)u6v;@9G}yCd%4x% zpax|;)^XN&61-9$55u@^3{n!r>)dkr;67HQ*q!Wg?Ls9l1Fe9+RPqrFcbM2b*RW!}fcR8@BhZz+4i0(E(Ld0psIXXFyAa^l6|ilot4 z$$RqJ$Hc@YhqAwOVz4PqkYUe0jTLwI^n5rIRj#vN=_xnv%u~wvSD=!;&=$yRK0uXU zG8`@zt(eSZ(H4MbRe-Zg-`?4|H&x99w(-@gSCWDFEZP+&itqDDVN=c*haWvJ>R1br z35ceC_r45K(J$K*;49^KO{KO6iycl|W9kLUMk56(pBoPXw#KROuc_-o(J=7K1n-lj z_}lMPA=ksMXqq|KwY1cR-&X9|IdGotZDVQ+GlB*%u>4BLS$t1NPZ)p<13|n%mXs4!bcjsGhpk z3|xXI^*CG(MlKOzWbX7PbN{J&sZeu&+Q?0YZ*Ax22gc~Xw-w{vx8ib=^I?SLCtKtF zUH4ao>sWk$hbA^y{V7>cx#;^4rr+e{XDRGV4$8Et%KQ zK}FrT+G~j%YIfdxIhm1^6znkA{mgUl`L}e5TP;eW2*#@t4grCw%i@9pdJR?eW)_Z- z^HU@&x50dnnxm=)K#g)zf`M1k&1e3H>&z6t%F4=auFj4s{*d`4u9L5uf`C*>4=3l% zbMIlSvKTf!+ns$p7l_Sompf@p3iUkQekK?4-p+X_2fBW=^TMFau+?HXPuT6)e7xkn z2|>vDTE_z~wx9z73eDIIsd~7b}TYV!bMd?yn0J4GW zNtAtljEBE%zHAJ2=>K_>dDB*eO+aAg@b*W}?(EM58^m$69HSn2T`cV{%^y^yx~dB5 z2OEJoH{QMWEJJYY_;>tui1SH)P%V2|A0}i&`JuVy^ z99m@DpZ_)Pi&YALn*ZhPLt8E8{eVkDqv`KR5CbiV^|v&+CV;n7!o91#DQeJ%T{3cv zs0YMXjV)d`mmhoLx=)J%wmn2gR}S3mj(vk^KVAEoZIkh2QA~9bg)%0DR3Zbv)!jc* za_Cb3EaeAmaC?F7XS$N2_hF7o9)v-OB?AIOzzX%7+`iu3@SbgXA1Xsf$@Y>ZR43o4 z{VG(Uqu2hTMlvJZ-;P99q)f?3Ey~tBHU9A7FI!=;NCkmva8AXYy^3nD2BI$Qw?EGP zt+QevJ1ftgKBbpXRY`QDk8buEr7bKe7S8ntfL)nV{b_v6i#2=+bGr+%M!}`?MeRy+ zA3>vjk%-RG(G3bq*QzfDfz50KL_`T5v$?XOUZlao7k_cI_J(b}uwcRPRQCx7Nhs-0 zQzrG!$QQkla-`J>W&pAt>h;|nyqlen508vA%{eDLSUUzr* zcHZeY8@S;|UNu$Ky7xq)hs)i*>ujv75xe5s1W^BPs?~>}d=-6DUM+38t)TBmS2nXP z*%W82_^rtD1-vC7BnvT0iqUa#?KYNdO5%HewfkY235>}p_V!o^ zIK6&j9g;|0Cb>p-@ER5~RcB}H*gxU~8BrpVQnh0vW7C)VG;-50XO+9Ti&n0_l6e!K zb{gXxqDNgw@m_v7LWA?=C@ofyHFtV}z|h~A9-Aleu%;AhEU8W$GFIA+^>uSi+EMW1 zF#=T`T2e?zE=wmuc$}iVfceC@J-px<0QP47&*!u>Zp9Rxbit- z2n6Eq=eK@)zdEC=Hm^sC<&AF z>v%6b7CS;1X3c@9$GNicNA-tzc{k4$UKa)j2M6`^XNW5CSd1ur%a$|YVr9jL*sb)C zU}*DGjVB;lGljIF{zoOHLayvmt??A^UKNUnh*X70>ShSLukL!5J`>CSs7VA>P&hd` z8MTLRT4!01x714L=schN+tV}E>?!ynurvl{Ria&qgyUAu)jQ-{4#irvtmZ6Vs&YS# zL;DG*?onHEe{<=bI{DT=hgv%O;JKxTgoMNooof5j7<*Je-m+O!AW4xWZYP^MiZDD$ zX_3^@Fv@*ar8EHu@Awa0nPCKfl9s=^=b!ZvuEKuF!spO?#@8+U7%GNWmD+WSo%fqK z=CX&W^f7^tEeJS@I2aon+n0ZDw_HPKJM?B7oF=hK}ThhlQEkt;FSs5ae1CiIY@=q}}GdrSAs>!IEEvJ8@Ph5u!S& zaQ>Xq>)c53{kuUpWD?=9HO8{TNtDu)iWuAl;PC4ks*Yk

>;SuTY|1Zh#|Z+KIi1 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 DtWW4o literal 0 HcmV?d00001 diff --git a/images/indexing2.png b/images/indexing2.png new file mode 100644 index 0000000000000000000000000000000000000000..053a4cfad30fabd5a1fbad8a76e0527938b47c60 GIT binary patch literal 11100 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 literal 0 HcmV?d00001 diff --git a/images/slicing2.png b/images/slicing2.png new file mode 100644 index 0000000000000000000000000000000000000000..61f4912b9c3d063a53515c3d3ab9a852c57055da GIT binary patch literal 11121 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
)DbxBf4TJ?rhMJSBDCle!OD4 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 Date: Sat, 27 Aug 2016 13:08:34 +0300 Subject: [PATCH 012/329] fix stuff --- handy-stuff-strings.md | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index 33d5004..73d2499 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -25,16 +25,6 @@ We also know how to repeat them multiple times. >>> ``` -Also note that everything returns a new string, and the original string -is never modified. - -```py ->>> our_string = "Hello World!" ->>> our_string -'Hello World!' ->>> -``` - Python strings are **immutable**. That's basically a fancy way to say that they cannot be changed in-place, and you need to create a new string to change them. Even `some_string += another_string` creates a new string. From 37f91355e8dc741a6cf5dffb4c8b873f810b50fb Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 27 Aug 2016 13:19:21 +0300 Subject: [PATCH 013/329] fix more stuff --- handy-stuff-strings.md | 6 ++++-- images/drawings.odg | Bin 15607 -> 15614 bytes images/indexing2.png | Bin 11100 -> 10724 bytes images/indexing3.png | Bin 17452 -> 17040 bytes images/slicing2.png | Bin 11121 -> 10731 bytes images/slicing3.png | Bin 17854 -> 17468 bytes 6 files changed, 4 insertions(+), 2 deletions(-) diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index 73d2499..2b8f89e 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -103,7 +103,7 @@ That's interesting. We got a string that is only one character long. But the first character of `Hello World!` should be `H`, not `e`, so why did we get an e? -Prograhttps://pyformat.info/mming starts at zero. Indexing strings also starts at zero. The +Programming starts at zero. Indexing strings also starts at zero. The first character is `our_string[0]`, the second character is `our_string[1]`, and so on. @@ -119,13 +119,15 @@ How about negative values? >>> ``` +We got the last character. + But why didn't that start at zero? `our_string[-1]` is the last character, but `our_string[1]` is not the first character! That's because 0 and -0 are equal, so indexing with -0 would do the same thing as indexing with 0. -So indexing with negative values works like this: +Indexing with negative values works like this: ![Indexing with negative values](images/indexing2.png) diff --git a/images/drawings.odg b/images/drawings.odg index 930b3460a72bbab9972eba1fab250b8727fe8553..45302ef6c3cc7e1e02d22d0a026a4d3705d8f3de 100644 GIT binary patch delta 11001 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 Z3>7HwpG>6y5u`q7M1U5ip69LK{{kpSk~aVV delta 11057 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 f{Zh*~Oz?U2Iy3|XxQG7ndEqzEJ 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 Pmqn0;C`wj{fAaq?#}nhFG>jRR=fO7WbEyF ze?4d2`%)+k`6yQKeUI2~eOwpQ+}IZrRpKx?hB@hGM;{FM>EAgWvo=GFVio=W)0Yfw z%?97|8n6A;gN`cvyG!#OU0`=(1wWv#7qLqZhJPxfE!EyoBt8oyFg&JvDD zaV|faYY7RyLC&pL#>B+bIz0UKan2*78dqehP^m*L$49Z353KsAEoRS84{zLN8>p}y z`)2=(MTM>8kEq|p*?b$yV`CC)xXRLPb>#R@qKQ%hN87aech4O=N4iZ!eSyxGM;}Do zE-%ha>b=4l^)}``GhO56u|7_pIleta79o_$RjSOv6_fWk=d+C&!6e~} z-s9cBk}nn&Yg|`;*S*4tFoCBvUTRLoXPrK{Gid#2;Tbg-h9R9mXFU7xpYFurY~=3h zXaNHvJYB59deH3jU?VaW)AL~cPL~wlcUHBJt{xt@Zrr%1l{=875S1+GxOueGJCW`$ z_r2a!Z`Q5S_F+bvYN70p$c7MT7aQK$!0|w3W7pKwypSv- zb9(PosQ$Frq~T(=2~+yXvz{brVz%6Y$8j&}Lha~2E2<^)h1F*NyLz^{T%}uRPmqu`#U}!+?dP>m2fwq3nG=^)?G(CrfN+bw{;jO`33{^Le^Nv|O=a z^|I1Dfxpk`LB;do_Lzl~K=}Zs(2vB{4foG=sBe&Q`X`28`%XnP2s?{>PKthRV?$LZ z^J1p%RbnkyGpxkU+T0xd@{xf5!q0E^22APv$N&D2SS@e-swBPl!6Q_Q$c;sC99e z`T6+bndUp9)O0lca60~S=iw3~tIp?IaPqT9JV_SHrxy5{E4C4`(cK+=$qETX^duPKO z+W9wWCBDl9<1uhby!>~q0a^=US=?*ST1Yfc^OMbFIr|>B@;gojPU6j}YRtr$*49pW zVj?2xcs}#?x8@y@{O!5JHYh2i_^Sg>w?gcj6m)&jywQ_p5!>5NI8nF0IQ@ucSES44 zP)|qG3(J=wj-r)x-#%JOUy}6PMyv1%!!Vku_c@ikI11b&zrn!7WU;%{tH^0srEb{I z=!)MkI5=q8{q7UjJa@2Z%bUSsi^%9-<=U?c!@|Rp^Gh72MK;x1*i@7Gns^EaO1dbl zJ@6^tHe8$(KzFobjTK7OGmt}GwR~tKQbWU^RZm&!l)W=HEmAp2R7kCsSrav0OkNRTL@WurlegEIT0G$LTWNfA5Oy<%Tqgr?PlG{I=yQq6L zHfI{t+8?RF&g?e0`IB=f&~c(H*n-{A(U4tZNZ4g*nINu6uk}+*+XqpP*!;*D`(NKk zxeb$asRbRVO;EIwzD#{vuq?;*#F?M!qxr1`(w&EM)D(JNmpiEGp%7e?&4Z}~N3Zg# z6h(S4O8rBdcxQrC-anX#*5X!Ul8>Ooa-(|qOhrmc3dTfqoYTCwx3|ir=uLleC`DER zb~DX?tpd-7vhV2>2gPP)G8}~5>zK|ByAwQI<7P|Lkz>)9dWV1=IgkJlf#o_I&Edz6 zAFmacL^i8=a&%?S(|Au!`T4r&N)h232((;tTm+w z$!Td6i)clgvrA-SuQL9P8*77EA;{~6&~(kl6{T8oHL|dg>A{5tmE6eTru<3fQOeM& zThv1S&0ZUm{Q8$&feS&`Ny3vlvY+)PQwciovEyUDH0f>?v)cXlZ{A_Bby2r1oD>18 z_f7Wl;&e+*@?36+o}Qj*u*_0GD!I>Ah&FmG_c<5*&X48+4t9+x}!y`*;RJ)S`-w zg3p@J1I2=vR&4gisi;x_G^bbc^mSC!Er<6xIaYFV*X}r4XtswtSB}@Xt-%;)9ISFS ze_)5%B=Pb&#-UCSVqpa~_wrzt>W_Hx+;!aJneQ)UYumc2p4GQHZ_GE3twv-!<$ zjx&Ar#LqPEdPOJBSG!!Cy^OuTggAl?+sH7o5kl+xbPO7aft;GdWcl+-y9o?@%Mkmd z+v07{nUvqXtwk(!r3ydPpZ~0y^85SC$J!GL5tQ1Qa@YTl86%8UK_i6)-~-F_13+CT zCnwlKuMRgOjt1wKAH8Z4hh-*At$P2^N(O__cr;hTywM*$AUnce#D6yp*8OLZ0Tfl} ze3CK?$gn&dpjoXd48w%%t)gGo`rL=yKXp6^W8 zdT?`ddrNwlrgU~H3JMCE8&|SU)wn6QlH;XzF#PBNFzB+_X_|z%odS&-@BAz?yd#P> zM=_?kQ}0IKM{$EfU0$NyQay8+ei2lHKTESNCPm%Xbs3rYIXG;_OH5ssdU$)xoSe23 z?&+MJo!$Ie<+k>-8JG#D?!bK%RCbz>b7oB1XrV@yysmDN>C)TEqov-It~gdIJ@u`r zYI7%P@fVAsO;~OdWtMEY@=7)^b|c|N3QsBk$G0x?Y_ZztP*U zu}!3J+EQajjLY-8@a$3g--0{ zsbx{fpTs^l{bez#C; zb*`$gdehU>!unJ2fzXCl%yf0ffj&XMMvU>(;e7))yf3)st zTs}`u(BbxmH|3=HY8F{YuDERd7LQy~3Aacwuo#n5P}r?Ff_?`us^E#HBctVyco281larGt$r^mpSMw><`})k84@WcSk+|Ec*6q9Q%=cbe ze>&0+(gm)7tat&JA)W5 zgnw&a8vgO)yuqi!&iZ+QDE`Nv2(V|e!gg!Ac5D(G5G11s3a+V|BEXeOfV#|FdWu<3 zh9c*2SeW_ur`rWS7Z%d~3}w(WM!h_e7gwFFIh*;SGPK$8x1D-2-}B}%>U{UVeIMW- zTYJo39(p(cPP$SAdFG#@E}Jt(F3|OhL~wDepc^)vAEdPTfmV>QBQ)6sO%SN=tgG%B zxp3dK8Blclvm3lH6352IlCxPiEr$+hV(}={^3iEAP zhigfvs-vtQzF6wHLrH0~GegFu?^GG;e?4>ePd7R0G8u;<(mZRTGnN?@5(1=5fJr+D z(@L|R%&s@AwEIKZLXYpou@x#dyw(8v{6@!MUo^cer@+5Xbt2mDZfzn znfR>5YH1SGwJmJGhsqBU4+h$~3GH>`w9c5D%?>xGi;y<^tD^{AYF;xrc&a^PSv}i6 zjZ%uybkZO;kaHVaUnIh$+_+c>jd&(2w}*{K&i&S=IQ;y2RRaU(&jOwPNt17wM5OMD z9H}g*QopsIMF>91#{T~P%Ld&|(rD;1Mk3a4;j9Adb;aK-sFH8V-rFp2NU6$AyAPsALU#C#8QkqLtt{hfi1VP< zFp{izpeun!>};#7SD?FI#nV&Bh>?4hHL2r`cD@$T&US>^-BXlH%XLt39wTi4egy0D zISRnr;ST(OC${PZ{k?X%0+NhtMBRVxAb9PXhxt^Mvui|pu~~RdP7cR`f)L$E=F4>+ z_+YvND`wJ)*vx6Rl=8h*mmJ?gEl3tIJXW-;~TTHb2 zCeW-cJkQLJsQ*Mys~5YN9Q~a-3Oe~SW>US?`FVzs`R%!u3291^DW_VR9%v-$$Tpfb zpNd1=1B}WTcdPXLfx(Laf0B^QuRf>lWl55LzRntw(tlc|y;|XGShLl#>CdYC7(hJH zJU=^=GmztJQQ|nHuUtw$0r4&@dv4N+_C*1PTLv`I?nE9|ROkt!J0gFAkaC{{kBqak z{i4ompV(gGkK~G{Lbn6b(%etzEdZhtxPc)+z|iI1$z=IrqzZB5Wy0&EyuRU4{Vyvb zJ}TS^0mt7eWVR!@^pj>R!3t4#-^Y`OzgX;~pJbq-fAYncCiqGDRhg+H`9F`RPo&3k zZ0bpNLpeWB0%#yRxTHSe9I=Pr4l^tCTM|%u(8UaafrZ0w>A448C6fxx~72!UK;`%N7UTAUX zOUq8B09~jU1^EufSOrDWOBcfhq~=jPBeKrMIxSC1a2B~M~P5}R|zj?YjCrb@j*-C+^@ zd^u*f{Q>s}Hs1lc;Np|uloW$fvo_;;@4SBeF~&TnEJA^Bs&+d9q8$_8PVP(9#WFE6s$0sM0dUmsE&${3BCc(FbtB~xI4A`9k zD}r|f0SEw1RBbBSz-7QrN^^gsz(w&nD42dnb2vVyt7r@op4(4@=HBSFo>Sd_Dg_-4 z|0^!51MJcNxt@H@9LuMPr#SpnQXpquQ5>U~J$ImTStK_@HA(AG&C)3 z2H>olZn?m;Y~e`0wsIPR4-LeCky1u8Cq@urT3cI}zlNUXF0g!7N?3)-Ez+~XoeLdt z)X1)$ZM>F|!7LDkpGxIJM#B22&@p-8=A8!=FRv8cwuphTGgjz{{qG;!e{ve#fL|x-}jxY3; zJyd3Arq$1^7iw3Q6AP~U`L zOHg9(TUqGzqzbzv^V`0AV5!u?DWlo272pLJupA{%HUdzc@v}f#da*&}<|%h>^y6b; z$tw@yP5c#D{=a@{_tVm>kaYPDoh9`lYs@mE1F6>Ngh&hf`$A+swo2m5^O-hd85JS{w+yun45%wGY47tg zGn%}L@lI4kCbaUVdvPF(G(UxJX5}%BmcU2O+`H63R?PLIJS$qBy37c2C=8uF?suoJ z(<0MTr}-<%kr!Kq`VkW!%i+wCovk!aF{GRz^iWfi+4-ht-p+j6>B;^*Jzz6CA-8CW z;ejovj}z4nBdDJod{Uy8Q_5$GjNyAew6`)mtf$`KeN0S7_KsEUE=@>tq*k)(kL=Vp zKAMPsbqvhf#D`LzeUCUJW{uLaf8?4p)8xDx>Fn%;wf`XDBO)YpG?=B}`1`xFo11DJ zi)#DZJJ3c=Dr`ofS$VIyyfvrm6L(!6h+(`!2A80n>3lJ+uCD$Bc+U1`VP`+g7Aj$# zN{4ixoJSurQ8l%XUn28&7gs+iCjw*koomJtngz8mmuGt!=)Zo!lOjrf8;XN-Rh(+~ z4a(wq;1pGO7SBKrk9iM8)xqrf>XqnArn&4`JlZQ64q$Y6SeWTpgGLo7!oYq(4djuv9K`V;9zoWxyAYEGCw@?*_V`KR6IzGuQ zB)^1CQQdDBfIl<7ryDS0*Bic&0(bcee3(Li zJaGB9*adXXaU^%JQlv%KSssZ%2RlYVBh;+Ay&28h1487t*su)QX!GHivVfHXgp*o|Oh5 zm3oZj%yoQ+h=})TBU(_=_NSYoytPgu$Y2+|!{K71tBV0af#-%2&JyZ}k_B2-bl&Y6 zim871tpDRi`CZk*Sjszhx>ni!TaGTyUtMcnS4wzgn|O6C2D2-Lss7fk@GWc78jr2w z9aIE7nIG@CQkEYNg}5MB^R)}KyjJJtfW)Cdn4`yeoUKSiLla>`NJv=n;*U}%+w@IT zFdk_@hs_bYs3`8q$-zeVPw&=@-@ktYOYTb%{8C$c3S~67#CU(I)Ep20aCa4NjlL z#MAlKu$g5G^QJH+Qr}kim-=Yz5r4X>Ap!#us@XHazD#3pw zt9`dPcCWxoO+1WlkaoVwHf{mX&ObZ+G4vXxyxL5!0}qz(o+J1up#VAui>$57pC4EW>>8QZP90gWmN}`V{QNG#nEF@N zO&*kFO|@(WQza%1;Bbbm*lnAUTxTeV&@F>tN9WI_3!JehKs*+2pGIsU<5)6!E5G@G z6?kQ8ZBExh)kpJp&V$H)pB;^2hdF$BekoGYeY3aaOe=Fy^sHB#+1JPQ$RNG^(3#uln}T4@f9tEcMc*J z|9*eDJKi3Jl^-5HQ(>#a_C|x%nl>5W$sLk|t(hp?VD3!Z$$`gs$$wyUH27V96 z`PMR76r<7ZS{J_B-<&px&SrU(n$-RyKjb~7GaeE_^E5~Ei_Vvi?rLA5vb8kPBN>?! z{5``rws@Wt>O!wIpT76_vkDC9PXyE8_!2JuEH*N@x{o*6W#|%2r2Ih#1Wm7kqhyCp z?jDL76lYGhsJfpC&EPGvMm$he^0j%%#QC|)AAe}l-ylS?!xju4C-z>iJvaxj@GbfBHd}B;d4(~>O6sun7IDV3A zq4CQ1Ns+#GP&UKE6?F!mI|WEhn&X3bGT6P{+)MpwCa3j$k&Gpb1s4nHLuIJRnE)O8 zJdwyasn0?$4>xJ_KyL5-YSrJlhSbu8nUc(7A|aFjIz7X!<-A-|^8+K|2c#&n+P-%M z-)d<-&?a!&^!Gzq;R$`X+)-I5N%UH1$9IqMJ`8XbD{Z)DyLKJ$6tQ=i^Bb6ja5>rr zPcN@BRMcJZdG|+Wq2xSwGaF`SpVnZPN-~jRD2?WWr+NK0;g3{Fzu(z=*VB8RnrJI< z5CkXauZtKIld-A$cRSaU0z9-LulSpjZnacs#WA2v+6x_P0-?~(q@bW6>Mb&JJ-<-# zgGfa?jkbY^{kzPQJf;e;QLI1at%c{Nv4m#N>%-&-oXkCSZut7g#*j9&=m*Y5)Oz{f z??&FNu|EbYTqg%@+Ov|G&`XQ{^C4fe%TRL6+WnsuF$Q;_w(_b4aq?I!T|=+lu9?$6QNos2&Pe)N>_g^TpPXeF#u5?| zH8YzY-wa8!Io~u%i17(Wr+q(q^j#}e#7#@1Y9*RHjIpYwrp%u7M{#=?i}t6f=Q%m$ zM+0d}HefJlepW#a;S!hf7F5?X@Nd{vQ-bKm4JFXXWl5twecW~9=fjAW*wv*adFF(A zd@g6g+qmEUHTax9F*nu5!hduskgTNH(%ej#FjM1(;vC9NLsLlTw03g3Up5a@Nr1pI za7#i5AN#mVi6hm+=eP@Xffq^L#LhH2J^g{q*?J9-#=O_BwVO~yCM02@p^9-V5$|ZU z)oy(F_Af^>6uf*CFE1}lw@(Y(+Ogqn(E8uUn;yUp)lu~#Ui+0A|39DK=&M0=oVQa= z;v?NR;RGA+t^5Li{84mtG-!}MzaF0uKtO@SZ9?UTw=39IKg+UgC>}(%9QPcdZ~cSb z;_3_)%U6^f7pAQ{TKm>rHSWZuQ=73Xh7m`!8i(O}?(26n6ScEiLc!VZxQ&uM34@@k z`p6=|;ba$eOgjGF=G7Im@R za%KQWYq8FWNJUl#HqWRcgMQ`;n4|gV`E`m zPtbB+f-AN>^6>-gO%d)E8FjVoWJR5?X$St*(tRw8`tqFNz=|~{e4mc&m}fB`ag9`K zk#+4db5jz&>CePK5F*x6w~#5Ra+=bB3deu?g576O=`bp>naBukl)0q!ck>Q{jK>CH z4?|`TJ81pHz}wIZ!V&b?oZ>ZaAOCIJmnyt&TR)nwJ$!WZC*`RsKG(O7e4HnxcUu`Q zgAFS}(*u%0W=!)v2|GB=DAF%^+627Yev98_Nu@*8pmh?*x&r2DlWt3qa zFaOIIo>MkUKs23dRMH#|X3oqj`vSiza>!&rx=HZ)P*9|Uu=i03usVp-0Q|Bs?|_@g zXp$>^;&!?A86e5J*4x}-Fpf6>=LKTpgFemY`>_+*^YZ1(CjKm!K^fI6@OGj^jK$vo zZ?%(T40xP#uE>Ed@d(VCasQEQ*M4TD_)c$g9i6cNtQ-0D839StzdJZ*e4r`}r4i3$ zWMR3HWPr__ERHV7UO9IDt@vcBqPKJ;ug2DcDbs(NsUs4tDcgusN|Y7 zNQATN1s2*)*HlzidSuB*fc*P+bMr0{ku#unko2?uSWSx`c>!)16OtSjyk=Ufq*;V@ zw8)c?JxRJxa&fg?oUz=Fw&xTgsWWz2A+VJRDFl2f0Xg5Lz7HvjtRrZBoaZw6HrE1n zXXRq?^vkVx0OVXL`S+qYC|*)-qhJ?^+l;W8Q_5y6fy*2$GxNnnQlI3hWkEnh-K?w1 z2a!>K$4FrUz8!#(>y*D@0S6F|Zi>A1J^atrNi(nmM!1b?2F~Q>X|Zf;Z|cmxqBL~k zMq+IrYZ&{T@9P{;t+fZr6F=frx^_(nY|F0(=&8$Y#F6E&BTUYHC(!g053$+06}K0}5%+O_qx8Er)K& zQ&9PjeETs!HNY3x79{}J@BG9~@%w<3Y_2f%S>tQWhRciE4PT!{rpz&*NjAq9QE}-* zt)TqpOYAjb2sdJ{mv_`KkM0@$&Bt#g)zb2&KB%1W743#AZk;F$kN1L!3Yq6AH-h%+go`|L&nI+SmF0awStj*7(A%^s4Y;?-PYdO zOp0)Q_dVC2Npu58mXes*Y)f!Of_?e4Q66ZD+mzgG0iUm%tK7LYTyH``*6!slo|Ds% znbdia5)ox&rLTTF+ME{k!Qy9OX>V&ogdlvd_6q_cqr&IKNFu2OA9Yk>Ln-TnL3#4Q zwKi9~;9aB`4X;@%z*RTzbJ!a5>wN2zcOF=DZZ%vMn-9_LesQ%%w-SQlpCX_+eaE4# z)PW_#|IJ}~ve-zJh78gVMGGwOHSfGy=}rU5a^QVhIcTy6Q`IgVBFf(pd!!>UI^97Q zF_o!ZkhHk5S`v8&`Lq$ z7(zH%C-we`_cb!*N`04_Qh^gKX$+WZ(gOZJ1UrfPCF3t{Cn|u(ywJy`ztkk}9_=hZ zxxp6bEO|fE+}!LA7MSa@x_Qt0_%GoZ=U_^fnv!8+V9@0u!f*5TFodguKjk*U?vtMW zC{<{1X2v8WbPaQ79(qkgY8eyA9WW=rTzJqk4_X4@gDafdQSaq|ss9a3xkjdB1)AEm z*}e~=;73?fX?VRYrJ$e)oq^J)5RK zB6iUTe5bupd>Sc-0d;%0InXTHb%R_2yT$x2#J+o)b2jfZfY<<2*Iq@fB@tATV&gi> z(V3EGm~-rt7a))?kL&ca|E_Vnv40f+fEF+>(OriCUVxf`(UJ9ta-mh)VH-B9XA2YQ zw{6smU6`K~PYL#&U|O<#x}~t(QNiZaLM!I^RI|SA*;XZT54~ENx(){Jw2$9`%;#*G z7RRJ)VCntY-oJj_M>6|7?$q`%l0U$}At0T}_D20~AF~$vcd~E$0Fy_HA7u7}&0+;j zqRFIqVUH_v+vB0as+w$}dAFHjp|!2GHC>yJ-Hq5dp`P2k)-xNf`uOt~%rRqN3(CZC ztZD-Cnk$FF5KpjDam0+FiX*-N327P)CFjuG(gMvZN!aDt;F4nHXJlS1G|)u!N7Sjq zps~e0XldY$^@85^Z-=S1wOw)bH71Ut89ZNTfMp&YwOiPVz#w6 zi8t_bMA$iUMD0FE{|-V;;F#3Rq2XtvmtKPZpF7n!EoJb@ar>QnE*Mr+HvZXVw;qDH zWa*!+S&a@M;8Vz11SPl7Slr7(@0ABCi9ZX~oWXcdX`l(8+K83)p?oKgmOC2E7(%qy zQeY#uz7L!NRPvFVlJJyK(Lz$uN@`v02L9Eh&+|*VqQ}$Z&#$#!@Y{?K+QcNJ0HF+z zJl7MP%JwdJxia+W1l!SO5x&a0N9bH@*gGw-NN$FnKOa#WAUgfUnr8;3Z#kf=-w{?$8Q3&}8#p7COb7lU2H z69-vr^1r$B1Po@6i@rO}$-wep=>;9OODOQNJCxNq%1p8b+u=~7CvxpE^u8h`!ZoaQ zF9M*>&@(p+DJ!iaIc^l{95$Ihokj(*o9xusZ^*J)))N=S3nBS+oJxGpPoVeRD6`(l z%NuysV(8#x;Oz3%qKl!KdTJXULctRTWu0O}cD944(9rvSdhU<}pJ(C+uyxj!18P(5 z{H@6KnT8qfKj32n0?0V01NS!b0^Eb7FXSFEp(k9v^lot5Wc{tqJz&FDjhg^SBE$Y*f7Ymt>s741ekwb^9U=w8dvxN6Tt9RO|8CoF6lR~!Uc>tO{ zIt(L(KXEI zA5@af-UvVEs+qec{U{Y7IK}kfppr#!TlyM571^KmtKSKDI)j1~z%;7=eCnHhO8w!v zeW0jf$8jFvZL$VP{{xj>THA;?-x!eIg?dMk?@6Rql*-}a5Z(rqo%BVxvlqN4u8ZJt zNfD9B-^X@le*lj3r%6^GC8m$hn2o3rF1G5uJy|gUs0BOC$hDJ3Ndd>l#F3ndPJToL=+3x*0vq~fQyF$o85MUr`F7`DAtB+l{M6pmVoHUs>j%fmtKgquZ2cI4hQT))2d99R6;{s$ z`TP5WXY!)lx&>d5-6(pT4&-KPuE}>)L|?)u;1*t>s+IHct9jW!=u9z>y3^h^y9BH2 z1z(7$kl%$j)g^-r4X)Jwd`@=vX z@Nc_re>58?J1|2Qt!3J1@mz_D#Pw(4>D+h_66<_+f?r3^U6BHp&0^$f`TjjaMk8^~spkO7KTEhsrCR}3RXewjNNv@*;P6M-og9xpl z#zv`w(d(NrLbty{5ZX0Htc~kQA%y}7CvKy5)V{_cC};1v3ng3Tk^&&?udT)>N0v_t^{{RCM%C>a^)&Bsl-NQX-=WsWoltwfohzsnmoipHy-x2I z`U^KV(!&~YL%Y!?XL3mLbM`R=c#U?mMvp)iH0+fiX9Pwq_E_h1h}n+T)3LqPQRU@Y z(|kc(IvhBkFtX!N<*p@d4dEboybuJt_FlH`vA6|rUK%_b7~{}eJo7jqYKPfZUlnjA zh>gZkO`otdh%^8H5%K!(NLlE^*wxk5$!sJEBNwRaPo}KWIWb)B+hn%^3tKNxP9oq zV11|h@eQdtU)3d00K{JLewNpVsM1+oB=W{Axv@10S za+7qM5CBWq-pBe{fb1Qfs38bRNtySKmcD!KtG_attCNz2MYc5wXQyE3614xG%aeb9l)GY?ok`-D zkY?uiNy)ui5?=QbvTj8f; z0eHWM1kd0Ss0Lenz8FHebH_+F=#!S31~;VGZkSMLV`$ve_bu}U*Aq^TELv(HKrk89 zqH~h{Q2Kd2Quc;C_&~>G#3*niW0$XNEu#IbMLPM-p-vp8kHzag-(|` zKk?Oyk=OCJnDJ60s1|x8x+bp2v=WqE1;4&e7W*yt$>NZ%%W~B5tcm@$Wz> zO`$g70}B2y|5_vf?N>~mG(WL{_k3Of_b*od?x0{eOTq}GyPe`kK$)UHBwWgpnpHxQ zQ(y>=NO9!h{<(&Y-44Gy$=uFR}e!s*0{okG!GN9yH%P( zLJ*Q;GyY!1OTrFYBzT#f!w(iw`0kzH=+E>Yvd3r1CzY7pAOS_qOd1^bS)s(%%7n_Xl$oh2*8*o?H%t7r-xH3qYJ#!T&NCze# z?CfMb=hKq!`xlrWYRLTDQ_$N7Bj`3?FWDpKTMyMfiXn&X{4hk-egPzOQ_TNAud`Mv zn`)ducr-*Fk|n&4oIoO3FS8E>M{idoULGc#nX~vk!BE$mLL}D~_25c+U1>82NfENGL$FBTyK2Uxhdo6P1mlCE8lecu~&Cy%d1g)G&~*l>|3KJU?_q$FU0L-xL)v_+DkNbku%JOF)f?g{}KYS1%zTOY9GBJ5I1$p zf#9X<(-V`e6toUJjbCtPW1Mmx7Zg(Z>$xhB7`Vz3lM&e*-Ajd@KJ)eY28@`uOmy?G zmh-;eY?KT;Fi=`v8fG?L-0%^0Ur&Nir~;}J$&m+rZ@R*koVo=XvVh%qv_lqxftsl} zH<|@GIy8oT_+u{4nSpS&+;Qfk1d9wZ_^WwO;Ddo81HmdCb@5GwcJ1ib_;9Pld@P1o z30l_{N`Q}f-M&&}v9PdAnK2gOUWYy^;AB)pip>b-faNiOL3Bsi-y%)ICpnw-Q7T)f z5=4q;Zw%vX#)E1hYk$1TZatWZg~zm_i;IivU$mmwcrZ?t<5E9#60=0n;*|1nSS z3vAe?za69j5`gf31p1E<`2J6z=|iJfFig{(4{o%+5tWsdNDVS$4zhb-N@x}#K`EBJ zJd;gBhvRPnV_hZocQ@%?is9q8X~zjtMq}P*EzbG)8_W)#%^`V^|4?mPy+OgjO+1hU zw}gC%P_l9?Q`eO`b5ZcK<*$>oGyMX3s}U#je^v}pNVL`#N)_X9A5ta2P?^*mRg}&_ z3dQTVkg$y=ip;$XrJk#zp9WRSli}OUQu&P|RSQKDLoMTuk&auEXHvuKafUe3UqjlX zvS9)%)TmBPPiM^Tr3eE3VqyxaH?go63R#${_eoiO4%8A*!1b=c8xt_29&ivii{Ra# z>Hkd1rGJ~?>YyJ;84(O83sI5;6!))=E$yM$v0Z<3kY3G>Pf7`y=k?$AoojvQdvrhvp3djnXhE@GNR)B+N=MHu)IxSpM8W zJ1nJUdv8uUp0H>CER@s41=7Y>Hw7_@Pj$1Q3$w4|_$KewsKPL)N=t1@&*L%vE;Kp} zQHMqYi!@fsz=DE%sw5u!r-4P-FaIshxs5|^XCUgZv?9`{5-F?YBLPj?5|x6(EPrSdcxm2Uuu1(9u0R3B5Po8mxK61s^^S zIFIyY;I9U53tXFmk}_O<6EgedN^nXb(!snjoi;<|qnPmh`_YCAkhFMi>-^^jX$?LN z-;xj<=>GgXDSg_{u8}P_-MH30;xkREe5*h-v4|<2T*R{#01C?j-VI)La7+NKx{Sii zO&lDYVZ!kGM*O2kJEk#Jnb65#L=^(|WZF7*UmifuAX(w~>^MmZM>pgqb2m+}Q;UE~6yVY;S!c&S4u41H159Z3MfzpOMWxUsj)6;dfsdvV^f%C0|Y( zLCK%_%jtGH;GYb(*nuk_N!{hvttdDtcfi<1ZK7x@>^y%>^~Q(wA7f*Q^-GdZ8~tI4 znsp+=!tTIHsOis;XQk$1nEH%qRO_}TZ~Rdng`f?{*rU8pqH3r?U!<`CV;Gr2d-txx zZ|r%K`W#DhN+s!i6K3O|lP@F5K$N{YEc!sevO1v6-t+w_i|gvh^W}jIi=bXStWj(L ziho4o%|M1)oEW=;O0{n_)^x2x7+t+Xk=rhRVNN|peke$vL@Sm8Xdn&cUwGGE8knBZ%|U)5I4B6RGe71z z)wj0@r(5?MX?3ow9w7S$-`inHn!4s~2Zx6r($S%z)BQ41?o5-EEYmtXoUm_kx5TB{ zzEM{XsY%d!xCpSWtky%bzyL3px3{(2z0hS~#KB<>t8t4kXPMx2&w~IoFj4g3G_o$3 z7rMH-Km=zen()KcMlYxWh{F!Z2>Rey!VW5wg7h;y7hEkW0lOpo8O^_nFj1W%02>9M zyZ~wem5isRrA>3+n4J5E&@EKYXokNL0M7q@g_GWFMj(A;l)#oPd{UH5C(h5ll`&K< zbT0@D5;=MKO&EqSXRIZo>wxlnF|028@&%61xWO^IDg(JJToeeL|)4NtyJxR{-0qI{eLN6%8AL=qODMmLc&!yp5L-{W-p zDZ)YV46ya&eFGND_GWCnH+m}2O-!&NJ4ST2sWs?pIafu+|8Jxt|J(2Q@87jwqTBa8 XB0O-sP5^(!1R4_YNUm7sX~6#mdTgTq literal 17452 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
)DbxBf4TJ?rhMJSBDCle!OD4 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 Date: Sat, 27 Aug 2016 13:22:49 +0300 Subject: [PATCH 014/329] try to update the images on github --- images/drawings.odg | Bin 15614 -> 0 bytes images/idle-new.png | Bin 7082 -> 0 bytes images/idle.png | Bin 18540 -> 0 bytes images/indexing1.png | Bin 10950 -> 0 bytes images/indexing2.png | Bin 10724 -> 0 bytes images/indexing3.png | Bin 17040 -> 0 bytes images/slicing1.png | Bin 11285 -> 0 bytes images/slicing2.png | Bin 10731 -> 0 bytes images/slicing3.png | Bin 17468 -> 0 bytes 9 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/drawings.odg delete mode 100644 images/idle-new.png delete mode 100644 images/idle.png delete mode 100644 images/indexing1.png delete mode 100644 images/indexing2.png delete mode 100644 images/indexing3.png delete mode 100644 images/slicing1.png delete mode 100644 images/slicing2.png delete mode 100644 images/slicing3.png diff --git a/images/drawings.odg b/images/drawings.odg deleted file mode 100644 index 45302ef6c3cc7e1e02d22d0a026a4d3705d8f3de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15614 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 diff --git a/images/idle-new.png b/images/idle-new.png deleted file mode 100644 index 7a35a9b1a0dd87d02fa6491a06f008171d92f8f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7082 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 diff --git a/images/idle.png b/images/idle.png deleted file mode 100644 index 105f6b39287327191d2e528d36580cb9bd4fd9e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18540 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 U=(b1@qL38j)MT@7-2L-^0r}|?ZvX%Q diff --git a/images/indexing1.png b/images/indexing1.png deleted file mode 100644 index 16a8ff68c353c04a5f4ba0bff800d347ad987ac9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10950 zcmc(FWmJ?=*ER@BgGi~MARy96cQe3%^w3BMQUa3FDBTUxHS~aVONhV_N_RO-WImBql^7Vp{t zU*u8RPm|pl2Rer(p}Vf7zb31VW_`kIPXG3jIMx-kiqkhqVB+h2I z#t$8Cetv#V&f&MANX?YXlPwtt2tTXP6_|Br+e7RW^psiPL|8cD^&A{UT(#G7EF8os|Lj)2^%KdjSQuH?QCzGY4 zV^w~Bel&>__|_xMk^TMsnfEG#G^?D*7%A##Ap%)wye#b#oB!{JP<{;JCT++CMrPPMeNr($uN8gzz>sH7TVF zZ48}2XP%9(Z1JC{zTTBz>4~3QSWIAjZx2zm6Zol}D@SspNf!;)u6v;@9G}yCd%4x% zpax|;)^XN&61-9$55u@^3{n!r>)dkr;67HQ*q!Wg?Ls9l1Fe9+RPqrFcbM2b*RW!}fcR8@BhZz+4i0(E(Ld0psIXXFyAa^l6|ilot4 z$$RqJ$Hc@YhqAwOVz4PqkYUe0jTLwI^n5rIRj#vN=_xnv%u~wvSD=!;&=$yRK0uXU zG8`@zt(eSZ(H4MbRe-Zg-`?4|H&x99w(-@gSCWDFEZP+&itqDDVN=c*haWvJ>R1br z35ceC_r45K(J$K*;49^KO{KO6iycl|W9kLUMk56(pBoPXw#KROuc_-o(J=7K1n-lj z_}lMPA=ksMXqq|KwY1cR-&X9|IdGotZDVQ+GlB*%u>4BLS$t1NPZ)p<13|n%mXs4!bcjsGhpk z3|xXI^*CG(MlKOzWbX7PbN{J&sZeu&+Q?0YZ*Ax22gc~Xw-w{vx8ib=^I?SLCtKtF zUH4ao>sWk$hbA^y{V7>cx#;^4rr+e{XDRGV4$8Et%KQ zK}FrT+G~j%YIfdxIhm1^6znkA{mgUl`L}e5TP;eW2*#@t4grCw%i@9pdJR?eW)_Z- z^HU@&x50dnnxm=)K#g)zf`M1k&1e3H>&z6t%F4=auFj4s{*d`4u9L5uf`C*>4=3l% zbMIlSvKTf!+ns$p7l_Sompf@p3iUkQekK?4-p+X_2fBW=^TMFau+?HXPuT6)e7xkn z2|>vDTE_z~wx9z73eDIIsd~7b}TYV!bMd?yn0J4GW zNtAtljEBE%zHAJ2=>K_>dDB*eO+aAg@b*W}?(EM58^m$69HSn2T`cV{%^y^yx~dB5 z2OEJoH{QMWEJJYY_;>tui1SH)P%V2|A0}i&`JuVy^ z99m@DpZ_)Pi&YALn*ZhPLt8E8{eVkDqv`KR5CbiV^|v&+CV;n7!o91#DQeJ%T{3cv zs0YMXjV)d`mmhoLx=)J%wmn2gR}S3mj(vk^KVAEoZIkh2QA~9bg)%0DR3Zbv)!jc* za_Cb3EaeAmaC?F7XS$N2_hF7o9)v-OB?AIOzzX%7+`iu3@SbgXA1Xsf$@Y>ZR43o4 z{VG(Uqu2hTMlvJZ-;P99q)f?3Ey~tBHU9A7FI!=;NCkmva8AXYy^3nD2BI$Qw?EGP zt+QevJ1ftgKBbpXRY`QDk8buEr7bKe7S8ntfL)nV{b_v6i#2=+bGr+%M!}`?MeRy+ zA3>vjk%-RG(G3bq*QzfDfz50KL_`T5v$?XOUZlao7k_cI_J(b}uwcRPRQCx7Nhs-0 zQzrG!$QQkla-`J>W&pAt>h;|nyqlen508vA%{eDLSUUzr* zcHZeY8@S;|UNu$Ky7xq)hs)i*>ujv75xe5s1W^BPs?~>}d=-6DUM+38t)TBmS2nXP z*%W82_^rtD1-vC7BnvT0iqUa#?KYNdO5%HewfkY235>}p_V!o^ zIK6&j9g;|0Cb>p-@ER5~RcB}H*gxU~8BrpVQnh0vW7C)VG;-50XO+9Ti&n0_l6e!K zb{gXxqDNgw@m_v7LWA?=C@ofyHFtV}z|h~A9-Aleu%;AhEU8W$GFIA+^>uSi+EMW1 zF#=T`T2e?zE=wmuc$}iVfceC@J-px<0QP47&*!u>Zp9Rxbit- z2n6Eq=eK@)zdEC=Hm^sC<&AF z>v%6b7CS;1X3c@9$GNicNA-tzc{k4$UKa)j2M6`^XNW5CSd1ur%a$|YVr9jL*sb)C zU}*DGjVB;lGljIF{zoOHLayvmt??A^UKNUnh*X70>ShSLukL!5J`>CSs7VA>P&hd` z8MTLRT4!01x714L=schN+tV}E>?!ynurvl{Ria&qgyUAu)jQ-{4#irvtmZ6Vs&YS# zL;DG*?onHEe{<=bI{DT=hgv%O;JKxTgoMNooof5j7<*Je-m+O!AW4xWZYP^MiZDD$ zX_3^@Fv@*ar8EHu@Awa0nPCKfl9s=^=b!ZvuEKuF!spO?#@8+U7%GNWmD+WSo%fqK z=CX&W^f7^tEeJS@I2aon+n0ZDw_HPKJM?B7oF=hK}ThhlQEkt;FSs5ae1CiIY@=q}}GdrSAs>!IEEvJ8@Ph5u!S& zaQ>Xq>)c53{kuUpWD?=9HO8{TNtDu)iWuAl;PC4ks*Yk

>;SuTY|1Zh#|Z+KIi1 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 DtWW4o diff --git a/images/indexing2.png b/images/indexing2.png deleted file mode 100644 index 5536490c8a350aa23eca5ad53edcf44243ff6e6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10724 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 XB0O-sP5^(!1R4_YNUm7sX~6#mdTgTq diff --git a/images/slicing1.png b/images/slicing1.png deleted file mode 100644 index dac91a51e4c7ed2f68373e4f10b5619c8e4bea4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11285 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 diff --git a/images/slicing2.png b/images/slicing2.png deleted file mode 100644 index 30ae7b38ebe81af554f76516fdc4217a214ce443..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10731 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 Date: Sat, 27 Aug 2016 13:23:56 +0300 Subject: [PATCH 015/329] still try to fix images in github --- images/drawings.odg | Bin 0 -> 15614 bytes images/idle-new.png | Bin 0 -> 7082 bytes images/idle.png | Bin 0 -> 18540 bytes images/indexing1.png | Bin 0 -> 10950 bytes images/indexing2.png | Bin 0 -> 10724 bytes images/indexing3.png | Bin 0 -> 17040 bytes images/slicing1.png | Bin 0 -> 11285 bytes images/slicing2.png | Bin 0 -> 10731 bytes images/slicing3.png | Bin 0 -> 17468 bytes 9 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/drawings.odg create mode 100644 images/idle-new.png create mode 100644 images/idle.png create mode 100644 images/indexing1.png create mode 100644 images/indexing2.png create mode 100644 images/indexing3.png create mode 100644 images/slicing1.png create mode 100644 images/slicing2.png create mode 100644 images/slicing3.png diff --git a/images/drawings.odg b/images/drawings.odg new file mode 100644 index 0000000000000000000000000000000000000000..45302ef6c3cc7e1e02d22d0a026a4d3705d8f3de GIT binary patch literal 15614 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 literal 0 HcmV?d00001 diff --git a/images/idle-new.png b/images/idle-new.png new file mode 100644 index 0000000000000000000000000000000000000000..7a35a9b1a0dd87d02fa6491a06f008171d92f8f3 GIT binary patch literal 7082 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 literal 0 HcmV?d00001 diff --git a/images/idle.png b/images/idle.png new file mode 100644 index 0000000000000000000000000000000000000000..105f6b39287327191d2e528d36580cb9bd4fd9e1 GIT binary patch literal 18540 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 U=(b1@qL38j)MT@7-2L-^0r}|?ZvX%Q literal 0 HcmV?d00001 diff --git a/images/indexing1.png b/images/indexing1.png new file mode 100644 index 0000000000000000000000000000000000000000..16a8ff68c353c04a5f4ba0bff800d347ad987ac9 GIT binary patch literal 10950 zcmc(FWmJ?=*ER@BgGi~MARy96cQe3%^w3BMQUa3FDBTUxHS~aVONhV_N_RO-WImBql^7Vp{t zU*u8RPm|pl2Rer(p}Vf7zb31VW_`kIPXG3jIMx-kiqkhqVB+h2I z#t$8Cetv#V&f&MANX?YXlPwtt2tTXP6_|Br+e7RW^psiPL|8cD^&A{UT(#G7EF8os|Lj)2^%KdjSQuH?QCzGY4 zV^w~Bel&>__|_xMk^TMsnfEG#G^?D*7%A##Ap%)wye#b#oB!{JP<{;JCT++CMrPPMeNr($uN8gzz>sH7TVF zZ48}2XP%9(Z1JC{zTTBz>4~3QSWIAjZx2zm6Zol}D@SspNf!;)u6v;@9G}yCd%4x% zpax|;)^XN&61-9$55u@^3{n!r>)dkr;67HQ*q!Wg?Ls9l1Fe9+RPqrFcbM2b*RW!}fcR8@BhZz+4i0(E(Ld0psIXXFyAa^l6|ilot4 z$$RqJ$Hc@YhqAwOVz4PqkYUe0jTLwI^n5rIRj#vN=_xnv%u~wvSD=!;&=$yRK0uXU zG8`@zt(eSZ(H4MbRe-Zg-`?4|H&x99w(-@gSCWDFEZP+&itqDDVN=c*haWvJ>R1br z35ceC_r45K(J$K*;49^KO{KO6iycl|W9kLUMk56(pBoPXw#KROuc_-o(J=7K1n-lj z_}lMPA=ksMXqq|KwY1cR-&X9|IdGotZDVQ+GlB*%u>4BLS$t1NPZ)p<13|n%mXs4!bcjsGhpk z3|xXI^*CG(MlKOzWbX7PbN{J&sZeu&+Q?0YZ*Ax22gc~Xw-w{vx8ib=^I?SLCtKtF zUH4ao>sWk$hbA^y{V7>cx#;^4rr+e{XDRGV4$8Et%KQ zK}FrT+G~j%YIfdxIhm1^6znkA{mgUl`L}e5TP;eW2*#@t4grCw%i@9pdJR?eW)_Z- z^HU@&x50dnnxm=)K#g)zf`M1k&1e3H>&z6t%F4=auFj4s{*d`4u9L5uf`C*>4=3l% zbMIlSvKTf!+ns$p7l_Sompf@p3iUkQekK?4-p+X_2fBW=^TMFau+?HXPuT6)e7xkn z2|>vDTE_z~wx9z73eDIIsd~7b}TYV!bMd?yn0J4GW zNtAtljEBE%zHAJ2=>K_>dDB*eO+aAg@b*W}?(EM58^m$69HSn2T`cV{%^y^yx~dB5 z2OEJoH{QMWEJJYY_;>tui1SH)P%V2|A0}i&`JuVy^ z99m@DpZ_)Pi&YALn*ZhPLt8E8{eVkDqv`KR5CbiV^|v&+CV;n7!o91#DQeJ%T{3cv zs0YMXjV)d`mmhoLx=)J%wmn2gR}S3mj(vk^KVAEoZIkh2QA~9bg)%0DR3Zbv)!jc* za_Cb3EaeAmaC?F7XS$N2_hF7o9)v-OB?AIOzzX%7+`iu3@SbgXA1Xsf$@Y>ZR43o4 z{VG(Uqu2hTMlvJZ-;P99q)f?3Ey~tBHU9A7FI!=;NCkmva8AXYy^3nD2BI$Qw?EGP zt+QevJ1ftgKBbpXRY`QDk8buEr7bKe7S8ntfL)nV{b_v6i#2=+bGr+%M!}`?MeRy+ zA3>vjk%-RG(G3bq*QzfDfz50KL_`T5v$?XOUZlao7k_cI_J(b}uwcRPRQCx7Nhs-0 zQzrG!$QQkla-`J>W&pAt>h;|nyqlen508vA%{eDLSUUzr* zcHZeY8@S;|UNu$Ky7xq)hs)i*>ujv75xe5s1W^BPs?~>}d=-6DUM+38t)TBmS2nXP z*%W82_^rtD1-vC7BnvT0iqUa#?KYNdO5%HewfkY235>}p_V!o^ zIK6&j9g;|0Cb>p-@ER5~RcB}H*gxU~8BrpVQnh0vW7C)VG;-50XO+9Ti&n0_l6e!K zb{gXxqDNgw@m_v7LWA?=C@ofyHFtV}z|h~A9-Aleu%;AhEU8W$GFIA+^>uSi+EMW1 zF#=T`T2e?zE=wmuc$}iVfceC@J-px<0QP47&*!u>Zp9Rxbit- z2n6Eq=eK@)zdEC=Hm^sC<&AF z>v%6b7CS;1X3c@9$GNicNA-tzc{k4$UKa)j2M6`^XNW5CSd1ur%a$|YVr9jL*sb)C zU}*DGjVB;lGljIF{zoOHLayvmt??A^UKNUnh*X70>ShSLukL!5J`>CSs7VA>P&hd` z8MTLRT4!01x714L=schN+tV}E>?!ynurvl{Ria&qgyUAu)jQ-{4#irvtmZ6Vs&YS# zL;DG*?onHEe{<=bI{DT=hgv%O;JKxTgoMNooof5j7<*Je-m+O!AW4xWZYP^MiZDD$ zX_3^@Fv@*ar8EHu@Awa0nPCKfl9s=^=b!ZvuEKuF!spO?#@8+U7%GNWmD+WSo%fqK z=CX&W^f7^tEeJS@I2aon+n0ZDw_HPKJM?B7oF=hK}ThhlQEkt;FSs5ae1CiIY@=q}}GdrSAs>!IEEvJ8@Ph5u!S& zaQ>Xq>)c53{kuUpWD?=9HO8{TNtDu)iWuAl;PC4ks*Yk

>;SuTY|1Zh#|Z+KIi1 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 DtWW4o literal 0 HcmV?d00001 diff --git a/images/indexing2.png b/images/indexing2.png new file mode 100644 index 0000000000000000000000000000000000000000..5536490c8a350aa23eca5ad53edcf44243ff6e6e GIT binary patch literal 10724 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 XB0O-sP5^(!1R4_YNUm7sX~6#mdTgTq literal 0 HcmV?d00001 diff --git a/images/slicing1.png b/images/slicing1.png new file mode 100644 index 0000000000000000000000000000000000000000..dac91a51e4c7ed2f68373e4f10b5619c8e4bea4f GIT binary patch literal 11285 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 literal 0 HcmV?d00001 diff --git a/images/slicing2.png b/images/slicing2.png new file mode 100644 index 0000000000000000000000000000000000000000..30ae7b38ebe81af554f76516fdc4217a214ce443 GIT binary patch literal 10731 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 Date: Sat, 27 Aug 2016 13:32:15 +0300 Subject: [PATCH 016/329] support help(str) more --- handy-stuff-strings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index 2b8f89e..f6f1711 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -342,6 +342,6 @@ If you need to know more about formatting I recommend reading - Python has many string methods. Use [the documentation] (https://docs.python.org/3/library/stdtypes.html#string-methods) - when you don't rememeber something about them. + or `help(str)` when you don't rememeber something about them. - String formatting means adding other things to the middle of a string. From 85fa34be3607ac119bc1266d77111d21a482d6c4 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 27 Aug 2016 13:49:22 +0300 Subject: [PATCH 017/329] fix formatting --- handy-stuff-strings.md | 1 + 1 file changed, 1 insertion(+) diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index f6f1711..0a4e463 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -234,6 +234,7 @@ Here's some of the most commonly used string methods: >>> 'Hello-World-test'.split('-') ['Hello', 'World', 'test'] >>> + ``` - Last but not least, we can use `strip`, `lstrip` and `rstrip` to remove spaces, newlines and some other whitespace characters from From 83a8e1630348c16d16ae3e030a821ed5b3093ffa Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 27 Aug 2016 13:50:54 +0300 Subject: [PATCH 018/329] lstrip does not strip from the right side --- handy-stuff-strings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index 0a4e463..8a85b52 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -238,7 +238,7 @@ Here's some of the most commonly used string methods: - Last but not least, we can use `strip`, `lstrip` and `rstrip` to remove spaces, newlines and some other whitespace characters from - the end of a string. `lstrip` strips from the left side, `lstrip` + the end of a string. `lstrip` strips from the left side, `rstrip` strips from the right side and `strip` strips from both sides. ```py From 1af24ac0d9415f81b9f42c4adbf7b43dffd2a492 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 27 Aug 2016 20:27:52 +0300 Subject: [PATCH 019/329] add todo list --- TODO.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 TODO.md diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..6b06c00 --- /dev/null +++ b/TODO.md @@ -0,0 +1,6 @@ +# Things that are not in the tutorial yet + +- Reading and writing files. +- Exceptions. +- Custom classes part 2. Inheritance, multiple inheritance, diamond + diagrams, custom exceptions. From ff00313d86a5ba5c7158ba4bbba5d5d8b1d4c455 Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 9 Sep 2016 16:29:06 +0300 Subject: [PATCH 020/329] little stuff --- if.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/if.md b/if.md index 713aab5..be9913e 100644 --- a/if.md +++ b/if.md @@ -34,7 +34,7 @@ It's raining! The prompt changed from `>>>` to `...`. It meant that Python was expecting me to keep typing. When I was done, I just pressed Enter -twice. My code was execute and the prompt was restored to `>>>`. IDLE +twice. My code was executed and the prompt went back to `>>>`. IDLE does this a bit differently, so if you use IDLE, running this example code looks more like this: @@ -99,9 +99,9 @@ Running from a terminal looks like this: It's raining! you@YourComputer:~/Desktop$ -From now on, if a code example starts with `>>>` run it on the +From now on, **if a code example starts with `>>>` run it on the interactive prompt, and if it doesn't, write it to a file and run the -file. +file**. ## Using else From 323a90e4d4cc75232e6193e2be02ed724c4de54f Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 9 Sep 2016 16:37:49 +0300 Subject: [PATCH 021/329] explain indentation more --- if.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/if.md b/if.md index be9913e..4e6004e 100644 --- a/if.md +++ b/if.md @@ -34,9 +34,14 @@ It's raining! The prompt changed from `>>>` to `...`. It meant that Python was expecting me to keep typing. When I was done, I just pressed Enter -twice. My code was executed and the prompt went back to `>>>`. IDLE -does this a bit differently, so if you use IDLE, running this example -code looks more like this: +twice. My code was executed and the prompt went back to `>>>`. + +An important thing to notice is that the line with a print is +**indented**. You can press the tab key, or if it doesn't work +just press space a few times. + +IDLE does this a bit differently, so if you use IDLE, running the +example code looks more like this: ```py >>> its_raining = True @@ -55,7 +60,8 @@ just press Ctrl+N. ![New File in IDLE](images/idle-new.png) If you don't use IDLE, please take the time to -[set up your editor correctly](editor-setup.md). +[set up your editor correctly](editor-setup.md). When you're done your +editor should give you four spaces every time you press tab. Create a file called `rain.py`, and type the following content into it: From dcc959ce3fbeda1f2ae24763c12f7441a5d8b9ea Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 9 Sep 2016 16:40:23 +0300 Subject: [PATCH 022/329] dont say the same thing twice --- if.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/if.md b/if.md index 4e6004e..6cc154a 100644 --- a/if.md +++ b/if.md @@ -73,10 +73,6 @@ if its_raining: The file extension is `.py`, which is short for Python. -The line with a print is **indented** by four spaces. Indentation is -important in Python. If the indentation is not consistent, we may get -an error or our program may do something else than we wanted it to. - Now run the rain program. Most editors (including IDLE) will run your code when you press F5. If your editor doesn't, run it from PowerShell, command prompt or terminal. You probably need to first go to wherever From fa3323659ada1f7055f365ada2252a571e7f81fc Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 10 Sep 2016 15:38:49 +0300 Subject: [PATCH 023/329] explain functions and keywords --- if.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/if.md b/if.md index 6cc154a..31f9597 100644 --- a/if.md +++ b/if.md @@ -53,6 +53,28 @@ It's raining! >>> ``` +But why is that `if its_raining` instead of `if(its_raining)`? + +Earlier we learned that `if` is a **keyword**. + +```py +>>> if = 123 + File "", line 1 + if = 123 + ^ +SyntaxError: invalid syntax +>>> +``` + +Functions like `print` need `()` after their name to work. But `if` is +a keyword, not a function, so it doesn't need `()`. Python has separate +functions and keywords because it's possible to create custom functions, +but it's not possible to create custom keywords. That's why keywords are +usually used for "magic" things that would be difficult to do with just +functions. + +## Storing code in files + At this point it's easier to put your code into a file and use it there. If you use IDLE, go to File at top left and select New File, or just press Ctrl+N. From 93d6c7b9e10d29fe765a7512bd13cbab4571fd92 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 10 Sep 2016 15:40:37 +0300 Subject: [PATCH 024/329] fix typo --- if.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/if.md b/if.md index 31f9597..2d690f0 100644 --- a/if.md +++ b/if.md @@ -98,7 +98,7 @@ The file extension is `.py`, which is short for Python. Now run the rain program. Most editors (including IDLE) will run your code when you press F5. If your editor doesn't, run it from PowerShell, command prompt or terminal. You probably need to first go to wherever -you saved your file. with `cd`. For example, if the file is on your +you saved your file with `cd`. For example, if the file is on your desktop, type `cd Desktop` before running the file. Running from IDLE looks like this: From b5b9ade9682d0f0b7f3c020f73cb85453af962bb Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 10 Sep 2016 15:48:38 +0300 Subject: [PATCH 025/329] be clearlier --- loops.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/loops.md b/loops.md index 16b69d3..bd67cbc 100644 --- a/loops.md +++ b/loops.md @@ -256,6 +256,8 @@ Or if you want to clear a list, just use the `.clear()` list method: Then rewrite the rest of the program using a for loop. 2. Make the program ask the username and password over and over again + until the user enters them correctly. + 3. Can you limit the number of attempts to 3? *** From 7a55fc8b87a0d351d240062b936b74faf09b7e83 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 24 Sep 2016 18:22:36 +0300 Subject: [PATCH 026/329] case-sEnsItivItY --- variables.md | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/variables.md b/variables.md index aa11ab0..0e93f4b 100644 --- a/variables.md +++ b/variables.md @@ -2,13 +2,11 @@ ## Variables -Variables are easy to understand. They simply **contain data**. Actually -they [point to data](https://www.youtube.com/watch?v=_AEJHKGk9ns), but -think about them as data containers for now. +Variables are easy to understand. They simply **point to data**. ```py ->>> a = 1 # create a variable called a and assign 1 to it ->>> a # get the value of a and let Python echo it +>>> a = 1 # create a variable called a that points to 1 +>>> a # get the value that a points to 1 >>> ``` @@ -16,7 +14,7 @@ think about them as data containers for now. We can also change the value of a variable after setting it. ```py ->>> a = 2 +>>> a = 2 # make it point to 2 instead >>> a 2 >>> @@ -47,6 +45,21 @@ use underscores. >>> ``` +Variable names are case-sensitive, like many other things in Python. + +```py +>>> thing = 1 +>>> THING = 2 +>>> thIng = 3 +>>> thing +1 +>>> THING +2 +>>> thIng +3 +>>> +``` + Python also has some words that cannot be used as variable names because they have a special meaning. They are called **keywords**, and you can run `help('keywords')` to see the full list if you want to. From 92f403dcf530437178d6bbe26d38aeb234e349e7 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 24 Sep 2016 18:50:10 +0300 Subject: [PATCH 027/329] little things --- README.md | 9 ++- handy-stuff-strings.md | 157 +++++++++++++++-------------------------- 2 files changed, 64 insertions(+), 102 deletions(-) diff --git a/README.md b/README.md index fb41aff..e9971ce 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,14 @@ it.** 6. [Using functions](using-functions.md) 7. [If, else and elif](if.md) 8. [ThinkPython: Lists](lists.md) -9. [Loops](loops.md) +9. [Handy stuff with strings](handy-stuff-strings.md) +10. [Loops](loops.md) + +Parts of this tutorial that aren't ready to be added to the rest of it +yet: + +- [Defining functions](defining-functions.md) +- [Classes](classes.md) Other things this tutorial comes with: diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index 8a85b52..24ac6ff 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -25,7 +25,7 @@ We also know how to repeat them multiple times. >>> ``` -Python strings are **immutable**. That's basically a fancy way to say that +Python strings are **immutable**. That's just a fancy way to say that they cannot be changed in-place, and you need to create a new string to change them. Even `some_string += another_string` creates a new string. Python will treat that as `some_string = some_string + another_string`, @@ -87,7 +87,7 @@ TypeError: 'str' object does not support item assignment ``` There's also a step argument we can give to our slices, but I'm not -going to talk about it in this tutorial. +going to talk about it now. ## Indexing @@ -107,6 +107,20 @@ Programming starts at zero. Indexing strings also starts at zero. The first character is `our_string[0]`, the second character is `our_string[1]`, and so on. +```py +>>> our_string[0] +'H' +>>> our_string[1] +'e' +>>> our_string[2] +'l' +>>> our_string[3] +'l' +>>> our_string[4] +'o' +>>> +``` + So string indexes work like this: ![Indexing with non-negative values](images/indexing1.png) @@ -151,113 +165,53 @@ True Python's strings have many useful methods. [The official documentation] (https://docs.python.org/3/library/stdtypes.html#string-methods) covers them all, but I'm going to just show some of the most commonly used ones -briefly. **You don't need to remember all of these string methods, just -learn to use the link above so you can find them when you need them.** -Python also comes with built-in documentation about the string methods. -You can run `help(str)` to read it. +briefly. Python also comes with built-in documentation about the string +methods. You can run `help(str)` to read it. Remember that nothing can modify strings in-place. Most string methods return a new string, but things like `our_string = our_string.upper()` still work because the new string is assigned to the old variable. -Here's some of the most commonly used string methods: - -- `upper` and `lower` can be used for converting to uppercase and - lowercase. - - ```py - >>> our_string.upper() - 'HELLO WORLD!' - >>> our_string.lower() - 'hello world!' - >>> - ``` - -- To check if a string starts or ends with another string we could just - slice the string and compare with to the slice. - - ```py - >>> our_string[:5] == 'Hello' - True - >>> our_string[-2:] == 'hi' - False - >>> - ``` - - But that gets a bit complicated if we don't know the length of the - substring beforehand. - - ```py - >>> substring = 'Hello' - >>> our_string[:len(substring)] == substring - True - >>> substring = 'hi' - >>> our_string[-len(substring):] == substring - False - >>> - ``` - - That's why it's recommended to use `startswith` and `endswith`: - - ```py - >>> our_string.startswith('Hello') - True - >>> our_string.endswith('hi') - False - >>> - ``` - -- If we need to find out where a substring is located, we can do that - with `index`: - - ```py - >>> our_string.index('World') - 6 - >>> our_string[6:] - 'World!' - >>> - ``` - -- The `join` method joins a list of other strings. We'll talk more about - lists later. - - ```py - >>> '-'.join(['Hello', 'World', 'test']) - 'Hello-World-test' - >>> - ``` - - The `split` method is the opposite of joining, it splits a string to - a list. - - ```py - >>> 'Hello-World-test'.split('-') - ['Hello', 'World', 'test'] - >>> - ``` - -- Last but not least, we can use `strip`, `lstrip` and `rstrip` to - remove spaces, newlines and some other whitespace characters from - the end of a string. `lstrip` strips from the left side, `rstrip` - strips from the right side and `strip` strips from both sides. +Here's an example with some of the most commonly used string methods: - ```py - >>> ' hello 123 \n '.lstrip() - 'hello 123 \n ' - >>> ' hello 123 \n '.rstrip() - ' hello 123' - >>> ' hello 123 \n '.strip() - 'hello 123 - >>> - ``` - -It's also possible to combine string methods with slicing and other -string methods: +Here's some of the most commonly used string methods: ```py ->>> our_string.upper()[:7].startswith('HELLO') +>>> our_string.upper() +'HELLO WORLD!' +>>> our_string.lower() +'hello world!' +>>> our_string.startswith('Hello') True ->>> +>>> our_string.endswith('World!') +True +>>> our_string.endswith('world!') # Python is case-sensitive +False +>>> ' hello 123 \n '.lstrip() # left strip +'hello 123 \n ' +>>> ' hello 123 \n '.rstrip() # right strip +' hello 123' +>>> ' hello 123 \n '.strip() # strip from both sides +'hello 123' +>>> our_string.ljust(30, '-') +'Hello World!------------------' +>>> our_string.rjust(30, '-') +'------------------Hello World!' +>>> our_string.center(30, '-') +'---------Hello World!---------' +>>> our_string.count('o') # it contains two o's +2 +>>> our_string.index('o') # the first o is our_string[4] +4 +>>> our_string.rindex('o') # the last o is our_string[7] +7 +>>> '-'.join(['hello', 'world', 'test']) +'hello-world-test' +>>> 'hello-world-test'.split('-') +['hello', 'world', 'test'] +>>> our_string.upper()[3:].startswith('LO WOR') # combining multiple things +True +>>> ``` ## String formatting @@ -303,7 +257,8 @@ they are just different. The two ways are: - `%s`-formatting, also known as printf-formatting and old-style formatting. This has less features than `.format()`-formatting, but `'Hello %s.' % name` is shorter and faster to type than - `'Hello {}.'.format(name)`. + `'Hello {}.'.format(name)`. I like to use printf-formatting for simple + things and `.format` when I need more powerful features. ```py >>> "Hello %s." % name From d00265d7f25ac6efb0cd2ec4d24b488e4d3149dc Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 24 Sep 2016 19:04:48 +0300 Subject: [PATCH 028/329] return vs print, little fixes --- defining-functions.md | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/defining-functions.md b/defining-functions.md index 8c0daa1..d8a529f 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -371,9 +371,37 @@ None >>> ``` +## Return or print? + +There's two ways to output information from functions. They can print +something or they can return something. So, should we print or return? + +Most of the time returning makes functions much easier to use. Think +about the `input()` function. It asks the user to enter something, and +then the user enters something and that value is returned. If the input +function would print the value instead of returning it, things like +`name = input("Name: ")` wouldn't work and assigning the output to a +variable would be much more difficult. Printing things is fine when you +know that you'll only need to print the result and you'll never need to +assign it to a variable. + +## Summary + +- Functions are a way to write code once, and then use that same + code in multiple places. +- Variables inside functions are **locals**, and variables outside + functions are **globals**. Functions can access all variables, but + by default, they can only create and change the value of local + variables. +- Functions can take **arguments** and they can behave differently + depending on what arguments they get. Functions can also + **return** one value. Returning also ends the function immediately. +- Return a value instead of printing it if you need to do something with + it after calling the function. + ## Exercises -**There is a lot to learn with functions, and I don't expect you to +**There is a lot to learn about functions, and I don't expect you to learn everything at once.** However, there's also lots of free Python exercises about defining functions you can do. Do many of them and spend a lot of time with them, so you'll get used to defining From 45fae1f3195e2d395833d41298c2478cf137502f Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 25 Sep 2016 13:20:22 +0300 Subject: [PATCH 029/329] explain variables more --- images/drawings.odg | Bin 15614 -> 14444 bytes images/variables1.png | Bin 0 -> 3190 bytes images/variables2.png | Bin 0 -> 3733 bytes variables.md | 45 +++++++++++++++++++++++++++++++++++++----- 4 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 images/variables1.png create mode 100644 images/variables2.png diff --git a/images/drawings.odg b/images/drawings.odg index 45302ef6c3cc7e1e02d22d0a026a4d3705d8f3de..912cba8853649dc41efa911d8aa783014744055c 100644 GIT binary patch delta 10648 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 literal 0 HcmV?d00001 diff --git a/variables.md b/variables.md index 0e93f4b..2981113 100644 --- a/variables.md +++ b/variables.md @@ -6,20 +6,43 @@ Variables are easy to understand. They simply **point to data**. ```py >>> a = 1 # create a variable called a that points to 1 ->>> a # get the value that a points to +>>> b = 2 # create another variable +>>> a # get the value that the variable points to 1 +>>> b +2 >>> ``` +Let's draw a diagram of these variables. + +![Variable diagram](images/variables1.png) + We can also change the value of a variable after setting it. ```py ->>> a = 2 # make it point to 2 instead +>>> a = 2 # make a point to 2 instead of 1 >>> a 2 >>> ``` +So now our diagram looks like this: + +![Variable diagram](images/variables2.png) + +Setting a variable to another variable gets the value of the other +variable and sets the first variable to point to that value. + +```py +>>> a = 1 +>>> b = a # this makes b point to 1, not a +>>> a = 5 +>>> b # b didn't change when a changed +1 +>>> +``` + Trying to access a variable that is not defined is an error. ```py @@ -30,14 +53,26 @@ NameError: name 'thingy' is not defined >>> ``` +Variables are simple to understand, but there's a few details that we +need to keep in mind: + +- Variables always point to a value, **they never point to other + variables**. That's why the arrows in our diagrams always go left + to right. +- Multiple variables can point to the same value, but one variable + cannot point to multiple values. + +- The values that variables point to can point to other values also. + We'll learn more about that when we'll talk about [lists](lists.md). + Variables are an important part of most programming languages, and they allow programmers to write much larger programs than they could write without variables. Variable names can be multiple characters long. They can contain -uppercase characters, numbers and some other characters, but most of -the time you should use simple, lowercase variable names. You can also -use underscores. +uppercase characters, numbers and some other characters, but most of the +time you should use simple, lowercase variable names. You can also use +underscores. ```py >>> number_one = 1 From 7a5b49c50b18707c290d14ffc3d282d67460eaeb Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 25 Sep 2016 21:31:07 +0300 Subject: [PATCH 030/329] add my stuff --- TODO.md | 66 ++++++++++++++++++++++++++++++++++++--- defining-functions.md | 6 ++++ getting-started.md | 2 -- handy-stuff-strings.md | 6 ++++ if.md | 2 -- installing-python.md | 2 -- introduction.md | 1 - lists.md | 2 -- loops.md | 1 - the-way-of-the-program.md | 2 -- todo.md | 4 --- using-functions.md | 2 -- variables.md | 2 -- 13 files changed, 73 insertions(+), 25 deletions(-) delete mode 100644 todo.md diff --git a/TODO.md b/TODO.md index 6b06c00..b92f306 100644 --- a/TODO.md +++ b/TODO.md @@ -1,6 +1,62 @@ -# Things that are not in the tutorial yet +# Stuff that will (hopefully) be added to this tutorial -- Reading and writing files. -- Exceptions. -- Custom classes part 2. Inheritance, multiple inheritance, diamond - diagrams, custom exceptions. +This tutorial is not complete. It still needs: + +- Dictionaries and tuples (can be in the same thing since tuples + are needed for dict keys) +- Explain `for a, b in thing` somewhere +- **More exercises and examples everywhere!** +- reading and writing files + - first of all: what are files, directories/folders and paths + - print(..., file=thefile), not thefile.write(...) + - show how to iterate over the file and .read() it + - why .rstrip('\n') instead of .strip() + - files remember their position, reading the same file object twice +- modules + - just files and folders, have a look at Python's lib directory + - "batteries included" filosofy + - briefly introduce some of the most commonly used standard library + modules: + - math + - it's not a file, what is it? + - sys + - sys.exit() vs exit() + - time + - os, os.path, subprocess + - random + - webbrowser + - explain even more briefly and link to documentation/tutorials: + - configparser + - textwrap + - collections, itertools, functools + - traceback + - types + - warnings + - json + - link to third party modules: + - appdirs + - requests +- Exceptions +- explain bool(x) and why it matters +- classes part 2 + - non-public `_variables` + - singular inheritance, inheritance of built-in classes + - using super +- quick overview of some of the most useful built-in functions and classes + - range + - zip + - classmethod and staticmethod +- iterables and iterators: something most Python programmers need to be aware of +- classes part 3: multiple inheritance + - an advanced thing + - built-in classes don't use it + - diamond diagrams, why to use super() +- last chapter: "What should I do now?" links to other resources + - GUI programming tutorials + - easygui + - tkinter in effbot (warn the readers about star imports) + - pyqt5 in zetcode + - gtk+ 3 in readthedocs + - a pygame tutorial + - David Beazley's metaprogramming and other talks + - a regex tutorial diff --git a/defining-functions.md b/defining-functions.md index d8a529f..5f36426 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -469,3 +469,9 @@ functions. defining functions. Answers for the first and second exercise are [here](answers.md). + +*** + +You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). + +[Back to the list of contents](README.md) diff --git a/getting-started.md b/getting-started.md index e9a19f3..057a89b 100644 --- a/getting-started.md +++ b/getting-started.md @@ -202,6 +202,4 @@ Powers are calculated before `*` and `/`, but after `()`. You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Previous](installing-python.md) | -[Next](the-way-of-the-program.md) | [Back to the list of contents](README.md) diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index 24ac6ff..3da39a7 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -301,3 +301,9 @@ If you need to know more about formatting I recommend reading or `help(str)` when you don't rememeber something about them. - String formatting means adding other things to the middle of a string. + +*** + +You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). + +[Back to the list of contents](README.md) diff --git a/if.md b/if.md index 2d690f0..f1e9d1a 100644 --- a/if.md +++ b/if.md @@ -281,6 +281,4 @@ The answers are [here](answers.md). You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Previous](using-functions.md) | -[Next](lists.md) | [Back to the list of contents](README.md) diff --git a/installing-python.md b/installing-python.md index eeac8df..3800611 100644 --- a/installing-python.md +++ b/installing-python.md @@ -105,6 +105,4 @@ Now you should have Python installed, and you should be able run it. You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Previous](introduction.md) | -[Next](getting-started.md) | [Back to the list of contents](README.md) diff --git a/introduction.md b/introduction.md index 0d7b9e2..402e095 100644 --- a/introduction.md +++ b/introduction.md @@ -42,5 +42,4 @@ have learned, and create something with it. You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Next](installing-python.md) | [Back to the list of contents](README.md) diff --git a/lists.md b/lists.md index 0545067..e516342 100644 --- a/lists.md +++ b/lists.md @@ -93,6 +93,4 @@ we haven't talked about that yet. You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Previous](if.md) | -[Next](loops.md) | [Back to the list of contents](README.md) diff --git a/loops.md b/loops.md index bd67cbc..ca08947 100644 --- a/loops.md +++ b/loops.md @@ -264,5 +264,4 @@ Or if you want to clear a list, just use the `.clear()` list method: You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Previous](lists.md) | [Back to the list of contents](README.md) diff --git a/the-way-of-the-program.md b/the-way-of-the-program.md index 5ccc8a5..fd0f28e 100644 --- a/the-way-of-the-program.md +++ b/the-way-of-the-program.md @@ -40,6 +40,4 @@ learned everything. You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Previous](getting-started.md) | -[Next](variables.md) | [Back to the list of contents](README.md) diff --git a/todo.md b/todo.md deleted file mode 100644 index e849d18..0000000 --- a/todo.md +++ /dev/null @@ -1,4 +0,0 @@ -- Lists and tuples -- Loops (maybe move while loops here?) -- Defining functions -- More exercises! diff --git a/using-functions.md b/using-functions.md index 269096c..fdf5c55 100644 --- a/using-functions.md +++ b/using-functions.md @@ -160,6 +160,4 @@ Enter something: hello You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Previous](variables.md) | -[Next](if.md) | [Back to the list of contents](README.md) diff --git a/variables.md b/variables.md index 2981113..8bc682e 100644 --- a/variables.md +++ b/variables.md @@ -257,6 +257,4 @@ what you are doing. We'll learn more about it later. You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Previous](the-way-of-the-program.md) | -[Next](using-functions.md) | [Back to the list of contents](README.md) From c5f0e81eb53b7d9bdd6203401d02e78248f66f2a Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 25 Sep 2016 21:31:17 +0300 Subject: [PATCH 031/329] explain files --- files.md | 310 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 310 insertions(+) create mode 100644 files.md diff --git a/files.md b/files.md new file mode 100644 index 0000000..03045d3 --- /dev/null +++ b/files.md @@ -0,0 +1,310 @@ +# Managing files in Python + +## What are files, directories and paths? + +These are simple thing that many computer users already know, but I'll go +through them just to make sure you know them also. + +#### Files + +- Each file has a **name**, like `hello.py`, `mytext.txt` or + `coolimage.png`. Usually the name ends with an **extension** that + describes the content, like `py` for Python, `txt` for text or `png` + for "portable network graphic". +- With just names identifying the files, it wouldn't be possible to have + two files with the same name. That's why files also have a + **location**. We'll talk more about this in a moment. +- Files have **content** that consists of + [8-bit bytes](https://www.youtube.com/watch?v=Dnd28lQHquU). + +#### Directories/folders + +Directories are a way to group files. They also have a name and a location +like files, but instead of containing data directly like files do they +contain other files and directories. + +#### Paths + +Directories and files have a path, like `C:\Users\me\hello.py`. That just +means that there's a folder called `C:`, and inside it there's a folder +called `Users`, and inside it there's a folder called `me` and inside it +there's a `hello.py`. Like this: + +``` +C: +└── Users + └── me + └── hello.py +``` + +`C:\Users\me\hello.py` is an **absolute path**. But there are also +**relative paths**. For example, if you're in `C:\Users`, `me\hello.py` +is same as `C:\Users\me\hello.py`. The place we are in is sometimes +called **current directory**, **working directory** or +**current working directory**. + +So far we've talked about Windows paths, but not all computers run +Windows. For example, an equivalent to `C:\Users\me\hello.py` is +`/home/me/hello.py` on my Ubuntu, and if I'm in `/home`, `me/hello.py` +is same as `/home/me/hello.py`. + +``` +/ +└── home + └── me + └── hello.py +``` + +## Writing to a file + +Let's create a file and write a hello world to it. + +```py +>>> with open('hello.txt', 'w') as f: +... print("Hello World!", file=f) +... +>>> +``` + +Doesn't seem like it did anything. But actually it created a `hello.txt` +somewhere on your system. On Windows it's probably in `C:\Users\YourName`, +and on most other systems it should be in `/home/yourname`. You can open +it with notepad or any other plain text editor your system comes with. + +So how does that code work? + +First of all, we open a path with `open`, and it gives us a Python file +object that is assigned to the variable `f`. + +```py +>>> f +<_io.TextIOWrapper name='hello.txt' mode='w' encoding='UTF-8'> +>>> +``` + +So the first argument we passed to `open` was the path we wanted to write. +Our path was more like a filename than a path, so the file ended up in +the current working directory. + +The second argument was `w`... but where the heck does that come from? +`w` is short for write, and that just means that we'll create a new file. +There's some other modes you can use also: + +| Mode | Short for | Meaning | +|-------|-----------|-----------------------------------------------------------------------| +| `r` | read | Read from an existing file. | +| `w` | write | Write to a file. **If the file exists, its old content is removed.** | +| `a` | append | Write to the end of a file, and keep the old content. | + +The `w` and `a` modes create a new file if it exists already, but trying +to read from a non-existent file is an error. + +But what is that `with ourfile as f` crap? That's just a fancy way to make +sure that the file gets closed, no matter what happens. As you can see, +the file was indeed closed. + +```py +>>> f.closed +True +>>> +``` + +When we had opened the file we could just print to it. The print is just +like any other print, but we also need to specify that we want to print +to the file we opened using `file=f`. + +## Reading from files + +After opening a file with the `r` mode you can for loop over it, just +like it was a list. So let's go ahead and read everything in the file +we created to a list of lines. + +```py +>>> lines = [] +>>> with open('hello.txt', 'r') as f: +... for line in f: +... lines.append(line) +... +>>> lines +['Hello World!\n'] +>>> +``` + +But why is there a `\n` at the end of our hello world? + +`\n` means newline. Note that it needs to be a backslash, so `/n` +doesn't have any special meaning like `\n` has. When we wrote the file +with print it actually added a `\n` to the end of it. It's good practise +to end the content of files with a newline character, but it's not +necessary. + +So how does that work if we have more than one line in the file? + +```py +>>> with open('hello.txt', 'w') as f: +... print("Hello one!", file=f) +... print("Hello two!", file=f) +... print("Hello three!", file=f) +... +>>> lines = [] +>>> with open('hello.txt', 'r') as f: +... for line in f: +... lines.append(line) +... +>>> lines +['Hello one!\n', 'Hello two!\n', 'Hello three!\n'] +>>> +``` + +There we go, each of our lines now ends with a `\n`. When we for +loop over the file it's divided into lines based on where the `\n` +characters are, not based on how we printed to it. + +But how to get rid of that `\n`? The `rstrip` +[string method](handy-stuff-strings.md#string-methods) is great +for this: + +```py +>>> stripped = [] +>>> for line in lines: +... stripped.append(line.rstrip('\n')) +... +>>> stripped +['Hello one!', 'Hello two!', 'Hello three!'] +>>> +``` + +It's also possible to read lines one by one. Files have a +`readline()` method that reads the next line, and returns `''` +if we're at the end of the file. + +**TODO:** example of readline() + +There's only one confusing thing about reading files. If you try +to read it twice you'll find out that it only gets read once: + +```py +>>> first = [] +>>> second = [] +>>> with open('hello.txt', 'r') as f: +... for line in f: +... first.append(line) +... for line in f: +... second.append(line) +... +>>> first +['Hello one!\n', 'Hello two!\n', 'Hello three!\n'] +>>> second +[] +>>> +``` + +But if we open the file again, everything works. + +```py +>>> first = [] +>>> second = [] +>>> with open('hello.txt', 'r') as f: +... for line in f: +... first.append(line) +... +>>> with open('hello.txt', 'r') as f: +... for line in f: +... second.append(line) +... +>>> first +['Hello one!\n', 'Hello two!\n', 'Hello three!\n'] +>>> second +['Hello one!\n', 'Hello two!\n', 'Hello three!\n'] +>>> +``` + +Usually it's best to just read the file once, and use the +content you have read from it multiple times. + +As you can see, files behave a lot like lists. The `join()` +string method joins together strings from a list, but we can +also use it to join together lines of a file: + +```py +>>> with open('hello.txt', 'r') as f: +... full_content = ''.join(f) +... +>>> full_content +'Hello one!\nHello two!\nHello three!\n' +>>> +``` + +But if you need all of the content as a string, you can just +use the `read()` method. + +```py +>>> with open('hello.txt', 'r') as f: +... full_content = f.read() +... +>>> full_content +'Hello one!\nHello two!\nHello three!\n' +>>> +``` + +**TODO:** Explain paths and \\. + +## Example: File viewer + +The following program prints the contents of files: + +```py +while True: + filename = input("Filename or path, or nothing at all to exit: ") + if filename == '': + break + + with open(filename, 'r') as f: + # We could read the whole file at once, but this is + # faster if the file is very large. + for line in f: + print(line.rstrip('\n')) +``` + +## Example: User information + +This program stores the user's username and password in a file. +Plain text files are definitely not a good way to store usernames +and passwords, but this is just an example. + +```py +# Ask repeatedly until the user answers 'y' or 'n'. +while True: + answer = input("Have you been here before? (y/n) ") + if answer == 'Y' or answer == 'y': + been_here_before = True + break + elif answer == 'N' or answer == 'n': + been_here_before = False + break + else: + print("Enter 'y' or 'n'.") + +if been_here_before: + # Read username and password from a file. + with open('userinfo.txt', 'r') as f: + username = f.readline().rstrip('\n') + password = f.readline().rstrip('\n') + + if input("Username: ") != username: + print("Wrong username!") + elif input("Password: ") != password: + print("Wrong password!") + else: + print("Correct password, welcome!") + +else: + # Write username and password to a file. + username = input("Username: ") + password = input("Password: ") + with open('userinfo.txt', 'w') as f: + print(username, file=f) + print(password, file=f) + + print("Done! Now run this program again and select 'y'.") +``` From 0c321c615c65cc299f42f410f17c18c178998546 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 25 Sep 2016 21:32:11 +0300 Subject: [PATCH 032/329] add stuff to files.md and files.md to README --- README.md | 1 + files.md | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/README.md b/README.md index e9971ce..18fb17d 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ it.** 8. [ThinkPython: Lists](lists.md) 9. [Handy stuff with strings](handy-stuff-strings.md) 10. [Loops](loops.md) +11. [Files](files.md) Parts of this tutorial that aren't ready to be added to the rest of it yet: diff --git a/files.md b/files.md index 03045d3..37fb4b1 100644 --- a/files.md +++ b/files.md @@ -308,3 +308,9 @@ else: print("Done! Now run this program again and select 'y'.") ``` + +*** + +You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). + +[Back to the list of contents](README.md) From a4f88a88801ae387103588317309fbbd4ee951aa Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 25 Sep 2016 21:33:26 +0300 Subject: [PATCH 033/329] little fix --- files.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files.md b/files.md index 37fb4b1..86bd781 100644 --- a/files.md +++ b/files.md @@ -296,7 +296,7 @@ if been_here_before: elif input("Password: ") != password: print("Wrong password!") else: - print("Correct password, welcome!") + print("Correct username and password, welcome!") else: # Write username and password to a file. From 2c0317f5b18bb3c6d819d8c63bfd51df3e4c7efa Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 26 Sep 2016 20:38:48 +0300 Subject: [PATCH 034/329] files and modules --- README.md | 4 +- TODO.md | 44 +---- files.md | 55 +++++- modules.md | 483 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 544 insertions(+), 42 deletions(-) create mode 100644 modules.md diff --git a/README.md b/README.md index 18fb17d..e14b33b 100644 --- a/README.md +++ b/README.md @@ -34,11 +34,12 @@ it.** 9. [Handy stuff with strings](handy-stuff-strings.md) 10. [Loops](loops.md) 11. [Files](files.md) +12. [Modules](modules.md) +13. [Defining functions](defining-functions.md) Parts of this tutorial that aren't ready to be added to the rest of it yet: -- [Defining functions](defining-functions.md) - [Classes](classes.md) Other things this tutorial comes with: @@ -47,6 +48,7 @@ Other things this tutorial comes with: - [Contact me](contact-me.md) - [Setting up a text editor](editor-setup.md) - [Answers for the exercises](answers.md) +- [The TODO list](TODO.md) I'm Akuli and I have written most of this tutorial, but the following people have helped me with it: diff --git a/TODO.md b/TODO.md index b92f306..27c3c37 100644 --- a/TODO.md +++ b/TODO.md @@ -6,51 +6,19 @@ This tutorial is not complete. It still needs: are needed for dict keys) - Explain `for a, b in thing` somewhere - **More exercises and examples everywhere!** -- reading and writing files - - first of all: what are files, directories/folders and paths - - print(..., file=thefile), not thefile.write(...) - - show how to iterate over the file and .read() it - - why .rstrip('\n') instead of .strip() - - files remember their position, reading the same file object twice -- modules - - just files and folders, have a look at Python's lib directory - - "batteries included" filosofy - - briefly introduce some of the most commonly used standard library - modules: - - math - - it's not a file, what is it? - - sys - - sys.exit() vs exit() - - time - - os, os.path, subprocess - - random - - webbrowser - - explain even more briefly and link to documentation/tutorials: - - configparser - - textwrap - - collections, itertools, functools - - traceback - - types - - warnings - - json - - link to third party modules: - - appdirs - - requests - Exceptions - explain bool(x) and why it matters - classes part 2 - non-public `_variables` - singular inheritance, inheritance of built-in classes - using super +- no classes part 3 with multiple inheritance, it's not something people need - quick overview of some of the most useful built-in functions and classes - range - zip - classmethod and staticmethod -- iterables and iterators: something most Python programmers need to be aware of -- classes part 3: multiple inheritance - - an advanced thing - - built-in classes don't use it - - diamond diagrams, why to use super() +- iterables and iterators: something most Python programmers need to be + aware of - last chapter: "What should I do now?" links to other resources - GUI programming tutorials - easygui @@ -60,3 +28,9 @@ This tutorial is not complete. It still needs: - a pygame tutorial - David Beazley's metaprogramming and other talks - a regex tutorial + + +## Fix these + +- the chapter about installing python should mention that python 2 and 3 + can be and often are installed at the same time diff --git a/files.md b/files.md index 86bd781..7d5eb3b 100644 --- a/files.md +++ b/files.md @@ -5,7 +5,7 @@ These are simple thing that many computer users already know, but I'll go through them just to make sure you know them also. -#### Files +### Files - Each file has a **name**, like `hello.py`, `mytext.txt` or `coolimage.png`. Usually the name ends with an **extension** that @@ -17,13 +17,13 @@ through them just to make sure you know them also. - Files have **content** that consists of [8-bit bytes](https://www.youtube.com/watch?v=Dnd28lQHquU). -#### Directories/folders +### Directories/folders Directories are a way to group files. They also have a name and a location like files, but instead of containing data directly like files do they contain other files and directories. -#### Paths +### Paths Directories and files have a path, like `C:\Users\me\hello.py`. That just means that there's a folder called `C:`, and inside it there's a folder @@ -178,7 +178,16 @@ It's also possible to read lines one by one. Files have a `readline()` method that reads the next line, and returns `''` if we're at the end of the file. -**TODO:** example of readline() +```py +>>> with open('hello.txt', 'r') as f: +... first_line = f.readline() +... second_line = f.readline() +... +>>> first_line +'Hello one!\n' +>>> second_line +'Hello two!\n' +``` There's only one confusing thing about reading files. If you try to read it twice you'll find out that it only gets read once: @@ -199,7 +208,10 @@ to read it twice you'll find out that it only gets read once: >>> ``` -But if we open the file again, everything works. +File objects remember their position. When we tried to read the +file again it was already at the end, and there was nothing left +to read. But if we open the file again, it's in the beginning +again and everything works. ```py >>> first = [] @@ -247,7 +259,38 @@ use the `read()` method. >>> ``` -**TODO:** Explain paths and \\. +You can also open full paths, like `open('C:\\Users\\me', 'r')`. +The reason why we need to use `\\` when we really mean `\` is that +backslash has a special meaning. There are special characters like +`\n`, and `\\` means an actual backslash. + +```py +>>> print('C:\some\name') +C:\some +ame +>>> print('C:\\some\\name') +C:\some\name +>>> +``` + +Another way to create paths is to tell Python to escape them by +adding an `r` to the beginning of the string. In this case the `r` +is short for "raw", not "read". + +```py +>>> r'C:\some\name' == 'C:\\some\\name' +True +>>> +``` + +If you don't use Windows and your paths don't contain backslashes +you don't need to double anything or use `r` in front of paths. + +```py +>>> print('/some/name') +/some/name +>>> +``` ## Example: File viewer diff --git a/modules.md b/modules.md new file mode 100644 index 0000000..787b25e --- /dev/null +++ b/modules.md @@ -0,0 +1,483 @@ +# Modules + +Let's say you want to generate a random number between 1 and +3. The random module is a really easy way to do this: + +```py +>>> import random +>>> random.randint(1, 3) +3 +>>> random.randint(1, 3) +1 +>>> random.randint(1, 3) +3 +>>> random.randint(1, 3) +2 +>>> random.randint(1, 3) +2 +>>> +``` + +That's cool... but how does that work? + +## What are modules? + +The first line in the example, `import random`, was an +**import statement.** But what is that random thing that it +gave us? + +```py +>>> random + +>>> +``` + +So it's a module, and it comes from a path... but what does +all that mean? + +Now open the folder that contains your `random.py` is. On my +system it's `/usr/lib/python3.4`, but yours will probably be +different. To open a folder in your file manager you can press +Windows-R on Windows or Alt+F2 on most GNU/Linux distributions, +and just type your path there. I don't have an up-to-date copy +of OSX so unfortunately I have no idea what you need to do on +OSX. + +You'll see a bunch of files and a few directories in the folder +that opens: + +**TODO: Add a screenshot.** + +All of these `.py` files can be imported like we just imported +`random.py`. In random.py, there's a like like `randint = something`, +so you can use its randint variable with `random.randint` after +importing it. + +## Where do modules come from? + +Create a `random.py` file with the following content: + +```py +import random + +print("A random number between 1 and 3:", random.randint(1, 3)) +``` + +Now run the program. + +```py +Traceback (most recent call last): + File "random.py", line 1, in + import random + File "/home/akuli/random.py", line 4, in + print("A random number between 1 and 3:", random.randint(1, 3)) +AttributeError: 'module' object has no attribute 'randint' +``` + +But what was that? Why didn't it work? + +Let's go ahead and check what's wrong. If you don't use IDLE, you'll +need to pass the `-i` option to Python, so if you would normally run +`python3 random.py` you should now do `python3 -i random.py`. This +will run the file and then give you a `>>>` prompt that we can use +to check what's wrong. If you use IDLE, just run the file normally. + +We should end up with something like this: + +``` +Traceback (most recent call last): + File "random.py", line 1, in + import random + File "/home/akuli/random.py", line 4, in + print("A random number between 1 and 3:", random.randint(1, 3)) +AttributeError: 'module' object has no attribute 'randint' +>>> +``` + +So first of all, what is that random variable? + +```py +>>> random + +>>> +``` + +What the heck? It's a module called random... but it's not the +`random.py` we thought it was. **Our** `random.py` has imported +itself! + +So let's go ahead and rename our file from `random.py` to +something like `ourrandom.py` and try again: + +``` +A random number between 1 and 3: 3 +``` + +There we go, now we don't have our own `random.py` so it works. + +So seems like that modules can be imported from the directory that +our Python file is in, and also from the directory that the real +`random.py` is in. But where else can they come from? + +There's a module called **sys** that contains various things built +into Python. Actually the whole module is built-in, so there's no +`sys.py` anywhere. The sys module has a list that contains all +places that modules are searched from: + +```py +>>> import sys +>>> sys + +>>> sys.path +['', + '/usr/lib/python3.4', + '/usr/lib/python3.4/plat-i386-linux-gnu', + '/usr/lib/python3.4/lib-dynload', + '/home/akuli/.local/lib/python3.4/site-packages', + '/usr/local/lib/python3.4/dist-packages', + '/usr/lib/python3/dist-packages'] +>>> +``` + +So that's where my Python finds its modules. The first thing in my +sys.path is an empty string, and in this case it means the current +working directory. + +## Caching modules + +Let's create a file called `hello.py` that contains a classic greeting: + +```py +print("Hello World!") +``` + +Let's go ahead and import it, and see how it works. + +```py +>>> import hello +Hello World! +>>> +``` + +Works as expected, but what happens if we try to import it again? + +```py +>>> import hello +>>> +``` + +Nothing happened at all. + +The reason why the module wasn't loaded twice is simple. In a +large project with many files it's normal to import the same +module in many files, so it gets imported multiple times. If +Python would reload the module every time it's imported, +dividing code to multiple files would make the code run slower. + +If you want to load the module again, just exit out of Python and +launch it again. + +## Brief overview of the standard library + +The **standard library** consists of modules that Python comes +with. Here's a very brief overview of what it can do. All of +these modules can also do other things, and you can read more +about that in the official documentation. + +### Random numbers + +The official documentation is +[here](https://docs.python.org/3/library/random.html). + +```py +>>> random.randint(1, 3) # 1, 2 or 3 +3 +>>> colors = ['red', 'blue', 'yellow'] +>>> random.choice(colors) # choose one color +'red' +>>> random.sample(colors, 2) # choose two different colors +['yellow', 'red'] +>>> random.shuffle(colors) # mix the color list in-place +>>> colors +['yellow', 'red', 'blue'] +>>> +``` + +### Things that are built into Python + +The module name "sys" is short for "system", and it contains things +that are built into Python. The official documentation is +[here](https://docs.python.org/3/library/sys.html). + +```py +>>> # special files that the print and input functions use +>>> # stdin is short for standard input +>>> # stdout is short for standard output +>>> # stderr is short for standard errors +>>> print("Hello!", file=sys.stdout) +Hello! +>>> print("Hello!", file=sys.stderr) # use this for error messages +Hello! +>>> line = sys.stdin.readline() # i will type hello and press enter +hello +>>> line +'hello\n' +>>> +>>> # information about Python's version, behaves like a tuple +>>> sys.version_info +sys.version_info(major=3, minor=4, micro=2, releaselevel='final', serial=0) +>>> sys.version_info[:3] # this is Python 3.4.2 +(3, 4, 2) +>>> +>>> sys.exit() # exit out of Python, you may need a plain exit() with IDLE +``` + +If you use IDLE you'll notice that printing to `sys.stderr` makes +the message show up in red instead of the normal blue. + +`sys.exit()` does the same thing as `sys.exit(0)`. The zero means that +the program succeeded, and everything's fine. If our program has an +error we should print an error message to `sys.stderr` and then call +`sys.exit(1)`. Like this: + +```py +if something_went_wrong: + # of course, we need to make real error messages more + # informative than this example is + print("Oh crap! Something went wrong.", file=sys.stderr) + sys.exit(1) +``` + +### Mathematics + +There's no math.py anywhere, math is a built-in module like +sys. The official documentation is +[here](https://docs.python.org/3/library/math.html). + +```py +>>> import math +>>> math + +>>> math.pi # approximate value of π +3.141592653589793 +>>> math.sqrt(2) # square root of 2 +1.4142135623730951 +>>> math.radians(180) # convert degrees to radians +3.141592653589793 +>>> math.degrees(math.pi/2) # convert radians to degrees +90.0 +>>> math.sin(math.pi/2) # sin of 90 degrees or 1/2 π radians +1.0 +>>> +``` + +### Time-related things + +The official documentation for the time module is +[here](https://docs.python.org/3/library/time.html). + +```py +>>> import time +>>> time.sleep(1) # wait one second +>>> time.time() # return time in seconds since beginning of the year 1970 +1474896325.2394648 +>>> time.strftime('%d.%m.%Y %H:%M:%S') # format current time nicely +'26.09.2016 16:33:58' +>>> +``` + +You are probably wondering how `time.time()` can be used and why its +timing starts from the beginning of 1970. `time.time()` is useful +for measuring time differences because we can save its return value +to a variable before doing something, and then afterwards check how +much it changed. + +If you want to know why it starts in 1970 you can read something like +[this](http://stackoverflow.com/questions/1090869/why-is-1-1-1970-the-epoch-time). + +See `help(time.strftime)` if you want to know about more format +specifiers like `%d`, `%m` etc. that `time.strftime` can take. + +### Operating system related things + +The module name "os" is short for "operating system", and it contains +handy functions for interacting with the operating system that Python +is running on. The official documentation is +[here](https://docs.python.org/3/library/os.html). + +```py +>>> import os +>>> os.getcwd() # short for "get current working directory" +'/home/akuli' +>>> os.mkdir('stuff') # create a folder, short for "make directory" +>>> +>>> os.path.isfile('hello.txt') # check if it's a file +True +>>> os.path.isdir('stuff') +False +>>> os.path.isdir('hello.txt') # check if it's a directory +False +>>> os.path.isdir('stuff') +True +>>> os.path.exists('hello.txt') # check if it's anything +True +>>> os.path.exists('stuff') +True +>>> +>>> # this joins with '\\' on windows and '/' on most other systems +>>> path = os.path.join('stuff', 'hello-world.txt') +>>> path +'stuff/hello-world.txt' +>>> with open(path, 'w') as f: +... # now this goes to the stuff folder we created +... print("Hello World!", file=f) +... +>>> os.listdir('stuff') # create a list of everything in stuff +['hello-world.txt'] +>>> +``` + +## Examples + +Mix a list of things. + +```py +import random + +print("Enter things to mix, and press Enter without typing", + "anything when you're done.") +things = [] +while True: + thing = input("Next thing: ") + if thing == "": + break + things.append(thing) + +random.shuffle(things) + +print("After mixing:") +for thing in things: + print(thing) +``` + +Measure how long it takes for the user to answer a question. +The `%.2f` trick is explained [here](https://pyformat.info/). + +```py +import time + +start = time.time() +answer = input("What is 1 + 2? ") +end = time.time() +difference = end - start + +if answer == '3': + print("Correct! That took %.2f seconds." % difference) +else: + print("That's not correct...") +``` + +Wait a given number of seconds. + +```py +import sys +import time + + +answer = input("How long do you want to wait in seconds? ") +waitingtime = float(answer) +if waitingtime < 0: + print("Error: cannot wait a negative time.", file=sys.stderr) + sys.exit(1) + +print("Waiting...") +time.sleep(waitingtime) +print("Done!") +``` + +Check what a path points to. + +```py +import os + +print("You are currently in %s." % os.getcwd()) + +while True: + path = input("A path, or nothing at all to quit: ") + if path == '': + # We could just break out of the loop, but I'll show how + # this can be done with sys.exit. The difference is that + # break only breaks the innermost loop it is in, and + # sys.exit ends the whole program. + sys.exit() + if os.path.isfile(path): + print("It's a file!") + elif os.path.isdir(path): + print("It's a folder!") + elif os.path.exists(path): + # i have no idea when this code would actually run + print("Interesting, it exists but it's not a file or a folder.") + else: + print("I can't find it :(") +``` + +## More modules! + +Python's standard library has many awesome modules and I just +can't tell about each and every module I use here. Here's some of +my favorite modules from the standard library. Don't study them +one by one, but look into them when you think you might need them. +When reading the documentation it's usually easiest to find what +you are looking for by pressing Ctrl+F in your web browser, and +then typing in what you want to search for. + +- [argparse](https://docs.python.org/3/howto/argparse.html): + a full-featured command-line argument parser +- [collections](https://docs.python.org/3/library/collections.html), + [functools](https://docs.python.org/3/library/functools.html) and + [itertools](https://docs.python.org/3/library/itertools.html): + handy utilities +- [configparser](https://docs.python.org/3/library/configparser.html): + load and save setting files +- [csv](https://docs.python.org/3/library/csv.html): + store comma-separated lines in files +- [json](https://docs.python.org/3/library/json.html): + yet another way to store data in files and strings +- [textwrap](https://docs.python.org/3/library/textwrap.html): + break long text into multiple lines +- [warnings](https://pymotw.com/3/warnings/): + like exceptions, but they don't interrupt your program +- [webbrowser](https://pymotw.com/3/webbrowser/): + open a web browser from Python + +I also use these modules, but they don't come with Python so you'll +need to install them yourself if you want to use them: + +- [appdirs](https://github.com/activestate/appdirs): + an easy way to find out where to put setting files +- [requests](http://docs.python-requests.org/en/master/user/quickstart/): + an awesome networking library + +I recommend reading [the official documentation about installing + modules](https://docs.python.org/3/installing/). If you're using + GNU/Linux also read the "Installing into the system Python on Linux" + section at the bottom. + +## Summary + +- Most modules are files on your computer, but some of them are built + in to Python. We can use modules in our projects by importing them, + and after that using `modulename.variable` to get a variable from + the module. +- Some of the most commonly used modules are random, sys, math, time + and os. +- Avoid creating `.py` files that have the same name as a name of a + module you want to use. +- Python comes with many modules, and you can install even more modules + if you want to. + +*** + +You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). + +[Back to the list of contents](README.md) From ab67c5a0a23d9069c42a1ac8df6e5e3f5be4ea8d Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 26 Sep 2016 20:39:08 +0300 Subject: [PATCH 035/329] little stuff --- answers.md | 2 +- installing-python.md | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/answers.md b/answers.md index 632a4c0..f13e79c 100644 --- a/answers.md +++ b/answers.md @@ -197,7 +197,7 @@ These are answers for exercises in the chapters. In programming, there's always ## Defining functions -1. Use `-value` to get tha negative in the abs function, and for loops +1. Use `-value` to get the negative in the abs function, and for loops in the other two functions. ```py diff --git a/installing-python.md b/installing-python.md index 3800611..fccf813 100644 --- a/installing-python.md +++ b/installing-python.md @@ -95,6 +95,10 @@ On GNU/Linux or Mac OSX, type `python3` instead: Type "help", "copyright", "credits" or "license" for more information. >>> +You may also have an older version of Python installed, but don't remove +it. Your system may need it, so if you replace it with your own Python +some things might stop working. + Now type `exit()` and press Enter to get out of Python. ## Summary From be2a326de3cfa731108a83052ff451c9ea485a42 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 26 Sep 2016 20:48:32 +0300 Subject: [PATCH 036/329] fixing stuff --- files.md | 4 +++- modules.md | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/files.md b/files.md index 7d5eb3b..9d271d2 100644 --- a/files.md +++ b/files.md @@ -264,7 +264,9 @@ The reason why we need to use `\\` when we really mean `\` is that backslash has a special meaning. There are special characters like `\n`, and `\\` means an actual backslash. -```py +[comment]: <> (GitHub's syntax highlighting screws up with backslashes.) + +``` >>> print('C:\some\name') C:\some ame diff --git a/modules.md b/modules.md index 787b25e..fd76f97 100644 --- a/modules.md +++ b/modules.md @@ -82,9 +82,10 @@ need to pass the `-i` option to Python, so if you would normally run will run the file and then give you a `>>>` prompt that we can use to check what's wrong. If you use IDLE, just run the file normally. -We should end up with something like this: +We should end up with the same error message, and then a `>>>`. +Like this: -``` +```py Traceback (most recent call last): File "random.py", line 1, in import random @@ -399,6 +400,7 @@ Check what a path points to. ```py import os +import sys print("You are currently in %s." % os.getcwd()) From 745e95944d294e0641d8f9436c5d78ea54f4e2c7 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 26 Sep 2016 20:53:09 +0300 Subject: [PATCH 037/329] markdown comment dissaster --- files.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files.md b/files.md index 9d271d2..500613c 100644 --- a/files.md +++ b/files.md @@ -264,7 +264,7 @@ The reason why we need to use `\\` when we really mean `\` is that backslash has a special meaning. There are special characters like `\n`, and `\\` means an actual backslash. -[comment]: <> (GitHub's syntax highlighting screws up with backslashes.) +![comment]: <> (GitHub's syntax highlighting screws up with backslashes.) ``` >>> print('C:\some\name') From 92669345dde53a7ed0b5c6a496ad9b83533ef5cf Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 26 Sep 2016 20:54:42 +0300 Subject: [PATCH 038/329] commenting markdown is hard! --- files.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files.md b/files.md index 500613c..8904aa7 100644 --- a/files.md +++ b/files.md @@ -264,7 +264,7 @@ The reason why we need to use `\\` when we really mean `\` is that backslash has a special meaning. There are special characters like `\n`, and `\\` means an actual backslash. -![comment]: <> (GitHub's syntax highlighting screws up with backslashes.) +[comment]: # (GitHub's syntax highlighting screws up with backslashes.) ``` >>> print('C:\some\name') From a5edc28e265e6435e5c7f2cf8298fcab6c3500c4 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 26 Sep 2016 20:57:23 +0300 Subject: [PATCH 039/329] errors go 2 stderr --- modules.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules.md b/modules.md index fd76f97..caa6365 100644 --- a/modules.md +++ b/modules.md @@ -420,7 +420,7 @@ while True: # i have no idea when this code would actually run print("Interesting, it exists but it's not a file or a folder.") else: - print("I can't find it :(") + print("I can't find it :(", file=sys.stderr) ``` ## More modules! From 345fbbce131b823eaaa757cb43f6d876b1e7480d Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 26 Sep 2016 21:04:13 +0300 Subject: [PATCH 040/329] again, little fixes --- files.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/files.md b/files.md index 8904aa7..1d1c9ad 100644 --- a/files.md +++ b/files.md @@ -259,7 +259,7 @@ use the `read()` method. >>> ``` -You can also open full paths, like `open('C:\\Users\\me', 'r')`. +You can also open full paths, like `open('C:\\Users\\me\\myfile.txt', 'r')`. The reason why we need to use `\\` when we really mean `\` is that backslash has a special meaning. There are special characters like `\n`, and `\\` means an actual backslash. @@ -294,9 +294,9 @@ you don't need to double anything or use `r` in front of paths. >>> ``` -## Example: File viewer +## Examples -The following program prints the contents of files: +This program prints the contents of files: ```py while True: @@ -311,8 +311,6 @@ while True: print(line.rstrip('\n')) ``` -## Example: User information - This program stores the user's username and password in a file. Plain text files are definitely not a good way to store usernames and passwords, but this is just an example. From f656c7e5f56eeb7ca3bf85e63aa5fd89401a7366 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 26 Sep 2016 21:27:42 +0300 Subject: [PATCH 041/329] improve README --- README.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index e14b33b..f3c63be 100644 --- a/README.md +++ b/README.md @@ -11,17 +11,23 @@ you have programmed a lot in the past using some other language you probably want to read [the official tutorial](https://docs.python.org/3/tutorial/) instead. -This tutorial uses Python 3. Python 2 is getting outdated all the time, +This tutorial uses Python 3, and you need Python 3 to be able to run the +example code yourself. Python 2 is getting outdated all the time, and more and more projects are moving to Python 3. There are a few popular libraries that don't support Python 3 that well at the time of writing this, but you don't need to worry about that just yet. They will probably support Python 3 by the time you've learned the basics and you may actually need them. +I have tested most of the code in this tutorial on Python 3.4, but +everything should also work on any Python 3 version or newer. + Here's a list of chapters in this tutorial. Read them one by one in the -order they are listed. **If you jump to a chapter without reading -everything before it, you will probably have hard time understanding -it.** +order they are listed. **If you jump to a chapter without reading and +understanding everything before it, you may have hard time understanding +the chapter you're trying to read.** However, the chapters are mostly +independent from each other, so you can also use this tutorial together +with other tutorials. 1. [Quick introduction to this tutorial](introduction.md) 2. [Installing Python](installing-python.md) @@ -44,7 +50,7 @@ yet: Other things this tutorial comes with: -- [Getting help](getting-help.md) +- **Important:** [getting help](getting-help.md) - [Contact me](contact-me.md) - [Setting up a text editor](editor-setup.md) - [Answers for the exercises](answers.md) From 3969559ea43797e04476ad0a2ad92379fb7957d8 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 27 Sep 2016 08:12:04 +0300 Subject: [PATCH 042/329] explain return with input() --- defining-functions.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/defining-functions.md b/defining-functions.md index 5f36426..2e26865 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -395,7 +395,8 @@ assign it to a variable. variables. - Functions can take **arguments** and they can behave differently depending on what arguments they get. Functions can also - **return** one value. Returning also ends the function immediately. + **return** one value, like the built-in input function does. + Returning also ends the function immediately. - Return a value instead of printing it if you need to do something with it after calling the function. From 774c608e5bc7553cf1478b707b257cbbad70713e Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 27 Sep 2016 22:28:33 +0300 Subject: [PATCH 043/329] add examples and clean up --- defining-functions.md | 82 ++++++++++++++++++++++++++++++++----------- 1 file changed, 61 insertions(+), 21 deletions(-) diff --git a/defining-functions.md b/defining-functions.md index 2e26865..b39a291 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -62,8 +62,9 @@ Let's use it to define a function that does nothing. >>> ``` -Seems to be working so far, we have a function. Let's see what happens -if we call it. +Seems to be working so far, we have a function. Actually it's just +a value that is assigned to a variable called `do_nothing`. Let's see +what happens if we call it. ```py >>> do_nothing() @@ -130,7 +131,7 @@ program, even in functions. >>> ``` -But there are also **local variables**. They exist only inside +But there are also **local variables**. They exist only **inside** functions, and they are deleted when the function exits. ```py @@ -150,18 +151,19 @@ NameError: name 'd' is not defined However, modifying a global variable in-place from a function is easy. ```py ->>> foo = ['global foo'] ->>> def bar(): -... foo.append('local foo') +>>> stuff = ['global stuff'] +>>> def add_stuff(): +... stuff.append('local stuff') ... ->>> bar() ->>> foo -['global foo', 'local foo'] +>>> add_stuff() +>>> stuff +['global stuff', 'local stuff'] >>> ``` This doesn't work if the value is of an immutable type, like string or -integer. Fortunately, Python will tell you if something's wrong. +integer because immutable values cannot be modified in-place. +Fortunately, Python will tell you if something's wrong. ```py >>> foo = 1 @@ -376,15 +378,54 @@ None There's two ways to output information from functions. They can print something or they can return something. So, should we print or return? -Most of the time returning makes functions much easier to use. Think +Most of the time **returning makes functions much easier to use**. Think about the `input()` function. It asks the user to enter something, and then the user enters something and that value is returned. If the input function would print the value instead of returning it, things like -`name = input("Name: ")` wouldn't work and assigning the output to a +`name = input("Name: ")` wouldn't work and assigning the result to a variable would be much more difficult. Printing things is fine when you know that you'll only need to print the result and you'll never need to assign it to a variable. +## Examples + +Ask yes/no questions. + +```py +def ask_yes_no(prompt): + while True: + answer = input(prompt + ' (y or n) ') + if answer == 'y' or answer == 'Y': + return True # returning ends the function + if answer == 'n' or answer == 'N': + return False + print("Answer 'y' or 'n'.") + +if ask_yes_no("Do you like ice cream?"): + print("You like ice cream!") +else: + print("You don't like ice cream.") +``` + +Ask questions with multiple answers. + +```py +def ask_until_correct(prompt, correct_options, + error_message="I don't know what you meant."): + while True: + answer = input(prompt + ' ') + if answer in correct_options: + return answer # returning ends the function + print(error_message) + + +colors = ['red', 'yellow', 'blue', 'green', 'orange', 'pink', 'black', + 'gray', 'white', 'brown'] +choice = ask_until_correct("What's your favorite color?", colors, + error_message="I don't know that color.") +print("Your favorite color is %s!" % choice) +``` + ## Summary - Functions are a way to write code once, and then use that same @@ -394,9 +435,10 @@ assign it to a variable. by default, they can only create and change the value of local variables. - Functions can take **arguments** and they can behave differently - depending on what arguments they get. Functions can also - **return** one value, like the built-in input function does. - Returning also ends the function immediately. + depending on what arguments they get. Arguments are just local + variables. +- Functions can also **return** one value, like the built-in input + function does. Returning also ends the function immediately. - Return a value instead of printing it if you need to do something with it after calling the function. @@ -405,8 +447,7 @@ assign it to a variable. **There is a lot to learn about functions, and I don't expect you to learn everything at once.** However, there's also lots of free Python exercises about defining functions you can do. Do many of them and -spend a lot of time with them, so you'll get used to defining -functions. +spend time with them until you're familiar with defining functions. 1. Python comes with many built-in functions. Some of the simplest ones are abs, all and any. They can be used like this: @@ -421,8 +462,8 @@ functions. >>> ``` - - any returns True if any of the elements of a list is true, and - False otherwise. + - any returns True if one or more of the elements of a list is true, + and False otherwise. ```py >>> any([True, False, True]) @@ -466,8 +507,7 @@ functions. and all the exercises because you didn't know how to define functions. Read those parts now, and do the exercises. -4. Use a search engine (e.g. Google) to find more exercises about - defining functions. +4. Find more exercises about defining functions online. Answers for the first and second exercise are [here](answers.md). From 46922f37b56e468fefb8360b37e705ce49b103ad Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 28 Sep 2016 09:43:14 +0300 Subject: [PATCH 044/329] reorganize stuff --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f3c63be..87b90bd 100644 --- a/README.md +++ b/README.md @@ -40,8 +40,8 @@ with other tutorials. 9. [Handy stuff with strings](handy-stuff-strings.md) 10. [Loops](loops.md) 11. [Files](files.md) -12. [Modules](modules.md) -13. [Defining functions](defining-functions.md) +12. [Defining functions](defining-functions.md) +13. [Modules](modules.md) Parts of this tutorial that aren't ready to be added to the rest of it yet: From 7be85f112cb946855a28259b48ee54515e9a8f01 Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 28 Sep 2016 09:47:23 +0300 Subject: [PATCH 045/329] copy-pasta --- modules.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules.md b/modules.md index caa6365..e7d2c71 100644 --- a/modules.md +++ b/modules.md @@ -314,7 +314,7 @@ is running on. The official documentation is >>> >>> os.path.isfile('hello.txt') # check if it's a file True ->>> os.path.isdir('stuff') +>>> os.path.isfile('stuff') False >>> os.path.isdir('hello.txt') # check if it's a directory False From 40edf9e258091661ffaea87a2490fac7acbecbec Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 28 Sep 2016 09:48:49 +0300 Subject: [PATCH 046/329] explain %.2f --- modules.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules.md b/modules.md index e7d2c71..6c4c394 100644 --- a/modules.md +++ b/modules.md @@ -362,7 +362,8 @@ for thing in things: ``` Measure how long it takes for the user to answer a question. -The `%.2f` trick is explained [here](https://pyformat.info/). +The `%.2f` rounds down to 2 decimals, and you can find more +formatting tricks [here](https://pyformat.info/). ```py import time From b7935d02a882a4e29e2860622883d1ea5cdf449c Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 28 Sep 2016 21:30:09 +0300 Subject: [PATCH 047/329] add a 2do --- handy-stuff-strings.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index 3da39a7..5a0029d 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -260,6 +260,9 @@ they are just different. The two ways are: `'Hello {}.'.format(name)`. I like to use printf-formatting for simple things and `.format` when I need more powerful features. + **TODO:** warn readers about formatting tuples, and show experienced + users that dictionaries aren't a problem + ```py >>> "Hello %s." % name 'Hello Akuli.' From f6777d6d1f2105df9328e6886ac1c5a4a5c54956 Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 28 Sep 2016 21:33:54 +0300 Subject: [PATCH 048/329] new file: exceptions.md --- exceptions.md | 228 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 228 insertions(+) create mode 100644 exceptions.md diff --git a/exceptions.md b/exceptions.md new file mode 100644 index 0000000..ad7eada --- /dev/null +++ b/exceptions.md @@ -0,0 +1,228 @@ +# Exceptions + +So far we have made programs that ask the user to enter a string. + +```py +text = input("Enter something: ") +print("Your text twice:", text*2) +``` + +That works. + +``` +Enter something: hello +Your text twice: hellohello +``` + +But if the user enters a number, it's not going to be multiplied by two. + +``` +Enter something: 3 +Your text twice: 33 +``` + +Let's use `int` to convert that to an integer: + +```py +text = input("Enter a number: ") +number = int(text) +print("Your number twice:", number*2) +``` + +That works... + +``` +Enter a number: 3 +Your number twice: 6 +``` + +...unless the user does not enter a number. + +```py +Enter a number: lol +Traceback (most recent call last): + File "/some/place/file.py", line 2, in + number = int(text) +ValueError: invalid literal for int() with base 10: 'lol' +``` + +So how can we fix that? + +## What are exceptions? + +In the previous example we got a ValueError. ValueError is an +**exception**. In other words, ValueError is an error that can occur +in our program. If an exception occurs, the program will stop and we +get an error message. + +```py +>>> int('lol') +Traceback (most recent call last): + File "", line 1, in +ValueError: invalid literal for int() with base 10: 'lol' +>>> +``` + +Exceptions are classes, just like int and str. We'll talk more about +classes later in this tutorial. + +```py +>>> str + +>>> int + +>>> ValueError + +>>> +``` + +You can also create an exception. You won't get an error message by doing +that, but we'll use this for displaying our own error messages later. + +```py +>>> the_problem = ValueError('oh no') +>>> the_problem +ValueError('oh no',) +>>> type(the_problem) + +>>> +``` + +## Catching exceptions + +If we need to try to do something and see if we get an exception, we +can use `try` and `except`. This is also known as **catching** the +exception. + +```py +>>> try: +... print(int('123')) +... except ValueError: +... print("Oops!") +... +123 +>>> try: +... print(int('lol')) +... except ValueError: +... print("Oops!") +... +Oops! +>>> +``` + +ValueError is raised when something gets an invalid value, but the +value's type is correct. In this case, `int` can take a string as an +argument, but the string needs to contain a number, not `lol`. + +If the type is wrong, we will get a TypeError instead. + +```py +>>> 123 + 'hello' +Traceback (most recent call last): + File "", line 1, in +TypeError: unsupported operand type(s) for +: 'int' and 'str' +>>> +``` + +Does an `except ValueError` also catch TypeErrors? + +```py +>>> try: +... print(123 + 'hello') +... except ValueError: +... print("Oops!") +... +Traceback (most recent call last): + File "", line 2, in +TypeError: unsupported operand type(s) for +: 'int' and 'str' +>>> +``` + +No, it doesn't. But maybe we could except for both ValueError and +TypeError? + +```py +>>> try: +... int('lol') +... except ValueError: +... print('wrong value') +... except TypeError: +... print('wrong type') +... +wrong value +>>> try: +... 123 + 'hello' +... except ValueError: +... print('wrong value') +... except TypeError: +... print('wrong type') +... +wrong type +>>> +``` + +Seems to be working. + +It's also possible to catch an exception, and store it in a variable: + +```py +>>> try: +... 123 + 'hello' +... except TypeError as e: +... our_error = e +... +>>> our_error +TypeError("unsupported operand type(s) for +: 'int' and 'str'",) +>>> type(our_error) + +>>> +``` + +## Raising exceptions + +When working on something that other programmers are going to use, +you may end up doing something like this: + +```py +if number < 0: + print("ERROR: number must be non-negative") +``` + +But that's not ideal. If there is an error, the code prints an error +message but it still keeps running. People using your code also don't know +which line in their code caused the error. + +Instead you can **raise** an exception yourself. Sometimes this is also +called **throwing** an exception. + +```py +if number < 0: + raise ValueError("number must be non-negative") +``` + +Let's try that on the interactive prompt, and see what that does. + +```py +>>> raise ValueError("number must be non-negative") +Traceback (most recent call last): + File "", line 1, in +ValueError: number must be non-negative +>>> +``` + +It's working. + +**TODO:** except Exception + +**TODO:** introduce assert here? + +## Summary + +- Exceptions can be used just like any other variables. +- ValueError and TypeError are some of the most commonly used exceptions. +- The `try` and `except` keywords can be used for attempting to do + something and then doing something else if it causes an error. This + is known as catching exceptions. You can use one `try` statement with + multiple `except` statements. +- It's also possible to raise exceptions with the `raise` keyword. This + is also known as throwing exceptions. From 614a1814ff3951020fd72414f2a3eef8fb4ae250 Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 28 Sep 2016 21:37:40 +0300 Subject: [PATCH 049/329] add stuff --- todo/dicts-and-tuples.md | 3 +++ todo/genexample.py | 18 ++++++++++++++++++ todo/iterators.md | 40 ++++++++++++++++++++++++++++++++++++++++ todo/yield-example.py | 18 ++++++++++++++++++ 4 files changed, 79 insertions(+) create mode 100644 todo/dicts-and-tuples.md create mode 100644 todo/genexample.py create mode 100644 todo/iterators.md create mode 100644 todo/yield-example.py diff --git a/todo/dicts-and-tuples.md b/todo/dicts-and-tuples.md new file mode 100644 index 0000000..ff2fed0 --- /dev/null +++ b/todo/dicts-and-tuples.md @@ -0,0 +1,3 @@ +# Dictionaries and tuples + +So far we know how to store multiple diff --git a/todo/genexample.py b/todo/genexample.py new file mode 100644 index 0000000..0016a05 --- /dev/null +++ b/todo/genexample.py @@ -0,0 +1,18 @@ +def thing(): + print("starting") + print("blah blah blah") + print("yielding 1") + yield 1 +# -------------------- CUT HERE -------------------- + print("running") + print("blah blah blah") + print("yielding 2") + yield 2 +# -------------------- CUT HERE -------------------- + print("done") + + +t = Thing() # run nothing at all +print("got from next(t):", next(t)) # run the first piece +print("got from next(t):", next(t)) # run the second piece +print("got from next(t):", next(t)) # run the last piece and raise StopIteration diff --git a/todo/iterators.md b/todo/iterators.md new file mode 100644 index 0000000..e72b503 --- /dev/null +++ b/todo/iterators.md @@ -0,0 +1,40 @@ +# Iterables and iterators + +We have used for loops in many exercises and other things so far. One of +the simplest things we can for loop over are lists. + +```py +>>> for item in ['a', 'b', 'c']: +... print(item) +... +a +b +c +>>> +``` + +But what exactly is happening behind the scenes? + +## Iterables + +An **iterable** is anything we can put after a `for item in`. For +example, strings, lists, tuples and dictionaries are all iterable. +Iterating over an iterable is simple: + +```py +string = 'hello' +for character in string: + print(character) +``` + +You might think that under the covers Python does something like this: + +```py +string = 'hello' +index = 0 +while index < len(string): + print(string[index]) + index += 1 +``` + +But actually, th diff --git a/todo/yield-example.py b/todo/yield-example.py new file mode 100644 index 0000000..627b8a7 --- /dev/null +++ b/todo/yield-example.py @@ -0,0 +1,18 @@ +def thing(): + print("starting") + print("blah blah blah") + print("yielding 1") + yield 1 +# -------------------- CUT HERE -------------------- + print("running") + print("blah blah blah") + print("yielding 2") + yield 2 +# -------------------- CUT HERE -------------------- + print("done") + + +t = Thing() # run nothing at all +print("got", next(t)) # run the first piece +print("got", next(t)) # run the second piece +print("got", next(t)) # run the last piece and raise StopIteration From 8421a4bf2af5bf5f0a8afb829c80dac4b507fc22 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 1 Oct 2016 17:37:02 +0300 Subject: [PATCH 050/329] add a nice diagram --- defining-functions.md | 4 ++++ images/drawings.odg | Bin 14444 -> 20722 bytes images/locals-and-globals.png | Bin 0 -> 14254 bytes 3 files changed, 4 insertions(+) create mode 100644 images/locals-and-globals.png diff --git a/defining-functions.md b/defining-functions.md index b39a291..3f3ef1c 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -148,6 +148,10 @@ NameError: name 'd' is not defined >>> ``` +Let's draw a diagram of these variables: + +![Locals and globals.](images/locals-and-globals.png) + However, modifying a global variable in-place from a function is easy. ```py diff --git a/images/drawings.odg b/images/drawings.odg index 912cba8853649dc41efa911d8aa783014744055c..bc1061fb55f003754dada4b747f9e6a8586ef6f7 100644 GIT binary patch delta 16907 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 CH{sv_ delta 10559 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 QGPrSziWo1*IDbq22fu+76951J diff --git a/images/locals-and-globals.png b/images/locals-and-globals.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe95d8397169cfde87b6acf27b110e55758ee1d GIT binary patch literal 14254 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 literal 0 HcmV?d00001 From 4dd9b2d88daae7b54d9829c3447236ab037e9983 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 1 Oct 2016 17:44:47 +0300 Subject: [PATCH 051/329] fix a horrible typo --- answers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/answers.md b/answers.md index f13e79c..9715c54 100644 --- a/answers.md +++ b/answers.md @@ -207,7 +207,7 @@ These are answers for exercises in the chapters. In programming, there's always # actually, this else is useless because returning ends the # function anyway else: - value + return value def my_any(a_list): # don't call this "list", see summary in the Lists chapter for item in a_list: From 60154fd668dc4fc35281b65a356213548421669a Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 1 Oct 2016 22:08:57 +0300 Subject: [PATCH 052/329] add tray hunner stuff and fix stupid mistakes in answers.md --- README.md | 7 +- answers.md | 77 +++++++++++- trey-hunner-zip-and-enumerate.md | 196 +++++++++++++++++++++++++++++++ 3 files changed, 272 insertions(+), 8 deletions(-) create mode 100644 trey-hunner-zip-and-enumerate.md diff --git a/README.md b/README.md index 87b90bd..56a2b76 100644 --- a/README.md +++ b/README.md @@ -39,9 +39,10 @@ with other tutorials. 8. [ThinkPython: Lists](lists.md) 9. [Handy stuff with strings](handy-stuff-strings.md) 10. [Loops](loops.md) -11. [Files](files.md) -12. [Defining functions](defining-functions.md) -13. [Modules](modules.md) +11. [Trey Hunner: zip and enumerate](trey-hunner-zip-and-enumerate.md) +12. [Files](files.md) +13. [Defining functions](defining-functions.md) +14. [Modules](modules.md) Parts of this tutorial that aren't ready to be added to the rest of it yet: diff --git a/answers.md b/answers.md index 9715c54..96bb985 100644 --- a/answers.md +++ b/answers.md @@ -195,10 +195,77 @@ These are answers for exercises in the chapters. In programming, there's always print("Wrong username or password.") ``` +## Trey Hunner: zip and enumerate + +1. Read some lines with `input` and then enumerate it. + + ```py + print("Enter something, and press Enter without typing anything", + "when you're done.") + + lines = [] + while True: + line = input('>') + if line == '': + break + lines.append(line) + + for index, line in enumerate(lines, start=1): + print("Line", index, "is:", line) + ``` + +2. Let's start by trying out `zip` with strings: + + ```py + >>> for pair in zip('ABC', 'abc'): + ... print(pair) + ... + ('A', 'a') + ('B', 'b') + ('C', 'c') + >>> + ``` + + Great, it works just like it works with lists. Now let's create + the letter printing program: + + ```py + uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + lowercase = 'abcdefghijklmnopqrstuvwxyz' + + for upper, lower in zip(uppercase, lowercase): + print(upper, lower) + ``` + +3. This one is a bit more difficult than the other two because we + need to combine `zip` and `enumerate`. I would pass a `zip` + result to `enumerate`, like this: + + ```py + uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + lowercase = 'abcdefghijklmnopqrstuvwxyz' + + for index, letterpair in enumerate(zip(uppercase, lowercase), start=1): + upper, lower = letterpair + print(index, upper, lower) + ``` + + Another alternative is to pass an `enumerate` result to `zip`. This is + a bit more complicated, so I wouldn't do it this way. + + ```py + uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + lowercase = 'abcdefghijklmnopqrstuvwxyz' + + for upper, indexlowerpair in zip(uppercase, enumerate(lowercase, start=1)): + index, lower = indexlowerpair + print(index, upper, lower) + ``` + ## Defining functions -1. Use `-value` to get the negative in the abs function, and for loops - in the other two functions. +1. Use `-value` (it works just like `-1`) to get the negative in + the abs function, and for loops in the other two functions. ```py def my_abs(value): @@ -213,7 +280,7 @@ These are answers for exercises in the chapters. In programming, there's always for item in a_list: if item: return True # ends the function - return True + return False def my_all(a_list): for item in a_list: @@ -225,10 +292,10 @@ These are answers for exercises in the chapters. In programming, there's always 2. Like this: ```py - def box(message, character='*'): + def print_box(message, character='*'): number_of_characters = len(message) + 4 print(character * number_of_characters) - print(message) + print(character, message, character) print(character * number_of_characters) ``` diff --git a/trey-hunner-zip-and-enumerate.md b/trey-hunner-zip-and-enumerate.md new file mode 100644 index 0000000..5530512 --- /dev/null +++ b/trey-hunner-zip-and-enumerate.md @@ -0,0 +1,196 @@ +# Trey Hunner: zip and enumerate + +Now we know how [for loops](loops.md#for-loops) work in Python. But +for loops aren't limited to printing each item in a list, they can +do a lot more. + +To be able to understand for loop tricks we need to first know +assigning values to multiple variables at once. It works like this: + +```py +>>> a, b = 1, 2 +>>> a +1 +>>> b +2 +>>> +``` + +We can use `()` and `[]` around these values however we want and +everything will still work the same way. `[]` creates a list, and +`()` creates a tuple. We'll talk more about tuples later. + +```py +>>> [a, b] = (1, 2) +>>> a +1 +>>> b +2 +>>> +``` + +We can also have `[]` or `()` on one side but not on the other +side. + +```py +>>> (a, b) = 1, 2 +>>> a +1 +>>> b +2 +>>> +``` + +What actually happened is that Python created a tuple automatically. + +```py +>>> 1, 2 +(1, 2) +>>> +``` + +If we're for looping over a list with pairs of values in it we +could do this: + +```py +>>> items = [('a', 1), ('b', 2), ('c', 3)] +>>> for pair in items: +... a, b = pair +... print(a, b) +... +a 1 +b 2 +c 3 +>>> +``` + +Or we can tell the for loop to unpack it for us. + +```py +>>> for a, b in items: +... print(a, b) +... +a 1 +b 2 +c 3 +>>> +``` + +Now you're ready to read [this looping +tutorial](http://treyhunner.com/2016/04/how-to-loop-with-indexes-in-python/). +Read it now, then read the summary and do the exercises. + +## Summary + +Assigning multiple values at once: + +```py +>>> a, b, c = 1, 2, 3 +>>> a +1 +>>> b +2 +>>> c +3 +>>> +``` + +For looping over a list of pairs: + +```py +>>> stuff = [('a', 1), ('b', 2), ('c', 3)] +>>> for a, b in stuff: +... print(a, b) +... +a 1 +b 2 +c 3 +>>> +``` + +For looping over two lists at once: + +```py +>>> colors = ['red', 'green', 'blue'] +>>> letters = ['R', 'G', 'B'] +>>> for letter, color in zip(letters, colors): +... print(letter, color) +... +R red +G green +B blue +>>> +``` + +For looping over a list with indexes: + +```py +>>> fillernames = ['foo', 'bar', 'biz', 'baz', 'spam', 'eggs'] +>>> for index, name in enumerate(fillernames): +... print(index, name) +... +0 foo +1 bar +2 biz +3 baz +4 spam +5 eggs +>>> +``` + +## Exercises + +1. Create a program that works like this. Here I entered everything + after the `>` prompt that the program displayed. + + ``` + Enter something, and press Enter without typing anything when you're done. + >hello there + >this is a test + >it seems to work + > + Line 1 is: hello there + Line 2 is: this is a test + Line 3 is: it seems to work + ``` + +2. Create a program that prints all letters from A to Z and a to z + next to each other: + + ``` + A a + B b + C c + ... + X x + Y y + Z z + ``` + + Start your program like this: + + ```py + uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + lowercase = 'abcdefghijklmnopqrstuvwxyz' + ``` + + **Hint:** how do strings behave with `zip`? Try it out on the + `>>>` prompt and see. + +3. Can you also make it print the indexes also? + + ``` + 1 A a + 2 B b + 3 C c + ... + 24 X x + 25 Y y + 26 Z z + ``` + +*** + +You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). + +[Back to the list of contents](README.md) From eb34d9a5603ff052c0b206cda78121ac207ff6ce Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 1 Oct 2016 22:55:49 +0300 Subject: [PATCH 053/329] add answer link --- trey-hunner-zip-and-enumerate.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/trey-hunner-zip-and-enumerate.md b/trey-hunner-zip-and-enumerate.md index 5530512..a1df40c 100644 --- a/trey-hunner-zip-and-enumerate.md +++ b/trey-hunner-zip-and-enumerate.md @@ -189,6 +189,8 @@ For looping over a list with indexes: 26 Z z ``` +The answers are [here](answers.md). + *** You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). From 744ba111ea498d17ff30f8755df01b118cd7ca2f Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 1 Oct 2016 23:10:34 +0300 Subject: [PATCH 054/329] clean up stuff --- answers.md | 45 ++++++++++++++++----------------------------- if.md | 26 ++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 29 deletions(-) diff --git a/answers.md b/answers.md index 96bb985..b2175f1 100644 --- a/answers.md +++ b/answers.md @@ -87,32 +87,6 @@ These are answers for exercises in the chapters. In programming, there's always print("Wrong username.") ``` - Example output: - - ``` - >>> ================================ RESTART ================================ - >>> - Enter your username: foo - Enter your password: biz - Welcome foo! - >>> ================================ RESTART ================================ - >>> - Enter your username: bar - Enter your password: baz - Welcome bar! - >>> ================================ RESTART ================================ - >>> - Enter your username: spam - Enter your password: eggs - Wrong username. - >>> ================================ RESTART ================================ - >>> - Enter your username: foo - Enter your password: lol - Wrong password! - >>> - ``` - ## Loops 1. For loop over the users, each user is a list that contains a @@ -197,7 +171,7 @@ These are answers for exercises in the chapters. In programming, there's always ## Trey Hunner: zip and enumerate -1. Read some lines with `input` and then enumerate it. +1. Read some lines with `input` into a list and then enumerate it. ```py print("Enter something, and press Enter without typing anything", @@ -238,8 +212,8 @@ These are answers for exercises in the chapters. In programming, there's always ``` 3. This one is a bit more difficult than the other two because we - need to combine `zip` and `enumerate`. I would pass a `zip` - result to `enumerate`, like this: + need to combine `zip` and `enumerate`. One way to do this is + to pass a `zip` result to `enumerate`, like this: ```py uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' @@ -250,6 +224,19 @@ These are answers for exercises in the chapters. In programming, there's always print(index, upper, lower) ``` + We can also save the zip result to a variable. I would + probably do this. + + ```py + uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + lowercase = 'abcdefghijklmnopqrstuvwxyz' + + letterzip = zip(uppercase, lowercase) + for index, letterpair in enumerate(letterzip, start=1): + upper, lower = letterpair + print(index, upper, lower) + ``` + Another alternative is to pass an `enumerate` result to `zip`. This is a bit more complicated, so I wouldn't do it this way. diff --git a/if.md b/if.md index f1e9d1a..f104f13 100644 --- a/if.md +++ b/if.md @@ -275,6 +275,32 @@ else: 5. Make a program that asks for username and password and checks them. Make users "foo" and "bar" with passwords "biz" and "baz". + Example output: + + ``` + >>> ================================ RESTART ================================ + >>> + Enter your username: foo + Enter your password: biz + Welcome foo! + >>> ================================ RESTART ================================ + >>> + Enter your username: bar + Enter your password: baz + Welcome bar! + >>> ================================ RESTART ================================ + >>> + Enter your username: spam + Enter your password: eggs + Wrong username. + >>> ================================ RESTART ================================ + >>> + Enter your username: foo + Enter your password: lol + Wrong password! + >>> + ``` + The answers are [here](answers.md). *** From 76ae3931796f286c2f14536c1e388a355fdeebbf Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 5 Oct 2016 16:27:13 +0300 Subject: [PATCH 055/329] fix typo --- trey-hunner-zip-and-enumerate.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/trey-hunner-zip-and-enumerate.md b/trey-hunner-zip-and-enumerate.md index a1df40c..f1e9c38 100644 --- a/trey-hunner-zip-and-enumerate.md +++ b/trey-hunner-zip-and-enumerate.md @@ -177,7 +177,7 @@ For looping over a list with indexes: **Hint:** how do strings behave with `zip`? Try it out on the `>>>` prompt and see. -3. Can you also make it print the indexes also? +3. Can you make it print the indexes also? ``` 1 A a From 2294f2c18e4b3bdcf0a872475baa3a0a4dfd339e Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 5 Oct 2016 16:27:21 +0300 Subject: [PATCH 056/329] more examples --- defining-functions.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/defining-functions.md b/defining-functions.md index 3f3ef1c..4acb251 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -391,6 +391,29 @@ variable would be much more difficult. Printing things is fine when you know that you'll only need to print the result and you'll never need to assign it to a variable. +So if our function returns a value we can use it like this: + +```py +>>> def return_hi(): +... return "hi" +... +>>> print(return_hi()) +hi +>>> +``` + +If the function prints instead we can call it and just throw away +the None it returns: + +```py +>>> def print_hi(): +... print("hi") +... +>>> print_hi() +hi +>>> +``` + ## Examples Ask yes/no questions. From 71129fe5d1da0d54393f461882c673ac31a07f9d Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 13 Oct 2016 17:43:38 +0300 Subject: [PATCH 057/329] n00b-friendliness :DD --- if.md | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/if.md b/if.md index f104f13..f1f1d48 100644 --- a/if.md +++ b/if.md @@ -73,6 +73,19 @@ but it's not possible to create custom keywords. That's why keywords are usually used for "magic" things that would be difficult to do with just functions. +Also note that if statements check the condition once only, so if you +set it to false later the if statement won't notice it. + +```py +>>> its_raining = True +>>> if its_raining: +... its_raining = False +... print("It's not raining, but this runs anyway.") +... +It's not raining, but this runs anyway. +>>> +``` + ## Storing code in files At this point it's easier to put your code into a file and use it @@ -167,7 +180,20 @@ else: print("It's not raining.") ``` -By combining that with the input function we can make a program that +The else part simply runs when the if statement doesn't run. It doesn't +check the condition again. + +```py +>>> its_raining = True +>>> if its_raining: +... its_raining = False +... else: +... print("It's not raining, but this still doesn't run.") +... +>>> +``` + +By combining `else` with the input function we can make a program that asks for a password and checks if it's correct. ```py From 9cfac8d086c9dd1ae967d0a3875a5795d677b8ac Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 15 Oct 2016 19:48:31 +0300 Subject: [PATCH 058/329] explain stuff better --- loops.md | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/loops.md b/loops.md index ca08947..a6e7aa1 100644 --- a/loops.md +++ b/loops.md @@ -84,6 +84,19 @@ Running the program may look like this: Or is it? (y=yes, n=no) n It's not raining anymore. +The while loop doesn't check the condition all the time, it only checks +it in the beginning. + +```py +>>> its_raining = True +>>> while its_raining: +... its_raining = False +... print("It's not raining, but the while loop doesn't know it yet.") +... +It's not raining, but the while loop doesn't know it yet. +>>> +``` + We can also interrupt a loop even if the condition is still true using the `break` keyword. In this case, we'll set condition to True and rely on nothing but `break` to end the loop. @@ -109,6 +122,17 @@ The program works like this: Is it raining? (y=yes, n=no) n It's not raining anymore. +Unlike setting the condition to False, breaking the loop ends it +immediately. + +```py +>>> while True: +... break +... print("This is never printed.") +... +>>> +``` + ## Until loops Python doesn't have until loops. If you need an until loop, use @@ -154,7 +178,7 @@ We could also create an index variable, and use a while loop: ```py >>> stuff = ['hello', 'hi', 'how are you doing', 'im fine', 'how about you'] ->>> length_of_stuff = len(stuff) # len(x) is the length of x, 5 in this case +>>> length_of_stuff = len(stuff) # len(stuff) is 5 >>> index = 0 >>> while index < length_of_stuff: ... print(stuff[index]) @@ -168,8 +192,9 @@ how about you >>> ``` -But there's `len()` and an index variable we need to increment. That's -a lot of stuff to worry about for just printing each item. +But there's `len()` and an index variable we need to increment and a +while loop and many other things to worry about. That's a lot of work +just for printing each item. This is when for loops come in: @@ -202,7 +227,11 @@ how about you >>> ``` -There's only one big limitation with for looping over lists. You +Right now the while loop version might seem easier to understand for +you, but later you'll realize that for loops are much easier to work +with than while loops and index variables, especially in large projects. + +There's only one big limitation with for looping over lists. We shouldn't modify the list in the for loop. If you do, the results can be surprising: @@ -216,7 +245,7 @@ be surprising: >>> ``` -Instead, you can create a copy of stuff and loop over it. +Instead, we can create a copy of stuff and loop over it. ```py >>> stuff = ['hello', 'hi', 'how are you doing', 'im fine', 'how about you'] @@ -228,7 +257,8 @@ Instead, you can create a copy of stuff and loop over it. >>> ``` -Or if you want to clear a list, just use the `.clear()` list method: +Or if we just want to clear a list, we can use the `clear` +[list method](https://docs.python.org/3/tutorial/datastructures.html#more-on-lists): ```py >>> stuff = ['hello', 'hi', 'how are you doing', 'im fine', 'how about you'] From 29e1cd8d2f465cca6b547e5f5633f12775d74b84 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 15 Oct 2016 20:06:40 +0300 Subject: [PATCH 059/329] you -> we --- loops.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/loops.md b/loops.md index a6e7aa1..7bc98fa 100644 --- a/loops.md +++ b/loops.md @@ -232,7 +232,7 @@ you, but later you'll realize that for loops are much easier to work with than while loops and index variables, especially in large projects. There's only one big limitation with for looping over lists. We -shouldn't modify the list in the for loop. If you do, the results can +shouldn't modify the list in the for loop. If we do, the results can be surprising: ```py From 49174bf93196eb35b5e4adcfa468fba6198bb326 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 18 Oct 2016 18:46:19 +0300 Subject: [PATCH 060/329] f-strings --- handy-stuff-strings.md | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index 5a0029d..b322b15 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -239,8 +239,9 @@ But that gets complicated if you have many things to add. Instead it's recommended to use string formatting. It means putting other things in the middle of a string. -Python has two ways to format strings. One is not better than the other, -they are just different. The two ways are: +Python has multiple ways to format strings. One is not necessarily +better than others, they are just different. Here's a few ways to solve +our problem: - `.format()`-formatting, also known as new-style formatting. This formatting style has a lot of features, but it's a little bit more @@ -271,7 +272,17 @@ they are just different. The two ways are: >>> ``` -Both formatting styles have many other features also: +- f-strings are even less typing, but new in Python 3.6. **Use this only if + you know that nobody will need to run your code on Python versions older + than 3.6.** Here the f is short for "format". + + ```py + >>> f"My name is {name} and I'm on the {channel} channel on {network}." + "My name is Akuli and I'm on the ##learnpython channel on freenode." + >>> + ``` + +All of these formatting styles have many other features also: ```py >>> 'Three zeros and number one: {:04d}'.format(1) From c926f3b760da08ca51eb2719c095b95ceaa08d85 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 18 Oct 2016 21:02:43 +0300 Subject: [PATCH 061/329] new introduction chapter --- README.md | 2 +- images/drawings.odg | Bin 20722 -> 12595 bytes images/key.png | Bin 0 -> 1505 bytes introduction.md | 45 ---------------- what-is-programming.md | 119 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 120 insertions(+), 46 deletions(-) create mode 100644 images/key.png delete mode 100644 introduction.md create mode 100644 what-is-programming.md diff --git a/README.md b/README.md index 56a2b76..34c87ab 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ the chapter you're trying to read.** However, the chapters are mostly independent from each other, so you can also use this tutorial together with other tutorials. -1. [Quick introduction to this tutorial](introduction.md) +1. [What is programming?](what-is-programming.md) 2. [Installing Python](installing-python.md) 3. [Getting started with Python](getting-started.md) 4. [ThinkPython: The way of the program](the-way-of-the-program.md) diff --git a/images/drawings.odg b/images/drawings.odg index bc1061fb55f003754dada4b747f9e6a8586ef6f7..c2ec627dde41f67cf275a0cad9872224514d7ad2 100644 GIT binary patch delta 8666 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 T%rF~yV%V(8W7Li350?J|#+wb# delta 16880 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

Tg9Fn&(WUqgQH36>Ilk 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 E0*oHVZU6uP diff --git a/images/key.png b/images/key.png new file mode 100644 index 0000000000000000000000000000000000000000..edeb724c3631e3393d14c693946184ce7774e087 GIT binary patch literal 1505 zcmb7EdpOez7#`Y5bH5cs3ZZQo$v7_0+{tp=aU@4f=a8_lvapL=JGmZ7qUcC?G)_h( zV)>0(PHCK{Qm!+1naiZqm^tg|pL6~=f1E$Q?|Yv2kMI4y_j#W;$KTge2?B+HKp>^# zUT#?FO!`{#veLd2^}Rqk_9S?nx&Q(xcYZCIMVDq42m~%Z?&chrT(NxnIR=i=yi(nh zqiWPI_p2F9IqwQz(_fEu&NQHhcA!1sV0IqDt&1iB=bE)^f_M9$ylc2i^H{dg)EB+X zXty)Qs@B=A1ci08&AF~wM@Q3XQBcw?e_*Qmhts!LF6QA;qwDMIY<3psjG9`4m+`f- zGHuJ^hM zn$PUp_aRR~#G#3&T&RiPVAbs#rKRO3Oh}~j=Y7pfrz4*n38t>Dth9yF18CdwZEa)Qskk`*n47Ok;qxaM6z1f_89l zK%w>;ag3bS1PKZ3Y@y~~+fk8`5pKzl1u7-wgI2^B3W?Ow*2X_10?#ciElp3edB5f4 zMD*GSi7$0|(Qn3~Q5X+xCr8dMTVu(04n zY0dRp1vE4?hLDYG=Ku@_(~UJLP9hTL=I0-N7kK&McKcwKdVG95?NB)!27}>@aAHY{ zHy)24A0KaNg~Q>_>dv@zMiau!3{>bekv3d)vrkD;F)lWi?JGtV6&3L*Q=2Wp2st@9 z<{u13VPT=Ck9dznBKeBz>*!cQ3pR++(a{);LQI8j=ECR2#hBF8Tcuns_k?9w1u1i( z6#yy$I^57O(?>b^)I>VEMo9|+*xTFd>gqD%Vqzc=h|7!3{mOY(&D!qZ8xvJk2YFGi zGrenFAe*S-;^J=g_bRW=sKc2{e13YVwY7CuSC_W)1S<|DxY$mo(@RRUI*V?9deqwb zb5GS5eFKAeJnCb6yIubE)qtR&xh8j52{9>Yc6K(Rr)$evTTvhoFkklf6X&fNSo+fP zGKVC8m^neCfg1*2^wrnHgz`?0LZkxW!^6V^0@OTqgjCu(w7RWL+hNKy`WO_o)Bo}% z0*M@Lb#Qc~4=y%0Tjrk~0c}ypWCt{QK9WE<`je>JL#+C^Oe9bs;`o5y1LPQ=&ld_U zlJ%M<5Wt zzp5%|w9YTQ@)Cb?QbruetJ{9SX7}|eAm6=x3xz^)M&yzBkdP4`Z$Hx0(=+nuO)One zK_M$wcn*M-crTP5p{Ay$F5y470|Tz~#>Ob>{M?+-kUWB{?&#>aa|cHxZp_SFUIw}i z{G5bIz+DC$y3=`22K?__k@_DHJq3VE{iox3O2DC$GyF?wX%p|W)(Ac7IntkJHaA1+ zUO!2-2y>V6g@#tx!eB9Y{Qah;tKx2T1A~DciLAX2kQec8yg{1TpyTeoZjCOu%)bG{ CjP>#W literal 0 HcmV?d00001 diff --git a/introduction.md b/introduction.md deleted file mode 100644 index 402e095..0000000 --- a/introduction.md +++ /dev/null @@ -1,45 +0,0 @@ -# Quick introduction to this tutorial - -I started writing a full Python tutorial, but I stopped when I realized -that it would be a lot of work. Instead, I started adding links to other -free tutorials. Since much of this is collected from different places -around the Internet, you will end up reading about some things twice. -Just skip them and move on :) - -Everything in this tutorial contains lots of examples, and the tutorial -should be easy to follow. But what should you do if you don't understand -something the first time you read it? - -- Read the example code and the explanation for it again. -- Try the example yourself. -- If there's something you haven't seen before in the tutorial and it's - not explained, try to find it from the previous chapters. Also feel - free to come back to previous chapters of this tutorial while doing - the exercises! -- If you still have trouble understanding the tutorial or any other - problems with the tutorial, please [tell me](contact-me.md). I want - to improve the tutorial so other readers won't have the same - problems as you have. - -One of the most important things with learning to program is to **not -fear mistakes**. If you make a mistake, your computer will not break in -any way. You'll get an error message that tells you what's wrong and -where. Even professional programmers do mistakes and get error messages -all the time, and there's nothing wrong with it. - -Even though a good tutorial is an important part about learning to -program, you also need to learn to make your own things. Use what you -have learned, and create something with it. - -## Summary - -- Now you should know what to do if you don't understand something. -- Don't fear mistakes. -- Error messages are your friends. -- Don't be limited to this tutorial, also make your own programs. - -*** - -You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md) diff --git a/what-is-programming.md b/what-is-programming.md new file mode 100644 index 0000000..3420bf8 --- /dev/null +++ b/what-is-programming.md @@ -0,0 +1,119 @@ +# What is programming? + +**Feel free to [skip this part](#how-to-read-this-tutorial) if you already +know everything it's talking about.** + +As a computer user you know that computers don't have feelings. They don't +work any faster or slower depending on if you're angry at them or if you're +happy. Computers can perform millions of calculations per second, but they +require you to tell them exactly what to do. If they do something else than +you want them to do the problem is usually that they don't understand your +instructions the way you understand them. + +The only big difference between programming and what you're familiar with +already is that instead of clicking buttons to do things we write the +instructions using a **programming language**. Most programming languages +consist of English words, digits and some characters that have special +meanings. This tutorial uses a programming language called Python because it's +easy to learn and you can do many different things with it. For example, you +can create your own applications that have buttons that people can click +instead of just using applications written by others. + +Before we can get started with Python you need to know how to write some of +Python's special characters with your keyboard. Unfortunately I don't know +which keys you need to press to produce these characters because your keyboard +is probably different than mine. But the keyboard can tell what you +need to press. For example, my Finnish keyboard has a key like this: + +![A key on my keyboard.](images/key.png) + +Here's what the characters on this key mean: + +- I can type a number 7 by pressing this key without holding down other keys + at the same time. +- I can type a `/` character by holding down the shift key (on the left edge + of the keyboard, between Ctrl and CapsLock) and pressing this key. +- I can type a `{` character by holding down AltGr (on the bottom of the + keyboard, on the right side of the spacebar) and pressing this key. + Holding down Ctrl and Alt instead of AltGr may also work. + +The only key that doesn't have anything written on it is spacebar. It's the +big, wide key that's closest to you. Another key that's used for producing +whitespace is tab, the key above CapsLock. + +In this tutorial we need to know how to type these characters. We'll learn +their meanings later. + +| Character | Names | +|-----------|---------------------------------------| +| `+` | plus | +| `-` | minus, dash, hyphen | +| `_` | underscore | +| `*` | star, asterisk | +| `/` | forwardslash (it's leaning forward) | +| `\` | backslash (it's leaning back) | +| `=` | equals sign | +| `%` | percent sign | +| `.` | dot | +| `,` | comma | +| `:` | colon | +| `?` | question mark | +| `!` | exclamation mark | +| `<` `>` | less-than and greater-than signs | +| `'` `"` | single quote and double quote | +| `#` | hashtag | +| `()` | parentheses | +| `[]` | square brackets, brackets | +| `{}` | curly braces, braces, curly brackets | + +That may seem like many characters, but you probably know many of them already +so it shouldn't be a problem. + +## How to read this tutorial + +I've done my best to make this tutorial as easy to follow as possible. Other +people have commented on this and helped me improve this a lot also. But what +should you do if you have a problem with the tutorial? + +1. Try the example code yourself. +2. Read the code and the explanation for it again. +3. If there's something you haven't seen before in the tutorial and it's + not explained, try to find it from the previous chapters. +4. If you still have trouble understanding the tutorial or any other problems + with the tutorial, please [tell me about it](contact-me.md). I want to + improve this tutorial so other readers won't have the same problem as you + have. +5. See [Getting help](getting-help.md) if you can't contact me for some + reason. + +You are free to combine this tutorial with other learning resources. If this +tutorial isn't exactly what you're looking for you don't need to stick with +nothing but this. You can find another tutorial and mix the tutorials however +you want as long as you **make sure that you understand everything you read**. + +One of the most important things with learning to program is to **not +fear mistakes**. If you make a mistake, your computer will not break in +any way. You'll get an error message that tells you what's wrong and +where. Even professional programmers do mistakes and get error messages +all the time, and there's nothing wrong with it. + +Even though a good tutorial is an important part about learning to +program, you also need to learn to make your own things. Use what you +have learned, and create something with it. + +## Summary + +- Now you should know what programming and programming languages are. +- You don't need to remember how to type different characters. Just find the + character on your keyboard and press the key, holding down shift or AltGr + as needed. +- Make sure you understand everything you read. +- Don't fear mistakes. +- Error messages are your friends. +- Let me know if you have trouble with this tutorial. +- Now we're ready to [install Python](installing-python.md) and + [get started](getting-started.md)! + +*** + +You may use this tutorial at your own risk. See [LICENSE](LICENSE). From e447bd5d0802f80e08be398cb46e2d38e914589b Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 18 Oct 2016 21:11:38 +0300 Subject: [PATCH 062/329] broken link --- getting-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/getting-started.md b/getting-started.md index 057a89b..db69103 100644 --- a/getting-started.md +++ b/getting-started.md @@ -18,7 +18,7 @@ NameError: name 'hello' is not defined ``` Oops! That didn't work. But like I wrote in the -[introduction](introduction.md), **errors don't matter**. +[introduction](what-is-programming.md), **errors don't matter**. Maybe we can press Enter without typing anything? From 51b7d8084d49729442fbf358c2273be611819733 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 18 Oct 2016 21:13:57 +0300 Subject: [PATCH 063/329] don't be limited 2 idle --- getting-started.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/getting-started.md b/getting-started.md index db69103..0124be6 100644 --- a/getting-started.md +++ b/getting-started.md @@ -75,6 +75,15 @@ after it? Again, nothing happened. +If you're not using IDLE, the prompt will change from `>>>` to +`...`. Just press Enter again to get it back to `>>>`. + +```py +>>> # +... +>>> +``` + In Python, these pieces of text starting with a `#` are known as **comments**. They don't effect the code in any way, but you can use them to explain what your code does. From d7dc18622c7c14531a1fcbf99779eb4a377c65c4 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 18 Oct 2016 21:16:41 +0300 Subject: [PATCH 064/329] oops! :D --- getting-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/getting-started.md b/getting-started.md index 0124be6..21a147f 100644 --- a/getting-started.md +++ b/getting-started.md @@ -205,7 +205,7 @@ Powers are calculated before `*` and `/`, but after `()`. - You can enter any Python commands to the interactive `>>>` prompt, and it will echo back the result. - Pieces of text starting with a `#` are comments. -- `+`, `-`, `*` and `\` work in Python just like in math. +- `+`, `-`, `*` and `/` work in Python just like in math. *** From 14f0c83c2869b2f97db483740e48493f2e216cd3 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 18 Oct 2016 21:31:07 +0300 Subject: [PATCH 065/329] you -> we --- if.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/if.md b/if.md index f1f1d48..3c5c3cf 100644 --- a/if.md +++ b/if.md @@ -142,7 +142,7 @@ file**. ## Using else -What if you want to print a different message if it's not raining? You +What if we want to print a different message if it's not raining? We could do something like this: ```py @@ -155,10 +155,10 @@ if its_not_raining: print("It's not raining.") ``` -Now your program will print a different value depending on what the +Now our program will print a different value depending on what the value of `its_raining` is. -You can also add `not its_raining` directly to the second if statement: +We can also add `not its_raining` directly to the second if statement: ```py its_raining = True @@ -169,7 +169,7 @@ if not its_raining: print("It's not raining.") ``` -But you can make it even better by using `else`. +But we can make it even better by using `else`. ```py its_raining = True From 6610a87c090394bf97c1a02acdec201fb95edaea Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 19 Oct 2016 16:06:21 +0300 Subject: [PATCH 066/329] for-in might be confusing to some people --- loops.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/loops.md b/loops.md index 7bc98fa..b1e3a19 100644 --- a/loops.md +++ b/loops.md @@ -227,6 +227,11 @@ how about you >>> ``` +Note that `for thing in stuff:` is not same as `for (thing in stuff):`. +Here the `in` keyword is just a part of the for loop and it has a +different meaning than it would have if we had `thing in stuff` without +a `for`. + Right now the while loop version might seem easier to understand for you, but later you'll realize that for loops are much easier to work with than while loops and index variables, especially in large projects. From 8fdcc8a7c43c7a136c3f5d14365e6a392cd34602 Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 19 Oct 2016 16:08:33 +0300 Subject: [PATCH 067/329] python 3.2 --- loops.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/loops.md b/loops.md index b1e3a19..7e858c4 100644 --- a/loops.md +++ b/loops.md @@ -273,6 +273,10 @@ Or if we just want to clear a list, we can use the `clear` >>> ``` +If you're using Python 3.2 or older you need to use `stuff[:]` instead +of `stuff.copy()` and `stuff[:] = []` instead of `stuff.clear()`. +`stuff[:]` is a slice of the whole list, just like `stuff[0:]`. + ## Exercises 1. Back in "Using if, else and elif" we created a program that asked From 2fc660a890d7fab088acefd7468452ccd1297611 Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 21 Oct 2016 16:22:25 +0300 Subject: [PATCH 068/329] explain arguments more --- defining-functions.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/defining-functions.md b/defining-functions.md index 4acb251..1f449f5 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -199,6 +199,10 @@ and prints it. Maybe a custom function could also take an argument? >>> ``` +Here `message` is an argument. When we call the function we'll get a +local variable called message that will point to whatever we passed +to `print_twice`. + This function can be called in two ways: - Using a **positional argument**. @@ -213,6 +217,9 @@ This function can be called in two ways: >>> ``` + When the function was running it had a local `message` variable + that pointed to `"hi"`. The function printed it twice. + Positional arguments are great for simple things, but if your function takes many positional arguments it may be hard to tell which argument is which. From d972f507ada1ff98dfad1e479ed0d560cfca972d Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 27 Oct 2016 19:31:37 +0300 Subject: [PATCH 069/329] better windows instructions --- installing-python.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installing-python.md b/installing-python.md index fccf813..fe46a1c 100644 --- a/installing-python.md +++ b/installing-python.md @@ -19,7 +19,7 @@ you. 2. Move your mouse over the blue Downloads button, but don't click it, Then click the button that downloads the latest version of Python. 3. Run the installer. -4. Select the "advanced installation" option, and make sure the py.exe +4. Install Python like any other program. Make sure the py.exe launcher gets installed. ### Mac OSX From edda8c10709533dedee6ae08a19d9473e86b982f Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 27 Oct 2016 19:39:14 +0300 Subject: [PATCH 070/329] link to python's faq --- installing-python.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/installing-python.md b/installing-python.md index fe46a1c..28d1d81 100644 --- a/installing-python.md +++ b/installing-python.md @@ -95,11 +95,12 @@ On GNU/Linux or Mac OSX, type `python3` instead: Type "help", "copyright", "credits" or "license" for more information. >>> +Now you can type `exit()` and press Enter to get out of Python. + You may also have an older version of Python installed, but don't remove it. Your system may need it, so if you replace it with your own Python -some things might stop working. - -Now type `exit()` and press Enter to get out of Python. +some things might stop working. See +[this](https://docs.python.org/3/faq/installed.html) for more info. ## Summary From c338e740a2177edf30071edf4dfea9b6572311c6 Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 28 Oct 2016 18:34:01 +0300 Subject: [PATCH 071/329] work on exceptions --- exceptions.md | 234 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 185 insertions(+), 49 deletions(-) diff --git a/exceptions.md b/exceptions.md index ad7eada..dbbaf92 100644 --- a/exceptions.md +++ b/exceptions.md @@ -1,42 +1,22 @@ # Exceptions -So far we have made programs that ask the user to enter a string. +So far we have made programs that ask the user to enter a string, and +we also know how to convert that to an integer. ```py text = input("Enter something: ") -print("Your text twice:", text*2) -``` - -That works. - -``` -Enter something: hello -Your text twice: hellohello -``` - -But if the user enters a number, it's not going to be multiplied by two. - -``` -Enter something: 3 -Your text twice: 33 -``` - -Let's use `int` to convert that to an integer: - -```py -text = input("Enter a number: ") number = int(text) -print("Your number twice:", number*2) +print("Your number doubled:", number*2) ``` -That works... +That works. ``` Enter a number: 3 Your number twice: 6 ``` -...unless the user does not enter a number. +But that doesn't work if the user does not enter a number. ```py Enter a number: lol @@ -53,7 +33,8 @@ So how can we fix that? In the previous example we got a ValueError. ValueError is an **exception**. In other words, ValueError is an error that can occur in our program. If an exception occurs, the program will stop and we -get an error message. +get an error message. The interactive prompt will display an error +message and keep going. ```py >>> int('lol') @@ -63,28 +44,21 @@ ValueError: invalid literal for int() with base 10: 'lol' >>> ``` -Exceptions are classes, just like int and str. We'll talk more about -classes later in this tutorial. +Exceptions are [classes](classes.md). ```py ->>> str - ->>> int - >>> ValueError >>> ``` -You can also create an exception. You won't get an error message by doing +We can also create exceptions. We won't get an error message by doing that, but we'll use this for displaying our own error messages later. ```py >>> the_problem = ValueError('oh no') >>> the_problem ValueError('oh no',) ->>> type(the_problem) - >>> ``` @@ -124,6 +98,21 @@ TypeError: unsupported operand type(s) for +: 'int' and 'str' >>> ``` +Exceptions always interrupt the code even if we catch them. Here the +print never runs because it's after the error but inside the `try` +block. Everything after the try block runs normally. + +```py +>>> try: +... 123 + 'hello' +... print("This doesn't get printed.") +... except TypeError: +... print("Oops!") +... +Oops! +>>> +``` + Does an `except ValueError` also catch TypeErrors? ```py @@ -163,7 +152,28 @@ wrong type Seems to be working. -It's also possible to catch an exception, and store it in a variable: +Catching `Exception` will catch all errors. We'll learn more about why +it does that in a moment. + +```py +>>> try: +... 123 + 'hello' +... except Exception: +... print("Oops!") +... +Oops! +>>> try: +... int('lol') +... except Exception: +... print("Oops!") +... +Oops! +>>> +``` + +It's also possible to catch an exception and store it in a variable. +Here we are catching an exception that Python created and storing it in +`our_error`. ```py >>> try: @@ -178,10 +188,48 @@ TypeError("unsupported operand type(s) for +: 'int' and 'str'",) >>> ``` +## When should we catch exceptions? + +Never do things like this: + +```py +try: + # many lines of code +except Exception: + print("Oops! Something went wrong.") +``` + +There's many things that can go wrong in the `try` block. If something +goes wrong all we have is an oops message that doesn't tell us which +line caused the problem. This makes fixing problems a lot harder. If we +want to catch exceptions we need to be specific about what exactly we +want to catch instead of catching everything we can. + +There's nothing wrong with doing things like this: + +```py +try: + with open('some file', 'r') as f: + content = f.read() +except OSError: # we can't read the file but we can work without it + content = some_default_content +``` + +Usually catching errors that the user has caused is also a good idea: + +```py +text = input("Enter a number: ") +try: + number = int(text) +except ValueError: + print("'%s' is not a number." % text, file=sys.stderr) + sys.exit(1) +print("Your number doubled is %d." % (number * 2)) +``` + ## Raising exceptions -When working on something that other programmers are going to use, -you may end up doing something like this: +Sometimes you may end up doing something like this: ```py if number < 0: @@ -190,10 +238,10 @@ if number < 0: But that's not ideal. If there is an error, the code prints an error message but it still keeps running. People using your code also don't know -which line in their code caused the error. +which line in **their** code caused the error. -Instead you can **raise** an exception yourself. Sometimes this is also -called **throwing** an exception. +Instead you can **raise an exception** yourself. Sometimes this is also +called **throwing an exception**. ```py if number < 0: @@ -210,19 +258,107 @@ ValueError: number must be non-negative >>> ``` -It's working. +Of course, we can also raise an exception from a variable. -**TODO:** except Exception +```py +>>> oops = ValueError("number must be non-negative") +>>> raise oops +Traceback (most recent call last): + File "", line 1, in +ValueError: number must be non-negative +>>> +``` -**TODO:** introduce assert here? +## When should we raise exceptions? + +Back in [the module chapter](modules.md) we learned to display error +messages by printing to `sys.stderr` and then calling `sys.exit(1)`, so +when should we use that and when should we raise an exception? + +Exceptions are meant for **programmers**, so if we're writing a module +that other people will import we should probably use exceptions. For +other errors (for example, if the **user** of the program has done +something wrong) it's usually better to use `sys.stderr` and `sys.exit`. + +## Exception hierarchy + +Exceptions are organized like this. I made this tree diagram with +[this program](https://github.com/Akuli/classtree/) on Python 3.4. You +may have more or less exceptions than I have if your Python is newer or +older than mine, but they should be mostly similar. + + Exception + ├── ArithmeticError + │ ├── FloatingPointError + │ ├── OverflowError + │ └── ZeroDivisionError + ├── AssertionError + ├── AttributeError + ├── BufferError + ├── EOFError + ├── ImportError + ├── LookupError + │ ├── IndexError + │ └── KeyError + ├── MemoryError + ├── NameError + │ └── UnboundLocalError + ├── OSError + │ ├── BlockingIOError + │ ├── ChildProcessError + │ ├── ConnectionError + │ │ ├── BrokenPipeError + │ │ ├── ConnectionAbortedError + │ │ ├── ConnectionRefusedError + │ │ └── ConnectionResetError + │ ├── FileExistsError + │ ├── FileNotFoundError + │ ├── InterruptedError + │ ├── IsADirectoryError + │ ├── NotADirectoryError + │ ├── PermissionError + │ ├── ProcessLookupError + │ └── TimeoutError + ├── ReferenceError + ├── RuntimeError + │ └── NotImplementedError + ├── StopIteration + ├── SyntaxError + │ └── IndentationError + │ └── TabError + ├── SystemError + ├── TypeError + ├── ValueError + │ └── UnicodeError + │ ├── UnicodeDecodeError + │ ├── UnicodeEncodeError + │ └── UnicodeTranslateError + └── Warning + ├── BytesWarning + ├── DeprecationWarning + ├── FutureWarning + ├── ImportWarning + ├── PendingDeprecationWarning + ├── ResourceWarning + ├── RuntimeWarning + ├── SyntaxWarning + ├── UnicodeWarning + └── UserWarning + +Catching an exception also catches everything that's under it in this +tree. For example, catching `OSError` catches errors that we typically +get when [processing files](files.md), and catching Exception catches +all errors. You don't need to remember this tree, running +`help('builtins')` should display a larger tree that this is a part of. ## Summary -- Exceptions can be used just like any other variables. +- Exceptions are classes and they can be used just like all other classes. - ValueError and TypeError are some of the most commonly used exceptions. - The `try` and `except` keywords can be used for attempting to do - something and then doing something else if it causes an error. This - is known as catching exceptions. You can use one `try` statement with - multiple `except` statements. -- It's also possible to raise exceptions with the `raise` keyword. This + something and then doing something else if we get an error. This is + known as catching exceptions. +- It's possible to raise exceptions with the `raise` keyword. This is also known as throwing exceptions. +- Raise exceptions if they are meant to be displayed for programmers and + use `sys.stderr` and `sys.exit` otherwise. From 62ecb7a4765c9e0b76c63d6acd6276e8295676cb Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 29 Oct 2016 19:25:15 +0300 Subject: [PATCH 072/329] work on the exceptions --- exceptions.md | 174 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 142 insertions(+), 32 deletions(-) diff --git a/exceptions.md b/exceptions.md index dbbaf92..ec6f110 100644 --- a/exceptions.md +++ b/exceptions.md @@ -70,25 +70,30 @@ exception. ```py >>> try: -... print(int('123')) +... print(int('lol')) ... except ValueError: ... print("Oops!") ... -123 +Oops! +>>> +``` + +The except part doesn't run if the try part succeeds. + +```py >>> try: -... print(int('lol')) +... print("Hello World!") ... except ValueError: -... print("Oops!") +... print("What the heck? Printing failed!") ... -Oops! +Hello World! >>> ``` ValueError is raised when something gets an invalid value, but the value's type is correct. In this case, `int` can take a string as an -argument, but the string needs to contain a number, not `lol`. - -If the type is wrong, we will get a TypeError instead. +argument, but the string needs to contain a number, not `lol`. If +the type is wrong, we will get a TypeError instead. ```py >>> 123 + 'hello' @@ -98,6 +103,20 @@ TypeError: unsupported operand type(s) for +: 'int' and 'str' >>> ``` +Catching ValueError doesn't catch TypeErrors. + +```py +>>> try: +... 123 + 'hello' +... except ValueError: +... print("wrong value") +... +Traceback (most recent call last): + File "", line 2, in +TypeError: unsupported operand type(s) for +: 'int' and 'str' +>>> +``` + Exceptions always interrupt the code even if we catch them. Here the print never runs because it's after the error but inside the `try` block. Everything after the try block runs normally. @@ -152,6 +171,24 @@ wrong type Seems to be working. +We can catch multiple exceptions by catching a tuple of exceptions: + +```py +>>> try: +... 123 + 'hello' +... except (ValueError, TypeError): +... print('wrong value or type') +... +wrong value or type +>>> try: +... int('lol') +... except (ValueError, TypeError): +... print('wrong value or type') +... +wrong value or type +>>> +``` + Catching `Exception` will catch all errors. We'll learn more about why it does that in a moment. @@ -203,7 +240,8 @@ There's many things that can go wrong in the `try` block. If something goes wrong all we have is an oops message that doesn't tell us which line caused the problem. This makes fixing problems a lot harder. If we want to catch exceptions we need to be specific about what exactly we -want to catch instead of catching everything we can. +want to catch and where instead of catching everything we can in the +whole program. There's nothing wrong with doing things like this: @@ -218,6 +256,8 @@ except OSError: # we can't read the file but we can work without it Usually catching errors that the user has caused is also a good idea: ```py +import sys + text = input("Enter a number: ") try: number = int(text) @@ -229,53 +269,62 @@ print("Your number doubled is %d." % (number * 2)) ## Raising exceptions -Sometimes you may end up doing something like this: - -```py -if number < 0: - print("ERROR: number must be non-negative") -``` +Now we know how to create exceptions and how to handle errors that +Python creates. But we can also create error messages manually. This +is known as **raising an exception** and **throwing an exception**. -But that's not ideal. If there is an error, the code prints an error -message but it still keeps running. People using your code also don't know -which line in **their** code caused the error. - -Instead you can **raise an exception** yourself. Sometimes this is also -called **throwing an exception**. +Raising an exception is easy. All we need to do is to type `raise` +and then an exception we want to raise: ```py -if number < 0: - raise ValueError("number must be non-negative") +>>> raise ValueError("lol is not a number") +Traceback (most recent call last): + File "", line 1, in +ValueError: lol is not a number +>>> ``` -Let's try that on the interactive prompt, and see what that does. +Of course, we can also raise an exception from a variable. ```py ->>> raise ValueError("number must be non-negative") +>>> oops = ValueError("lol is not a number") +>>> raise oops Traceback (most recent call last): File "", line 1, in -ValueError: number must be non-negative +ValueError: lol is not a number >>> ``` -Of course, we can also raise an exception from a variable. +If we [define a function](defining-functions.md) that raises an +exception and call it we'll notice that the error message also +says which functions we ran to get to that error. ```py ->>> oops = ValueError("number must be non-negative") ->>> raise oops +>>> def oops(): +... raise ValueError("oh no!") +... +>>> def do_the_oops(): +... oops() +... +>>> do_the_oops() Traceback (most recent call last): File "", line 1, in -ValueError: number must be non-negative + File "", line 2, in do_the_oops + File "", line 2, in oops +ValueError: oh no! >>> ``` +If our code was in a file we would also see the line of code +that raised the error. + ## When should we raise exceptions? Back in [the module chapter](modules.md) we learned to display error messages by printing to `sys.stderr` and then calling `sys.exit(1)`, so when should we use that and when should we raise an exception? -Exceptions are meant for **programmers**, so if we're writing a module +Exceptions are meant for **programmers**, so if we are writing a module that other people will import we should probably use exceptions. For other errors (for example, if the **user** of the program has done something wrong) it's usually better to use `sys.stderr` and `sys.exit`. @@ -348,7 +397,7 @@ older than mine, but they should be mostly similar. Catching an exception also catches everything that's under it in this tree. For example, catching `OSError` catches errors that we typically get when [processing files](files.md), and catching Exception catches -all errors. You don't need to remember this tree, running +all of these errors. You don't need to remember this tree, running `help('builtins')` should display a larger tree that this is a part of. ## Summary @@ -362,3 +411,64 @@ all errors. You don't need to remember this tree, running is also known as throwing exceptions. - Raise exceptions if they are meant to be displayed for programmers and use `sys.stderr` and `sys.exit` otherwise. + +## Examples + +Keep asking a number from the user until it's entered correctly. + +```py +while True: + try: + number = int(input("Enter a number: ")) + break + except ValueError: + print("That's not a valid number! Try again.") + +print("Your number doubled is:", number * 2) +``` + +This program allows the user to customize the message it prints by +modifying a file the greeting is stored in, and it can create the +file for the user if it doesn't exist already. This example also uses +things from [the file chapter](files.md), [the function defining +chapter](defining-functions.md) and [the module chapter](modules.md). + +```py +# These are here so you can change them to customize the program +# easily. +default_greeting = "Hello World!" +filename = "greeting.txt" + + +import sys + +def askyesno(question): + while True: + answer = input(question + ' (y or n) ') + if answer == 'Y' or answer == 'y': + return True + if answer == 'N' or answer == 'n': + return False + +def greet(): + with open(filename, 'r') as f: + for line in f: + print(line.rstrip('\n')) + +try: + greet() +except OSError: + print("Cannot read '%s'!" % filename, file=sys.stderr) + if askyesno("Would you like to create a default greeting file?"): + try: + with open(filename, 'w') as f: + print(default_greeting, file=f) + except OSError: + print("Cannot create '%s' :(" % filename, file=sys.stderr) + sys.exit(1) # time to give up + greet() +``` + +*** + +You may use this tutorial at your own risk. See [LICENSE](LICENSE). From 4eb1fb38e697a5b73e550eac076c05b0dcd7be07 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 29 Oct 2016 20:08:41 +0300 Subject: [PATCH 073/329] update readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 34c87ab..ccaa483 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ Parts of this tutorial that aren't ready to be added to the rest of it yet: - [Classes](classes.md) +- [Exceptions](exceptions.md) Other things this tutorial comes with: From 4a77f1b0d8bfb5ba33cd8816b78815dfa4fc6c0a Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 29 Oct 2016 22:58:32 +0300 Subject: [PATCH 074/329] better licensing based on http://choosealicense.com/appendix/ --- LICENSE | 61 +++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 19 deletions(-) diff --git a/LICENSE b/LICENSE index 24463d7..0df1b8f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,26 +1,49 @@ - This is a slightly modified version of the MIT license. - You can read the original license here: +The instructions and text in this tutorial (the "software") are licensed +under the zlib License. - https://opensource.org/licenses/MIT + (C) 2016 Akuli + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: -Copyright (c) 2016 Akuli + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. -Permission is hereby granted, free of charge, to any person obtaining a -copy of this tutorial and associated code examples (the “Tutorial”), to -deal in the Tutorial without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Tutorial, and to permit persons to whom the -Tutorial is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Tutorial. -THE TUTORIAL IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -TUTORIAL OR THE USE OR OTHER DEALINGS IN THE TUTORIAL. +The code examples (the "software") are unlicensed: + + This is free and unencumbered software released into the public domain. + + Anyone is free to copy, modify, publish, use, compile, sell, or + distribute this software, either in source code form or as a compiled + binary, for any purpose, commercial or non-commercial, and by any + means. + + In jurisdictions that recognize copyright laws, the author or authors + of this software dedicate any and all copyright interest in the + software to the public domain. We make this dedication for the benefit + of the public at large and to the detriment of our heirs and + successors. We intend this dedication to be an overt act of + relinquishment in perpetuity of all present and future rights to this + software under copyright law. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + For more information, please refer to From 1298e9ab577c402c646b6b92d51dd6c90e3afb6e Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 29 Oct 2016 23:13:22 +0300 Subject: [PATCH 075/329] you->we, more examples, other fixes --- classes.md | 38 +++++++++++++------------ defining-functions.md | 47 +++++++++++++++---------------- editor-setup.md | 8 +++--- exceptions.md | 4 +++ files.md | 64 +++++++++++++++++++++++++++--------------- getting-started.md | 26 +++++++++-------- handy-stuff-strings.md | 47 ++++++++++++++++++++++--------- if.md | 26 +++++++++-------- installing-python.md | 3 +- loops.md | 4 +-- modules.md | 35 +++++++++++++---------- variables.md | 25 +++++++++-------- what-is-programming.md | 16 +++++------ 13 files changed, 201 insertions(+), 142 deletions(-) diff --git a/classes.md b/classes.md index 2eae318..97ecf8e 100644 --- a/classes.md +++ b/classes.md @@ -5,9 +5,9 @@ tkinter GUI's before I understood how they work. Everything I did with classes worked, but I didn't understand how. Hopefully you'll first learn to understand classes, and then learn to use them. -This tutorial assumes that you know how functions work and how to -create your own functions with the `def` keyword. If you don't, I -highly recommend learning that first, and then moving to classes. +This tutorial assumes that you know [how functions work](using-functions.md) +and [how to create your own functions](defining-functions.md). If you +don't I highly recommend learning that first, and then moving to classes. ## Why should I use custom classes in my projects? @@ -81,13 +81,6 @@ Let's use it to define an empty class. >>> ``` -_**Note:** If you are using Python 2 I highly recommend using -`class Website(object):` instead of `class Website:`. This creates a -new-style class instead of an old-style class. Old-style classes are -different than new-style classes in some ways and not supported in this -tutorial. In Python 3, there are no old-style classes and -`class Website(object):` does the same thing as `class Website:`._ - Note that I named the class `Website`, not `website`. This way we know that it's a class. Built-in classes use lowercase names (like `str` instead of `Str`) because they are faster to type, but use CapsWord @@ -126,11 +119,17 @@ True >>> ``` +As you can see, our Website is mutable, like lists are, not immutable +like strings are. We can change the website in-place without creating a +new Website. + `url`, `founding_year` and `free_to_use` are not variables, they are **attributes**. More specifically, they are **instance attributes**. -The biggest difference is that variables are accessed by their name, -and attributes are accessed by typing a name of an object (like -stackoverflow), then a dot and then the name of the attribute. +The biggest difference is that we need to use a dot for setting and +getting values of attributes, but we don't need that with variables. +Modules also use instance attributes for accessing their content. For +example, when we do `random.randint`, `random` is a module instance and +`randint` is one of its attributes. If we make another Website, does it have the same `url`, `founding_year` and `free_to_use`? @@ -336,7 +335,9 @@ available in the info method. We could also access them directly from But we still need to call `stackoverflow.initialize`. In Python, there's a "magic" method that runs when we create a new Website by calling the -Website class. It's called `__init__` and it does nothing by default. +Website class. It's called `__init__` and it does nothing by default. If +our `__init__` method takes other arguments than self we can call the +class with arguments and they will be given to `__init__`. Like this: ```py >>> class Website: @@ -378,6 +379,10 @@ class MyProgram: program = MyProgram() ``` +You should avoid using things like `print` and `input` in the `__init__` +method. The `__init__` method should be simple and it should just set +things up. + Usually you shouldn't use a class if you're only going to make one instance of it, and you don't need a class either if you're only going to have one method. In this example `MyProgram` has only one method and @@ -393,10 +398,7 @@ word = input("Enter something: ") print("You entered " + word + ".") ``` -## Important things - -Here are some of the most important things covered in this tutorial. -Make sure you understand them. +## Summary - Object-orientated programming is programming with custom data types. In Python that means using classes and instances. diff --git a/defining-functions.md b/defining-functions.md index 1f449f5..64ea271 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -1,7 +1,7 @@ -# Defining your own functions +# Defining custom functions -It's probably been a while since you read about using functions. [Read -about it again](using-functions.md) if you need to. +It's probably been a while since you read about using functions. +[Read about it again](using-functions.md) if you need to. ## Why should I use custom functions? @@ -40,7 +40,13 @@ else: print_box("You didn't enter Python :(") ``` -That's nice, but where do we get a `print_box` function like that? +In this tutorial we'll learn to define a `print_box` function +that prints text in a box. We can write the code for printing the +box once, and then use it multiple times anywhere in the program. + +Dividing a long program into simple functions also makes the code +easier to work with. If there's a problem with the code we can +test the functions one by one and find the problem easily. ## First functions @@ -167,7 +173,7 @@ However, modifying a global variable in-place from a function is easy. This doesn't work if the value is of an immutable type, like string or integer because immutable values cannot be modified in-place. -Fortunately, Python will tell you if something's wrong. +Fortunately, Python will tell us if something's wrong. ```py >>> foo = 1 @@ -220,7 +226,7 @@ This function can be called in two ways: When the function was running it had a local `message` variable that pointed to `"hi"`. The function printed it twice. - Positional arguments are great for simple things, but if your + Positional arguments are great for simple things, but if our function takes many positional arguments it may be hard to tell which argument is which. @@ -233,7 +239,12 @@ This function can be called in two ways: >>> ``` - Keyword arguments are great when your function needs to take many + The name "keyword argument" is a little bit confusing because + keyword arguments don't actually have anything to do with keywords + (`if`, `else` etc). Keyword arguments are just a way to give names + for our arguments. + + Keyword arguments are great when our function needs to take many arguments, because each argument has a name and it's easy to see which argument is which. @@ -334,8 +345,8 @@ need to: ``` The problem is that we have a keyword argument before a positional - argument. Python doesn't allow this. You don't need to worry about - this, because if you accidentally call a function like this you + argument. Python doesn't allow this. We don't need to worry about + this, because if we accidentally call a function like this we will get an error message. ## Output @@ -394,11 +405,11 @@ about the `input()` function. It asks the user to enter something, and then the user enters something and that value is returned. If the input function would print the value instead of returning it, things like `name = input("Name: ")` wouldn't work and assigning the result to a -variable would be much more difficult. Printing things is fine when you -know that you'll only need to print the result and you'll never need to +variable would be much more difficult. Printing things is fine when we +know that we'll only need to print the result and we'll never need to assign it to a variable. -So if our function returns a value we can use it like this: +If our function returns a value we can always print it, like this: ```py >>> def return_hi(): @@ -409,18 +420,6 @@ hi >>> ``` -If the function prints instead we can call it and just throw away -the None it returns: - -```py ->>> def print_hi(): -... print("hi") -... ->>> print_hi() -hi ->>> -``` - ## Examples Ask yes/no questions. diff --git a/editor-setup.md b/editor-setup.md index af3bfe8..aaa95e1 100644 --- a/editor-setup.md +++ b/editor-setup.md @@ -1,9 +1,9 @@ # Setting up an editor for programming Python comes with its IDLE, and you can use it in this tutorial. If you -don't like using it for some reason, you need -[PowerShell, command prompt or terminal](installing-python.md) for -trying out things. You also need an editor for writing code that will +don't like using it for some reason, you need [PowerShell, command prompt or +terminal](installing-python.md#if-you-like-working-with-powershell-command-prompt-or-terminal) +for trying out things. You also need an editor for writing code that will be stored in files. If you use IDLE as your editor, **it comes with everything set up for @@ -12,7 +12,7 @@ don't, you probably need to change some settings to make your editor suitable for Python use. Do **not** use word processors like Microsoft Word and LibreOffice -Write for programming. They create their own files, but you need plain +Writer for programming. They create their own files, but you need plain text files for programming. Start by creating an empty file called `hello.py` and opening it with diff --git a/exceptions.md b/exceptions.md index ec6f110..f7342f7 100644 --- a/exceptions.md +++ b/exceptions.md @@ -400,6 +400,10 @@ get when [processing files](files.md), and catching Exception catches all of these errors. You don't need to remember this tree, running `help('builtins')` should display a larger tree that this is a part of. +There's also a few exceptions that are not in this tree like SystemExit +and KeyboardInterrupt, but most of the time you shouldn't catch them. +Catching Exception doesn't catch them either. + ## Summary - Exceptions are classes and they can be used just like all other classes. diff --git a/files.md b/files.md index 1d1c9ad..012419f 100644 --- a/files.md +++ b/files.md @@ -38,7 +38,7 @@ C: ``` `C:\Users\me\hello.py` is an **absolute path**. But there are also -**relative paths**. For example, if you're in `C:\Users`, `me\hello.py` +**relative paths**. For example, if we are in `C:\Users`, `me\hello.py` is same as `C:\Users\me\hello.py`. The place we are in is sometimes called **current directory**, **working directory** or **current working directory**. @@ -67,7 +67,7 @@ Let's create a file and write a hello world to it. ``` Doesn't seem like it did anything. But actually it created a `hello.txt` -somewhere on your system. On Windows it's probably in `C:\Users\YourName`, +somewhere on our system. On Windows it's probably in `C:\Users\YourName`, and on most other systems it should be in `/home/yourname`. You can open it with notepad or any other plain text editor your system comes with. @@ -88,7 +88,7 @@ the current working directory. The second argument was `w`... but where the heck does that come from? `w` is short for write, and that just means that we'll create a new file. -There's some other modes you can use also: +There's some other modes we can use also: | Mode | Short for | Meaning | |-------|-----------|-----------------------------------------------------------------------| @@ -100,7 +100,7 @@ The `w` and `a` modes create a new file if it exists already, but trying to read from a non-existent file is an error. But what is that `with ourfile as f` crap? That's just a fancy way to make -sure that the file gets closed, no matter what happens. As you can see, +sure that the file gets closed, no matter what happens. As we can see, the file was indeed closed. ```py @@ -115,7 +115,7 @@ to the file we opened using `file=f`. ## Reading from files -After opening a file with the `r` mode you can for loop over it, just +After opening a file with the `r` mode we can for loop over it, just like it was a list. So let's go ahead and read everything in the file we created to a list of lines. @@ -130,7 +130,23 @@ we created to a list of lines. >>> ``` -But why is there a `\n` at the end of our hello world? +Trying to open a non-existent file with `w` created the file for us, but +doing that with `r` gives us an error instead. We'll learn more about +errors later. + +```py +>>> with open('this-doesnt-exist.txt', 'r') as f: +... print("It's working!") +... +Traceback (most recent call last): + File "", line 1, in +FileNotFoundError: [Errno 2] No such file or directory: 'this-doesnt-exist.txt' +>>> +``` + +So now we have the hello world in the `lines` variable, but it's +`['Hello World!\n']` instead of `['Hello World!']`. So what the heck did +that `\n` doing there? `\n` means newline. Note that it needs to be a backslash, so `/n` doesn't have any special meaning like `\n` has. When we wrote the file @@ -160,9 +176,9 @@ There we go, each of our lines now ends with a `\n`. When we for loop over the file it's divided into lines based on where the `\n` characters are, not based on how we printed to it. -But how to get rid of that `\n`? The `rstrip` -[string method](handy-stuff-strings.md#string-methods) is great -for this: +But how to get rid of that `\n`? [The rstrip string +method](https://docs.python.org/3/library/stdtypes.html#str.rstrip) is +great for this: ```py >>> stripped = [] @@ -174,9 +190,9 @@ for this: >>> ``` -It's also possible to read lines one by one. Files have a -`readline()` method that reads the next line, and returns `''` -if we're at the end of the file. +It's also possible to read lines one by one. Files have [a readline +method](https://docs.python.org/3/library/io.html#io.TextIOBase.readline) +that reads the next line, and returns `''` if we're at the end of the file. ```py >>> with open('hello.txt', 'r') as f: @@ -189,8 +205,8 @@ if we're at the end of the file. 'Hello two!\n' ``` -There's only one confusing thing about reading files. If you try -to read it twice you'll find out that it only gets read once: +There's only one confusing thing about reading files. If we try +to read it twice we'll find out that it only gets read once: ```py >>> first = [] @@ -232,11 +248,12 @@ again and everything works. ``` Usually it's best to just read the file once, and use the -content you have read from it multiple times. +content we have read from it multiple times. -As you can see, files behave a lot like lists. The `join()` -string method joins together strings from a list, but we can -also use it to join together lines of a file: +As we can see, files behave a lot like lists. [The join string +method](https://docs.python.org/3/library/stdtypes.html#str.join) joins +together strings from a list, but we can also use it to join together +lines of a file: ```py >>> with open('hello.txt', 'r') as f: @@ -247,8 +264,8 @@ also use it to join together lines of a file: >>> ``` -But if you need all of the content as a string, you can just -use the `read()` method. +But if we need all of the content as a string, we can just use [the read +method](https://docs.python.org/3/library/io.html#io.TextIOBase.read). ```py >>> with open('hello.txt', 'r') as f: @@ -259,7 +276,7 @@ use the `read()` method. >>> ``` -You can also open full paths, like `open('C:\\Users\\me\\myfile.txt', 'r')`. +We can also open full paths, like `open('C:\\Users\\me\\myfile.txt', 'r')`. The reason why we need to use `\\` when we really mean `\` is that backslash has a special meaning. There are special characters like `\n`, and `\\` means an actual backslash. @@ -285,8 +302,9 @@ True >>> ``` -If you don't use Windows and your paths don't contain backslashes -you don't need to double anything or use `r` in front of paths. +If our program is not meant to be ran on Windows and the paths +don't contain backslashes we don't need to double anything or use +`r` in front of paths. ```py >>> print('/some/name') diff --git a/getting-started.md b/getting-started.md index 21a147f..04c577b 100644 --- a/getting-started.md +++ b/getting-started.md @@ -2,9 +2,9 @@ [Launch Python](installing-python.md). -The `>>>` means that Python is ready and you can enter a command. The -basic idea is really simple: enter a command, press Enter, enter another -command, press Enter and keep going. +The `>>>` means that Python is ready and we can enter a command. The +basic idea is really simple: we enter a command, press Enter, enter +another command, press Enter and keep going. You probably don't know any Python commands yet. Let's see what happens if we just write something and press Enter. @@ -56,7 +56,7 @@ instead of `3.14`. Maybe Python knows that? We didn't get an error... but `(3, 14)` is not at all what we expected! So from now on, let's use a dot with decimal numbers, because `3.14` -worked just fine. +worked just fine. Later we'll learn what `(3, 14)` is. What if we type a `#`? @@ -79,14 +79,14 @@ If you're not using IDLE, the prompt will change from `>>>` to `...`. Just press Enter again to get it back to `>>>`. ```py ->>> # +>>> # hello again ... >>> ``` In Python, these pieces of text starting with a `#` are known as -**comments**. They don't effect the code in any way, but you can use -them to explain what your code does. +**comments**. They don't change how the code works in any way, but +we can use them to explain what our code does. ## Using Python as a calculator @@ -129,7 +129,7 @@ also work the same way. ``` Square brackets `[]` and curly brackets `{}` cannot be used to change -the evaluation order. They do something completely else. +the evaluation order. We'll learn more about what they do later. ```py >>> [1 + 2] * 3 @@ -144,12 +144,16 @@ TypeError: unsupported operand type(s) for *: 'set' and 'int' ## More advanced math I decided to include this in my tutorial because some people might be -interested in this. Feel free to skip this if you're not interested. +interested in this. Feel free to [skip this](#summary) if you're not +interested. -The `//` operator will divide and round down to an integer. For example, -`17 / 3` is `5.666666666666667`, and so `17 // 3` is `5`. +The `//` operator will divide and then throw away the dot and everything +after it. For example, `17 / 3` is `5.666666666666667`, and so `17 // 3` +is `5` because we throw away the `.666666666666667` part. ```py +>>> 17 / 3 +5.666666666666667 >>> 17 // 3 5 >>> diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index b322b15..30461c3 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -25,8 +25,9 @@ We also know how to repeat them multiple times. >>> ``` -Python strings are **immutable**. That's just a fancy way to say that -they cannot be changed in-place, and you need to create a new string to +Python strings are [immutable](https://docs.python.org/3/glossary.html#term-immutable). +That's just a fancy way to say that +they cannot be changed in-place, and we need to create a new string to change them. Even `some_string += another_string` creates a new string. Python will treat that as `some_string = some_string + another_string`, so it creates a new string but it puts it back to the same variable. @@ -47,7 +48,7 @@ characters and the fifth place between the characters, we can do this: So the syntax is like `some_string[start:end]`. -This picture shows you how the slicing works: +This picture explains how the slicing works: ![Slicing with non-negative values](images/slicing1.png) @@ -166,16 +167,14 @@ Python's strings have many useful methods. [The official documentation] (https://docs.python.org/3/library/stdtypes.html#string-methods) covers them all, but I'm going to just show some of the most commonly used ones briefly. Python also comes with built-in documentation about the string -methods. You can run `help(str)` to read it. +methods and we can run `help(str)` to read it. -Remember that nothing can modify strings in-place. Most string methods +Again, nothing can modify strings in-place. Most string methods return a new string, but things like `our_string = our_string.upper()` still work because the new string is assigned to the old variable. Here's an example with some of the most commonly used string methods: -Here's some of the most commonly used string methods: - ```py >>> our_string.upper() 'HELLO WORLD!' @@ -187,11 +186,11 @@ True True >>> our_string.endswith('world!') # Python is case-sensitive False ->>> ' hello 123 \n '.lstrip() # left strip -'hello 123 \n ' ->>> ' hello 123 \n '.rstrip() # right strip +>>> ' hello 123 '.lstrip() # left strip +'hello 123 ' +>>> ' hello 123 '.rstrip() # right strip ' hello 123' ->>> ' hello 123 \n '.strip() # strip from both sides +>>> ' hello 123 '.strip() # strip from both sides 'hello 123' >>> our_string.ljust(30, '-') 'Hello World!------------------' @@ -216,7 +215,7 @@ True ## String formatting -To add a string in the middle of another string, you can do something +To add a string in the middle of another string, we can do something like this: ```py @@ -226,7 +225,7 @@ like this: >>> ``` -But that gets complicated if you have many things to add. +But that gets complicated if we have many things to add. ```py >>> channel = '##learnpython' @@ -272,6 +271,26 @@ our problem: >>> ``` + In the second example we had `(name, channel, network)` on the right + side of the `%` sign. It was a tuple, and we'll talk more about them + later. + + If we have a variable that may be a tuple we need to wrap it in another + tuple when formatting: + + ```py + >>> thestuff = (1, 2, 3) + >>> "we have %s" % thestuff + Traceback (most recent call last): + File "", line 1, in + TypeError: not all arguments converted during string formatting + >>> "we have %s" % (thestuff,) + 'we have (1, 2, 3)' + >>> + ``` + + Here `(thestuff,)` was a tuple that contained nothing but `thestuff`. + - f-strings are even less typing, but new in Python 3.6. **Use this only if you know that nobody will need to run your code on Python versions older than 3.6.** Here the f is short for "format". @@ -315,6 +334,8 @@ If you need to know more about formatting I recommend reading or `help(str)` when you don't rememeber something about them. - String formatting means adding other things to the middle of a string. + There are multiple ways to do this in Python. You should know how to + use at least one of these ways. *** diff --git a/if.md b/if.md index 3c5c3cf..5cfda21 100644 --- a/if.md +++ b/if.md @@ -73,7 +73,7 @@ but it's not possible to create custom keywords. That's why keywords are usually used for "magic" things that would be difficult to do with just functions. -Also note that if statements check the condition once only, so if you +Also note that if statements check the condition once only, so if we set it to false later the if statement won't notice it. ```py @@ -88,7 +88,7 @@ It's not raining, but this runs anyway. ## Storing code in files -At this point it's easier to put your code into a file and use it +At this point it's easier to put our code into a file and use it there. If you use IDLE, go to File at top left and select New File, or just press Ctrl+N. @@ -106,13 +106,15 @@ if its_raining: print("It's raining!") ``` -The file extension is `.py`, which is short for Python. +You can save the file anywhere you want, for example on your desktop. +Give it a name that ends with `.py`, for example `rain.py`. The `.py` +is short for Python. -Now run the rain program. Most editors (including IDLE) will run your -code when you press F5. If your editor doesn't, run it from PowerShell, -command prompt or terminal. You probably need to first go to wherever -you saved your file with `cd`. For example, if the file is on your -desktop, type `cd Desktop` before running the file. +Now we can run the rain program. Most editors (including IDLE) will +run our code when we press F5. If your editor doesn't, run it from +PowerShell, command prompt or terminal. You probably need to first go +to wherever you saved your file with `cd`. For example, if the file is +on your desktop, type `cd Desktop` before running the file. Running from IDLE looks like this: @@ -206,7 +208,7 @@ else: print("Access denied.") ``` -The program prints different things depending on what you enter. +The program prints different things depending on what we enter. >>> ================================ RESTART ================================ >>> @@ -226,7 +228,7 @@ a password from the user, but you shouldn't worry about that just yet. ## Avoiding many levels of indentation with elif -If you have more than one condition to check, your code will end up +If we have more than one condition to check, our code will end up looking a bit messy. ```py @@ -251,7 +253,7 @@ else: print("I don't know what", word, "means.") ``` -Instead of typing `else`, indenting more and typing an `if` you can +Instead of typing `else`, indenting more and typing an `if` we can simply type `elif`, which is short for `else if`. Like this: ```py @@ -274,6 +276,8 @@ else: ## Summary +- If a code example starts with `>>>` run it on the interactive prompt. + If it doesn't, write it to a file and run that file. - Indentation is important in Python. - Indented code under an if statement runs if the condition is true. - You can also add an else statement. Indented code under it will run diff --git a/installing-python.md b/installing-python.md index 28d1d81..e8c9b45 100644 --- a/installing-python.md +++ b/installing-python.md @@ -87,7 +87,8 @@ press Enter. You should see something like this in it: Type "help", "copyright", "credits" or "license" for more information. >>> -On GNU/Linux or Mac OSX, type `python3` instead: +On GNU/Linux or Mac OSX, you should have a terminal application installed +already. Run it and type `python3`: you@YourComputer:~$ python3 Python 3.4.3 (default, Oct 14 2015, 20:28:29) diff --git a/loops.md b/loops.md index 7e858c4..d6b11ba 100644 --- a/loops.md +++ b/loops.md @@ -135,7 +135,7 @@ immediately. ## Until loops -Python doesn't have until loops. If you need an until loop, use +Python doesn't have until loops. If we need an until loop, we can use `while not`: ```py @@ -283,7 +283,7 @@ of `stuff.copy()` and `stuff[:] = []` instead of `stuff.clear()`. for username and password and checks them, and we made users "foo" and "bar" with passwords "biz" and "baz". Adding a new user would have required adding more code that checks the username and - password. Add this to the beginning of your program: + password. Add this to the beginning of the program: ```py users = [ diff --git a/modules.md b/modules.md index 6c4c394..b29ccd7 100644 --- a/modules.md +++ b/modules.md @@ -1,6 +1,6 @@ # Modules -Let's say you want to generate a random number between 1 and +Let's say we want to generate a random number between 1 and 3. The random module is a really easy way to do this: ```py @@ -50,7 +50,7 @@ that opens: All of these `.py` files can be imported like we just imported `random.py`. In random.py, there's a like like `randint = something`, -so you can use its randint variable with `random.randint` after +so we can use its randint variable with `random.randint` after importing it. ## Where do modules come from? @@ -191,6 +191,7 @@ The official documentation is [here](https://docs.python.org/3/library/random.html). ```py +>>> import random >>> random.randint(1, 3) # 1, 2 or 3 3 >>> colors = ['red', 'blue', 'yellow'] @@ -211,6 +212,7 @@ that are built into Python. The official documentation is [here](https://docs.python.org/3/library/sys.html). ```py +>>> import sys >>> # special files that the print and input functions use >>> # stdin is short for standard input >>> # stdout is short for standard output @@ -230,7 +232,7 @@ sys.version_info(major=3, minor=4, micro=2, releaselevel='final', serial=0) >>> sys.version_info[:3] # this is Python 3.4.2 (3, 4, 2) >>> ->>> sys.exit() # exit out of Python, you may need a plain exit() with IDLE +>>> sys.exit() # exit out of Python ``` If you use IDLE you'll notice that printing to `sys.stderr` makes @@ -249,6 +251,9 @@ if something_went_wrong: sys.exit(1) ``` +`sys.exit` doesn't work for getting out of IDLE's `>>>` prompt. You can +just close the window to get out of IDLE. + ### Mathematics There's no math.py anywhere, math is a built-in module like @@ -288,14 +293,14 @@ The official documentation for the time module is ``` You are probably wondering how `time.time()` can be used and why its -timing starts from the beginning of 1970. `time.time()` is useful -for measuring time differences because we can save its return value -to a variable before doing something, and then afterwards check how -much it changed. +timing starts from the beginning of 1970. `time.time()` is useful for +measuring time differences because we can save its return value to a +variable before doing something, and then afterwards check how much it +changed. There's an example that does this in [the example +section](#examples). -If you want to know why it starts in 1970 you can read something like +If you want to know why it starts from 1970 you can read something like [this](http://stackoverflow.com/questions/1090869/why-is-1-1-1970-the-epoch-time). - See `help(time.strftime)` if you want to know about more format specifiers like `%d`, `%m` etc. that `time.strftime` can take. @@ -362,8 +367,8 @@ for thing in things: ``` Measure how long it takes for the user to answer a question. -The `%.2f` rounds down to 2 decimals, and you can find more -formatting tricks [here](https://pyformat.info/). +The `%.2f` rounds to 2 decimals, and you can find more formatting +tricks [here](https://pyformat.info/). ```py import time @@ -449,7 +454,7 @@ then typing in what you want to search for. - [textwrap](https://docs.python.org/3/library/textwrap.html): break long text into multiple lines - [warnings](https://pymotw.com/3/warnings/): - like exceptions, but they don't interrupt your program + like exceptions, but they don't interrupt the whole program - [webbrowser](https://pymotw.com/3/webbrowser/): open a web browser from Python @@ -462,9 +467,9 @@ need to install them yourself if you want to use them: an awesome networking library I recommend reading [the official documentation about installing - modules](https://docs.python.org/3/installing/). If you're using - GNU/Linux also read the "Installing into the system Python on Linux" - section at the bottom. +modules](https://docs.python.org/3/installing/). If you're using +GNU/Linux also read the "Installing into the system Python on Linux" +section at the bottom. ## Summary diff --git a/variables.md b/variables.md index 8bc682e..4312f9e 100644 --- a/variables.md +++ b/variables.md @@ -2,7 +2,7 @@ ## Variables -Variables are easy to understand. They simply **point to data**. +Variables are easy to understand. They simply **point to values**. ```py >>> a = 1 # create a variable called a that points to 1 @@ -43,7 +43,8 @@ variable and sets the first variable to point to that value. >>> ``` -Trying to access a variable that is not defined is an error. +Trying to access a variable that is not defined creates an error +message. ```py >>> thingy @@ -61,7 +62,6 @@ need to keep in mind: to right. - Multiple variables can point to the same value, but one variable cannot point to multiple values. - - The values that variables point to can point to other values also. We'll learn more about that when we'll talk about [lists](lists.md). @@ -75,8 +75,8 @@ time you should use simple, lowercase variable names. You can also use underscores. ```py ->>> number_one = 1 ->>> number_two = 2 +>>> magic_number = 123 +>>> greeting = "Hello World!" >>> ``` @@ -194,7 +194,8 @@ False None is Python's "nothing" value. It behaves just like any other value, and it's often used as a default value for different kinds of things. -We'll find a bunch of ways to use None later. +Right now it might seem useless but we'll find a bunch of ways to use +None later. None's behavior on the interactive prompt might be a bit confusing at first: @@ -212,7 +213,7 @@ This is because the prompt never echoes back None. That is handy, because many things result in None, and it would be annoying to see None coming up all the time. -If you want to see a None on the interactive prompt, use print: +If we want to see a None on the interactive prompt, we can use print: ```py >>> print(thingy) @@ -235,20 +236,20 @@ easy to learn. | `a < b` | a is less than b | `1 < 2` | | `a <= b` | a is less than or equal to b | `1 <= 2`, `1 <= 1` | -We can also combine multiple comparisons. These are not always correct, -because a and b don't need to be Booleans. We'll learn more about that -later. +We can also combine multiple comparisons. | Usage | Description | True example | |-----------|-------------------------------------------|-----------------------------------| | `a and b` | a is True and b is True | `1 == 1 and 2 == 2` | | `a or b` | a is True, b is True or they're both True | `False or 1 == 1`, `True or True` | +This table assumes that a and b are Booleans. + Another way to combine operations is chaining. For example, `a < b < c` does the same thing as `a < b and b < c`. -`not` can be used for negations. If `value` is true, `not value` is -False, and if `value` is false, `not value` is True. +`not` can be used for negations. If `value` is True, `not value` is +False, and if `value` is False, `not value` is True. There's also `is`, but don't use it instead of `==` unless you know what you are doing. We'll learn more about it later. diff --git a/what-is-programming.md b/what-is-programming.md index 3420bf8..858b53f 100644 --- a/what-is-programming.md +++ b/what-is-programming.md @@ -4,23 +4,23 @@ know everything it's talking about.** As a computer user you know that computers don't have feelings. They don't -work any faster or slower depending on if you're angry at them or if you're +work any faster or slower depending on if we're angry at them or if we're happy. Computers can perform millions of calculations per second, but they -require you to tell them exactly what to do. If they do something else than -you want them to do the problem is usually that they don't understand your -instructions the way you understand them. +require us to tell them exactly what to do. If they do something else than +we want them to do the problem is usually that they don't understand our +instructions the way we understand them. The only big difference between programming and what you're familiar with already is that instead of clicking buttons to do things we write the instructions using a **programming language**. Most programming languages consist of English words, digits and some characters that have special meanings. This tutorial uses a programming language called Python because it's -easy to learn and you can do many different things with it. For example, you -can create your own applications that have buttons that people can click +easy to learn and we can do many different things with it. For example, we +can create our own applications that have buttons that people can click instead of just using applications written by others. -Before we can get started with Python you need to know how to write some of -Python's special characters with your keyboard. Unfortunately I don't know +Before we can get started with Python we need to know how to write some of +Python's special characters with our keyboards. Unfortunately I don't know which keys you need to press to produce these characters because your keyboard is probably different than mine. But the keyboard can tell what you need to press. For example, my Finnish keyboard has a key like this: From 5a5d4c50e11f9bd0664a96f8cf04c398c7eb64ff Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 30 Oct 2016 00:15:47 +0300 Subject: [PATCH 076/329] fixing stuff --- files.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/files.md b/files.md index 012419f..7546b9c 100644 --- a/files.md +++ b/files.md @@ -132,7 +132,7 @@ we created to a list of lines. Trying to open a non-existent file with `w` created the file for us, but doing that with `r` gives us an error instead. We'll learn more about -errors later. +errors [later](exceptions.md). ```py >>> with open('this-doesnt-exist.txt', 'r') as f: @@ -145,7 +145,7 @@ FileNotFoundError: [Errno 2] No such file or directory: 'this-doesnt-exist.txt' ``` So now we have the hello world in the `lines` variable, but it's -`['Hello World!\n']` instead of `['Hello World!']`. So what the heck did +`['Hello World!\n']` instead of `['Hello World!']`. So what the heck is that `\n` doing there? `\n` means newline. Note that it needs to be a backslash, so `/n` From 85108ad1da96983df385f13484aba2a4eaa4f3cf Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 30 Oct 2016 15:27:59 +0200 Subject: [PATCH 077/329] little things --- README.md | 23 +++++++++-------------- exceptions.md | 2 +- getting-started.md | 2 +- handy-stuff-strings.md | 2 +- if.md | 2 +- images/modules.png | Bin 0 -> 114550 bytes modules.md | 10 +++++----- using-functions.md | 10 +++++----- variables.md | 33 ++++++++++++++++++++++++--------- 9 files changed, 47 insertions(+), 37 deletions(-) create mode 100644 images/modules.png diff --git a/README.md b/README.md index ccaa483..e16ad43 100644 --- a/README.md +++ b/README.md @@ -11,23 +11,18 @@ you have programmed a lot in the past using some other language you probably want to read [the official tutorial](https://docs.python.org/3/tutorial/) instead. -This tutorial uses Python 3, and you need Python 3 to be able to run the -example code yourself. Python 2 is getting outdated all the time, -and more and more projects are moving to Python 3. There are a few -popular libraries that don't support Python 3 that well at the time of -writing this, but you don't need to worry about that just yet. They -will probably support Python 3 by the time you've learned the basics -and you may actually need them. +This tutorial was written in Python 3, and you need Python 3 or newer to +be able to run the example code yourself. Python 2 is getting outdated +all the time, and more and more projects are moving to Python 3. There +are a few popular libraries that don't support Python 3 that well at the +time of writing this, but you don't need to worry about that just yet. +They will probably support Python 3 by the time you've learned the +basics and you may actually need them. I have tested most of the code in this tutorial on Python 3.4, but -everything should also work on any Python 3 version or newer. +everything should also work on Python 3.2 and all newer Pythons. -Here's a list of chapters in this tutorial. Read them one by one in the -order they are listed. **If you jump to a chapter without reading and -understanding everything before it, you may have hard time understanding -the chapter you're trying to read.** However, the chapters are mostly -independent from each other, so you can also use this tutorial together -with other tutorials. +## List of contents 1. [What is programming?](what-is-programming.md) 2. [Installing Python](installing-python.md) diff --git a/exceptions.md b/exceptions.md index f7342f7..07da845 100644 --- a/exceptions.md +++ b/exceptions.md @@ -401,7 +401,7 @@ all of these errors. You don't need to remember this tree, running `help('builtins')` should display a larger tree that this is a part of. There's also a few exceptions that are not in this tree like SystemExit -and KeyboardInterrupt, but most of the time you shouldn't catch them. +and KeyboardInterrupt, but most of the time we shouldn't catch them. Catching Exception doesn't catch them either. ## Summary diff --git a/getting-started.md b/getting-started.md index 04c577b..a7e6677 100644 --- a/getting-started.md +++ b/getting-started.md @@ -206,7 +206,7 @@ Powers are calculated before `*` and `/`, but after `()`. ## Summary - Errors don't matter. -- You can enter any Python commands to the interactive `>>>` prompt, and +- We can enter any Python commands to the interactive `>>>` prompt, and it will echo back the result. - Pieces of text starting with a `#` are comments. - `+`, `-`, `*` and `/` work in Python just like in math. diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index 30461c3..dc9359c 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -321,7 +321,7 @@ If you need to know more about formatting I recommend reading ![Slicing](images/slicing3.png) -- Indexing returns one character of a string. Remember that you don't +- Indexing returns one character of a string. Remember that we don't need a `:` with indexing. The indexes work like this: ![Indexing](images/indexing3.png) diff --git a/if.md b/if.md index 5cfda21..e946961 100644 --- a/if.md +++ b/if.md @@ -280,7 +280,7 @@ else: If it doesn't, write it to a file and run that file. - Indentation is important in Python. - Indented code under an if statement runs if the condition is true. -- You can also add an else statement. Indented code under it will run +- We can also add an else statement. Indented code under it will run if the code under the if statement does not run. - elif is short for else if. diff --git a/images/modules.png b/images/modules.png new file mode 100644 index 0000000000000000000000000000000000000000..412388ee0ea04235ae22f43b67ef9ef83edcf960 GIT binary patch literal 114550 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%0DI~7B7TiNH6e0|t8 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 ``` -If you want to print a backslash, you need to **escape** it by typing +If we want to print a backslash, we need to **escape** it by typing two backslashes: [comment]: # (For some reason, GitHub's syntax highlighting doesn't) @@ -106,8 +106,8 @@ two backslashes: hello\nworld >>> -You can also pass multiple arguments to the print function. Separate -them with commas, and print will add spaces between them. +We can also pass multiple arguments to the print function. We need to +separate them with commas and print will add spaces between them. ```py >>> print("Hello", "World!") @@ -139,7 +139,7 @@ screen and waited for me to type something. I typed hello and pressed Enter. Then input returned the hello I typed as a string and it was assigned to x. -You may want to add a space after the `:`, like this: +Usually we want to add a space after the `:`, like this: ```py >>> x = input("Enter something: ") # now there's space between : and where i type diff --git a/variables.md b/variables.md index 4312f9e..93d5f1e 100644 --- a/variables.md +++ b/variables.md @@ -71,7 +71,7 @@ without variables. Variable names can be multiple characters long. They can contain uppercase characters, numbers and some other characters, but most of the -time you should use simple, lowercase variable names. You can also use +time we should use simple, lowercase variable names. You can also use underscores. ```py @@ -97,7 +97,7 @@ Variable names are case-sensitive, like many other things in Python. Python also has some words that cannot be used as variable names because they have a special meaning. They are called **keywords**, and -you can run `help('keywords')` to see the full list if you want to. +we can run `help('keywords')` to see the full list if we want to. We'll learn to use most of them later in this tutorial. Trying to use a keyword as a variable name causes a syntax error. @@ -146,7 +146,7 @@ This is not limited to integers. >>> ``` -Now you also understand why typing hello to the prompt didn't work in +Now we also understand why typing hello to the prompt didn't work in the beginning of this tutorial. But we can assign something to a variable called hello and then type hello: @@ -174,7 +174,7 @@ False ``` `a == 1` is the same as `(a == 1) == True`, but `a == 1` is more -readable, so most of the time you shouldn't write `== True` anywhere. +readable, so most of the time we shouldn't write `== True` anywhere. ```py >>> a = 1 @@ -213,7 +213,7 @@ This is because the prompt never echoes back None. That is handy, because many things result in None, and it would be annoying to see None coming up all the time. -If we want to see a None on the interactive prompt, we can use print: +If we want to see a None on the interactive prompt, we can use print. ```py >>> print(thingy) @@ -221,6 +221,22 @@ None >>> ``` +Another confusing thing is that if we do something weird to None we get +error messages that talk about NoneType object. The NoneType object they +are talking about is always None. + +```py +>>> None.hello # None has no attribute 'hello' +Traceback (most recent call last): + File "", line 1, in +AttributeError: 'NoneType' object has no attribute 'hello' +>>> None() # None is not callable +Traceback (most recent call last): + File "", line 1, in +TypeError: 'NoneType' object is not callable +>>> +``` + ## Other comparing operators So far we've used `==`, but there are other operators also. At this @@ -230,21 +246,20 @@ easy to learn. | Usage | Description | True examples | |-----------|-----------------------------------|-----------------------| | `a == b` | a is equal to b | `1 == 1` | -| `a != b` | a is not equal to b | `1 == 2` | +| `a != b` | a is not equal to b | `1 != 2` | | `a > b` | a is greater than b | `2 > 1` | | `a >= b` | a is greater than or equal to b | `2 >= 1`, `1 >= 1` | | `a < b` | a is less than b | `1 < 2` | | `a <= b` | a is less than or equal to b | `1 <= 2`, `1 <= 1` | -We can also combine multiple comparisons. +We can also combine multiple comparisons. This table assumes that a and +b are Booleans. | Usage | Description | True example | |-----------|-------------------------------------------|-----------------------------------| | `a and b` | a is True and b is True | `1 == 1 and 2 == 2` | | `a or b` | a is True, b is True or they're both True | `False or 1 == 1`, `True or True` | -This table assumes that a and b are Booleans. - Another way to combine operations is chaining. For example, `a < b < c` does the same thing as `a < b and b < c`. From 811da97351bb66cecdd445cc20465831af3a0e5a Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 30 Oct 2016 21:22:11 +0200 Subject: [PATCH 078/329] working on stuff --- TODO.md | 26 ++--- dicts.md | 191 +++++++++++++++++++++++++++++++ loops.md | 19 ++- modules.md | 2 +- trey-hunner-zip-and-enumerate.md | 66 +---------- what-next.md | 30 +++++ 6 files changed, 249 insertions(+), 85 deletions(-) create mode 100644 dicts.md create mode 100644 what-next.md diff --git a/TODO.md b/TODO.md index 27c3c37..672106e 100644 --- a/TODO.md +++ b/TODO.md @@ -2,35 +2,25 @@ This tutorial is not complete. It still needs: -- Dictionaries and tuples (can be in the same thing since tuples - are needed for dict keys) -- Explain `for a, b in thing` somewhere +- range somewhere +- Better lists chapter, also introduce tuples in it - **More exercises and examples everywhere!** -- Exceptions - explain bool(x) and why it matters - classes part 2 - - non-public `_variables` - - singular inheritance, inheritance of built-in classes + - non-public `_variables` (maybe reading PEP-8 is enough to explain this?) + - "singular" inheritance, inheritance of built-in classes - using super - no classes part 3 with multiple inheritance, it's not something people need -- quick overview of some of the most useful built-in functions and classes - - range - - zip - - classmethod and staticmethod - iterables and iterators: something most Python programmers need to be aware of - last chapter: "What should I do now?" links to other resources - GUI programming tutorials - easygui - tkinter in effbot (warn the readers about star imports) - - pyqt5 in zetcode + - pyqt5 in zetcode (warn about mixedCase) - gtk+ 3 in readthedocs - a pygame tutorial - David Beazley's metaprogramming and other talks - - a regex tutorial - - -## Fix these - -- the chapter about installing python should mention that python 2 and 3 - can be and often are installed at the same time + - "What the heck is this?" section for stuff i haven't talked about + - regexes + - yield diff --git a/dicts.md b/dicts.md new file mode 100644 index 0000000..f57a635 --- /dev/null +++ b/dicts.md @@ -0,0 +1,191 @@ +# Dictionaries + +**TODO:** write the lists-and-tuples.md this tutorial links to. + +Now we know how [lists and tuples](lists-and-tuples.md) work and how +to [for loop](loops.md#for-loops) over them. We also did an exercise +with code like this: + +```py +userlist = [ + ('me', 'my password'), + ('you', 'your password'), +] +``` + +Then to check if a username and password were correct we did +`(username, password) in userlist`. Adding new users was also easy as +appending to that list. + +What if we need to check if a username is in the users, but we don't +need to know the password? `username in userlist` is always False +because the user list consists of (username,password) pairs, so we need +to for loop over the whole list: + +```py +username_exists = False +for user in userlist: + if user[0] == username: + username_exists = True + break +if username_exists: + # do something +``` + +Getting a user's password also requires a similar loop: + +```py +password = None +for user in userlist: + if user[0] == username: + password = user[1] + break +# make sure password isn't still None and do something with it +``` + +This works just fine because our user list only contains two users, but +it would be slow if the userlist was bigger. + +## What are dictionaries? + +A better way to store user information might be a dictionary. + +```py +passwords = { + 'me': 'my password', + 'you': 'your password', +} +``` + +Here `'me'` and `'you'` are **keys** in the dictionary, and +`'my password'` and `'your password'` are their **values**. Dictionaries +are often named by their values. This dictionary has passwords as its +values so I named the variable `passwords`. + +There are a few big differences between dictionaries and lists of pairs: + +- Dictionaries are not ordered. There's **no guarantees** about which + order the username:password pairs appear in when we do something + with the dictionary. +- Checking if a key is in the dictionary is simple and fast. We don't + need to for loop through the whole dictionary. +- Getting the value of a key is also simple and fast. +- We can't have the same key in the dictionary multiple times, but + multiple different keys can have the same value. This means that + **multiple users can't have the same name, but they can have the + same passwords**. + +But wait... this is a lot like variables are! Our variables are not +ordered, getting a value of a variable is fast and easy and we can't +have multiple variables with the same name. + +Variables are actually stored in a dictionary. We can get that +dictionary with the globals function. In this dictionary, keys are +variable names and values are what our variables point to. + +```py +>>> globals() +{'userlist': [('me', 'my password'), ('you', 'your password')], + 'passwords': {'me': 'my password', 'you': 'your password'}, + ...many other things we don't need to care about... +} +>>> +``` + +So if you have trouble remembering how dictionaries work just compare +them to variables. + +## What can we do with dictionaries? + +Dictionaries have some similarities with lists. For example, both +lists and dictionaries have a length. + +```py +>>> len(userlist) # contains two elements +2 +>>> len(passwords) # contains two key:value pairs +2 +>>> +``` + +We can get a value of a key with `the_dict[key]`. Trying to get the +value of a non-existing key gives us an error. We can also add new +key:value pairs by doing `the_dict[key] = value`. + +```py +>>> passwords['me'] +'my password' +>>> passwords['you'] +'your password' +>>> passwords['lol'] +Traceback (most recent call last): + File "", line 1, in +KeyError: 'lol' +>>> passwords["lol"] = "lol's password" +>>> passwords +{'lol': "lol's password", 'you': 'your password', 'me': 'my password'} +>>> +``` + +For looping over a dictionary gets its keys, and checking if something's +in the dictionary checks if the dictionary has a key like that. This can +be confusing at first but you'll get used to this. + +```py +>>> 'me' in passwords +True +>>> 'my password' in passwords +False +>>> for name in passwords: +... print(name) +... +lol +you +me +>>> +``` + +Dictionaries have a values method that we can use if we want to do +something with the values: + +```py +>>> passwords.values() +dict_values(["lol's password", 'your password', 'my password']) +>>> +``` + +The values method returned a `dict_values` object. Things like this +behave a lot like lists and usually we don't need to convert them to +lists. + +```py +>>> for password in passwords.values(): +... print(password) +... +lol's password +your password +my password +>>> +``` + +We can do things like `list(passwords.values())` if we need a real list +for some reason, but doing that can slow down our program if the +dictionary is big. There's also a keys method, but usually we don't need +it because the dictionary itself behaves a lot like a list of keys. + +If we need both keys and values we can use the items method with the +`for first, second in thing` trick. + +```py +>>> passwords.items() +dict_items([('lol', "lol's password"), + ('you', 'your password'), + ('me', 'my password')]) +>>> for name, password in passwords.items(): +... print(name + ": " + password) +... +lol: lol's password +you: your password +me: my password +>>> +``` diff --git a/loops.md b/loops.md index d6b11ba..fc7b9f6 100644 --- a/loops.md +++ b/loops.md @@ -3,9 +3,9 @@ In programming, a **loop** means repeating something multiple times. There are different kinds of loops: -- **While loops** repeat something while a condition is true. -- **Until loops** repeat something until a condition is true. -- **For loops** repeat something for each element of a sequence. +- [While loops](#while-loops) repeat something while a condition is true. +- [Until loops](#until-loops) repeat something while a condition is false. +- [For loops](#for-loops) repeat something for each element of a list. We'll talk about all of these in this tutorial. @@ -230,11 +230,22 @@ how about you Note that `for thing in stuff:` is not same as `for (thing in stuff):`. Here the `in` keyword is just a part of the for loop and it has a different meaning than it would have if we had `thing in stuff` without -a `for`. +a `for`. Trying to do `for (thing in stuff):` creates an error: + +```py +>>> for (thing in stuff): + File "", line 1 + for (thing in stuff): + ^ +SyntaxError: invalid syntax +>>> +``` Right now the while loop version might seem easier to understand for you, but later you'll realize that for loops are much easier to work with than while loops and index variables, especially in large projects. +For looping is also a little bit faster than while looping with an index +variable. There's only one big limitation with for looping over lists. We shouldn't modify the list in the for loop. If we do, the results can diff --git a/modules.md b/modules.md index f43386d..3a05030 100644 --- a/modules.md +++ b/modules.md @@ -217,7 +217,7 @@ that are built into Python. The official documentation is >>> # stdin is short for standard input >>> # stdout is short for standard output >>> # stderr is short for standard errors ->>> print("Hello!", file=sys.stdout) +>>> print("Hello!", file=sys.stdout) # this is where prints go by default Hello! >>> print("Hello!", file=sys.stderr) # use this for error messages Hello! diff --git a/trey-hunner-zip-and-enumerate.md b/trey-hunner-zip-and-enumerate.md index f1e9c38..b311dec 100644 --- a/trey-hunner-zip-and-enumerate.md +++ b/trey-hunner-zip-and-enumerate.md @@ -18,7 +18,7 @@ assigning values to multiple variables at once. It works like this: We can use `()` and `[]` around these values however we want and everything will still work the same way. `[]` creates a list, and -`()` creates a tuple. We'll talk more about tuples later. +`()` creates a tuple. ```py >>> [a, b] = (1, 2) @@ -41,7 +41,7 @@ side. >>> ``` -What actually happened is that Python created a tuple automatically. +Python created a tuple automatically. ```py >>> 1, 2 @@ -76,67 +76,9 @@ c 3 >>> ``` -Now you're ready to read [this looping +Now you're ready to read [this awesome looping tutorial](http://treyhunner.com/2016/04/how-to-loop-with-indexes-in-python/). -Read it now, then read the summary and do the exercises. - -## Summary - -Assigning multiple values at once: - -```py ->>> a, b, c = 1, 2, 3 ->>> a -1 ->>> b -2 ->>> c -3 ->>> -``` - -For looping over a list of pairs: - -```py ->>> stuff = [('a', 1), ('b', 2), ('c', 3)] ->>> for a, b in stuff: -... print(a, b) -... -a 1 -b 2 -c 3 ->>> -``` - -For looping over two lists at once: - -```py ->>> colors = ['red', 'green', 'blue'] ->>> letters = ['R', 'G', 'B'] ->>> for letter, color in zip(letters, colors): -... print(letter, color) -... -R red -G green -B blue ->>> -``` - -For looping over a list with indexes: - -```py ->>> fillernames = ['foo', 'bar', 'biz', 'baz', 'spam', 'eggs'] ->>> for index, name in enumerate(fillernames): -... print(index, name) -... -0 foo -1 bar -2 biz -3 baz -4 spam -5 eggs ->>> -``` +Read it now, then come back here and do the exercises. ## Exercises diff --git a/what-next.md b/what-next.md new file mode 100644 index 0000000..ffe1a86 --- /dev/null +++ b/what-next.md @@ -0,0 +1,30 @@ +# What should I do now? + +You are now at the end of this tutorial. This means that you're almost +ready to do something fun with Python. This page contains a bunch of +links to other useful and fun Python resources. + +## What the heck is this? + +Sometimes you'll come across things that I haven't shown in this +tutorial. Here's a table of things you'll probably come across: + +### A dictionary without a `:` + +These are actually [sets](https://docs.python.org/3/tutorial/datastructures.html#sets), +not dictionaries. However, `{}` is a dictionary. + +### yield stuff + +The [yield keyword](http://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do) +is a way to create generators + +| What you see | What it is | +|---------------------------|---------------------------------------------------------------------------------------------------| +| a dictionary without `:` | [a set] | +| yield stuff | | +| `import stuff as thing` | imports stuff and sets the module to a thing variable | +| `from stuff import thing` | about the same as `import stuff` and after that +| `from stuff import *` | imports everything + +## Fun modules From bc6c8af4f9d10798b99396fe97f05ad0440507a2 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 30 Oct 2016 21:33:10 +0200 Subject: [PATCH 079/329] add a todo --- dicts.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dicts.md b/dicts.md index f57a635..8ca59c8 100644 --- a/dicts.md +++ b/dicts.md @@ -189,3 +189,5 @@ you: your password me: my password >>> ``` + +**TODO:** lists as keys vs tuples as keys. From 100e26de0d39525eede22cb97d9ebbd4764bc5ad Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 4 Nov 2016 23:30:51 +0200 Subject: [PATCH 080/329] lists and tuples --- README.md | 4 +- handy-stuff-strings.md | 9 +- images/differentlist.png | Bin 0 -> 2716 bytes images/drawings.odg | Bin 12595 -> 16875 bytes images/people.png | Bin 0 -> 15722 bytes images/samelist.png | Bin 0 -> 2817 bytes lists-and-tuples.md | 269 +++++++++++++++++++++++++++++++++++++++ 7 files changed, 276 insertions(+), 6 deletions(-) create mode 100644 images/differentlist.png create mode 100644 images/people.png create mode 100644 images/samelist.png create mode 100644 lists-and-tuples.md diff --git a/README.md b/README.md index e16ad43..31bcd43 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,8 @@ everything should also work on Python 3.2 and all newer Pythons. 5. [Variables, Booleans and None](variables.md) 6. [Using functions](using-functions.md) 7. [If, else and elif](if.md) -8. [ThinkPython: Lists](lists.md) -9. [Handy stuff with strings](handy-stuff-strings.md) +8. [Handy stuff with strings](handy-stuff-strings.md) +9. [Lists and tuples](lists-and-tuples.md) 10. [Loops](loops.md) 11. [Trey Hunner: zip and enumerate](trey-hunner-zip-and-enumerate.md) 12. [Files](files.md) diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index dc9359c..f2e8fa8 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -213,6 +213,10 @@ True >>> ``` +The things in square brackets that the split method gave us and +we gave to the join method were lists. We'll talk more about +them [later](lists-and-tuples.md). + ## String formatting To add a string in the middle of another string, we can do something @@ -260,9 +264,6 @@ our problem: `'Hello {}.'.format(name)`. I like to use printf-formatting for simple things and `.format` when I need more powerful features. - **TODO:** warn readers about formatting tuples, and show experienced - users that dictionaries aren't a problem - ```py >>> "Hello %s." % name 'Hello Akuli.' @@ -273,7 +274,7 @@ our problem: In the second example we had `(name, channel, network)` on the right side of the `%` sign. It was a tuple, and we'll talk more about them - later. + [later](lists-and-tuples.md#tuples). If we have a variable that may be a tuple we need to wrap it in another tuple when formatting: diff --git a/images/differentlist.png b/images/differentlist.png new file mode 100644 index 0000000000000000000000000000000000000000..c919d9135465e4d6ad786183951b25c91a244ba4 GIT binary patch literal 2716 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≫=kzs6WZNgWQ@MtnR1a^(!(ftG79A^5n3X$`_m68>O0@_){p)famF)-sG&LZRd zVZZ{gnYte-&5a?~@F<{>&O1Q_@Bi?M1#N^o8(EDT>pGK3`rAZ<-REzBSP^W!YHna21P>ZE~b#cH4Q3ENDh)pjZ*ei#9B*O zv8zl92Vn>e`^E}aaWkd%RTtc>0{F>8vM|UB!9_1p!_~pQYvrfv-g(_NO5Hyldn17m zs-u#H@$dd$!trU0tv`+BhKmcn^QI1J&T@jF<93-tE%ZZnS4O|<0T&D7tetqNr`sRx zTXU80x)#KKy|>HNxae9+5@kun{~c}b->m?$D>iB$__}Wi!WK548iGXHB*!2!jN8V^ zZ+uR`x4Xo&yR2KNTs)7i4FLi^x_bhho4}t!EwUov>GVYN<4-65o>=Jmz$_-*rf&O) zLmmGtov>yVr)8S7tu{q3INcBY#Tjjmz)!bc19OckPZNofY1fy_4H+Xl`}u45-2s<& zw4e)*47-j4ZfdCyGlQd2msd1T!ab|z^=@#xdvfKIRC*n6E?S{C`aK%I;sK}uv4y|U z0zY42ABf`L?y}*sym4LhpCu5%X7S4%{#4F=Dv(#PZNGNLPr}nCGdz`xX{XxCV&YC) z7-5*eB0p*~)<4Z+(ESVM6=%)WmStz#eovUUY%sTuU-(54C{0zu&r6QBk!K$|+Po** ze|4Q6wvUy-FBAX#d%~Q_API0@ON}odLu%;;+7H~O39yi2!gnP?(L|*x_Ne=fu)8J4 z;II4G%m(KE5fA{6Ju<;v?Gx!NJnTY(FS7G1wLNR-4%t;rlw}l?{oT=ovUAlWUtjMfJs|V<3#Mj1eLsJBY zy2B~GFuK+I=8Hp&_N3fldH8Vxrn}Ok%EhI$Y;YIfNZw%UWJZ+B4#uv9x+#Bdynxwc z5kK-KeV`F(KDIOwOQSs33*G1!UKQ4_Z9*fUUw>anMymu*Ku^aJhB<3)m0-8l4DVfk zOM*6)Z&{<8Sz0!%h5_tkC-X-{nC4{9x#W~RxNu5{z>PfJ&HF^?Z19R(AhM|6rKjmU z>Bj8k31n} z=c5NWqOqGPxNx4SIbXu;2GHO7tnhz3#Z2I4(D(~?PtOhiw?8BPl3PrV{TIHAp5yPlb=iy>kbfa>m^l99 z--!esW?u3?r=tIQSoY^s^q*HYc0w#OuI?YEf87m5{wD{xm4yod;cVgJV&h=t{O2%L zRRIzT8v+~R?}x6}|6&!Se|z$jIN_C<;4k%vScph4-hu_Wc-mR~o0z}9VJ;gH6gz)H zCmZ!YUiuH}1Al@rBPq&%4f%K8F;*g|JpKeWHk!YL|LHF9Cmgc=vx_Q_kikHl(9H@* z{dYb8s0Q^n{b>J9Pf39U6;`glZ1t~rvVZMBqzfc~7^wb3kv|$P2qb)Dq5DgbbQU5g jbissidh);V{r!_3fcfMF6Dk?;5=h>n!(|Ko5&b^^lrlcA delta 8759 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 literal 0 HcmV?d00001 diff --git a/lists-and-tuples.md b/lists-and-tuples.md new file mode 100644 index 0000000..cb93b0f --- /dev/null +++ b/lists-and-tuples.md @@ -0,0 +1,269 @@ +# Lists and tuples + +## Why should we use lists? + +Sometimes we may end up doing something like this. + +```py +name1 = 'wub_wub' +name2 = 'theelous3' +name3 = 'RubyPinch' +name4 = 'go|dfish' +name5 = 'Nitori' + +name = input("Enter your name: ") +if name == name1 or name == name2 or name == name3 or name == name4 or name == name5: + print("I know you!") +else: + print("Sorry, I don't know who you are :(") +``` + +This code works just fine, but there's a problem. The name check +is repetitive, and adding a new name requires adding even more +repetitive, boring checks. + +## Our first list + +Instead of adding a new variable for each name it might be +better to store all names in one variable. This means that our +one variable needs to point to multiple values. An easy way to +do this is using a list: + +```py +names = ['wub_wub', 'theelous3', 'RubyPinch', 'go|dfish', 'Nitori'] +``` + +Here the `names` variable points to a list, which then points to +strings, like this: + +![List of names.](images/people.png) + +## What can we do with lists? + +Let's open the `>>>` prompt and create a name list. + +```py +>>> names = ['wub_wub', 'theelous3', 'RubyPinch', 'go|dfish', 'Nitori'] +>>> names +['wub_wub', 'theelous3', 'RubyPinch', 'go|dfish', 'Nitori'] +>>> +``` + +There's many things [we can do with strings](handy-stuff-strings.md), +and some of these things also work with lists. + +```py +>>> len(names) # we have 5 names +5 +>>> names + ['Akuli'] # create a new list with me in it +['wub_wub', 'theelous3', 'RubyPinch', 'go|dfish', 'Nitori', 'Akuli'] +>>> ['theelous3', 'RubyPinch'] * 2 # repeating +['theelous3', 'RubyPinch', 'theelous3', 'RubyPinch'] +>>> +``` + +With strings indexing and slicing both returned a string, but +with lists we get a new list when we're slicing and an element +from the list if we're indexing. + +```py +>>> names[:2] # first two names +['wub_wub', 'theelous3'] +>>> names[0] # the first name +'wub_wub' +>>> +``` + +If we want to check if the program knows a name all we need to +do is to use the `in` keyword. + +```py +>>> 'lol' in names +False +>>> 'RubyPinch' in names +True +>>> +``` + +We can't use this for checking if a list of names is a part of +our name list. + +```py +>>> ['RubyPinch', 'go|dfish'] in names +False +>>> ['RubyPinch'] in names +False +>>> +``` + +Lists have a few [useful +methods](https://docs.python.org/3/tutorial/datastructures.html#more-on-lists). +Some of the most commonly used ones are append, extend and +remove. append adds an item to the end of a list, extend adds +multiple items from another list and remove removes an item. + +```py +>>> names +['wub_wub', 'theelous3', 'RubyPinch', 'go|dfish', 'Nitori'] +>>> names.remove('theelous3') # sorry theelous3 +>>> names.remove('go|dfish') # and sorry go|dfish +>>> names +['wub_wub', 'RubyPinch', 'Nitori'] +>>> names.append('Akuli') # let's add me here +>>> names +['wub_wub', 'RubyPinch', 'Nitori', 'Akuli'] +>>> names.extend(['go|dfish', 'theelous3']) # wb guys +>>> names +['wub_wub', 'RubyPinch', 'Nitori', 'Akuli', 'go|dfish', 'theelous3'] +>>> +``` + +As you can see, **list can be changed in-place**. In other +words, they are **mutable**. Integers, floats, strings and many +other built-in types can't, so they are **immutable**. + +With [strings](handy-stuff-strings.md) we did something to them +and then set the result back to the same variable, like +`message = message.strip()`. This just doesn't work right with +most mutable things because they're designed to be changed in-place. + +```py +>>> names = names.remove('Akuli') +>>> print(names) # now it's None! +None +>>> +``` + +This is the same thing that happened way back when [we assigned +print's return value to a variable](using-functions.md). + +## What is what? + +After working with lists a while you'll find out that they +behave like this: + +```py +>>> a = [1, 2, 3] +>>> b = a +>>> b.append(4) +>>> a # this changed also! +[1, 2, 3, 4] +>>> +``` + +This can be confusing at first, but it's actually easy to +explain. The problem with this code example is the `b = a` +line. If we draw a diagram of this example it looks like this: + +![Same list.](images/samelist.png) + +This is when the `is` keyword comes in. It can be used to +check if two variables point to the **same** thing. + +```py +>>> a is b +True +>>> +``` + +Typing `[]` creates a **new** list every time. + +```py +>>> [] is [] +False +>>> +``` + +If we need a new list with the same content we can use the +`copy` method: + +```py +>>> a = [1, 2, 3] +>>> b = a.copy() +>>> b is a +False +>>> b.append(4) +>>> a +[1, 2, 3] +>>> +``` + +If you're using Python 3.2 or older you can do `a[:]` instead +of `a.copy()`. `a[:]` is a slice of the whole list, just like +`a[0:]`. + +## Tuples + +Tuples are a lot like lists, but they're immutable so they +can't be changed in-place. We create them like lists, but +with `()` instead of `[]`. + +```py +>>> thing = (1, 2, 3) +>>> thing +(1, 2, 3) +>>> thing = () +>>> thing +() +>>> +``` + +If we need to create a tuple that contains only one item we +need to use `(item,)` instead of `(item)` because `(item)` is +used in places like `(1 + 2) * 3`. + +```py +>>> (3) +3 +>>> (3,) +(3,) +>>> (1 + 2) * 3 +9 +>>> (1 + 2,) * 3 +(3, 3, 3) +>>> +``` + +Tuples don't have methods like append, extend and remove +because they can't change theirselves in-place. + +```py +>>> stuff = (1, 2, 3) +>>> stuff.append(4) +Traceback (most recent call last): + File "", line 1, in +AttributeError: 'tuple' object has no attribute 'append' +>>> +``` + +So, why the heck would we use tuples instead of lists? There's +a few cases when we don't want mutability, but there's also +cases when Python programmers just like to use tuples. If you +want to know more about this you can read [Ned Batchelder's blog +post about this](http://nedbatchelder.com/blog/201608/lists_vs_tuples.html). + +## Summary + +- Lists are a way to point to multiple values with just one variable. +- Lists can be changed in-place and they have methods that change them + in-place, like append, extend and remove. +- Slicing lists returns a **new** list, and indexing them returns an + item from them. +- `thing = another_thing` does not create a copy of `another_thing`. +- Tuples are like lists, but they can't be changed in-place. They're + also used in different places. + +## Examples + +Here's the same program we had in the beginning of this tutorial, but +using a list: + +```py +namelist = ['wub_wub', 'theelous3', 'RubyPinch', 'go|dfish', 'Nitori'] + +name = input("Enter your name: ") +if name in namelist: + print("I know you!") +else: + print("Sorry, I don't know who you are :(") +``` From 3fd58c6afb97449e27c951afc422ede21ad54f2d Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 4 Nov 2016 23:32:48 +0200 Subject: [PATCH 081/329] same order everywhere --- lists-and-tuples.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lists-and-tuples.md b/lists-and-tuples.md index cb93b0f..9f99eed 100644 --- a/lists-and-tuples.md +++ b/lists-and-tuples.md @@ -30,7 +30,7 @@ one variable needs to point to multiple values. An easy way to do this is using a list: ```py -names = ['wub_wub', 'theelous3', 'RubyPinch', 'go|dfish', 'Nitori'] +names = ['wub_wub', 'theelous3', 'Nitori', 'RubyPinch', 'go|dfish'] ``` Here the `names` variable points to a list, which then points to From f2fbaee0759dec705217ba3f4863cf76b1dfa074 Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 4 Nov 2016 23:36:01 +0200 Subject: [PATCH 082/329] disclaimer --- lists-and-tuples.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lists-and-tuples.md b/lists-and-tuples.md index 9f99eed..a130148 100644 --- a/lists-and-tuples.md +++ b/lists-and-tuples.md @@ -267,3 +267,9 @@ if name in namelist: else: print("Sorry, I don't know who you are :(") ``` + +*** + +You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). + +[Back to the list of contents](README.md) From 700ac179485689544d5d251a9f3416494ced991c Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 4 Nov 2016 23:56:02 +0200 Subject: [PATCH 083/329] add missing image --- lists-and-tuples.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lists-and-tuples.md b/lists-and-tuples.md index a130148..0829029 100644 --- a/lists-and-tuples.md +++ b/lists-and-tuples.md @@ -175,7 +175,7 @@ False ``` If we need a new list with the same content we can use the -`copy` method: +`copy` method. ```py >>> a = [1, 2, 3] @@ -188,6 +188,11 @@ False >>> ``` +If we draw a picture of our variables in this example it looks +like this: + +![Different lists.](images/differentlist.png) + If you're using Python 3.2 or older you can do `a[:]` instead of `a.copy()`. `a[:]` is a slice of the whole list, just like `a[0:]`. From 06c3083b47087ea2e3a4890d38b2a8e6f813a54f Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 5 Nov 2016 00:05:42 +0200 Subject: [PATCH 084/329] setitem --- lists-and-tuples.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lists-and-tuples.md b/lists-and-tuples.md index 0829029..8cf75ff 100644 --- a/lists-and-tuples.md +++ b/lists-and-tuples.md @@ -118,6 +118,16 @@ multiple items from another list and remove removes an item. >>> ``` +We can also use slicing and indexing to change the content: + +```py +>>> names = ['theelous3', 'LOL', 'RubyPinch', 'go|dfish', 'Nitori'] +>>> names[1] = 'wub_wub' # replace LOL with wub_wub +>>> names +['theelous3', 'wub_wub', 'RubyPinch', 'go|dfish', 'Nitori'] +>>> +``` + As you can see, **list can be changed in-place**. In other words, they are **mutable**. Integers, floats, strings and many other built-in types can't, so they are **immutable**. From 26191d164c84b61dceb576e50c2a8f5f7278bdbb Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 5 Nov 2016 13:45:02 +0200 Subject: [PATCH 085/329] [stuff] also creates a new list every time --- lists-and-tuples.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lists-and-tuples.md b/lists-and-tuples.md index 8cf75ff..e49f0e6 100644 --- a/lists-and-tuples.md +++ b/lists-and-tuples.md @@ -181,6 +181,8 @@ Typing `[]` creates a **new** list every time. ```py >>> [] is [] False +>>> [1, 2, 3] is [1, 2, 3] +False >>> ``` From 2e5af274d7e5735b06882fc8fe62eeaeb4ad5984 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 5 Nov 2016 14:33:56 +0200 Subject: [PATCH 086/329] updating stuff --- handy-stuff-strings.md | 117 ++++++++++++++++++++++++++++++----------- 1 file changed, 85 insertions(+), 32 deletions(-) diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index f2e8fa8..7dfdec5 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -146,21 +146,6 @@ Indexing with negative values works like this: ![Indexing with negative values](images/indexing2.png) -## The in keyword - -We can use `in` and `not in` to check if a string contains another -string: - -```py ->>> "Hello" in our_string -True ->>> "Python" in our_string -False ->>> "Python" not in our_string -True ->>> -``` - ## String methods Python's strings have many useful methods. [The official documentation] @@ -192,6 +177,8 @@ False ' hello 123' >>> ' hello 123 '.strip() # strip from both sides 'hello 123' +>>> ' hello abc'.rstrip('cb') # strip c's and b's from right +' hello a' >>> our_string.ljust(30, '-') 'Hello World!------------------' >>> our_string.rjust(30, '-') @@ -246,18 +233,6 @@ Python has multiple ways to format strings. One is not necessarily better than others, they are just different. Here's a few ways to solve our problem: -- `.format()`-formatting, also known as new-style formatting. This - formatting style has a lot of features, but it's a little bit more - typing than `%s`-formatting. - - ```py - >>> "Hello {}.".format(name) - 'Hello Akuli.' - >>> "My name is {} and I'm on the {} channel on {}.".format(name, channel, network) - "My name is Akuli and I'm on the ##learnpython channel on freenode." - >>> - ``` - - `%s`-formatting, also known as printf-formatting and old-style formatting. This has less features than `.format()`-formatting, but `'Hello %s.' % name` is shorter and faster to type than @@ -285,6 +260,8 @@ our problem: Traceback (most recent call last): File "", line 1, in TypeError: not all arguments converted during string formatting + >>> "we have %s and %s" % ("hello", thestuff) + 'we have hello and (1, 2, 3)' >>> "we have %s" % (thestuff,) 'we have (1, 2, 3)' >>> @@ -292,9 +269,23 @@ our problem: Here `(thestuff,)` was a tuple that contained nothing but `thestuff`. +- `.format()`-formatting, also known as new-style formatting. This + formatting style has a lot of features, but it's a little bit more + typing than `%s`-formatting. + + ```py + >>> "Hello {}.".format(name) + 'Hello Akuli.' + >>> "My name is {} and I'm on the {} channel on {}.".format(name, channel, network) + "My name is Akuli and I'm on the ##learnpython channel on freenode." + >>> + ``` + - f-strings are even less typing, but new in Python 3.6. **Use this only if you know that nobody will need to run your code on Python versions older - than 3.6.** Here the f is short for "format". + than 3.6.** Here the f is short for "format", and the content of the + string is same as it would be with `.format()` but we can use variables + directly. ```py >>> f"My name is {name} and I'm on the {channel} channel on {network}." @@ -315,6 +306,67 @@ All of these formatting styles have many other features also: If you need to know more about formatting I recommend reading [this](https://pyformat.info/). +## Other things + +We can use `in` and `not in` to check if a string contains another +string. + +```py +>>> our_string = "Hello World!" +>>> "Hello" in our_string +True +>>> "Python" in our_string +False +>>> "Python" not in our_string +True +>>> +``` + +We can get the length of a string with the `len` function. The name +`len` is short for "length". + +```py +>>> len(our_string) # 12 characters +12 +>>> len('') # no characters +0 +>>> len('\n') # python thinks of \n as one character +1 +>>> +``` + +We can convert strings, integers and floats with each other with +`str`, `int` and `float`. They aren't actually functions, but they +behave a lot like functions. We'll learn more about what they really +are [later](classes.md). + +```py +>>> str(3.14) +'3.14' +>>> float('3.14') +3.14 +>>> str(123) +'123' +>>> int('123') +123 +>>> +``` + +Giving an invalid string to `int` or `float` produces an error +message. + +```py +>>> int('lol') +Traceback (most recent call last): + File "", line 1, in +ValueError: invalid literal for int() with base 10: 'lol' +>>> float('hello') +Traceback (most recent call last): + File "", line 1, in +ValueError: could not convert string to float: 'hello' +>>> +``` + ## Summary - Slicing returns a copy of a string with indexes from one index to @@ -327,16 +379,17 @@ If you need to know more about formatting I recommend reading ![Indexing](images/indexing3.png) -- The `in` keyword can be used for checking if a string contains another - string. - - Python has many string methods. Use [the documentation] (https://docs.python.org/3/library/stdtypes.html#string-methods) or `help(str)` when you don't rememeber something about them. - - String formatting means adding other things to the middle of a string. There are multiple ways to do this in Python. You should know how to use at least one of these ways. +- The `in` keyword can be used for checking if a string contains another + string. +- `len(string)` returns string's length. +- We can use `str`, `int` and `float` to convert values to different + types. *** From 4fe93ff6c03575dfb847227f5a11b572803beb82 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 5 Nov 2016 14:44:24 +0200 Subject: [PATCH 087/329] update readme --- README.md | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 31bcd43..6e1b949 100644 --- a/README.md +++ b/README.md @@ -35,15 +35,12 @@ everything should also work on Python 3.2 and all newer Pythons. 9. [Lists and tuples](lists-and-tuples.md) 10. [Loops](loops.md) 11. [Trey Hunner: zip and enumerate](trey-hunner-zip-and-enumerate.md) -12. [Files](files.md) -13. [Defining functions](defining-functions.md) -14. [Modules](modules.md) - -Parts of this tutorial that aren't ready to be added to the rest of it -yet: - -- [Classes](classes.md) -- [Exceptions](exceptions.md) +12. [Dictionaries](dicts.md) +13. [Files](files.md) +14. [Defining functions](defining-functions.md) +15. [Exceptions](exceptions.md) +16. [Modules](modules.md) +17. [Classes](classes.md) Other things this tutorial comes with: From caa608dd5fec34662c059d955ef5d2152b0a40c5 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 5 Nov 2016 15:58:27 +0200 Subject: [PATCH 088/329] new chapter --- what-is-true.md | 209 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 what-is-true.md diff --git a/what-is-true.md b/what-is-true.md new file mode 100644 index 0000000..5f4de87 --- /dev/null +++ b/what-is-true.md @@ -0,0 +1,209 @@ +# What is true? + +Now we understand how code like this works. + +```py +message = input("Enter something: ") +if message != '': + print("You entered:", message) +else: + print("You didn't enter anything!") +``` + +But most Python programmers would write that code like this +instead: + +```py +message = input("Enter something: ") +if message: + print("You entered:", message) +else: + print("You didn't enter anything!") +``` + +What the heck was that? We did `if message`, but `message` +was a string, not True or False! + +Python converted our message to a Boolean and then checked if +the Boolean it ended up with was True. But when will it be true? + +## Converting to Booleans + +We can convert things to Booleans like Python did by doing +`bool(things)`. Let's try that with strings. + +```py +>>> bool('hello') +True +>>> bool('there') +True +>>> bool('True') +True +>>> bool('False') # this isn't special in any way +True +>>> +``` + +The `if message:` actually did the same thing as `if bool(message)`, +which is same as `if bool(message) == True:`. Usually we just don't +write the `==True` part anywhere because we don't need it. + +As we can see, the Boolean value of most strings is True. The +only string that has a false Boolean value is the empty string, +`''` or `""`: + +```py +>>> bool('') +False +>>> +``` + +Most other things are also treated as False if they're empty and +True if they're not empty. + +```py +>>> bool([1, 2, 3]) +True +>>> bool([]) +False +>>> bool((1, 2, 3)) +True +>>> bool(()) +False +>>> bool({'a': 1, 'b': 2}) +True +>>> bool({}) +False +>>> +``` + +None and zero are also falsy, but positive and negative numbers +are treated as True. + +```py +>>> bool(None) +False +>>> bool(0) +False +>>> bool(0.0) +False +>>> bool(1) +True +>>> bool(-1) +True +>>> +``` + +Most other things are also treated as True. + +```py +>>> bool(OSError) +True +>>> bool(print) +True +>>> +``` + +## When and why should we use Boolean values of things? + +It's recommended to rely on the Boolean value when we're doing +something with things like lists and tuples. This way our code +will work even if it gets a value of a different type than we +were expected it to get originally. + +For example, this code doesn't work right if we give it +something else than a list. It thinks that empty tuples, +strings and dictionaries aren't empty just because they aren't +empty lists: + +```py +>>> def is_this_empty(thing): +... if thing == []: +... print("It's empty!") +... else: +... print("It's not empty.") +... +>>> is_this_empty([1, 2, 3]) +It's not empty. +>>> is_this_empty([]) +It's empty! +>>> is_this_empty(()) +It's not empty. +>>> is_this_empty('') +It's not empty. +>>> is_this_empty({}) +It's not empty. +>>> +``` + +We could improve the code by checking against different empty +things. + +```py +>>> def is_this_empty(thing): +... if thing == [] or thing == () or thing == '' or thing == {}: +... print("It's empty!") +... else: +... print("It's not empty.") +... +>>> +``` + +But Python has many other data types that can be empty and we +haven't talked about in this tutorial. Trying to check all of +them would be pointless because functions like this already +work with all of them: + +```py +>>> def is_this_empty(thing): +... if thing: +... print("It's not empty.") +... else: +... print("It's empty!") +... +>>> +``` + +There's also cases when we should not rely on the Boolean value. +When we're doing things with numbers and None it's best to +simply compare to None or zero. Like this: + +```py +if number != 0: + print("number is not zero") + +if value is not None: + print("value is not None") +``` + +Not like this: + +```py +if number: + print("number is not zero") + +if value: + print("value is not None") +``` + +We used `is not` instead of `!=` in the first example because +the official style guide recommends it. The reason is that it's +possible to create a value that isn't really None but seems like +None when we compare it with None using `==` or `!=`, and we want +to make sure that we don't treat values like that as None. + +So here's how we should check if something is None: + +```py +if not value: ... # not good if we want to check if it's None +if value == None: ... # better +if value is None: ... # best +``` + +## Summary + +- `if thing:` does the same thing as `if bool(thing):`. +- `bool()` of most things is True, but `bool()` of None, zero and + most empty things are False. +- Use `is` and `is not` when comparing to None, `==` and `!=` when + comparing to numbers and rely on the Boolean value otherwise. From 149d361d60fa5f9d49fed8be55d89883e51a8138 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 5 Nov 2016 15:58:33 +0200 Subject: [PATCH 089/329] update README --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 6e1b949..9e62e24 100644 --- a/README.md +++ b/README.md @@ -36,11 +36,12 @@ everything should also work on Python 3.2 and all newer Pythons. 10. [Loops](loops.md) 11. [Trey Hunner: zip and enumerate](trey-hunner-zip-and-enumerate.md) 12. [Dictionaries](dicts.md) -13. [Files](files.md) -14. [Defining functions](defining-functions.md) -15. [Exceptions](exceptions.md) -16. [Modules](modules.md) -17. [Classes](classes.md) +13. [Defining functions](defining-functions.md) +14. [What is true?](what-is-true.md) +15. [Files](files.md) +16. [Exceptions](exceptions.md) +17. [Modules](modules.md) +18. [Classes](classes.md) Other things this tutorial comes with: From decbe90ca96cc80766a9a8dd5c20ab3022837ff4 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 5 Nov 2016 15:58:43 +0200 Subject: [PATCH 090/329] summary --- loops.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/loops.md b/loops.md index fc7b9f6..8126623 100644 --- a/loops.md +++ b/loops.md @@ -288,6 +288,15 @@ If you're using Python 3.2 or older you need to use `stuff[:]` instead of `stuff.copy()` and `stuff[:] = []` instead of `stuff.clear()`. `stuff[:]` is a slice of the whole list, just like `stuff[0:]`. +## Summary + +- A loop means repeating something multiple times. +- While loops repeat something as long as a condition is true, and + they check the condition only in the beginning. +- For loops can be used for repeating something to each item in a list. +- The `break` keyword can be used to interrupt the innermost loop at + any time. + ## Exercises 1. Back in "Using if, else and elif" we created a program that asked From 0bb90de05e6f6c36b308a1f4ac95616119304dea Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 6 Nov 2016 13:25:52 +0200 Subject: [PATCH 091/329] reorganizing and fixing things --- what-is-true.md | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/what-is-true.md b/what-is-true.md index 5f4de87..7cead4e 100644 --- a/what-is-true.md +++ b/what-is-true.md @@ -4,10 +4,10 @@ Now we understand how code like this works. ```py message = input("Enter something: ") -if message != '': - print("You entered:", message) -else: +if message == '': print("You didn't enter anything!") +else: + print("You entered:", message) ``` But most Python programmers would write that code like this @@ -29,6 +29,10 @@ the Boolean it ended up with was True. But when will it be true? ## Converting to Booleans +The `if message:` actually did the same thing as `if bool(message)`, +which is same as `if bool(message) == True:`. Usually we just don't +write the `==True` part anywhere because we don't need it. + We can convert things to Booleans like Python did by doing `bool(things)`. Let's try that with strings. @@ -44,10 +48,6 @@ True >>> ``` -The `if message:` actually did the same thing as `if bool(message)`, -which is same as `if bool(message) == True:`. Usually we just don't -write the `==True` part anywhere because we don't need it. - As we can see, the Boolean value of most strings is True. The only string that has a false Boolean value is the empty string, `''` or `""`: @@ -109,7 +109,7 @@ True It's recommended to rely on the Boolean value when we're doing something with things like lists and tuples. This way our code will work even if it gets a value of a different type than we -were expected it to get originally. +expected it to get originally. For example, this code doesn't work right if we give it something else than a list. It thinks that empty tuples, @@ -202,8 +202,10 @@ if value is None: ... # best ## Summary -- `if thing:` does the same thing as `if bool(thing):`. -- `bool()` of most things is True, but `bool()` of None, zero and - most empty things are False. +- `if thing:` does the same thing as `if bool(thing):`. This also + works with while loops and most other things. +- `bool()` of most things is True, but `bool()` values of None, + zero and most empty things are False. - Use `is` and `is not` when comparing to None, `==` and `!=` when - comparing to numbers and rely on the Boolean value otherwise. + checking if a number is zero and rely on the Boolean value + when checking if something is empty. From b3abff7c92e816274efcd67275f5050ccd1e2e2d Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 6 Nov 2016 13:27:57 +0200 Subject: [PATCH 092/329] clarifying things --- what-is-true.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/what-is-true.md b/what-is-true.md index 7cead4e..46a75f3 100644 --- a/what-is-true.md +++ b/what-is-true.md @@ -203,7 +203,8 @@ if value is None: ... # best ## Summary - `if thing:` does the same thing as `if bool(thing):`. This also - works with while loops and most other things. + works with while loops and most other things that are usually used + with Booleans. - `bool()` of most things is True, but `bool()` values of None, zero and most empty things are False. - Use `is` and `is not` when comparing to None, `==` and `!=` when From ee0bda96fe75df9d6bb3115b6f8fcdf684ea8a7c Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 6 Nov 2016 16:34:28 +0200 Subject: [PATCH 093/329] get rid of the old lists.md --- defining-functions.md | 36 ++++++++-------- lists.md | 96 ------------------------------------------- variables.md | 3 +- 3 files changed, 19 insertions(+), 116 deletions(-) delete mode 100644 lists.md diff --git a/defining-functions.md b/defining-functions.md index 64ea271..27c08b3 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -477,12 +477,27 @@ print("Your favorite color is %s!" % choice) ## Exercises +**TODO:** more exercises. + **There is a lot to learn about functions, and I don't expect you to learn everything at once.** However, there's also lots of free Python exercises about defining functions you can do. Do many of them and spend time with them until you're familiar with defining functions. -1. Python comes with many built-in functions. Some of the simplest ones +1. The box printing function doesn't really print a box, it prints a + message between two lines. + + ************ + Hello World! + ************ + + Modify it to print an actual box: + + **************** + * Hello World! * + **************** + +2. Python comes with many built-in functions. Some of the simplest ones are abs, all and any. They can be used like this: - abs returns the absolute value of its only argument. @@ -523,24 +538,7 @@ spend time with them until you're familiar with defining functions. other operating systems. Try the above examples with your functions. -2. The box printing function doesn't really print a box, it prints a - message between two lines. - - ************ - Hello World! - ************ - - Modify it to print an actual box: - - **************** - * Hello World! * - **************** - -3. Back in [Lists](lists.md), you needed to skip parts of the tutorial - and all the exercises because you didn't know how to define - functions. Read those parts now, and do the exercises. - -4. Find more exercises about defining functions online. +2. Find more exercises about defining functions online. Answers for the first and second exercise are [here](answers.md). diff --git a/lists.md b/lists.md deleted file mode 100644 index e516342..0000000 --- a/lists.md +++ /dev/null @@ -1,96 +0,0 @@ -# ThinkPython: Lists - -Now we have learned to save values to variables. - -```py -thing = 'Hello World!' -``` - -Then we can do whatever we want with the variable. - -```py -print(thing) -``` - -But what if you have a lot of values? You can just make a lot of -variables... - -```py -thing1 = 'Hello World!' -thing2 = 'hi' -thing3 = 123 -thing4 = 3.14 -thing5 = 42 -thing6 = 'This is yet another thing.' -thing7 = 'Python is fun!' - -print(thing1) -print(thing2) -print(thing3) -print(thing4) -print(thing5) -print(thing6) -print(thing7) -``` - -...or you can use a list and keep everything in one variable. - -```py -things = ['Hello World!', 'hi', 123, 3.14, 42, - 'This is yet another thing.', 'Python is fun!'] -for thing in things: - print(thing) -``` - -[Read more about lists in ThinkPython -here.](http://greenteapress.com/thinkpython2/html/thinkpython2011.html) -Skip the chapter "10.7 Map, filter and reduce", and all exercises. You -would need to know how to define functions using the `def` keyword, but -we haven't talked about that yet. - -## Summary - -- Lists are a way to store multiple values in one variable. We can - create lists by putting whatever we want inside [square brackets], - for example, `our_list = []` creates an empty list. -- Never do `list = ...`. `list` is a built-in class, and it's used for - converting other values to lists, like `list_of_thingy = list(thingy)`. - If we do `list = something`, then `list(thingy)` will probably do - something else than we want it to do. -- When we have created a list, we can **slice** it. For example, - `our_list[2:]` results in a new list with everything in the - original list except the first two elements. Negative indexes start - from the end of the list, for example, `our_list[-2:]` is a list of - the last two elements. -- We can also **index** lists, `our_list[0]` is the first element in the - list. Non-negative indexes start at zero, and negative indexes - start at -1. -- You can assign to indexes and slices like `some_list[0] = 'hi'`, or - delete them like `del some_list[:2]`. -- `a = b` does not create a copy of b. - - ```py - >>> a = [] - >>> b = a # this does not copy anything, see the state diargams - >>> b += [1, 2, 3] - >>> a - [1, 2, 3] - >>> - ``` - - If you want a copy, use the `.copy()` list method: - - ```py - >>> a = [] - >>> b = a.copy() - >>> b += [1, 2, 3] - >>> a - [] - >>> - ``` - -*** - -You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md) diff --git a/variables.md b/variables.md index 93d5f1e..e6f9d71 100644 --- a/variables.md +++ b/variables.md @@ -63,7 +63,8 @@ need to keep in mind: - Multiple variables can point to the same value, but one variable cannot point to multiple values. - The values that variables point to can point to other values also. - We'll learn more about that when we'll talk about [lists](lists.md). + We'll learn more about that when we'll talk about + [lists](lists-and-tuples.md). Variables are an important part of most programming languages, and they allow programmers to write much larger programs than they could write From c79e2803d4bbb54e361dab9b008748755a699c75 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 6 Nov 2016 16:48:37 +0200 Subject: [PATCH 094/329] better content link --- answers.md | 2 +- classes.md | 2 +- contact-me.md | 2 +- defining-functions.md | 2 +- editor-setup.md | 2 +- files.md | 2 +- getting-help.md | 2 +- getting-started.md | 2 +- handy-stuff-strings.md | 2 +- if.md | 2 +- installing-python.md | 2 +- lists-and-tuples.md | 2 +- loops.md | 2 +- modules.md | 2 +- the-way-of-the-program.md | 2 +- trey-hunner-zip-and-enumerate.md | 2 +- using-functions.md | 2 +- variables.md | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/answers.md b/answers.md index b2175f1..b16375c 100644 --- a/answers.md +++ b/answers.md @@ -290,4 +290,4 @@ These are answers for exercises in the chapters. In programming, there's always You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md) +[Back to the list of contents](README.md#list-of-contents) diff --git a/classes.md b/classes.md index 97ecf8e..d71b65f 100644 --- a/classes.md +++ b/classes.md @@ -420,4 +420,4 @@ print("You entered " + word + ".") You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md) +[Back to the list of contents](README.md#list-of-contents) diff --git a/contact-me.md b/contact-me.md index a8075c6..42085cd 100644 --- a/contact-me.md +++ b/contact-me.md @@ -20,4 +20,4 @@ it, there are a few ways to contact me: You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md) +[Back to the list of contents](README.md#list-of-contents) diff --git a/defining-functions.md b/defining-functions.md index 27c08b3..d76e873 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -546,4 +546,4 @@ Answers for the first and second exercise are [here](answers.md). You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md) +[Back to the list of contents](README.md#list-of-contents) diff --git a/editor-setup.md b/editor-setup.md index aaa95e1..4d5a0b3 100644 --- a/editor-setup.md +++ b/editor-setup.md @@ -129,4 +129,4 @@ about it here, [tell me](contact-me.md). You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md) +[Back to the list of contents](README.md#list-of-contents) diff --git a/files.md b/files.md index 7546b9c..9908101 100644 --- a/files.md +++ b/files.md @@ -374,4 +374,4 @@ else: You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md) +[Back to the list of contents](README.md#list-of-contents) diff --git a/getting-help.md b/getting-help.md index 7dac8a8..fbb592c 100644 --- a/getting-help.md +++ b/getting-help.md @@ -55,4 +55,4 @@ help on IRC is much faster. You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md) +[Back to the list of contents](README.md#list-of-contents) diff --git a/getting-started.md b/getting-started.md index a7e6677..9ec319c 100644 --- a/getting-started.md +++ b/getting-started.md @@ -215,4 +215,4 @@ Powers are calculated before `*` and `/`, but after `()`. You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md) +[Back to the list of contents](README.md#list-of-contents) diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index 7dfdec5..02c932d 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -395,4 +395,4 @@ ValueError: could not convert string to float: 'hello' You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md) +[Back to the list of contents](README.md#list-of-contents) diff --git a/if.md b/if.md index e946961..5fa7bf8 100644 --- a/if.md +++ b/if.md @@ -337,4 +337,4 @@ The answers are [here](answers.md). You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md) +[Back to the list of contents](README.md#list-of-contents) diff --git a/installing-python.md b/installing-python.md index e8c9b45..0004384 100644 --- a/installing-python.md +++ b/installing-python.md @@ -111,4 +111,4 @@ Now you should have Python installed, and you should be able run it. You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md) +[Back to the list of contents](README.md#list-of-contents) diff --git a/lists-and-tuples.md b/lists-and-tuples.md index e49f0e6..3350094 100644 --- a/lists-and-tuples.md +++ b/lists-and-tuples.md @@ -289,4 +289,4 @@ else: You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md) +[Back to the list of contents](README.md#list-of-contents) diff --git a/loops.md b/loops.md index 8126623..51d450f 100644 --- a/loops.md +++ b/loops.md @@ -323,4 +323,4 @@ of `stuff.copy()` and `stuff[:] = []` instead of `stuff.clear()`. You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md) +[Back to the list of contents](README.md#list-of-contents) diff --git a/modules.md b/modules.md index 3a05030..c233310 100644 --- a/modules.md +++ b/modules.md @@ -488,4 +488,4 @@ section at the bottom. You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md) +[Back to the list of contents](README.md#list-of-contents) diff --git a/the-way-of-the-program.md b/the-way-of-the-program.md index fd0f28e..9de882a 100644 --- a/the-way-of-the-program.md +++ b/the-way-of-the-program.md @@ -40,4 +40,4 @@ learned everything. You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md) +[Back to the list of contents](README.md#list-of-contents) diff --git a/trey-hunner-zip-and-enumerate.md b/trey-hunner-zip-and-enumerate.md index b311dec..7f4596d 100644 --- a/trey-hunner-zip-and-enumerate.md +++ b/trey-hunner-zip-and-enumerate.md @@ -137,4 +137,4 @@ The answers are [here](answers.md). You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md) +[Back to the list of contents](README.md#list-of-contents) diff --git a/using-functions.md b/using-functions.md index 038902f..0138698 100644 --- a/using-functions.md +++ b/using-functions.md @@ -160,4 +160,4 @@ Enter something: hello You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md) +[Back to the list of contents](README.md#list-of-contents) diff --git a/variables.md b/variables.md index e6f9d71..233bb22 100644 --- a/variables.md +++ b/variables.md @@ -274,4 +274,4 @@ what you are doing. We'll learn more about it later. You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md) +[Back to the list of contents](README.md#list-of-contents) From d32defc8f0b8e66ed41f69be1ea247538a6f4a52 Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 10 Nov 2016 09:46:03 +0200 Subject: [PATCH 095/329] better instructions and contents link --- what-is-programming.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/what-is-programming.md b/what-is-programming.md index 858b53f..8d3d31b 100644 --- a/what-is-programming.md +++ b/what-is-programming.md @@ -97,6 +97,11 @@ any way. You'll get an error message that tells you what's wrong and where. Even professional programmers do mistakes and get error messages all the time, and there's nothing wrong with it. +If you want to know what some piece of code in this tutorial does just +**try it and see**. It's practically impossible to break anything +accidentally with code in this tutorial, so you are free to try out all +the examples however you want. + Even though a good tutorial is an important part about learning to program, you also need to learn to make your own things. Use what you have learned, and create something with it. @@ -108,7 +113,7 @@ have learned, and create something with it. character on your keyboard and press the key, holding down shift or AltGr as needed. - Make sure you understand everything you read. -- Don't fear mistakes. +- Experiment with things freely and don't fear mistakes. - Error messages are your friends. - Let me know if you have trouble with this tutorial. - Now we're ready to [install Python](installing-python.md) and @@ -117,3 +122,5 @@ have learned, and create something with it. *** You may use this tutorial at your own risk. See [LICENSE](LICENSE). + +[Back to the list of contents](README.md#list-of-contents) From 332bbcc843be067b828bd7e9a15d8b9de03c2013 Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 10 Nov 2016 11:32:32 +0200 Subject: [PATCH 096/329] freedom to change the software --- what-is-programming.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/what-is-programming.md b/what-is-programming.md index 8d3d31b..332492b 100644 --- a/what-is-programming.md +++ b/what-is-programming.md @@ -100,7 +100,7 @@ all the time, and there's nothing wrong with it. If you want to know what some piece of code in this tutorial does just **try it and see**. It's practically impossible to break anything accidentally with code in this tutorial, so you are free to try out all -the examples however you want. +the examples however you want and change them to do whatever you want. Even though a good tutorial is an important part about learning to program, you also need to learn to make your own things. Use what you From edb4756ed0fb52f8a4d2d46418c93c3331f7880f Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 11 Nov 2016 23:57:30 +0200 Subject: [PATCH 097/329] titles to using-functions --- lists-and-tuples.md | 2 +- using-functions.md | 88 ++++++++++++++++++++++++++------------------- 2 files changed, 53 insertions(+), 37 deletions(-) diff --git a/lists-and-tuples.md b/lists-and-tuples.md index 3350094..f953f53 100644 --- a/lists-and-tuples.md +++ b/lists-and-tuples.md @@ -145,7 +145,7 @@ None ``` This is the same thing that happened way back when [we assigned -print's return value to a variable](using-functions.md). +print's return value to a variable](using-functions.md#return-values). ## What is what? diff --git a/using-functions.md b/using-functions.md index 0138698..9f71296 100644 --- a/using-functions.md +++ b/using-functions.md @@ -29,20 +29,31 @@ Hello World! But what exactly is print? +## What are functions? + +Let's see what happens if we type `print` without the `('Hello')` part. + ```py >>> print >>> ``` -In Python 3, print is a function. Functions do something when they are +We could also type `print(print)`, it would do the same thing. Python +replied to us with some information about print wrapped in `<>`. + +As we can see, print is a function. Functions do something when they are **called** by typing their name and parentheses. Inside the parentheses, we can pass some arguments too. In `print("hello")` the function is `print` and we give it one argument, which is `"hello"`. -Functions are sometimes thoght of as difficult to understand, but they -really are not. They just do something when they are called. But if we -do `x = print('hello')`, what is x? +Functions are easy to understand, They simply **do something when they +are called**. Functions run immediately when we call them, so the +text appears on the screen right away when we run `print(something)`. + +## Return values + +If we do `x = print('hello')`, what is x? ```py >>> x = print('hello') @@ -58,8 +69,7 @@ explained in more detail: - In `x = print('hello')`, the right side is processed first. - `print('hello')` calls the print function with the argument `'hello'`. -- The function runs **immediately** when it's called. It shows the word - hello. +- The function runs. It shows the word hello. - The print function **returns** None. All functions need to return something, and print returns None because there's no need to return anything else. @@ -68,17 +78,46 @@ explained in more detail: there, and the assignment now looks like `x = None`. - x is now None. +Now we understand what a return value is. When we call the function, +Python "replaces" `function(args)` with whatever the function returns. + Calling a function without assigning the return value to anything (e.g. `print('hello')` instead of `x = print('hello')`) simply throws away -the return value. The interactive `>>>` prompt also echoes the return -value back if it's not None. +the return value. The interactive `>>>` prompt doesn't echo the return +value back because it's None. Of course, `x = print('hello')` is useless compared to `print('hello')` because the print function always returns None and we can do `x = None` without any printing. +Not all functions return None. The input function can be used for +getting a string from the user. + +```py +>>> x = input("Enter something:") +Enter something:hello +>>> x +'hello' +>>> +``` + +`input("Enter something:")` showed the text `Enter something:` on the +screen and waited for me to type something. I typed hello and pressed +Enter. Then input returned the hello I typed as a string and it was +assigned to x. + +Usually we want to add a space after the `:`, like this: + +```py +>>> x = input("Enter something: ") # now there's space between : and where i type +Enter something: hello +>>> +``` + +## More about print + We can also print an empty line by calling print without any -arguments: +arguments. ```py >>> print() @@ -97,7 +136,7 @@ world ``` If we want to print a backslash, we need to **escape** it by typing -two backslashes: +two backslashes. [comment]: # (For some reason, GitHub's syntax highlighting doesn't) [comment]: # (work here.) @@ -123,37 +162,14 @@ Unlike with `+`, the arguments don't need to be strings. >>> ``` -Not all functions return None. The input function can be used for -getting a string from the user. - -```py ->>> x = input("Enter something:") -Enter something:hello ->>> x -'hello' ->>> -``` - -`input("Enter something:")` showed the text `Enter something:` on the -screen and waited for me to type something. I typed hello and pressed -Enter. Then input returned the hello I typed as a string and it was -assigned to x. - -Usually we want to add a space after the `:`, like this: - -```py ->>> x = input("Enter something: ") # now there's space between : and where i type -Enter something: hello ->>> -``` - ## Summary - `function()` calls a function without any arguments, and `function(1, 2, 3)` calls a function with 1, 2 and 3 as arguments. - `x = function()` calls a function, and assigns the return value of - the call to x. - When a function is called, it does something and returns something. +- `function(stuff)` is "replaced" with the return value in the code + that called it. For example, `x = function()` calls a function, and + then does `x = the_return_value` and the return value ends up in x. - Python comes with `print` and `input`. They are built-in functions. *** From 83bbb93b3ab207d8cef81a9ab90da974af9101e5 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 12 Nov 2016 17:51:55 +0200 Subject: [PATCH 098/329] better link --- modules.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules.md b/modules.md index c233310..00a80ad 100644 --- a/modules.md +++ b/modules.md @@ -454,7 +454,8 @@ then typing in what you want to search for. - [textwrap](https://docs.python.org/3/library/textwrap.html): break long text into multiple lines - [warnings](https://pymotw.com/3/warnings/): - like exceptions, but they don't interrupt the whole program + like [exceptions](exceptions.md), but they don't interrupt the + whole program - [webbrowser](https://pymotw.com/3/webbrowser/): open a web browser from Python From d6c7d3e97af134709b2c58199a24d25fe745dfbb Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 13 Nov 2016 18:55:22 +0200 Subject: [PATCH 099/329] be explicit --- classes.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/classes.md b/classes.md index d71b65f..145f4e5 100644 --- a/classes.md +++ b/classes.md @@ -97,8 +97,10 @@ Now we can make a Website instance by calling the class. >>> ``` -We can attach more information about stackoverflow to the new Website -instance. +We can say that `stackoverflow` is "a Website instance", "a Website +object" or "a Website". All of these mean the same thing. + +Now we can attach more information about stackoverflow to our Website. ```py >>> stackoverflow.url = 'http://stackoverflow.com/' @@ -127,6 +129,7 @@ new Website. **attributes**. More specifically, they are **instance attributes**. The biggest difference is that we need to use a dot for setting and getting values of attributes, but we don't need that with variables. + Modules also use instance attributes for accessing their content. For example, when we do `random.randint`, `random` is a module instance and `randint` is one of its attributes. From eaa5997fbe7f357e9115e1d9e39afbaafd45dc21 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 13 Nov 2016 18:55:46 +0200 Subject: [PATCH 100/329] be friendly --- what-is-programming.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/what-is-programming.md b/what-is-programming.md index 858b53f..8b88caa 100644 --- a/what-is-programming.md +++ b/what-is-programming.md @@ -101,6 +101,11 @@ Even though a good tutorial is an important part about learning to program, you also need to learn to make your own things. Use what you have learned, and create something with it. +## But reading is boring! + +Yes, I know. You can just try the code examples yourself and read the +rest of this tutorial only if you don't understand the code. + ## Summary - Now you should know what programming and programming languages are. From 3e073416989c302d159f849ed05a5e440bbc5a0a Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 17 Nov 2016 19:56:56 +0200 Subject: [PATCH 101/329] python 3.2 doesn't have list.copy --- lists-and-tuples.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lists-and-tuples.md b/lists-and-tuples.md index f953f53..9b6cce7 100644 --- a/lists-and-tuples.md +++ b/lists-and-tuples.md @@ -205,7 +205,7 @@ like this: ![Different lists.](images/differentlist.png) -If you're using Python 3.2 or older you can do `a[:]` instead +If you're using Python 3.2 or older you need to do `a[:]` instead of `a.copy()`. `a[:]` is a slice of the whole list, just like `a[0:]`. From 323fc3d88abddb798202a448cf8ea1f9d1a6bb9d Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 24 Nov 2016 19:57:55 +0200 Subject: [PATCH 102/329] move stuff around, explain methods --- handy-stuff-strings.md | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index 02c932d..a262598 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -158,6 +158,12 @@ Again, nothing can modify strings in-place. Most string methods return a new string, but things like `our_string = our_string.upper()` still work because the new string is assigned to the old variable. +Also note that all of these methods are used like `our_string.stuff()`, +not like `stuff(our_string)`. The idea with that is that our string +knows how to do all these things, like `our_string.stuff()`, we don't +need a separate function that does these things like `stuff(our_string)`. +We'll learn more about methods [later](classes.md). + Here's an example with some of the most commonly used string methods: ```py @@ -233,6 +239,18 @@ Python has multiple ways to format strings. One is not necessarily better than others, they are just different. Here's a few ways to solve our problem: +- `.format()`-formatting, also known as new-style formatting. This + formatting style has a lot of features, but it's a little bit more + typing than `%s`-formatting. + + ```py + >>> "Hello {}.".format(name) + 'Hello Akuli.' + >>> "My name is {} and I'm on the {} channel on {}.".format(name, channel, network) + "My name is Akuli and I'm on the ##learnpython channel on freenode." + >>> + ``` + - `%s`-formatting, also known as printf-formatting and old-style formatting. This has less features than `.format()`-formatting, but `'Hello %s.' % name` is shorter and faster to type than @@ -269,18 +287,6 @@ our problem: Here `(thestuff,)` was a tuple that contained nothing but `thestuff`. -- `.format()`-formatting, also known as new-style formatting. This - formatting style has a lot of features, but it's a little bit more - typing than `%s`-formatting. - - ```py - >>> "Hello {}.".format(name) - 'Hello Akuli.' - >>> "My name is {} and I'm on the {} channel on {}.".format(name, channel, network) - "My name is Akuli and I'm on the ##learnpython channel on freenode." - >>> - ``` - - f-strings are even less typing, but new in Python 3.6. **Use this only if you know that nobody will need to run your code on Python versions older than 3.6.** Here the f is short for "format", and the content of the From e4f0cce5106fbc402cca9853efeec71d6fe49bce Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 24 Nov 2016 22:06:51 +0200 Subject: [PATCH 103/329] remove note, little fixes --- lists-and-tuples.md | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/lists-and-tuples.md b/lists-and-tuples.md index 9b6cce7..a291651 100644 --- a/lists-and-tuples.md +++ b/lists-and-tuples.md @@ -118,6 +118,29 @@ multiple items from another list and remove removes an item. >>> ``` +Note that `remove` removes only the first match it finds. + +```py +>>> names = ['theelous3', 'go|dfish', 'theelous3'] +>>> names.remove('theelous3') +>>> names # the second theelous3 is still there! +['go|dfish', 'theelous3'] +>>> +``` + +If we need to remove all matching items we can use a simple while loop. +We'll talk more about loops [in the next chapter](loops.md). + +```py +>>> names = ['theelous3', 'go|dfish', 'theelous3'] +>>> while 'theelous3' in names: +... names.remove('theelous3') +... +>>> names +['go|dfish'] +>>> +``` + We can also use slicing and indexing to change the content: ```py @@ -186,7 +209,7 @@ False >>> ``` -If we need a new list with the same content we can use the +If we need **a new list with similar content** we can use the `copy` method. ```py @@ -242,7 +265,7 @@ used in places like `(1 + 2) * 3`. ``` Tuples don't have methods like append, extend and remove -because they can't change theirselves in-place. +because they can't change themselves in-place. ```py >>> stuff = (1, 2, 3) From 4258e16d9907dcd0453baa2edf64d7155fb80f84 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 27 Nov 2016 10:50:18 +0200 Subject: [PATCH 104/329] be explicit --- classes.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/classes.md b/classes.md index 145f4e5..9fcbb85 100644 --- a/classes.md +++ b/classes.md @@ -274,8 +274,8 @@ Methods are "links" to the class attribute functions. So and when `stackoverflow.info()` is called it automatically gets `stackoverflow` as an argument. -In other words, `Class.method(instance)` does the same thing as -`instance.method()`. This also works with built-in classes, for +In other words, **`Class.method(instance)` does the same thing as +`instance.method()`**. This also works with built-in classes, for example `'hello'.lower()` is same as `str.lower('hello')`. ## Defining methods when defining the class @@ -286,7 +286,7 @@ it later? ```py >>> class Website: ... -... def info(self): # self is a Website instance +... def info(self): # self will be stackoverflow ... print("URL:", self.url) ... print("Founding year:", self.founding_year) ... print("Free to use:", self.free_to_use) From 024553c55ded5fec4271236b8c9a85251c87db76 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 29 Nov 2016 22:12:23 +0200 Subject: [PATCH 105/329] remove old file ends --- classes.md | 6 ------ defining-functions.md | 6 ------ exceptions.md | 4 ---- files.md | 6 ------ getting-started.md | 6 ------ handy-stuff-strings.md | 6 ------ if.md | 6 ------ installing-python.md | 6 ------ lists-and-tuples.md | 6 ------ loops.md | 6 ------ modules.md | 6 ------ the-way-of-the-program.md | 6 ------ trey-hunner-zip-and-enumerate.md | 6 ------ using-functions.md | 6 ------ variables.md | 6 ------ what-is-programming.md | 6 ------ 16 files changed, 94 deletions(-) diff --git a/classes.md b/classes.md index 9fcbb85..230eed0 100644 --- a/classes.md +++ b/classes.md @@ -418,9 +418,3 @@ print("You entered " + word + ".") - `__init__` is a special method, and it's ran when a new instance of a class is created. It does nothing by default. - Don't use classes if your code is easier to read without them. - -*** - -You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md#list-of-contents) diff --git a/defining-functions.md b/defining-functions.md index d76e873..584e5e1 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -541,9 +541,3 @@ spend time with them until you're familiar with defining functions. 2. Find more exercises about defining functions online. Answers for the first and second exercise are [here](answers.md). - -*** - -You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md#list-of-contents) diff --git a/exceptions.md b/exceptions.md index 07da845..805f219 100644 --- a/exceptions.md +++ b/exceptions.md @@ -472,7 +472,3 @@ except OSError: sys.exit(1) # time to give up greet() ``` - -*** - -You may use this tutorial at your own risk. See [LICENSE](LICENSE). diff --git a/files.md b/files.md index 9908101..42d5ab0 100644 --- a/files.md +++ b/files.md @@ -369,9 +369,3 @@ else: print("Done! Now run this program again and select 'y'.") ``` - -*** - -You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md#list-of-contents) diff --git a/getting-started.md b/getting-started.md index 9ec319c..7bcc29d 100644 --- a/getting-started.md +++ b/getting-started.md @@ -210,9 +210,3 @@ Powers are calculated before `*` and `/`, but after `()`. it will echo back the result. - Pieces of text starting with a `#` are comments. - `+`, `-`, `*` and `/` work in Python just like in math. - -*** - -You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md#list-of-contents) diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index a262598..89a2024 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -396,9 +396,3 @@ ValueError: could not convert string to float: 'hello' - `len(string)` returns string's length. - We can use `str`, `int` and `float` to convert values to different types. - -*** - -You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md#list-of-contents) diff --git a/if.md b/if.md index 5fa7bf8..f4ef190 100644 --- a/if.md +++ b/if.md @@ -332,9 +332,3 @@ else: ``` The answers are [here](answers.md). - -*** - -You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md#list-of-contents) diff --git a/installing-python.md b/installing-python.md index 0004384..cd466df 100644 --- a/installing-python.md +++ b/installing-python.md @@ -106,9 +106,3 @@ some things might stop working. See ## Summary Now you should have Python installed, and you should be able run it. - -*** - -You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md#list-of-contents) diff --git a/lists-and-tuples.md b/lists-and-tuples.md index a291651..d54d7c8 100644 --- a/lists-and-tuples.md +++ b/lists-and-tuples.md @@ -307,9 +307,3 @@ if name in namelist: else: print("Sorry, I don't know who you are :(") ``` - -*** - -You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md#list-of-contents) diff --git a/loops.md b/loops.md index 51d450f..64a5eae 100644 --- a/loops.md +++ b/loops.md @@ -318,9 +318,3 @@ of `stuff.copy()` and `stuff[:] = []` instead of `stuff.clear()`. until the user enters them correctly. 3. Can you limit the number of attempts to 3? - -*** - -You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md#list-of-contents) diff --git a/modules.md b/modules.md index 00a80ad..bb56495 100644 --- a/modules.md +++ b/modules.md @@ -484,9 +484,3 @@ section at the bottom. module you want to use. - Python comes with many modules, and we can install even more modules if we want to. - -*** - -You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md#list-of-contents) diff --git a/the-way-of-the-program.md b/the-way-of-the-program.md index 9de882a..c1ee132 100644 --- a/the-way-of-the-program.md +++ b/the-way-of-the-program.md @@ -35,9 +35,3 @@ learned everything. `"hello" + 3`? How about `"hello" * 3`? 3. What happens if you use + between a float and an integer, like `0.5 + 3`? How about `0.5 * 3`? - -*** - -You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md#list-of-contents) diff --git a/trey-hunner-zip-and-enumerate.md b/trey-hunner-zip-and-enumerate.md index 7f4596d..fa923da 100644 --- a/trey-hunner-zip-and-enumerate.md +++ b/trey-hunner-zip-and-enumerate.md @@ -132,9 +132,3 @@ Read it now, then come back here and do the exercises. ``` The answers are [here](answers.md). - -*** - -You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md#list-of-contents) diff --git a/using-functions.md b/using-functions.md index 9f71296..244828a 100644 --- a/using-functions.md +++ b/using-functions.md @@ -171,9 +171,3 @@ Unlike with `+`, the arguments don't need to be strings. that called it. For example, `x = function()` calls a function, and then does `x = the_return_value` and the return value ends up in x. - Python comes with `print` and `input`. They are built-in functions. - -*** - -You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md#list-of-contents) diff --git a/variables.md b/variables.md index 233bb22..f4f34b3 100644 --- a/variables.md +++ b/variables.md @@ -269,9 +269,3 @@ False, and if `value` is False, `not value` is True. There's also `is`, but don't use it instead of `==` unless you know what you are doing. We'll learn more about it later. - -*** - -You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md#list-of-contents) diff --git a/what-is-programming.md b/what-is-programming.md index 8d07adb..9ec907f 100644 --- a/what-is-programming.md +++ b/what-is-programming.md @@ -123,9 +123,3 @@ rest of this tutorial only if you don't understand the code. - Let me know if you have trouble with this tutorial. - Now we're ready to [install Python](installing-python.md) and [get started](getting-started.md)! - -*** - -You may use this tutorial at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md#list-of-contents) From 93c02c20b6b3cf2186d9d3303c34e39e1d808f2e Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 30 Nov 2016 17:59:44 +0200 Subject: [PATCH 106/329] add an end adder script --- update-ends.py | 102 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 update-ends.py diff --git a/update-ends.py b/update-ends.py new file mode 100644 index 0000000..07031d4 --- /dev/null +++ b/update-ends.py @@ -0,0 +1,102 @@ +"""Update ends of markdown files.""" + +import collections +import glob +import re + + +BASIC_END = """ +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). +""" + +CHAPTER_END = BASIC_END + """ +[Previous]({prev}) | [Next]({next}) | +[Back to the list of contents](README.md#list-of-contents) +""" + +MARKDOWN_LINK_REGEX = r'\[.*\]\((.*\.md)\)' +CHAPTER_LINK_REGEX = '^\d+\. ' + MARKDOWN_LINK_REGEX + '$' + + +def get_filenames(): + """Get chapter files and other files from README. + + Return a two-tuple of chapter files and other files. + """ + chapters = [] + with open('README.md', 'r') as f: + # move to where the content list starts + while f.readline().strip() != "## List of contents": + pass + + # now let's read the content list + for line in f: + line = line.strip() + if line: + # not empty line + match = re.search(CHAPTER_LINK_REGEX, line) + if match is None: + # end of content list + break + chapters.append(match.group(1)) + + # now let's find other links to markdown files + with open('README.md', 'r') as f: + all_files = re.findall(MARKDOWN_LINK_REGEX, f.read()) + others = set(all_files) - set(chapters) + + return chapters, others + + +def has_end(filename, template): + linecount = template.count('\n') + with open(filename, 'r') as f: + # get the last linecount lines + filelines = collections.deque(f, maxlen=linecount) + templatelines = template.rstrip('\n').split('\n') + + for templateline, fileline in zip(templatelines, filelines): + if '{' not in templateline: + # It doesn't contain formatting, we can do something with it. + if templateline.strip() != fileline.strip(): + # It's different than what using the template would result in. + return False + + # All lines matched if we get here. + return True + + +def main(): + chapter_files, other_files = get_filenames() + + # make previous of first file and next of last file to just bring + # back to README + prevs = ['README.md'] + chapter_files[:-1] + nexts = chapter_files[1:] + ['README.md'] + + print("Chapter files") + for filename, prev, next in zip(chapter_files, prevs, nexts): + if has_end(filename, CHAPTER_END): + print(" Has end:", filename) + else: + print(" Adding end:", filename) + with open(filename, 'a') as f: + f.write(CHAPTER_END.format(prev=prev, next=next)) + + print() + + print("Other files") + for filename in other_files: + if has_end(filename, BASIC_END): + print(" Has end:", filename) + else: + print(" Adding end:", filename) + with open(filename, 'a') as f: + f.write(BASIC_END) + + +if __name__ == '__main__': + main() From 761119fd4b9de532ce97aa98555cb8b102ce9b6c Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 30 Nov 2016 18:00:55 +0200 Subject: [PATCH 107/329] run the end adder script --- TODO.md | 5 +++++ answers.md | 5 +++++ classes.md | 8 ++++++++ contact-me.md | 5 +++++ defining-functions.md | 8 ++++++++ dicts.md | 8 ++++++++ editor-setup.md | 5 +++++ exceptions.md | 8 ++++++++ files.md | 8 ++++++++ getting-help.md | 5 +++++ getting-started.md | 8 ++++++++ handy-stuff-strings.md | 8 ++++++++ if.md | 8 ++++++++ installing-python.md | 8 ++++++++ lists-and-tuples.md | 8 ++++++++ loops.md | 8 ++++++++ modules.md | 8 ++++++++ the-way-of-the-program.md | 8 ++++++++ trey-hunner-zip-and-enumerate.md | 8 ++++++++ using-functions.md | 8 ++++++++ variables.md | 8 ++++++++ what-is-programming.md | 8 ++++++++ what-is-true.md | 8 ++++++++ 23 files changed, 169 insertions(+) diff --git a/TODO.md b/TODO.md index 672106e..a666d6a 100644 --- a/TODO.md +++ b/TODO.md @@ -24,3 +24,8 @@ This tutorial is not complete. It still needs: - "What the heck is this?" section for stuff i haven't talked about - regexes - yield + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). diff --git a/answers.md b/answers.md index b16375c..324104b 100644 --- a/answers.md +++ b/answers.md @@ -291,3 +291,8 @@ These are answers for exercises in the chapters. In programming, there's always You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Back to the list of contents](README.md#list-of-contents) + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). diff --git a/classes.md b/classes.md index 230eed0..1be30dc 100644 --- a/classes.md +++ b/classes.md @@ -418,3 +418,11 @@ print("You entered " + word + ".") - `__init__` is a special method, and it's ran when a new instance of a class is created. It does nothing by default. - Don't use classes if your code is easier to read without them. + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). + +[Previous](modules.md) | [Next](README.md) | +[Back to the list of contents](README.md#list-of-contents) diff --git a/contact-me.md b/contact-me.md index 42085cd..e263564 100644 --- a/contact-me.md +++ b/contact-me.md @@ -21,3 +21,8 @@ it, there are a few ways to contact me: You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Back to the list of contents](README.md#list-of-contents) + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). diff --git a/defining-functions.md b/defining-functions.md index 584e5e1..6d65afb 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -541,3 +541,11 @@ spend time with them until you're familiar with defining functions. 2. Find more exercises about defining functions online. Answers for the first and second exercise are [here](answers.md). + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). + +[Previous](dicts.md) | [Next](what-is-true.md) | +[Back to the list of contents](README.md#list-of-contents) diff --git a/dicts.md b/dicts.md index 8ca59c8..c2679ee 100644 --- a/dicts.md +++ b/dicts.md @@ -191,3 +191,11 @@ me: my password ``` **TODO:** lists as keys vs tuples as keys. + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). + +[Previous](trey-hunner-zip-and-enumerate.md) | [Next](defining-functions.md) | +[Back to the list of contents](README.md#list-of-contents) diff --git a/editor-setup.md b/editor-setup.md index 4d5a0b3..945c39e 100644 --- a/editor-setup.md +++ b/editor-setup.md @@ -130,3 +130,8 @@ about it here, [tell me](contact-me.md). You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Back to the list of contents](README.md#list-of-contents) + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). diff --git a/exceptions.md b/exceptions.md index 805f219..c7baf41 100644 --- a/exceptions.md +++ b/exceptions.md @@ -472,3 +472,11 @@ except OSError: sys.exit(1) # time to give up greet() ``` + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). + +[Previous](files.md) | [Next](modules.md) | +[Back to the list of contents](README.md#list-of-contents) diff --git a/files.md b/files.md index 42d5ab0..1ef5346 100644 --- a/files.md +++ b/files.md @@ -369,3 +369,11 @@ else: print("Done! Now run this program again and select 'y'.") ``` + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). + +[Previous](what-is-true.md) | [Next](exceptions.md) | +[Back to the list of contents](README.md#list-of-contents) diff --git a/getting-help.md b/getting-help.md index fbb592c..c9776e0 100644 --- a/getting-help.md +++ b/getting-help.md @@ -56,3 +56,8 @@ help on IRC is much faster. You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Back to the list of contents](README.md#list-of-contents) + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). diff --git a/getting-started.md b/getting-started.md index 7bcc29d..a031049 100644 --- a/getting-started.md +++ b/getting-started.md @@ -210,3 +210,11 @@ Powers are calculated before `*` and `/`, but after `()`. it will echo back the result. - Pieces of text starting with a `#` are comments. - `+`, `-`, `*` and `/` work in Python just like in math. + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). + +[Previous](installing-python.md) | [Next](the-way-of-the-program.md) | +[Back to the list of contents](README.md#list-of-contents) diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index 89a2024..6a13a69 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -396,3 +396,11 @@ ValueError: could not convert string to float: 'hello' - `len(string)` returns string's length. - We can use `str`, `int` and `float` to convert values to different types. + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). + +[Previous](if.md) | [Next](lists-and-tuples.md) | +[Back to the list of contents](README.md#list-of-contents) diff --git a/if.md b/if.md index f4ef190..dd05663 100644 --- a/if.md +++ b/if.md @@ -332,3 +332,11 @@ else: ``` The answers are [here](answers.md). + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). + +[Previous](using-functions.md) | [Next](handy-stuff-strings.md) | +[Back to the list of contents](README.md#list-of-contents) diff --git a/installing-python.md b/installing-python.md index cd466df..f9b64ce 100644 --- a/installing-python.md +++ b/installing-python.md @@ -106,3 +106,11 @@ some things might stop working. See ## Summary Now you should have Python installed, and you should be able run it. + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). + +[Previous](what-is-programming.md) | [Next](getting-started.md) | +[Back to the list of contents](README.md#list-of-contents) diff --git a/lists-and-tuples.md b/lists-and-tuples.md index d54d7c8..4effec9 100644 --- a/lists-and-tuples.md +++ b/lists-and-tuples.md @@ -307,3 +307,11 @@ if name in namelist: else: print("Sorry, I don't know who you are :(") ``` + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). + +[Previous](handy-stuff-strings.md) | [Next](loops.md) | +[Back to the list of contents](README.md#list-of-contents) diff --git a/loops.md b/loops.md index 64a5eae..a3ae6ce 100644 --- a/loops.md +++ b/loops.md @@ -318,3 +318,11 @@ of `stuff.copy()` and `stuff[:] = []` instead of `stuff.clear()`. until the user enters them correctly. 3. Can you limit the number of attempts to 3? + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). + +[Previous](lists-and-tuples.md) | [Next](trey-hunner-zip-and-enumerate.md) | +[Back to the list of contents](README.md#list-of-contents) diff --git a/modules.md b/modules.md index bb56495..0cbc5f2 100644 --- a/modules.md +++ b/modules.md @@ -484,3 +484,11 @@ section at the bottom. module you want to use. - Python comes with many modules, and we can install even more modules if we want to. + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). + +[Previous](exceptions.md) | [Next](classes.md) | +[Back to the list of contents](README.md#list-of-contents) diff --git a/the-way-of-the-program.md b/the-way-of-the-program.md index c1ee132..7abc844 100644 --- a/the-way-of-the-program.md +++ b/the-way-of-the-program.md @@ -35,3 +35,11 @@ learned everything. `"hello" + 3`? How about `"hello" * 3`? 3. What happens if you use + between a float and an integer, like `0.5 + 3`? How about `0.5 * 3`? + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). + +[Previous](getting-started.md) | [Next](variables.md) | +[Back to the list of contents](README.md#list-of-contents) diff --git a/trey-hunner-zip-and-enumerate.md b/trey-hunner-zip-and-enumerate.md index fa923da..ab8de38 100644 --- a/trey-hunner-zip-and-enumerate.md +++ b/trey-hunner-zip-and-enumerate.md @@ -132,3 +132,11 @@ Read it now, then come back here and do the exercises. ``` The answers are [here](answers.md). + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). + +[Previous](loops.md) | [Next](dicts.md) | +[Back to the list of contents](README.md#list-of-contents) diff --git a/using-functions.md b/using-functions.md index 244828a..23b7861 100644 --- a/using-functions.md +++ b/using-functions.md @@ -171,3 +171,11 @@ Unlike with `+`, the arguments don't need to be strings. that called it. For example, `x = function()` calls a function, and then does `x = the_return_value` and the return value ends up in x. - Python comes with `print` and `input`. They are built-in functions. + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). + +[Previous](variables.md) | [Next](if.md) | +[Back to the list of contents](README.md#list-of-contents) diff --git a/variables.md b/variables.md index f4f34b3..e3b0178 100644 --- a/variables.md +++ b/variables.md @@ -269,3 +269,11 @@ False, and if `value` is False, `not value` is True. There's also `is`, but don't use it instead of `==` unless you know what you are doing. We'll learn more about it later. + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). + +[Previous](the-way-of-the-program.md) | [Next](using-functions.md) | +[Back to the list of contents](README.md#list-of-contents) diff --git a/what-is-programming.md b/what-is-programming.md index 9ec907f..7818142 100644 --- a/what-is-programming.md +++ b/what-is-programming.md @@ -123,3 +123,11 @@ rest of this tutorial only if you don't understand the code. - Let me know if you have trouble with this tutorial. - Now we're ready to [install Python](installing-python.md) and [get started](getting-started.md)! + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). + +[Previous](README.md) | [Next](installing-python.md) | +[Back to the list of contents](README.md#list-of-contents) diff --git a/what-is-true.md b/what-is-true.md index 46a75f3..3ba908a 100644 --- a/what-is-true.md +++ b/what-is-true.md @@ -210,3 +210,11 @@ if value is None: ... # best - Use `is` and `is not` when comparing to None, `==` and `!=` when checking if a number is zero and rely on the Boolean value when checking if something is empty. + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). + +[Previous](defining-functions.md) | [Next](files.md) | +[Back to the list of contents](README.md#list-of-contents) From 5582ea5a9da671874a7a76e92dd99a947c1992a8 Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 30 Nov 2016 18:07:13 +0200 Subject: [PATCH 108/329] fixing screw-ups --- TODO.md | 2 ++ answers.md | 8 ++------ contact-me.md | 8 ++------ editor-setup.md | 8 ++------ getting-help.md | 8 ++------ update-ends.py | 10 +++++++++- 6 files changed, 19 insertions(+), 25 deletions(-) diff --git a/TODO.md b/TODO.md index a666d6a..92d216b 100644 --- a/TODO.md +++ b/TODO.md @@ -29,3 +29,5 @@ This tutorial is not complete. It still needs: You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). + +[Back to the list of contents](README.md#list-of-contents) diff --git a/answers.md b/answers.md index 324104b..3fdfea0 100644 --- a/answers.md +++ b/answers.md @@ -288,11 +288,7 @@ These are answers for exercises in the chapters. In programming, there's always *** -You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md#list-of-contents) - -*** - You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). + +[Back to the list of contents](README.md#list-of-contents) diff --git a/contact-me.md b/contact-me.md index e263564..9316c9f 100644 --- a/contact-me.md +++ b/contact-me.md @@ -18,11 +18,7 @@ it, there are a few ways to contact me: *** -You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md#list-of-contents) - -*** - You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). + +[Back to the list of contents](README.md#list-of-contents) diff --git a/editor-setup.md b/editor-setup.md index 945c39e..fa0e058 100644 --- a/editor-setup.md +++ b/editor-setup.md @@ -127,11 +127,7 @@ about it here, [tell me](contact-me.md). *** -You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md#list-of-contents) - -*** - You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). + +[Back to the list of contents](README.md#list-of-contents) diff --git a/getting-help.md b/getting-help.md index c9776e0..a1b8096 100644 --- a/getting-help.md +++ b/getting-help.md @@ -53,11 +53,7 @@ help on IRC is much faster. *** -You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). - -[Back to the list of contents](README.md#list-of-contents) - -*** - You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). + +[Back to the list of contents](README.md#list-of-contents) diff --git a/update-ends.py b/update-ends.py index 07031d4..5552f96 100644 --- a/update-ends.py +++ b/update-ends.py @@ -10,13 +10,21 @@ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). + +[Back to the list of contents](README.md#list-of-contents) """ -CHAPTER_END = BASIC_END + """ +CHAPTER_END = """ +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). + [Previous]({prev}) | [Next]({next}) | [Back to the list of contents](README.md#list-of-contents) """ + MARKDOWN_LINK_REGEX = r'\[.*\]\((.*\.md)\)' CHAPTER_LINK_REGEX = '^\d+\. ' + MARKDOWN_LINK_REGEX + '$' From 9f63f356acda265c93b8a631e9241326dd22bb49 Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 30 Nov 2016 18:12:08 +0200 Subject: [PATCH 109/329] fixing stuff --- update-ends.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 update-ends.py diff --git a/update-ends.py b/update-ends.py old mode 100644 new mode 100755 index 5552f96..7c6b5fa --- a/update-ends.py +++ b/update-ends.py @@ -1,7 +1,7 @@ +#!/usr/bin/env python3 """Update ends of markdown files.""" import collections -import glob import re From 931f5a791bb09b7c95d33ac254441e58276bd34b Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 30 Nov 2016 21:43:29 +0200 Subject: [PATCH 110/329] better variable names, some other stuff --- using-functions.md | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/using-functions.md b/using-functions.md index 23b7861..93f9885 100644 --- a/using-functions.md +++ b/using-functions.md @@ -53,20 +53,21 @@ text appears on the screen right away when we run `print(something)`. ## Return values -If we do `x = print('hello')`, what is x? +If we do `thingy = print('hello')`, what does the `thingy` variable end +up [pointing to](variables.md)? ```py ->>> x = print('hello') +>>> thingy = print('hello') hello ->>> print(x) # x is now None +>>> print(thingy) # thingy is now None None >>> ``` -So doing `x = print('hello')` set x to None. Here's what happened, -explained in more detail: +So doing `thingy = print('hello')` set `thingy` to None. Here's what +happened, explained in more detail: -- In `x = print('hello')`, the right side is processed first. +- In `thingy = print('hello')`, the right side is processed first. - `print('hello')` calls the print function with the argument `'hello'`. - The function runs. It shows the word hello. @@ -75,28 +76,28 @@ explained in more detail: anything else. - Now the right side has been processed. `print('hello')` returned None, so we can imagine we have None instead of `print('hello')` - there, and the assignment now looks like `x = None`. -- x is now None. + there, and the assignment now looks like `thingy = None`. +- `thingy` is now None. Now we understand what a return value is. When we call the function, Python "replaces" `function(args)` with whatever the function returns. Calling a function without assigning the return value to anything (e.g. -`print('hello')` instead of `x = print('hello')`) simply throws away +`print('hello')` instead of `thingy = print('hello')`) simply throws away the return value. The interactive `>>>` prompt doesn't echo the return value back because it's None. -Of course, `x = print('hello')` is useless compared to `print('hello')` -because the print function always returns None and we can do `x = None` +Of course, `thingy = print('hello')` is useless compared to `print('hello')` +because the print function always returns None and we can do `thingy = None` without any printing. Not all functions return None. The input function can be used for getting a string from the user. ```py ->>> x = input("Enter something:") +>>> stuff = input("Enter something:") Enter something:hello ->>> x +>>> stuff 'hello' >>> ``` @@ -104,17 +105,17 @@ Enter something:hello `input("Enter something:")` showed the text `Enter something:` on the screen and waited for me to type something. I typed hello and pressed Enter. Then input returned the hello I typed as a string and it was -assigned to x. +assigned to `stuff`. Usually we want to add a space after the `:`, like this: ```py ->>> x = input("Enter something: ") # now there's space between : and where i type +>>> stuff = input("Enter something: ") # now there's space between : and where i type Enter something: hello >>> ``` -## More about print +## Handy things about print We can also print an empty line by calling print without any arguments. @@ -135,7 +136,7 @@ world >>> ``` -If we want to print a backslash, we need to **escape** it by typing +If we want to print a real backslash, we need to **escape** it by typing two backslashes. [comment]: # (For some reason, GitHub's syntax highlighting doesn't) @@ -168,8 +169,9 @@ Unlike with `+`, the arguments don't need to be strings. `function(1, 2, 3)` calls a function with 1, 2 and 3 as arguments. - When a function is called, it does something and returns something. - `function(stuff)` is "replaced" with the return value in the code - that called it. For example, `x = function()` calls a function, and - then does `x = the_return_value` and the return value ends up in x. + that called it. For example, `stuff = function()` calls a function, + and then does `stuff = the_return_value` and the return value ends + up in x. - Python comes with `print` and `input`. They are built-in functions. *** From ea36823705a58528fb0438570731208ed6390655 Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 1 Dec 2016 09:33:55 +0200 Subject: [PATCH 111/329] nano instructions --- editor-setup.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/editor-setup.md b/editor-setup.md index 4d5a0b3..e032684 100644 --- a/editor-setup.md +++ b/editor-setup.md @@ -45,6 +45,17 @@ backspace and there are four spaces before the cursor. Emacs uses spaces with Python files by default. +### GNU Nano + +Open your `~/.nanorc`. + + $ nano ~/.nanorc + +Add these lines to it: + + set tabsize 4 + set tabstospaces + ### Mousepad 1. Go to *Document* at the top, then *Tab Size*. From 72ce9fde1fdb6d100e58da26e13f4c76f3fac950 Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 1 Dec 2016 09:37:41 +0200 Subject: [PATCH 112/329] zip() throws away lines from the end --- update-ends.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/update-ends.py b/update-ends.py index 7c6b5fa..11ef9e9 100755 --- a/update-ends.py +++ b/update-ends.py @@ -64,9 +64,8 @@ def has_end(filename, template): with open(filename, 'r') as f: # get the last linecount lines filelines = collections.deque(f, maxlen=linecount) - templatelines = template.rstrip('\n').split('\n') - for templateline, fileline in zip(templatelines, filelines): + for templateline, fileline in zip(template.split('\n'), filelines): if '{' not in templateline: # It doesn't contain formatting, we can do something with it. if templateline.strip() != fileline.strip(): From b81045030d33683aeb92ab191dc7e2d1fa2256f4 Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 2 Dec 2016 15:28:57 +0200 Subject: [PATCH 113/329] beginner-friendliness is more important than correctness --- lists-and-tuples.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lists-and-tuples.md b/lists-and-tuples.md index 4effec9..e0d6c0b 100644 --- a/lists-and-tuples.md +++ b/lists-and-tuples.md @@ -284,7 +284,7 @@ post about this](http://nedbatchelder.com/blog/201608/lists_vs_tuples.html). ## Summary -- Lists are a way to point to multiple values with just one variable. +- Lists are a way to store multiple values in one variable. - Lists can be changed in-place and they have methods that change them in-place, like append, extend and remove. - Slicing lists returns a **new** list, and indexing them returns an From c60fa6fe2dbd3dbfbb6abe3dd58c42efe530213b Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 2 Dec 2016 17:09:46 +0200 Subject: [PATCH 114/329] removing useless stuff and adding useful stuff --- files.md | 59 ++++++++++++++---------------- loops.md | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+), 33 deletions(-) diff --git a/files.md b/files.md index 1ef5346..0a0ac7d 100644 --- a/files.md +++ b/files.md @@ -69,7 +69,9 @@ Let's create a file and write a hello world to it. Doesn't seem like it did anything. But actually it created a `hello.txt` somewhere on our system. On Windows it's probably in `C:\Users\YourName`, and on most other systems it should be in `/home/yourname`. You can open -it with notepad or any other plain text editor your system comes with. +it with notepad or any other plain text editor your system comes with by +opening the folder that contains the file and then double-clicking the +file. So how does that code work? @@ -82,13 +84,15 @@ object that is assigned to the variable `f`. >>> ``` -So the first argument we passed to `open` was the path we wanted to write. +File objects are not the same thing as paths and filenames, so if we try +to use `'hello.txt'` like we used `f` it doesn't work. + +The first argument we passed to `open` was the path we wanted to write. Our path was more like a filename than a path, so the file ended up in the current working directory. -The second argument was `w`... but where the heck does that come from? -`w` is short for write, and that just means that we'll create a new file. -There's some other modes we can use also: +The second argument was `w`. It's short for write, and that just means +that we'll create a new file. There's some other modes we can use also: | Mode | Short for | Meaning | |-------|-----------|-----------------------------------------------------------------------| @@ -96,9 +100,6 @@ There's some other modes we can use also: | `w` | write | Write to a file. **If the file exists, its old content is removed.** | | `a` | append | Write to the end of a file, and keep the old content. | -The `w` and `a` modes create a new file if it exists already, but trying -to read from a non-existent file is an error. - But what is that `with ourfile as f` crap? That's just a fancy way to make sure that the file gets closed, no matter what happens. As we can see, the file was indeed closed. @@ -130,9 +131,9 @@ we created to a list of lines. >>> ``` -Trying to open a non-existent file with `w` created the file for us, but -doing that with `r` gives us an error instead. We'll learn more about -errors [later](exceptions.md). +Trying to open a non-existent file with `w` or `a` creates the file for +us, but doing that with `r` gives us an error instead. We'll learn more +about errors [later](exceptions.md). ```py >>> with open('this-doesnt-exist.txt', 'r') as f: @@ -150,11 +151,11 @@ that `\n` doing there? `\n` means newline. Note that it needs to be a backslash, so `/n` doesn't have any special meaning like `\n` has. When we wrote the file -with print it actually added a `\n` to the end of it. It's good practise +with print it actually added a `\n` to the end of it. It's recommended to end the content of files with a newline character, but it's not necessary. -So how does that work if we have more than one line in the file? +Let's see how that works if we have more than one line in the file. ```py >>> with open('hello.txt', 'w') as f: @@ -206,7 +207,8 @@ that reads the next line, and returns `''` if we're at the end of the file. ``` There's only one confusing thing about reading files. If we try -to read it twice we'll find out that it only gets read once: +to read the same file object twice we'll find out that it only gets read +once: ```py >>> first = [] @@ -226,8 +228,8 @@ to read it twice we'll find out that it only gets read once: File objects remember their position. When we tried to read the file again it was already at the end, and there was nothing left -to read. But if we open the file again, it's in the beginning -again and everything works. +to read. But if we open the file again, we get a new file object that +is in the beginning and everything works. ```py >>> first = [] @@ -250,21 +252,7 @@ again and everything works. Usually it's best to just read the file once, and use the content we have read from it multiple times. -As we can see, files behave a lot like lists. [The join string -method](https://docs.python.org/3/library/stdtypes.html#str.join) joins -together strings from a list, but we can also use it to join together -lines of a file: - -```py ->>> with open('hello.txt', 'r') as f: -... full_content = ''.join(f) -... ->>> full_content -'Hello one!\nHello two!\nHello three!\n' ->>> -``` - -But if we need all of the content as a string, we can just use [the read +If we need all of the content as a string, we can use [the read method](https://docs.python.org/3/library/io.html#io.TextIOBase.read). ```py @@ -297,8 +285,8 @@ adding an `r` to the beginning of the string. In this case the `r` is short for "raw", not "read". ```py ->>> r'C:\some\name' == 'C:\\some\\name' -True +>>> r'C:\some\name' +'C:\\some\\name' >>> ``` @@ -312,6 +300,11 @@ don't contain backslashes we don't need to double anything or use >>> ``` +Doing things like `open('C:\\Users\\me\\myfile.txt', 'r')` is not +recommended because the code needs to be modified if someone wants to +run the program on a different computer that doesn't have a +`C:\Users\me` folder. + ## Examples This program prints the contents of files: diff --git a/loops.md b/loops.md index a3ae6ce..0517954 100644 --- a/loops.md +++ b/loops.md @@ -297,6 +297,114 @@ of `stuff.copy()` and `stuff[:] = []` instead of `stuff.clear()`. - The `break` keyword can be used to interrupt the innermost loop at any time. +## Examples + +Repeat something an endless amount of times. + +```py +message = input("What do you want me to say? ") +while True: + print(message, "!!!") +``` + +Ask the user to enter five things and print them. + +```py +things = [] + +print("Enter 5 things: ") +while len(things) < 5: + thing = input("> ") + things.append(thing) + +print("You entered these things:") +for thing in things: + print(thing) +``` + +Ask the user a bunch of questions. + +```py +questions_and_answers = [ + # [question, answer], ... + ["What is 2+4? ", "6"], + ["What is 2-4? ", "-2"], + ["What is 2*4? ", "8"], + ["What is 2/4? ", "0.5"], + # You could add more questions, but the code that asks them + # wouldn't need to be changed in any way. +] + +for qa in questions_and_answers: + while True: + if input(qa[0]) == qa[1]: + print("Correct!") + break + else: + print("That's not what I was thinking of... Try again.") +``` + +Store a list of names and let the user check if the program knows +the user. + +```py +# You can add names here so the program will know them automatically +# when it starts. +namelist = [] + +print("Options:") +print(" 0 Quit") +print(" 1 Check if I know you") +print(" 2 Introduce yourself to me") +print(" 3 Make me forget you") +print(" 4 Print a list of people I know") +print() # print an empty line + +while True: + option = input("Choose an option: ") + + # Things like option == 0 don't work because option is a string + # and it needs to be compared with a string. + if option == '0': + print("Bye!") + break + + elif option == '1': + name = input("Enter your name: ") + if name in namelist: + print("I know you! :D") + else: + print("I don't know you :/") + + elif option == '2': + name = input("Enter your name: ") + if name in namelist: + print("I knew you already.") + else: + namelist.append(name) + print("Now I know you!") + + elif option == '3': + name = input("Enter your name: ") + if name in namelist: + namelist.remove(name) + print("Now I don't know you.") + else: + print("I didn't know you to begin with.") + + elif option == '4': + if len(namelist) == 0: # len is short for length + print("I don't know anybody yet.") + else: + for name in namelist: + print("I know %s!" % name) + + else: + print("I don't understand :(") + + print() +``` + ## Exercises 1. Back in "Using if, else and elif" we created a program that asked From 4d4ff5bf7abfc0c3a581b289e64cfc42483d3283 Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 2 Dec 2016 17:24:10 +0200 Subject: [PATCH 115/329] way better update-ends script --- update-ends.py | 63 ++++++++++++++++++++++---------------------------- 1 file changed, 27 insertions(+), 36 deletions(-) diff --git a/update-ends.py b/update-ends.py index 7c6b5fa..610f8e5 100755 --- a/update-ends.py +++ b/update-ends.py @@ -5,18 +5,14 @@ import re -BASIC_END = """ -*** - +BASIC_END = """\ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Back to the list of contents](README.md#list-of-contents) """ -CHAPTER_END = """ -*** - +CHAPTER_END = """\ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). @@ -25,8 +21,8 @@ """ -MARKDOWN_LINK_REGEX = r'\[.*\]\((.*\.md)\)' -CHAPTER_LINK_REGEX = '^\d+\. ' + MARKDOWN_LINK_REGEX + '$' +LINK_REGEX = r'\[.*\]\((.*\.md)\)' +CHAPTER_LINK_REGEX = r'^\d+\. ' + LINK_REGEX + r'$' def get_filenames(): @@ -53,28 +49,32 @@ def get_filenames(): # now let's find other links to markdown files with open('README.md', 'r') as f: - all_files = re.findall(MARKDOWN_LINK_REGEX, f.read()) + all_files = re.findall(LINK_REGEX, f.read()) others = set(all_files) - set(chapters) return chapters, others -def has_end(filename, template): - linecount = template.count('\n') +def update_end(filename, end): + """Add *** and end to a file if it doesn't contain them already.""" + end = '\n***\n\n' + end with open(filename, 'r') as f: - # get the last linecount lines - filelines = collections.deque(f, maxlen=linecount) - templatelines = template.rstrip('\n').split('\n') + content = f.read() + if content.endswith(end): + # No need to do anything. + print(" Has end:", filename) + return - for templateline, fileline in zip(templatelines, filelines): - if '{' not in templateline: - # It doesn't contain formatting, we can do something with it. - if templateline.strip() != fileline.strip(): - # It's different than what using the template would result in. - return False + if '\n***\n' in content: + # We need to remove the old ending first. + print(" Removing old end:", filename) + where = content.index('\n***\n') + with open(filename, 'w') as f: + f.write(content[:where]) - # All lines matched if we get here. - return True + print(" Adding end:", filename) + with open(filename, 'a') as f: + f.write(end) def main(): @@ -85,25 +85,16 @@ def main(): prevs = ['README.md'] + chapter_files[:-1] nexts = chapter_files[1:] + ['README.md'] - print("Chapter files") + print("Chapter files:") for filename, prev, next in zip(chapter_files, prevs, nexts): - if has_end(filename, CHAPTER_END): - print(" Has end:", filename) - else: - print(" Adding end:", filename) - with open(filename, 'a') as f: - f.write(CHAPTER_END.format(prev=prev, next=next)) + end = CHAPTER_END.format(prev=prev, next=next) + update_end(filename, end) print() - print("Other files") + print("Other files:") for filename in other_files: - if has_end(filename, BASIC_END): - print(" Has end:", filename) - else: - print(" Adding end:", filename) - with open(filename, 'a') as f: - f.write(BASIC_END) + update_end(filename, BASIC_END) if __name__ == '__main__': From 72a8b53a2fb1e0547f1d5b71f5f6dca50faf1432 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 3 Dec 2016 00:04:06 +0200 Subject: [PATCH 116/329] name shadowing --- using-functions.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/using-functions.md b/using-functions.md index 93f9885..ed51359 100644 --- a/using-functions.md +++ b/using-functions.md @@ -163,6 +163,49 @@ Unlike with `+`, the arguments don't need to be strings. >>> ``` +## Variables names and built-in things + +In [the previous chapter](variables.md) we learned that `if` is not a +valid variable name because it's a keyword. + +```py +>>> if = 123 + File "", line 1 + if = 123 + ^ +SyntaxError: invalid syntax +>>> +``` + +But `print` and `input` are not keywords, so can we use them as +variable names? + +```py +>>> print = "hello" +>>> print +'hello' +>>> +``` + +We can, but there's a problem. Now we can't even do our hello world! + +```py +>>> print("Hello World!") +Traceback (most recent call last): + File "", line 1, in +TypeError: 'str' object is not callable +>>> +``` + +The error message complains that strings aren't callable because we +just set `print` to the string `'hello'` and now we're trying to call +it like a function. As you can see, this is not a good idea at all. +Most editors (including IDLE) display built-in functions with a special +color so you don't need to worry about doing this accidentally. + +Exit out of Python and start it again, and `print("Hello World!")` +should work normally. + ## Summary - `function()` calls a function without any arguments, and @@ -173,6 +216,7 @@ Unlike with `+`, the arguments don't need to be strings. and then does `stuff = the_return_value` and the return value ends up in x. - Python comes with `print` and `input`. They are built-in functions. +- Avoid variable names that conflict with built-in functions. *** From f6d5ba2f82f84346bfc04bc3305c1d4e9c5d71ec Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 3 Dec 2016 00:09:52 +0200 Subject: [PATCH 117/329] fix summary --- using-functions.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/using-functions.md b/using-functions.md index ed51359..41c0045 100644 --- a/using-functions.md +++ b/using-functions.md @@ -211,10 +211,10 @@ should work normally. - `function()` calls a function without any arguments, and `function(1, 2, 3)` calls a function with 1, 2 and 3 as arguments. - When a function is called, it does something and returns something. -- `function(stuff)` is "replaced" with the return value in the code +- `function(arguments)` is "replaced" with the return value in the code that called it. For example, `stuff = function()` calls a function, and then does `stuff = the_return_value` and the return value ends - up in x. + up in stuff. - Python comes with `print` and `input`. They are built-in functions. - Avoid variable names that conflict with built-in functions. From 0f2a38848e891cfc321e359a45207d123973bd43 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 3 Dec 2016 11:28:32 +0200 Subject: [PATCH 118/329] fixing stuff --- exceptions.md | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/exceptions.md b/exceptions.md index c7baf41..7ec62f2 100644 --- a/exceptions.md +++ b/exceptions.md @@ -13,7 +13,7 @@ That works. ``` Enter a number: 3 -Your number twice: 6 +Your number doubled: 6 ``` But that doesn't work if the user does not enter a number. @@ -103,20 +103,6 @@ TypeError: unsupported operand type(s) for +: 'int' and 'str' >>> ``` -Catching ValueError doesn't catch TypeErrors. - -```py ->>> try: -... 123 + 'hello' -... except ValueError: -... print("wrong value") -... -Traceback (most recent call last): - File "", line 2, in -TypeError: unsupported operand type(s) for +: 'int' and 'str' ->>> -``` - Exceptions always interrupt the code even if we catch them. Here the print never runs because it's after the error but inside the `try` block. Everything after the try block runs normally. @@ -171,7 +157,8 @@ wrong type Seems to be working. -We can catch multiple exceptions by catching a tuple of exceptions: +We can also also catch multiple exceptions by catching +[a tuple](lists-and-tuples.md#tuples) of exceptions: ```py >>> try: From b3a0bd6b32f0326f7bd222311f066e139d0570b1 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 3 Dec 2016 11:30:49 +0200 Subject: [PATCH 119/329] new ending --- TODO.md | 2 +- answers.md | 2 +- classes.md | 2 +- contact-me.md | 2 +- defining-functions.md | 2 +- dicts.md | 2 +- editor-setup.md | 2 +- exceptions.md | 2 +- files.md | 2 +- getting-help.md | 2 +- getting-started.md | 2 +- handy-stuff-strings.md | 2 +- if.md | 2 +- installing-python.md | 2 +- lists-and-tuples.md | 2 +- loops.md | 2 +- modules.md | 2 +- the-way-of-the-program.md | 2 +- trey-hunner-zip-and-enumerate.md | 2 +- update-ends.py | 4 ++-- using-functions.md | 2 +- variables.md | 2 +- what-is-programming.md | 2 +- what-is-true.md | 2 +- 24 files changed, 25 insertions(+), 25 deletions(-) diff --git a/TODO.md b/TODO.md index 92d216b..37b6d2e 100644 --- a/TODO.md +++ b/TODO.md @@ -30,4 +30,4 @@ This tutorial is not complete. It still needs: You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/answers.md b/answers.md index 3fdfea0..0565fb9 100644 --- a/answers.md +++ b/answers.md @@ -291,4 +291,4 @@ These are answers for exercises in the chapters. In programming, there's always You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/classes.md b/classes.md index 1be30dc..5f2b682 100644 --- a/classes.md +++ b/classes.md @@ -425,4 +425,4 @@ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Previous](modules.md) | [Next](README.md) | -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/contact-me.md b/contact-me.md index 9316c9f..0d742b1 100644 --- a/contact-me.md +++ b/contact-me.md @@ -21,4 +21,4 @@ it, there are a few ways to contact me: You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/defining-functions.md b/defining-functions.md index 6d65afb..7aa4d5f 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -548,4 +548,4 @@ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Previous](dicts.md) | [Next](what-is-true.md) | -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/dicts.md b/dicts.md index c2679ee..8f945af 100644 --- a/dicts.md +++ b/dicts.md @@ -198,4 +198,4 @@ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Previous](trey-hunner-zip-and-enumerate.md) | [Next](defining-functions.md) | -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/editor-setup.md b/editor-setup.md index 11c06f9..c85b5cf 100644 --- a/editor-setup.md +++ b/editor-setup.md @@ -141,4 +141,4 @@ about it here, [tell me](contact-me.md). You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/exceptions.md b/exceptions.md index 7ec62f2..acf0f3d 100644 --- a/exceptions.md +++ b/exceptions.md @@ -466,4 +466,4 @@ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Previous](files.md) | [Next](modules.md) | -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/files.md b/files.md index 0a0ac7d..cf53dac 100644 --- a/files.md +++ b/files.md @@ -369,4 +369,4 @@ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Previous](what-is-true.md) | [Next](exceptions.md) | -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/getting-help.md b/getting-help.md index a1b8096..97c9555 100644 --- a/getting-help.md +++ b/getting-help.md @@ -56,4 +56,4 @@ help on IRC is much faster. You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/getting-started.md b/getting-started.md index a031049..db117bf 100644 --- a/getting-started.md +++ b/getting-started.md @@ -217,4 +217,4 @@ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Previous](installing-python.md) | [Next](the-way-of-the-program.md) | -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index 6a13a69..dd708d1 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -403,4 +403,4 @@ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Previous](if.md) | [Next](lists-and-tuples.md) | -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/if.md b/if.md index dd05663..cb93f1c 100644 --- a/if.md +++ b/if.md @@ -339,4 +339,4 @@ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Previous](using-functions.md) | [Next](handy-stuff-strings.md) | -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/installing-python.md b/installing-python.md index f9b64ce..2524604 100644 --- a/installing-python.md +++ b/installing-python.md @@ -113,4 +113,4 @@ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Previous](what-is-programming.md) | [Next](getting-started.md) | -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/lists-and-tuples.md b/lists-and-tuples.md index e0d6c0b..e022296 100644 --- a/lists-and-tuples.md +++ b/lists-and-tuples.md @@ -314,4 +314,4 @@ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Previous](handy-stuff-strings.md) | [Next](loops.md) | -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/loops.md b/loops.md index 0517954..8396a35 100644 --- a/loops.md +++ b/loops.md @@ -433,4 +433,4 @@ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Previous](lists-and-tuples.md) | [Next](trey-hunner-zip-and-enumerate.md) | -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/modules.md b/modules.md index 0cbc5f2..a32158c 100644 --- a/modules.md +++ b/modules.md @@ -491,4 +491,4 @@ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Previous](exceptions.md) | [Next](classes.md) | -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/the-way-of-the-program.md b/the-way-of-the-program.md index 7abc844..1e33f0a 100644 --- a/the-way-of-the-program.md +++ b/the-way-of-the-program.md @@ -42,4 +42,4 @@ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Previous](getting-started.md) | [Next](variables.md) | -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/trey-hunner-zip-and-enumerate.md b/trey-hunner-zip-and-enumerate.md index ab8de38..263f3c4 100644 --- a/trey-hunner-zip-and-enumerate.md +++ b/trey-hunner-zip-and-enumerate.md @@ -139,4 +139,4 @@ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Previous](loops.md) | [Next](dicts.md) | -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/update-ends.py b/update-ends.py index 7987182..4cfff79 100755 --- a/update-ends.py +++ b/update-ends.py @@ -8,7 +8,7 @@ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) """ CHAPTER_END = """\ @@ -16,7 +16,7 @@ [LICENSE](LICENSE). [Previous]({prev}) | [Next]({next}) | -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) """ diff --git a/using-functions.md b/using-functions.md index 41c0045..b356f70 100644 --- a/using-functions.md +++ b/using-functions.md @@ -224,4 +224,4 @@ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Previous](variables.md) | [Next](if.md) | -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/variables.md b/variables.md index e3b0178..28105e4 100644 --- a/variables.md +++ b/variables.md @@ -276,4 +276,4 @@ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Previous](the-way-of-the-program.md) | [Next](using-functions.md) | -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/what-is-programming.md b/what-is-programming.md index 7818142..ccdaa89 100644 --- a/what-is-programming.md +++ b/what-is-programming.md @@ -130,4 +130,4 @@ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Previous](README.md) | [Next](installing-python.md) | -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) diff --git a/what-is-true.md b/what-is-true.md index 3ba908a..1dd2402 100644 --- a/what-is-true.md +++ b/what-is-true.md @@ -217,4 +217,4 @@ You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). [Previous](defining-functions.md) | [Next](files.md) | -[Back to the list of contents](README.md#list-of-contents) +[List of contents](README.md#list-of-contents) From dc892b35d81b0377b78b43366b8df4bea59fe8ca Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 5 Dec 2016 21:32:29 +0200 Subject: [PATCH 120/329] better looping --- loops.md | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/loops.md b/loops.md index 8396a35..7f86d58 100644 --- a/loops.md +++ b/loops.md @@ -5,7 +5,7 @@ There are different kinds of loops: - [While loops](#while-loops) repeat something while a condition is true. - [Until loops](#until-loops) repeat something while a condition is false. -- [For loops](#for-loops) repeat something for each element of a list. +- [For loops](#for-loops) repeat something for each element of something. We'll talk about all of these in this tutorial. @@ -149,8 +149,8 @@ print("It's raining!") ## For loops -Let's say we have a list of things we want to print. To print each item -in stuff, we could just do a bunch of prints: +Let's say we have [a list](lists-and-tuples.md) of things we want to +print. To print each item in it, we could just do a bunch of prints: ```py stuff = ['hello', 'hi', 'how are you doing', 'im fine', 'how about you'] @@ -178,7 +178,7 @@ We could also create an index variable, and use a while loop: ```py >>> stuff = ['hello', 'hi', 'how are you doing', 'im fine', 'how about you'] ->>> length_of_stuff = len(stuff) # len(stuff) is 5 +>>> length_of_stuff = len(stuff) # len is short for length, len(stuff) is 5 >>> index = 0 >>> while index < length_of_stuff: ... print(stuff[index]) @@ -230,16 +230,7 @@ how about you Note that `for thing in stuff:` is not same as `for (thing in stuff):`. Here the `in` keyword is just a part of the for loop and it has a different meaning than it would have if we had `thing in stuff` without -a `for`. Trying to do `for (thing in stuff):` creates an error: - -```py ->>> for (thing in stuff): - File "", line 1 - for (thing in stuff): - ^ -SyntaxError: invalid syntax ->>> -``` +a `for`. Trying to do `for (thing in stuff):` creates an error. Right now the while loop version might seem easier to understand for you, but later you'll realize that for loops are much easier to work From d8834064dd486ee80f715f25bfa96d70d3e3aac4 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 5 Dec 2016 21:36:06 +0200 Subject: [PATCH 121/329] explain len() in a better place --- lists-and-tuples.md | 2 +- loops.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lists-and-tuples.md b/lists-and-tuples.md index e022296..ae08479 100644 --- a/lists-and-tuples.md +++ b/lists-and-tuples.md @@ -53,7 +53,7 @@ There's many things [we can do with strings](handy-stuff-strings.md), and some of these things also work with lists. ```py ->>> len(names) # we have 5 names +>>> len(names) # len is short for length, we have 5 names 5 >>> names + ['Akuli'] # create a new list with me in it ['wub_wub', 'theelous3', 'RubyPinch', 'go|dfish', 'Nitori', 'Akuli'] diff --git a/loops.md b/loops.md index 7f86d58..2bf236f 100644 --- a/loops.md +++ b/loops.md @@ -178,7 +178,7 @@ We could also create an index variable, and use a while loop: ```py >>> stuff = ['hello', 'hi', 'how are you doing', 'im fine', 'how about you'] ->>> length_of_stuff = len(stuff) # len is short for length, len(stuff) is 5 +>>> length_of_stuff = len(stuff) >>> index = 0 >>> while index < length_of_stuff: ... print(stuff[index]) From 430f4ec6d6360af733702ecdf02b26aad5dc9858 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 5 Dec 2016 21:38:57 +0200 Subject: [PATCH 122/329] better link --- using-functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/using-functions.md b/using-functions.md index b356f70..c573f07 100644 --- a/using-functions.md +++ b/using-functions.md @@ -54,7 +54,7 @@ text appears on the screen right away when we run `print(something)`. ## Return values If we do `thingy = print('hello')`, what does the `thingy` variable end -up [pointing to](variables.md)? +up [pointing to](variables.md#variables)? ```py >>> thingy = print('hello') From 6852d84643bdbb5730607c8708e0337a957d5b0a Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 7 Dec 2016 17:44:43 +0200 Subject: [PATCH 123/329] bold --- using-functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/using-functions.md b/using-functions.md index b356f70..1c865d4 100644 --- a/using-functions.md +++ b/using-functions.md @@ -199,7 +199,7 @@ TypeError: 'str' object is not callable The error message complains that strings aren't callable because we just set `print` to the string `'hello'` and now we're trying to call -it like a function. As you can see, this is not a good idea at all. +it like a function. As you can see, **this is not a good idea** at all. Most editors (including IDLE) display built-in functions with a special color so you don't need to worry about doing this accidentally. From 350c540b8821fd7ab4aec00fb50416bf40c58e7c Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 8 Dec 2016 16:04:05 +0200 Subject: [PATCH 124/329] warn about mistakes --- using-functions.md | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/using-functions.md b/using-functions.md index ff80a3e..336c6f4 100644 --- a/using-functions.md +++ b/using-functions.md @@ -51,10 +51,15 @@ Functions are easy to understand, They simply **do something when they are called**. Functions run immediately when we call them, so the text appears on the screen right away when we run `print(something)`. +Sometimes people think that doing `thingy = print('hello')` means that +Python is going to print hello every time we type `thingy`. But **this +is not correct**! `print('hello')` runs print right away, and if we +type `thingy` later it's not going to run `print('hello')` again. + ## Return values -If we do `thingy = print('hello')`, what does the `thingy` variable end -up [pointing to](variables.md#variables)? +Now we know that `thingy = print('hello')` doesn't store the +`print('hello')` call in a variable. But what does it do then? ```py >>> thingy = print('hello') @@ -64,10 +69,12 @@ None >>> ``` -So doing `thingy = print('hello')` set `thingy` to None. Here's what -happened, explained in more detail: +So doing `thingy = print('hello')` set `thingy` to None. + +Here's what happened, explained in more detail: -- In `thingy = print('hello')`, the right side is processed first. +- When we do `thingy = print('hello')`, the right side is processed + first. - `print('hello')` calls the print function with the argument `'hello'`. - The function runs. It shows the word hello. @@ -79,8 +86,9 @@ happened, explained in more detail: there, and the assignment now looks like `thingy = None`. - `thingy` is now None. -Now we understand what a return value is. When we call the function, -Python "replaces" `function(args)` with whatever the function returns. +Now we understand what **a return value** is. When we call the +function, Python "replaces" `function(arguments)` with whatever the +function returns. Calling a function without assigning the return value to anything (e.g. `print('hello')` instead of `thingy = print('hello')`) simply throws away From 68205797074635f672b55c7f44b47bbb7b147e7e Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 9 Dec 2016 23:11:27 +0200 Subject: [PATCH 125/329] replace example --- handy-stuff-strings.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index dd708d1..bdbe3d6 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -177,6 +177,10 @@ True True >>> our_string.endswith('world!') # Python is case-sensitive False +>>> our_string.replace('World', 'there') +'Hello there!' +>>> our_string.replace('l', 'ł', 1) # only replace one l +'Hełlo World!' >>> ' hello 123 '.lstrip() # left strip 'hello 123 ' >>> ' hello 123 '.rstrip() # right strip From c5ad310769b89a3850883c0e333b73d0adba7c39 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 17 Dec 2016 22:20:14 +0200 Subject: [PATCH 126/329] simpler emptiness check we can't rely on the boolean value yet, it's introduced in a future chapter --- loops.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/loops.md b/loops.md index 2bf236f..974d978 100644 --- a/loops.md +++ b/loops.md @@ -384,7 +384,7 @@ while True: print("I didn't know you to begin with.") elif option == '4': - if len(namelist) == 0: # len is short for length + if namelist == []: print("I don't know anybody yet.") else: for name in namelist: From 96ff1c14ef3cd6b5aef00a65a895086300ab6456 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 27 Dec 2016 22:25:49 +0200 Subject: [PATCH 127/329] less weird version numbers --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9e62e24..8289f62 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ They will probably support Python 3 by the time you've learned the basics and you may actually need them. I have tested most of the code in this tutorial on Python 3.4, but -everything should also work on Python 3.2 and all newer Pythons. +everything should also work on Python 3.3, 3.2 and all newer Pythons. ## List of contents From 78d579b4ee0273e4ffde17831a9fdc52766f89c2 Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 28 Dec 2016 15:56:21 +0200 Subject: [PATCH 128/329] update todo list --- TODO.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/TODO.md b/TODO.md index 37b6d2e..102cf2c 100644 --- a/TODO.md +++ b/TODO.md @@ -3,14 +3,18 @@ This tutorial is not complete. It still needs: - range somewhere -- Better lists chapter, also introduce tuples in it - **More exercises and examples everywhere!** -- explain bool(x) and why it matters +- classes part 1: + + Akuli: I would probably add an example of refactoring + a bunch of functions working with shared global data + into a class because it's a pretty typical usecase + - classes part 2 - non-public `_variables` (maybe reading PEP-8 is enough to explain this?) - "singular" inheritance, inheritance of built-in classes - using super -- no classes part 3 with multiple inheritance, it's not something people need + - advise to avoid multiple inheritance - iterables and iterators: something most Python programmers need to be aware of - last chapter: "What should I do now?" links to other resources From 01aec702e6015b15a74332fa5f3c0fb4688095e9 Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 28 Dec 2016 22:26:39 +0200 Subject: [PATCH 129/329] html generator for viper999 --- .gitignore | 2 ++ make-html.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 .gitignore create mode 100755 make-html.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..84be1ae --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# generated html files +html/ diff --git a/make-html.py b/make-html.py new file mode 100755 index 0000000..a8b8339 --- /dev/null +++ b/make-html.py @@ -0,0 +1,50 @@ +import glob +import shutil +import os +import sys +import webbrowser + +try: + import mistune +except ImportError: + print("mistune isn't installed. You can install it like this:\n\n", + " thispython -m pip install mistune", file=sys.stderr) + sys.exit(1) + + +def main(): + if os.path.exists('html'): + if input("html exists. Do you want to remove it [Y/n] ") == 'N': + print("Interrupt.") + return + if os.path.isdir('html'): + shutil.rmtree('html') + else: + os.remove('html') + os.mkdir('html') + print("Generating HTML files...") + for markdownfile in glob.glob('*.md'): + htmlfile = os.path.join('html', markdownfile[:-3] + '.html') + print(' ', markdownfile, '->', htmlfile) + with open(markdownfile, 'r') as f1: + with open(htmlfile, 'w') as f2: + md = f1.read() + md = md.replace('.md)', '.html)') + html = mistune.markdown(md) + print(html, file=f2) + os.rename(os.path.join('html', 'README.html'), + os.path.join('html', 'index.html')) + shutil.copytree('images', os.path.join('html', 'images')) + print() + print("*********************") + print() + print("Ready! The files are in the html directory,") + print("double-click html/index.html to read the tutorial.") + print() + if input("Do you want to view the tutorial now? [Y/n] ").upper() != 'N': + print("Opening the tutorial...") + webbrowser.open(os.path.join('html', 'index.html')) + + +if __name__ == '__main__': + main() From d26fbb5af3a70939171cb842087ce4a4187737e8 Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 28 Dec 2016 22:31:03 +0200 Subject: [PATCH 130/329] dont require uppercase N --- make-html.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/make-html.py b/make-html.py index a8b8339..099d2ab 100755 --- a/make-html.py +++ b/make-html.py @@ -14,7 +14,8 @@ def main(): if os.path.exists('html'): - if input("html exists. Do you want to remove it [Y/n] ") == 'N': + if input("html exists. Do you want " + "to remove it? [Y/n] ").upper() == 'N': print("Interrupt.") return if os.path.isdir('html'): From 013be0d84a2dd53427557ea63d4e69b866da71d7 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 1 Jan 2017 21:59:53 +0200 Subject: [PATCH 131/329] explaining stuff better --- defining-functions.md | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/defining-functions.md b/defining-functions.md index 7aa4d5f..fb2314a 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -248,10 +248,10 @@ This function can be called in two ways: arguments, because each argument has a name and it's easy to see which argument is which. - Also note that there are no spaces around the `=` sign. That's - because we are not assigning to a variable, we are giving the - function a keyword argument and it can do whatever it wants with - it. + Also note that there are no spaces around the `=` sign. This is + just a small style detail that Python programmers like to do + because `message = "hi"` and `some_function(message="hi")` do two + completely different things. Personally, I would use this function with a positional argument. It only takes one argument, so I don't need to worry about which argument @@ -351,8 +351,8 @@ need to: ## Output -The built-in input function returns a value. Can our function return a -value also? +The built-in input function [returns a value](https://github.com/Akuli/python-tutorial/blob/master/using-functions.md#return-values). +Can our function return a value also? ```py >>> def times_two(x): @@ -360,12 +360,24 @@ value also? ... >>> times_two(3) 6 ->>> times_two("hello") -'hellohello' +>>> times_two(5) +10 >>> ``` -Yes, it can. +Yes, it can. Now typing `times_two(3)` to the prompt does the same +thing as typing `6` to the prompt. + +We can call the `times_two` function and use the result however we +want, just like we can use built-in functions: + +```py +>>> times_two(2) + times_two(3) # calculate 4 + 6 +10 +>>> print('2 * 5 is', times_two(5)) +2 * 5 is 10 +>>> +``` Note that **returning from a function ends it immediately**. From ca74b5bd6a9d782c7bea9d65c30d9cb46668933c Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 1 Jan 2017 22:29:56 +0200 Subject: [PATCH 132/329] tell what 2 do instead --- files.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files.md b/files.md index cf53dac..c76550b 100644 --- a/files.md +++ b/files.md @@ -303,7 +303,7 @@ don't contain backslashes we don't need to double anything or use Doing things like `open('C:\\Users\\me\\myfile.txt', 'r')` is not recommended because the code needs to be modified if someone wants to run the program on a different computer that doesn't have a -`C:\Users\me` folder. +`C:\Users\me` folder. Just use `open('myfile.txt', 'r')`. ## Examples From 6bb855baee16222db7874997bc06c746308742f2 Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 4 Jan 2017 21:16:04 +0200 Subject: [PATCH 133/329] working on dicts.md --- dicts.md | 157 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 131 insertions(+), 26 deletions(-) diff --git a/dicts.md b/dicts.md index 8f945af..3e57b0d 100644 --- a/dicts.md +++ b/dicts.md @@ -1,10 +1,9 @@ # Dictionaries -**TODO:** write the lists-and-tuples.md this tutorial links to. - Now we know how [lists and tuples](lists-and-tuples.md) work and how -to [for loop](loops.md#for-loops) over them. We also did an exercise -with code like this: +to [for loop](loops.md#for-loops) over them. If we make some kind of +program that needs to keep track of people's usernames and passwords, +we can use a list for that: ```py userlist = [ @@ -13,14 +12,14 @@ userlist = [ ] ``` -Then to check if a username and password were correct we did -`(username, password) in userlist`. Adding new users was also easy as -appending to that list. +Then to check if a username and password are correct we can do +`(username, password) in userlist`. Or we can add a new user easily by +appending a new `(username, password)` tuple to the userlist. -What if we need to check if a username is in the users, but we don't -need to know the password? `username in userlist` is always False -because the user list consists of (username,password) pairs, so we need -to for loop over the whole list: +But what if we need to check if a username exists, but we don't know +the password? `username in userlist` is always False because the user +list consists of `(username, password)` pairs instead of just +usernames, so we need to for loop over the whole userlist: ```py username_exists = False @@ -32,7 +31,8 @@ if username_exists: # do something ``` -Getting a user's password also requires a similar loop: +Or how about getting a user's password if we know the username? This +also requires going through the whole list. ```py password = None @@ -40,15 +40,15 @@ for user in userlist: if user[0] == username: password = user[1] break -# make sure password isn't still None and do something with it +# make sure password is not None and do something with it ``` -This works just fine because our user list only contains two users, but -it would be slow if the userlist was bigger. +As you can see, a list of `(username, password)` pairs is not an ideal +way to store our usernames and passwords. ## What are dictionaries? -A better way to store user information might be a dictionary. +A better way to store user information might be a dictionary: ```py passwords = { @@ -64,8 +64,8 @@ values so I named the variable `passwords`. There are a few big differences between dictionaries and lists of pairs: -- Dictionaries are not ordered. There's **no guarantees** about which - order the username:password pairs appear in when we do something +- Dictionaries are not ordered. There are **no guarantees** about which + order the `username: password` pairs appear in when we do something with the dictionary. - Checking if a key is in the dictionary is simple and fast. We don't need to for loop through the whole dictionary. @@ -93,7 +93,10 @@ variable names and values are what our variables point to. ``` So if you have trouble remembering how dictionaries work just compare -them to variables. +them to variables. A dictionary is a perfect way to store our usernames +and passwords. We don't care about which order the users were added in, +it's impossible to add multiple users with the same username and +getting a user's password is easy. ## What can we do with dictionaries? @@ -108,28 +111,36 @@ lists and dictionaries have a length. >>> ``` -We can get a value of a key with `the_dict[key]`. Trying to get the -value of a non-existing key gives us an error. We can also add new -key:value pairs by doing `the_dict[key] = value`. +We can get a value of a key with `the_dict[key]`. This is a lot easier +and faster than for-looping over a list of pairs. ```py >>> passwords['me'] 'my password' >>> passwords['you'] 'your password' +>>> +``` + +Trying to get the value of a non-existing key gives us an error, but we +can add new `key: value` pairs by doing `the_dict[key] = value`. + +```py >>> passwords['lol'] Traceback (most recent call last): File "", line 1, in KeyError: 'lol' >>> passwords["lol"] = "lol's password" +>>> passwords["lol"] +"lol's password" >>> passwords {'lol': "lol's password", 'you': 'your password', 'me': 'my password'} >>> ``` -For looping over a dictionary gets its keys, and checking if something's -in the dictionary checks if the dictionary has a key like that. This can -be confusing at first but you'll get used to this. +For looping over a dictionary gets its keys, and checking if something +is in the dictionary checks if the dictionary has a key like that. This +can be confusing at first but you'll get used to this. ```py >>> 'me' in passwords @@ -190,7 +201,101 @@ me: my password >>> ``` -**TODO:** lists as keys vs tuples as keys. +This is also useful for checking if the dictionary has a `key: value` +pair. + +```py +>>> ('me', 'my password') in passwords.items() # correct username and password +True +>>> ('me', 'whatever') in passwords.items() # wrong username or password +False +>>> +``` + +## Limitations + +Sometimes it might be handy to use lists as dictionary keys, but it +just doesn't work. I'm not going to explain why Python doesn't allow +this because usually we don't need to worry about that. + +```py +>>> stuff = {['a', 'b']: 'c', ['d', 'e']: 'f'} +Traceback (most recent call last): + File "", line 1, in +TypeError: unhashable type: 'list' +>>> +``` + +On the other hand, tuples work just fine: + +```py +>>> stuff = {('a', 'b'): 'c', ('d', 'e'): 'f'} +>>> stuff +{('a', 'b'): 'c', ('d', 'e'): 'f'} +>>> +``` + +The values of a dictionary can be anything. + +```py +>>> stuff = {'a': [1, 2, 3], 'b': [4, 5, 6]} +>>> stuff +{'a': [1, 2, 3], 'b': [4, 5, 6]} +>>> +``` + +## Summary + +- Dictionaries consist of `key: value` pairs. +- Variables are stored in a dictionary with their names as keys, so + dictionaries behave a lot like variables: + - Dictionaries are not ordered. + - Setting or getting the value of a key is simple and fast. + - Dictionaries can't contain the same key more than once. +- For-looping over a dictionary loops over its keys, and checking if + something is in the dictionary checks if the dictionary has a key + like that. The `values()` and `items()` methods return things that + behave like lists of values or `(key, value)` pairs instead. + +## Examples + +This program counts how many times words appear in a sentence. +`sentence.split()` creates a list of words in the sentence, see +`help(str.split)` for more info. + +```py +sentence = input("Enter a sentence: ") + +counts = {} # {word: count, ...} +for word in sentence.split(): + if word in counts: + # we have seen this word before + counts[word] += 1 + else: + # this is the first time this word occurs + counts[word] = 1 + +print() # display an empty line +for word, count in counts.items(): + if count == 1: + # "1 times" looks weird + print(word, "appears once in the sentence") + else: + print(word, "appears", count, "times in the sentence") +``` + +Running the program might look like this: + + Enter a sentence: this is a test and this is quite long because this is a test + + is appears 3 times in the sentence + long appears once in the sentence + a appears 2 times in the sentence + because appears once in the sentence + this appears 3 times in the sentence + quite appears once in the sentence + and appears once in the sentence + test appears 2 times in the sentence *** From 77835394e42b15eb11bd238b09723d7d1c4e737b Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 4 Jan 2017 21:34:30 +0200 Subject: [PATCH 134/329] shebang and better instructions --- make-html.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/make-html.py b/make-html.py index 099d2ab..cd78d12 100755 --- a/make-html.py +++ b/make-html.py @@ -1,3 +1,6 @@ +#!/usr/bin/env python3 +"""Create HTML files of the tutorial.""" + import glob import shutil import os @@ -7,8 +10,10 @@ try: import mistune except ImportError: - print("mistune isn't installed. You can install it like this:\n\n", - " thispython -m pip install mistune", file=sys.stderr) + print("mistune isn't installed. You can install it like this:") + print() + print(">>> import pip") + print(">>> pip.main(['install', '--user', 'mistune'])") sys.exit(1) From b3f0a6f978c22f2eaf0f714706c5011a6f8145be Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 4 Jan 2017 21:36:44 +0200 Subject: [PATCH 135/329] links with target.md#title were totally broken, now they kind of work --- make-html.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make-html.py b/make-html.py index cd78d12..95f71b5 100755 --- a/make-html.py +++ b/make-html.py @@ -35,7 +35,7 @@ def main(): with open(markdownfile, 'r') as f1: with open(htmlfile, 'w') as f2: md = f1.read() - md = md.replace('.md)', '.html)') + md = md.replace('.md', '.html') html = mistune.markdown(md) print(html, file=f2) os.rename(os.path.join('html', 'README.html'), From 8198f7fe502aecca31fae9e6f227be19a7a6f506 Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 5 Jan 2017 16:07:16 +0200 Subject: [PATCH 136/329] remove useless wikipedia link --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 8289f62..65c7d44 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,8 @@ # Python programming tutorial -[Python](https://en.wikipedia.org/wiki/Python_\(programming_language\)) -is a high-level, interactive and object-oriented programming language. -Its simple syntax makes it easy to learn and fast to work with, so it's -a great choice for a first programming language. +Python is a high-level programming language. That means that it's easy +to learn and work with, so it's a great choice for a first programming +language. No tutorial is good for everyone. This one is aimed at people with no programming experience at all or very little programming experience. If From 43f410559c06e05bd6de9c963388f83d95c819bd Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 5 Jan 2017 16:51:20 +0200 Subject: [PATCH 137/329] update year --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 0df1b8f..3d067ad 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,7 @@ The instructions and text in this tutorial (the "software") are licensed under the zlib License. - (C) 2016 Akuli + (C) 2016-2017 Akuli This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages From a2cbea8bdeaa17f4ebd88254d2f583f8dc99d805 Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 5 Jan 2017 21:15:28 +0200 Subject: [PATCH 138/329] way better make-html.py and unlicensing update-ends.py --- make-html.py | 200 +++++++++++++++++++++++++++++++++++++++++++++---- update-ends.py | 27 +++++++ 2 files changed, 211 insertions(+), 16 deletions(-) diff --git a/make-html.py b/make-html.py index 95f71b5..e1380a1 100755 --- a/make-html.py +++ b/make-html.py @@ -1,9 +1,37 @@ #!/usr/bin/env python3 + +# This is free and unencumbered software released into the public +# domain. + +# Anyone is free to copy, modify, publish, use, compile, sell, or +# distribute this software, either in source code form or as a +# compiled binary, for any purpose, commercial or non-commercial, and +# by any means. + +# In jurisdictions that recognize copyright laws, the author or +# authors of this software dedicate any and all copyright interest in +# the software to the public domain. We make this dedication for the +# benefit of the public at large and to the detriment of our heirs +# and successors. We intend this dedication to be an overt act of +# relinquishment in perpetuity of all present and future rights to +# this software under copyright law. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +# CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +# For more information, please refer to + """Create HTML files of the tutorial.""" -import glob -import shutil import os +import re +import shutil +import string import sys import webbrowser @@ -16,11 +44,147 @@ print(">>> pip.main(['install', '--user', 'mistune'])") sys.exit(1) +try: + import pygments.formatters + import pygments.lexers +except ImportError: + # we can work without pygments, but we won't get colors + pygments = None + + +LINK_REGEX = r'\[.*\]\((.*\.md)\)' + + +def askyesno(question, default=True): + """Ask a yes/no question and return True or False. + + The default answer is yes if default is True and no if default is + False. + """ + if default: + # yes by default + question += ' [Y/n] ' + else: + # no by default + question += ' [y/N] ' + while True: + result = input(question).upper().strip() + if result == 'Y': + return True + if result == 'N': + return False + if not result: + return default + + +def fix_filename(filename): + if filename == 'README.md': + return 'index.html' + if filename.endswith('.md'): + return filename[:-3] + '.html' + return filename + + +class TutorialRenderer(mistune.Renderer): + + def __init__(self): + super().__init__() + self._headercounts = {} + + def _get_header_link(self, title): + """Return a github-style link target for a title. + + >>> r = TutorialRenderer() + >>> r._get_header_link('Hello there!') + 'hello-there' + >>> r._get_header_link('Hello there!') + 'hello-there-1' + >>> r._get_header_link('Hello there!') + 'hello-there-2' + >>> + """ + result = '' + for character in title: + if character in string.whitespace: + result += '-' + elif character in string.punctuation: + pass + else: + result += character.lower() + + if result not in self._headercounts: + # this title appears in this file for the first time + self._headercounts[result] = 1 + return result + # there has been already a link with the same text on this page, + # we need to do thetitle, thetitle-1, thetitle-2, etc. + real_result = '%s-%d' % (result, self._headercounts[result]) + self._headercounts[result] += 1 + return real_result + + def header(self, text, level, raw): + """Create a header that is also a link and a # link target.""" + # "# raw" + target = self._get_header_link(raw) + content = super().header(text, level, raw) + return '{1}'.format(target, content) + + def link(self, link, title, text): + """Return a link that points to the correct file.""" + # "[text](link)" + if link.startswith('#'): + # it's like "#title", no need to do anything + pass + elif '#' in link: + # it's like "some-file#title", we need to fix some-file + before, after = link.split('#', 1) + link = fix_filename(before) + '#' + after + else: + # it's like "some-file" + link = fix_filename(link) + return super().link(link, title, text) + + def block_code(self, code, lang=None): + """Highlight Python code blocks with Pygments if it's installed.""" + if lang == 'py' and pygments is not None: + # we can highlight it + if code.startswith('>>> '): + lexer = pygments.lexers.PythonConsoleLexer() + else: + lexer = pygments.lexers.PythonLexer() + formatter = pygments.formatters.HtmlFormatter( + style='tango', + noclasses=True) + return pygments.highlight(code, lexer, formatter) + # we can't highlight it + return super().block_code(code, lang) + + def image(self, src, title, text): + """Return an image inside a link.""" + result = super().image(src, title, text) + return self.link(src, title, result) + + def table(self, header, body): + """Return a table with a border.""" + result = super().table(header, body) + return result.replace('', '
', 1) + def main(): + if pygments is None: + print("Pygments isn't installed. You can install it like this:") + print() + print(">>> import pip") + print(">>> pip.main(['install', '--user', 'Pygments'])") + print() + print("You can also continue without Pygments, but the code examples") + print("will not be in color.") + if not askyesno("Continue without pygments?"): + print("Interrupt.") + return + if os.path.exists('html'): - if input("html exists. Do you want " - "to remove it? [Y/n] ").upper() == 'N': + if not askyesno("html exists. Do you want to remove it?"): print("Interrupt.") return if os.path.isdir('html'): @@ -28,26 +192,30 @@ def main(): else: os.remove('html') os.mkdir('html') + + print("Getting a list of files to generate...") + with open('README.md', 'r') as f: + filelist = re.findall(LINK_REGEX, f.read()) + ['README.md'] + print("Generating HTML files...") - for markdownfile in glob.glob('*.md'): - htmlfile = os.path.join('html', markdownfile[:-3] + '.html') + for markdownfile in filelist: + htmlfile = os.path.join('html', fix_filename(markdownfile)) print(' ', markdownfile, '->', htmlfile) with open(markdownfile, 'r') as f1: with open(htmlfile, 'w') as f2: md = f1.read() - md = md.replace('.md', '.html') - html = mistune.markdown(md) + html = mistune.markdown(md, renderer=TutorialRenderer()) print(html, file=f2) - os.rename(os.path.join('html', 'README.html'), - os.path.join('html', 'index.html')) + + print("Copying other files...") shutil.copytree('images', os.path.join('html', 'images')) + shutil.copy('LICENSE', os.path.join('html', 'LICENSE')) + + print("\n*********************\n") + print("Ready! The files are in the html directory.") + print("Go to html and double-click index.html to read the tutorial.") print() - print("*********************") - print() - print("Ready! The files are in the html directory,") - print("double-click html/index.html to read the tutorial.") - print() - if input("Do you want to view the tutorial now? [Y/n] ").upper() != 'N': + if askyesno("Do you want to view the tutorial now?"): print("Opening the tutorial...") webbrowser.open(os.path.join('html', 'index.html')) diff --git a/update-ends.py b/update-ends.py index 4cfff79..8481f8e 100755 --- a/update-ends.py +++ b/update-ends.py @@ -1,4 +1,31 @@ #!/usr/bin/env python3 + +# This is free and unencumbered software released into the public +# domain. + +# Anyone is free to copy, modify, publish, use, compile, sell, or +# distribute this software, either in source code form or as a +# compiled binary, for any purpose, commercial or non-commercial, and +# by any means. + +# In jurisdictions that recognize copyright laws, the author or +# authors of this software dedicate any and all copyright interest in +# the software to the public domain. We make this dedication for the +# benefit of the public at large and to the detriment of our heirs +# and successors. We intend this dedication to be an overt act of +# relinquishment in perpetuity of all present and future rights to +# this software under copyright law. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +# CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +# For more information, please refer to + """Update ends of markdown files.""" import re From ff8ab6f42e74943a1c099793af2b0a50c88c1ba9 Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 5 Jan 2017 22:29:31 +0200 Subject: [PATCH 139/329] less annoying default --- make-html.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make-html.py b/make-html.py index e1380a1..f1a1316 100755 --- a/make-html.py +++ b/make-html.py @@ -215,7 +215,7 @@ def main(): print("Ready! The files are in the html directory.") print("Go to html and double-click index.html to read the tutorial.") print() - if askyesno("Do you want to view the tutorial now?"): + if askyesno("Do you want to view the tutorial now?", default=False): print("Opening the tutorial...") webbrowser.open(os.path.join('html', 'index.html')) From d97dff1cad042ede2caf93b73aa263ff377b9769 Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 5 Jan 2017 22:31:44 +0200 Subject: [PATCH 140/329] way better exercises --- answers.md | 73 ++++++++++++++++++------------ defining-functions.md | 100 +++++++++++++++--------------------------- 2 files changed, 82 insertions(+), 91 deletions(-) diff --git a/answers.md b/answers.md index 0565fb9..36fb450 100644 --- a/answers.md +++ b/answers.md @@ -251,39 +251,58 @@ These are answers for exercises in the chapters. In programming, there's always ## Defining functions -1. Use `-value` (it works just like `-1`) to get the negative in - the abs function, and for loops in the other two functions. +1. The problem with the first example is that name is a local variable. + I explained how to fix this in [the output section](defining-functions.md#output): ```py - def my_abs(value): - if value < 0: - return -value - # actually, this else is useless because returning ends the - # function anyway - else: - return value - - def my_any(a_list): # don't call this "list", see summary in the Lists chapter - for item in a_list: - if item: - return True # ends the function - return False - - def my_all(a_list): - for item in a_list: - if not item: - return False - return True + def ask_name(): + name = input("Enter your name: ") + return name + + print("Your name is", ask_name()) + +2. If you run the next example, you get something like this: + + + + The problem is that we print the actual `get_greeting` function, + but we need to **call** it like `get_greeting()`: + + ```py + def get_greeting(): + return "Hello World!" + + print(get_greeting()) + ``` + +3. See [the return or print section](defining-functions.html#return-or-print). + + The greet function prints a greeting. + + ```py + >>> greet("World") + Hello World + >>> ``` -2. Like this: + But it also returns None because we don't tell it to return anything else. ```py - def print_box(message, character='*'): - number_of_characters = len(message) + 4 - print(character * number_of_characters) - print(character, message, character) - print(character * number_of_characters) + >>> return_value = greet("World") + Hello World + >>> print(return_value) + None + >>> + ``` + + This code from the exercise does the same thing as the code above + does, but without a temporary `return_value` variable: + + ```py + >>> print(greet("World")) + Hello World + None + >>> ``` *** diff --git a/defining-functions.md b/defining-functions.md index fb2314a..d9e0d37 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -489,70 +489,42 @@ print("Your favorite color is %s!" % choice) ## Exercises -**TODO:** more exercises. - -**There is a lot to learn about functions, and I don't expect you to -learn everything at once.** However, there's also lots of free Python -exercises about defining functions you can do. Do many of them and -spend time with them until you're familiar with defining functions. - -1. The box printing function doesn't really print a box, it prints a - message between two lines. - - ************ - Hello World! - ************ - - Modify it to print an actual box: - - **************** - * Hello World! * - **************** - -2. Python comes with many built-in functions. Some of the simplest ones - are abs, all and any. They can be used like this: - - - abs returns the absolute value of its only argument. - - ```py - >>> abs(1) - 1 - >>> abs(-1) - 1 - >>> - ``` - - - any returns True if one or more of the elements of a list is true, - and False otherwise. - - ```py - >>> any([True, False, True]) - True - >>> any([False, False, False]) - False - >>> - ``` - - - all returns True if all elements of a list are true, and False - otherwise. - - ```py - >>> all([True, True, True]) - True - >>> all([True, False, True]) - False - >>> - ``` - - Define functions `my_abs`, `my_all` and `my_any` that work the same - way without using the built-in functions. Then run the program with - IDLE, or with `py -i file.py` on Windows or `python3 -i file.py` on - other operating systems. Try the above examples with your - functions. - -2. Find more exercises about defining functions online. - -Answers for the first and second exercise are [here](answers.md). +**There are many things to learn about functions, and I don't expect +you to learn everything at once.** However, there are also many free +exercises about defining functions you can do. + +1. What's wrong with this code? + + ```py + def ask_name(): + name = input("Enter your name: ") + + ask_name() + print("Your name is", name) + ``` + +2. How about this code? + + ```py + def get_greeting(): + return "Hello World!" + + print(get_greeting) + ``` + +3. Why does this print None after greeting the world? + + ```py + def greet(target): + print("Hello", target) + + print(greet("World")) + ``` + +4. Find more exercises about defining functions online. + +Answers for the first, second and third exercise are +[here](answers.md#defining-functions). *** From d23053ad92ed9bdff1c262436f0810dce3ac83ef Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 5 Jan 2017 23:12:44 +0200 Subject: [PATCH 141/329] again, better exercises --- if.md | 69 +++++++++++++++++++++++++++-------------------------------- 1 file changed, 32 insertions(+), 37 deletions(-) diff --git a/if.md b/if.md index cb93f1c..8aa38f6 100644 --- a/if.md +++ b/if.md @@ -66,7 +66,7 @@ SyntaxError: invalid syntax >>> ``` -Functions like `print` need `()` after their name to work. But `if` is +**Functions** like `print` need `()` after their name to work. But `if` is a keyword, not a function, so it doesn't need `()`. Python has separate functions and keywords because it's possible to create custom functions, but it's not possible to create custom keywords. That's why keywords are @@ -286,52 +286,47 @@ else: ## Exercises -1. Write a program into a file that asks the user to write a word and +1. This program contains several problems. Copy-paste it to a file, + then try to run it, fix the errors you got, try to run it again and + keep going until it works. + + ```py + print(Hello!) + something == input('Enter something: ) + print('You entered:' something) + ``` + +2. Fix this program the same way: + + ```py + print('Hello!') + something = input("Enter something: ") + if something = 'hello': + print("Hello for you too!") + elif something = 'hi' + print('Hi there!') + else: + print("I don't know what," something, "means.") + ``` + +3. Write a program into a file that asks the user to write a word and then prints that word 1000 times. For example, if the user enters - `hi` the program would reply `hihihihi...`. + `hi` the program would reply `hihihihi` and so on. -2. Add spaces between the words, so the output is like `hi hi hi ...`. +4. Add spaces between the words, so the output is like `hi hi hi` and + so on. -3. Make something that asks the user to enter two words, and prints +5. Make something that asks the user to enter two words, and prints 1000 of each with spaces in between. For example, if the user enters `hello` and `hi` the program would print - `hello hi hello hi hello hi...`. + `hello hi hello hi hello hi` and so on. -4. Make a program that asks for a password and prints `Welcome!`, +6. Make a program that asks for a password and prints `Welcome!`, `Access denied` or `You didn't enter anything` depending on whether the user entered the correct password, a wrong password, or nothing at all by pressing Enter without typing anything. -5. Make a program that asks for username and password and checks them. - Make users "foo" and "bar" with passwords "biz" and "baz". - - Example output: - - ``` - >>> ================================ RESTART ================================ - >>> - Enter your username: foo - Enter your password: biz - Welcome foo! - >>> ================================ RESTART ================================ - >>> - Enter your username: bar - Enter your password: baz - Welcome bar! - >>> ================================ RESTART ================================ - >>> - Enter your username: spam - Enter your password: eggs - Wrong username. - >>> ================================ RESTART ================================ - >>> - Enter your username: foo - Enter your password: lol - Wrong password! - >>> - ``` - -The answers are [here](answers.md). +The answers are [here](answers.md#if-else-and-elif). *** From 2a9cd88da307b6c4242433cbd66a9d93722cc52f Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 5 Jan 2017 23:12:59 +0200 Subject: [PATCH 142/329] and the answers --- answers.md | 54 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/answers.md b/answers.md index 36fb450..189c1e5 100644 --- a/answers.md +++ b/answers.md @@ -1,6 +1,8 @@ # Answers -These are answers for exercises in the chapters. In programming, there's always more than one way to do things, so if your solution wasn't exactly like mine it's not necessarily wrong. Some Python users say that there should be only one right way, but that goal will never be fully reached. +These are my answers for exercises in the chapters. If your solution +isn't exactly like mine but it works just fine it's ok, and you can +[ask me](contact-me.md) why I didn't do it like you did it. ## ThinkPython: The way of the program @@ -8,16 +10,34 @@ These are answers for exercises in the chapters. In programming, there's always 2. With + we get an error, and with * the string is repeated multiple times. 3. Python calculates the result and echoes it. -## Using if, else and elif +## If, else and elif -1. Just ask the word and print word * 1000. +1. Problems and solutions: + + - The first line should be `print("Hello!")` or `print('Hello!')`, + not `print(Hello!)`. `Hello!` is a piece of text, so we need to + tell Python that it's a string by putting quotes around it. + - The second line will create an error message that says that + there's no variable called `something`. But we are trying to + create it here, so we need `=` instead of `==`. `=` is + assigning, `==` is comparing. + - The last line should have a comma between the arguments, like + `print('You entered:', something)`. + +2. The broken code has mostly the same issues as exercise 1. On the + last line the comma is on the wrong side. **`"bla bla,"` is a + string that contains a comma, but `"bla bla",` is a string and a + separate comma.** In this exercise, the last line should be + `print("I don't know what", something, "means.")` + +3. We can simply ask the word with input and print `word * 1000`. ```py word = input("Enter a word: ") print(word * 1000) ``` -2. Add a space to the word before printing. +4. We can add a space to the word before we print it. ```py word = input("Enter a word: ") @@ -43,7 +63,7 @@ These are answers for exercises in the chapters. In programming, there's always print(yes_space * 999 + no_space) ``` -3. Like this: +5. Like this: ```py first = input("Enter a word: ") @@ -52,7 +72,7 @@ These are answers for exercises in the chapters. In programming, there's always print(words * 1000) ``` -4. You can compare the word against an empty string (`""` or `''`) to +6. We can compare the word against an empty string (`""` or `''`) to check if it's empty. In this example, the password is "secret". ```py @@ -66,26 +86,8 @@ These are answers for exercises in the chapters. In programming, there's always print("Access denied.") ``` -5. Simply check the username first, then the password in indented - blocks of code. - - ```py - username = input("Enter your username: ") - password = input("Enter your password: ") - - if username == "foo": - if password == "biz": - print("Welcome foo!") - else: - print("Wrong password!") - elif username == "bar": - if password == "baz": - print("Welcome bar!") - else: - print("Wrong password!") - else: - print("Wrong username.") - ``` + This is not a good way to ask a password from the user because the + password isn't hidden in any way, but this is just an example. ## Loops From 7628d7430756c05ee4b519dc4be3bd85bbcbf757 Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 5 Jan 2017 23:43:24 +0200 Subject: [PATCH 143/329] way better string exercises --- answers.md | 64 ++++++++++++++++++++++++++++++++++++++++++ handy-stuff-strings.md | 23 +++++++++++++++ 2 files changed, 87 insertions(+) diff --git a/answers.md b/answers.md index 189c1e5..e745bb6 100644 --- a/answers.md +++ b/answers.md @@ -89,6 +89,69 @@ isn't exactly like mine but it works just fine it's ok, and you can This is not a good way to ask a password from the user because the password isn't hidden in any way, but this is just an example. +## Handy stuff: Strings + +1. The program is not like you might expect it to be. It actually works + just fine if we run it, but there's the problem. The last line is + really long and it's hard to see what it does. + + The solution is string formatting. At the time of writing this, I + recommend replacing the last line with one of these: + + ```py + print("You entered %s, %s, %s and %s." % (word1, word2, word3, word4)) + print("You entered {}, {}, {} and {}.".format(word1, word2, word3, word4)) + ``` + + In the future when most people will have Python 3.6 or newer, you + can also use this: + + ```py + print(f"You entered {word1}, {word2}, {word3} and {word4}.") + ``` + +2. If we have a look at `help(str.upper)` it looks like this: + + S.upper() -> str + + Return a copy of S converted to uppercase. + + We have two problems. First of all, the broken code uses + `message.upper` instead of `message.upper()`. It also expects the + message to magically make itself uppercased, but strings can't be + changed in-place so it doesn't work. + + The solution is to do `message.upper()` and save the value we got + from that to a variable: + + ```py + message = input("What do you want me to say? ") + uppermessage = message.upper() + print(uppermessage, "!!!") + print(uppermessage, "!!!") + print(uppermessage, "!!!") + ``` + + Or we can reuse the same variable name: + + ```py + message = input("What do you want me to say? ") + message = message.upper() + print(message, "!!!") + print(message, "!!!") + print(message, "!!!") + ``` + + Or we can convert the message to uppercase right away on the first + line: + + ```py + message = input("What do you want me to say? ").upper() + print(message, "!!!") + print(message, "!!!") + print(message, "!!!") + ``` + ## Loops 1. For loop over the users, each user is a list that contains a @@ -262,6 +325,7 @@ isn't exactly like mine but it works just fine it's ok, and you can return name print("Your name is", ask_name()) + ``` 2. If you run the next example, you get something like this: diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index bdbe3d6..197d8dd 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -401,6 +401,29 @@ ValueError: could not convert string to float: 'hello' - We can use `str`, `int` and `float` to convert values to different types. +## Exercises + +1. Fix this program. + + ```py + print("Hello!") + word1 = input("Enter something: ") + word2 = input("Enter another thing: ") + word3 = input("Enter a third thing: ") + word4 = input("And yet another thing: ") + print("You entered " + word1 + ", " + word2 + ", " + word3 + " and " + word4 + ".") + ``` + +2. This program is supposed to say something loudly. Fix it. + + ```py + message = input("What do you want me to say? ") + message.upper + print(message, "!!!") + print(message, "!!!") + print(message, "!!!") + ``` + *** You may use this tutorial freely at your own risk. See From ff3101168caf724012f5b4d21e2300cbe559818f Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 5 Jan 2017 23:47:44 +0200 Subject: [PATCH 144/329] mistune-compatible link, more explicit example --- handy-stuff-strings.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index 197d8dd..bc990d3 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -148,11 +148,12 @@ Indexing with negative values works like this: ## String methods -Python's strings have many useful methods. [The official documentation] -(https://docs.python.org/3/library/stdtypes.html#string-methods) covers -them all, but I'm going to just show some of the most commonly used ones -briefly. Python also comes with built-in documentation about the string -methods and we can run `help(str)` to read it. +Python's strings have many useful methods. +[The official documentation](https://docs.python.org/3/library/stdtypes.html#string-methods) +covers them all, but I'm going to just show some of the most commonly +used ones briefly. Python also comes with built-in documentation about +the string methods and we can run `help(str)` to read it. You can also +get help about one string method at a time, like `help(str.upper)`. Again, nothing can modify strings in-place. Most string methods return a new string, but things like `our_string = our_string.upper()` @@ -179,8 +180,8 @@ True False >>> our_string.replace('World', 'there') 'Hello there!' ->>> our_string.replace('l', 'ł', 1) # only replace one l -'Hełlo World!' +>>> our_string.replace('o', '@', 1) # only replace one o +'Hell@ World!' >>> ' hello 123 '.lstrip() # left strip 'hello 123 ' >>> ' hello 123 '.rstrip() # right strip From 914ced08a26f1b9f55a354f67458450706f8bbe2 Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 5 Jan 2017 23:49:33 +0200 Subject: [PATCH 145/329] you -> we --- handy-stuff-strings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index bc990d3..ab01aa2 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -152,7 +152,7 @@ Python's strings have many useful methods. [The official documentation](https://docs.python.org/3/library/stdtypes.html#string-methods) covers them all, but I'm going to just show some of the most commonly used ones briefly. Python also comes with built-in documentation about -the string methods and we can run `help(str)` to read it. You can also +the string methods and we can run `help(str)` to read it. We can also get help about one string method at a time, like `help(str.upper)`. Again, nothing can modify strings in-place. Most string methods From 3a464a061a7b93335da3dbfbd8e52c9db4826fdb Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 6 Jan 2017 11:21:37 +0200 Subject: [PATCH 146/329] answer link and no printf --- handy-stuff-strings.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index ab01aa2..07f1bec 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -256,11 +256,11 @@ our problem: >>> ``` -- `%s`-formatting, also known as printf-formatting and old-style - formatting. This has less features than `.format()`-formatting, but - `'Hello %s.' % name` is shorter and faster to type than - `'Hello {}.'.format(name)`. I like to use printf-formatting for simple - things and `.format` when I need more powerful features. +- `%s`-formatting, also known as old-style formatting. This has less + features than `.format()`-formatting, but `'Hello %s.' % name` is + shorter and faster to type than `'Hello {}.'.format(name)`. I like + to use `%s` formatting for simple things and `.format` when I need + more powerful features. ```py >>> "Hello %s." % name @@ -425,6 +425,8 @@ ValueError: could not convert string to float: 'hello' print(message, "!!!") ``` +The answers are [here](answers.md#handy-stuff-strings). + *** You may use this tutorial freely at your own risk. See From 71fc9dbbeea7de10c85d2e44bd0c48ad2489cc84 Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 6 Jan 2017 11:36:49 +0200 Subject: [PATCH 147/329] dont shout --- answers.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/answers.md b/answers.md index e745bb6..5fb80fb 100644 --- a/answers.md +++ b/answers.md @@ -25,9 +25,9 @@ isn't exactly like mine but it works just fine it's ok, and you can `print('You entered:', something)`. 2. The broken code has mostly the same issues as exercise 1. On the - last line the comma is on the wrong side. **`"bla bla,"` is a - string that contains a comma, but `"bla bla",` is a string and a - separate comma.** In this exercise, the last line should be + last line the comma is on the wrong side. `"bla bla,"` is a string + that **contains** a comma, but `"bla bla",` is a string and a + **separate** comma. In this exercise, the last line should be `print("I don't know what", something, "means.")` 3. We can simply ask the word with input and print `word * 1000`. From 0bfe63b69547daac0bab54a7a680bffeaef6844f Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 6 Jan 2017 11:39:19 +0200 Subject: [PATCH 148/329] less boring password --- answers.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/answers.md b/answers.md index 5fb80fb..6a9c36f 100644 --- a/answers.md +++ b/answers.md @@ -73,12 +73,12 @@ isn't exactly like mine but it works just fine it's ok, and you can ``` 6. We can compare the word against an empty string (`""` or `''`) to - check if it's empty. In this example, the password is "secret". + check if it's empty. In this example, the password is "s3cr3t". ```py word = input("Enter your password: ") - if word == "secret": + if word == "s3cr3t": print("Welcome!") elif word == "": print("You didn't enter anything.") From f6eeec3da9503b694a001d8cb4e9952251f8daa7 Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 6 Jan 2017 11:46:49 +0200 Subject: [PATCH 149/329] use ... rather than "and so on" --- if.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/if.md b/if.md index 8aa38f6..c0e5c13 100644 --- a/if.md +++ b/if.md @@ -311,15 +311,14 @@ else: 3. Write a program into a file that asks the user to write a word and then prints that word 1000 times. For example, if the user enters - `hi` the program would reply `hihihihi` and so on. + `hi` the program would reply `hihihihihihihihi` ... -4. Add spaces between the words, so the output is like `hi hi hi` and - so on. +4. Add spaces between the words, so the output is like `hi hi hi hi` ... 5. Make something that asks the user to enter two words, and prints 1000 of each with spaces in between. For example, if the user enters `hello` and `hi` the program would print - `hello hi hello hi hello hi` and so on. + `hello hi hello hi hello hi hello hi hello hi` ... 6. Make a program that asks for a password and prints `Welcome!`, `Access denied` or `You didn't enter anything` depending on whether From 4c8907ee02b474fdf5bb4df2c59018a2aac195af Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 6 Jan 2017 11:51:51 +0200 Subject: [PATCH 150/329] mistune compatible links --- handy-stuff-strings.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/handy-stuff-strings.md b/handy-stuff-strings.md index 07f1bec..a97f37d 100644 --- a/handy-stuff-strings.md +++ b/handy-stuff-strings.md @@ -390,8 +390,8 @@ ValueError: could not convert string to float: 'hello' ![Indexing](images/indexing3.png) -- Python has many string methods. Use [the documentation] - (https://docs.python.org/3/library/stdtypes.html#string-methods) +- Python has many string methods. Use + [the documentation](https://docs.python.org/3/library/stdtypes.html#string-methods) or `help(str)` when you don't rememeber something about them. - String formatting means adding other things to the middle of a string. There are multiple ways to do this in Python. You should know how to From 88263cd1578ea46f9d1ae4826ce5b1e80b638973 Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 6 Jan 2017 11:58:07 +0200 Subject: [PATCH 151/329] little things --- lists-and-tuples.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lists-and-tuples.md b/lists-and-tuples.md index ae08479..616eee8 100644 --- a/lists-and-tuples.md +++ b/lists-and-tuples.md @@ -186,7 +186,7 @@ behave like this: This can be confusing at first, but it's actually easy to explain. The problem with this code example is the `b = a` -line. If we draw a diagram of this example it looks like this: +line. If we draw a picture of the variables it looks like this: ![Same list.](images/samelist.png) @@ -218,6 +218,8 @@ If we need **a new list with similar content** we can use the >>> b is a False >>> b.append(4) +>>> b +[1, 2, 3, 4] >>> a [1, 2, 3] >>> From 5a9b48bc1cc62c4e47407f76f3508bf2a3e234f9 Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 6 Jan 2017 13:43:17 +0200 Subject: [PATCH 152/329] no need to catch everything --- exceptions.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/exceptions.md b/exceptions.md index acf0f3d..259b584 100644 --- a/exceptions.md +++ b/exceptions.md @@ -451,12 +451,8 @@ try: except OSError: print("Cannot read '%s'!" % filename, file=sys.stderr) if askyesno("Would you like to create a default greeting file?"): - try: - with open(filename, 'w') as f: - print(default_greeting, file=f) - except OSError: - print("Cannot create '%s' :(" % filename, file=sys.stderr) - sys.exit(1) # time to give up + with open(filename, 'w') as f: + print(default_greeting, file=f) greet() ``` From 2564bb7e48c2a4efeb9097d9a1330a0f7c096870 Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 6 Jan 2017 13:46:01 +0200 Subject: [PATCH 153/329] fix character set problems, add title tags --- make-html.py | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/make-html.py b/make-html.py index f1a1316..e8de6bb 100755 --- a/make-html.py +++ b/make-html.py @@ -54,6 +54,19 @@ LINK_REGEX = r'\[.*\]\((.*\.md)\)' +HTML_TEMPLATE = """\ + + + + + {title} + + + {body} + + +""" + def askyesno(question, default=True): """Ask a yes/no question and return True or False. @@ -89,6 +102,7 @@ class TutorialRenderer(mistune.Renderer): def __init__(self): super().__init__() + self.title = None # will be set by header() self._headercounts = {} def _get_header_link(self, title): @@ -125,6 +139,8 @@ def _get_header_link(self, title): def header(self, text, level, raw): """Create a header that is also a link and a # link target.""" # "# raw" + if level == 1: + self.title = text target = self._get_header_link(raw) content = super().header(text, level, raw) return '{1}'.format(target, content) @@ -201,11 +217,13 @@ def main(): for markdownfile in filelist: htmlfile = os.path.join('html', fix_filename(markdownfile)) print(' ', markdownfile, '->', htmlfile) - with open(markdownfile, 'r') as f1: - with open(htmlfile, 'w') as f2: - md = f1.read() - html = mistune.markdown(md, renderer=TutorialRenderer()) - print(html, file=f2) + with open(markdownfile, 'r') as f: + markdown = f.read() + renderer = TutorialRenderer() + body = mistune.markdown(markdown, renderer=renderer) + html = HTML_TEMPLATE.format(title=renderer.title, body=body) + with open(htmlfile, 'w') as f: + print(html, file=f) print("Copying other files...") shutil.copytree('images', os.path.join('html', 'images')) From d2c19803703168ecc01865d21a3dd5a6b1e8d824 Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 6 Jan 2017 14:45:37 +0200 Subject: [PATCH 154/329] fix hardcoded link --- defining-functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defining-functions.md b/defining-functions.md index d9e0d37..e93e2c3 100644 --- a/defining-functions.md +++ b/defining-functions.md @@ -351,7 +351,7 @@ need to: ## Output -The built-in input function [returns a value](https://github.com/Akuli/python-tutorial/blob/master/using-functions.md#return-values). +The built-in input function [returns a value](using-functions.md#return-values). Can our function return a value also? ```py From 4a22918bce0c964b441da1db53b9ec51930c5e47 Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 6 Jan 2017 14:46:56 +0200 Subject: [PATCH 155/329] add more exercises --- answers.md | 62 +++++++++++++++++++++++++++++++++++++++++++++ lists-and-tuples.md | 35 +++++++++++++++++++++++++ 2 files changed, 97 insertions(+) diff --git a/answers.md b/answers.md index 6a9c36f..f152a46 100644 --- a/answers.md +++ b/answers.md @@ -152,6 +152,68 @@ isn't exactly like mine but it works just fine it's ok, and you can print(message, "!!!") ``` +## Lists and tuples + +1. When we run the program we get a weird error: + + Hello! + Enter your name: my name + Traceback (most recent call last): + File "program.py", line 3, in + print("Your name is " + name + ".") + TypeError: Can't convert 'tuple' object to str implicitly + + So Python is trying to convert a tuple to a string. But + `"Your name is "` and `"."` are strings, so maybe `name` is a + tuple? Let's change the last line to just `print(name)` so our + program looks like this: + + ```py + print("Hello!") + name = input("Enter your name: "), + print(name) + ``` + + Let's run it. + + Hello! + Enter your name: my name + ('my name',) + + `name` is indeed a tuple! The problem is the second line. Look + carefully, there's a comma after `input("Enter your name: ")`. + Python created a tuple automatically, but that's not what we + wanted. If we remove the comma, everything works just fine. + +2. Again, the code gives us a weird error message. + + Enter your name: my name + Traceback (most recent call last): + File "program.py", line 3, in + if input("Enter your name: ") in namelist: + TypeError: argument of type 'NoneType' is not iterable + + Now we need to remember that when the error messages talk about + `NoneType` [they always mean None](variables.md#none). So + `namelist` seems to be None. Let's make the program a bit simpler + for working on the namelist: + + ```py + namelist = ['wub_wub', 'RubyPinch', 'go|dfish', 'Nitori'] + namelist = namelist.extend('theelous3') + print(namelist) + ``` + + Now fixing the namelist is easier, so I'll just go through the + problems and solutions: + + - `namelist` is None. It should be `namelist.extend('theelous3')`, + not `namelist = namelist.extend('theelous3')`. + - Now the namelist is like `['wub_wub', ..., 't', 'h', 'e', 'e', ...]`. + Python treated `'theelous3'` like a list so it added each of its + characters to `namelist`. We can use `namelist.append('theelous3')` + or `namelist.extend(['theelous3'])` instead to solve this problem. + ## Loops 1. For loop over the users, each user is a list that contains a diff --git a/lists-and-tuples.md b/lists-and-tuples.md index 616eee8..4720408 100644 --- a/lists-and-tuples.md +++ b/lists-and-tuples.md @@ -266,6 +266,18 @@ used in places like `(1 + 2) * 3`. >>> ``` +It's also possible to create tuples by just separating things with +commas and adding no parentheses. Personally I don't like this feature, +but some people like to do it this way. + +```py +>>> 1, 2, 3 +(1, 2, 3) +>>> 'hello', +('hello',) +>>> +``` + Tuples don't have methods like append, extend and remove because they can't change themselves in-place. @@ -310,6 +322,29 @@ else: print("Sorry, I don't know who you are :(") ``` +## Exercises + +1. Fix this program. + + ```py + print("Hello!") + name = input("Enter your name: "), + print("Your name is " + name + ".") + ``` + +2. Fix this program. + + ```py + namelist = ['wub_wub', 'RubyPinch', 'go|dfish', 'Nitori'] + namelist = namelist.extend('theelous3') + if input("Enter your name: ") in namelist: + print("I know you!") + else: + print("I don't know you.") + ``` + +The answers are [here](answers.md#lists-and-tuples). + *** You may use this tutorial freely at your own risk. See From c6b7fd6c25bbc7af4ef20a4075a3fb200e623acc Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 6 Jan 2017 19:56:26 +0200 Subject: [PATCH 156/329] theelous3-style formatting --- lists-and-tuples.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lists-and-tuples.md b/lists-and-tuples.md index 4720408..0187db2 100644 --- a/lists-and-tuples.md +++ b/lists-and-tuples.md @@ -98,9 +98,9 @@ False Lists have a few [useful methods](https://docs.python.org/3/tutorial/datastructures.html#more-on-lists). -Some of the most commonly used ones are append, extend and -remove. append adds an item to the end of a list, extend adds -multiple items from another list and remove removes an item. +Some of the most commonly used ones are append, extend and remove. +`append` adds an item to the end of a list, `extend` adds +multiple items from another list and `remove` removes an item. ```py >>> names From cc52b938ab9c38081a3543a19b022d5b258b7d20 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 7 Jan 2017 11:54:53 +0200 Subject: [PATCH 157/329] typos --- lists-and-tuples.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lists-and-tuples.md b/lists-and-tuples.md index 0187db2..627180f 100644 --- a/lists-and-tuples.md +++ b/lists-and-tuples.md @@ -290,8 +290,8 @@ AttributeError: 'tuple' object has no attribute 'append' >>> ``` -So, why the heck would we use tuples instead of lists? There's -a few cases when we don't want mutability, but there's also +So, why the heck would we use tuples instead of lists? There are +some cases when we don't want mutability, but there are also cases when Python programmers just like to use tuples. If you want to know more about this you can read [Ned Batchelder's blog post about this](http://nedbatchelder.com/blog/201608/lists_vs_tuples.html). From 719fee589e43092b3acf3d16769fa761b0841c1f Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 8 Jan 2017 21:46:27 +0200 Subject: [PATCH 158/329] instructions for reading offline --- README.md | 26 ++++++++++++++++++++++++-- images/download-me.png | Bin 0 -> 26265 bytes 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 images/download-me.png diff --git a/README.md b/README.md index 65c7d44..e014c50 100644 --- a/README.md +++ b/README.md @@ -50,8 +50,30 @@ Other things this tutorial comes with: - [Answers for the exercises](answers.md) - [The TODO list](TODO.md) -I'm Akuli and I have written most of this tutorial, but the following -people have helped me with it: +## How to read this tutorial without an internet connection + +1. Go [here](https://github.com/Akuli/python-tutorial) if you aren't + here already. +2. Click the big green "Clone or download" button in the top right of + the page, then click "Download ZIP". + + ![Download ZIP](images/download-me.png) + +3. Extract the ZIP and open it. Unfortunately I don't have any more + specific instructions because how exactly this is done depends on + which operating system you run. +4. Run `make-html.py` and follow the instructions. + +If you have git and you know how to use it, you can also clone the +repository instead of downloading a zip and extracting it. An advantage +with doing it this way is that you don't need to download the whole +tutorial again to get the latest version of it, all you need to do is to +pull with git and run `make-html.py` again. + +## Authors + +I'm Akuli and I have written most of this tutorial, but these people +have helped me with it: - [SpiritualForest](https://github.com/SpiritualForest): Lots of typing error fixes. - [theelous3](https://github.com/theelous3): Small improvements and fixes. diff --git a/images/download-me.png b/images/download-me.png new file mode 100644 index 0000000000000000000000000000000000000000..fb10d5f748f2279a277e0e7ff5962de21ae8190d GIT binary patch literal 26265 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 literal 0 HcmV?d00001 From 955379481ea3d1999d53f8c444db14cd280c6487 Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 11 Jan 2017 11:32:03 +0200 Subject: [PATCH 159/329] mention missing : --- answers.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/answers.md b/answers.md index f152a46..756b4e3 100644 --- a/answers.md +++ b/answers.md @@ -24,11 +24,15 @@ isn't exactly like mine but it works just fine it's ok, and you can - The last line should have a comma between the arguments, like `print('You entered:', something)`. -2. The broken code has mostly the same issues as exercise 1. On the - last line the comma is on the wrong side. `"bla bla,"` is a string - that **contains** a comma, but `"bla bla",` is a string and a - **separate** comma. In this exercise, the last line should be - `print("I don't know what", something, "means.")` +2. The broken code has mostly the same issues as exercise 1. Here are + the problems that excercise 1 doesn't have: + + - The elif line is missing a `:` at the end. + - On the last line the comma is on the wrong side. `"bla bla,"` is + a string that **contains** a comma, but `"bla bla",` is a + string and a **separate** comma. In this exercise, the last + line should be + `print("I don't know what", something, "means.")` 3. We can simply ask the word with input and print `word * 1000`. From 1611ae74835b428a087067a281c22dcdc7403d84 Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 11 Jan 2017 11:32:54 +0200 Subject: [PATCH 160/329] typo --- answers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/answers.md b/answers.md index 756b4e3..b4ee2fe 100644 --- a/answers.md +++ b/answers.md @@ -96,7 +96,7 @@ isn't exactly like mine but it works just fine it's ok, and you can ## Handy stuff: Strings 1. The program is not like you might expect it to be. It actually works - just fine if we run it, but there's the problem. The last line is + just fine if we run it, but there's a problem. The last line is really long and it's hard to see what it does. The solution is string formatting. At the time of writing this, I From c2ac9c6047351d658cc20bd9855da16aa0b518a4 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 15 Jan 2017 12:15:44 +0200 Subject: [PATCH 161/329] new "advanced" section and reorganizing everything for it --- README.md | 64 ++- advanced/answers.md | 7 + advanced/iterators.md | 264 +++++++++++ answers.md => basics/answers.md | 4 +- basics/classes.md | 428 +++++++++++++++++ .../defining-functions.md | 6 +- dicts.md => basics/dicts.md | 4 +- exceptions.md => basics/exceptions.md | 4 +- files.md => basics/files.md | 4 +- .../getting-started.md | 4 +- .../handy-stuff-strings.md | 16 +- if.md => basics/if.md | 6 +- .../installing-python.md | 6 +- .../lists-and-tuples.md | 10 +- loops.md => basics/loops.md | 0 modules.md => basics/modules.md | 6 +- .../the-way-of-the-program.md | 4 +- .../trey-hunner-zip-and-enumerate.md | 4 +- .../using-functions.md | 4 +- variables.md => basics/variables.md | 8 +- .../what-is-programming.md | 8 +- what-is-true.md => basics/what-is-true.md | 4 +- classes.md | 429 +----------------- images/drawings.odg | Bin 16875 -> 20087 bytes images/iters.png | Bin 0 -> 16776 bytes make-html.py | 18 +- update-ends.py | 69 ++- 27 files changed, 860 insertions(+), 521 deletions(-) create mode 100644 advanced/answers.md create mode 100644 advanced/iterators.md rename answers.md => basics/answers.md (99%) create mode 100644 basics/classes.md rename defining-functions.md => basics/defining-functions.md (99%) rename dicts.md => basics/dicts.md (99%) rename exceptions.md => basics/exceptions.md (99%) rename files.md => basics/files.md (99%) rename getting-started.md => basics/getting-started.md (98%) rename handy-stuff-strings.md => basics/handy-stuff-strings.md (96%) rename if.md => basics/if.md (98%) rename installing-python.md => basics/installing-python.md (97%) rename lists-and-tuples.md => basics/lists-and-tuples.md (97%) rename loops.md => basics/loops.md (100%) rename modules.md => basics/modules.md (99%) rename the-way-of-the-program.md => basics/the-way-of-the-program.md (96%) rename trey-hunner-zip-and-enumerate.md => basics/trey-hunner-zip-and-enumerate.md (97%) rename using-functions.md => basics/using-functions.md (98%) rename variables.md => basics/variables.md (97%) rename what-is-programming.md => basics/what-is-programming.md (97%) rename what-is-true.md => basics/what-is-true.md (98%) create mode 100644 images/iters.png diff --git a/README.md b/README.md index e014c50..b560343 100644 --- a/README.md +++ b/README.md @@ -23,31 +23,53 @@ everything should also work on Python 3.3, 3.2 and all newer Pythons. ## List of contents -1. [What is programming?](what-is-programming.md) -2. [Installing Python](installing-python.md) -3. [Getting started with Python](getting-started.md) -4. [ThinkPython: The way of the program](the-way-of-the-program.md) -5. [Variables, Booleans and None](variables.md) -6. [Using functions](using-functions.md) -7. [If, else and elif](if.md) -8. [Handy stuff with strings](handy-stuff-strings.md) -9. [Lists and tuples](lists-and-tuples.md) -10. [Loops](loops.md) -11. [Trey Hunner: zip and enumerate](trey-hunner-zip-and-enumerate.md) -12. [Dictionaries](dicts.md) -13. [Defining functions](defining-functions.md) -14. [What is true?](what-is-true.md) -15. [Files](files.md) -16. [Exceptions](exceptions.md) -17. [Modules](modules.md) -18. [Classes](classes.md) - -Other things this tutorial comes with: +The tutorial consists of two sections: + +### Basics + +This section will get you started with using Python and you'll be able +to learn more about whatever you want after studying it. + +1. [What is programming?](basics/what-is-programming.md) +2. [Installing Python](basics/installing-python.md) +3. [Getting started with Python](basics/getting-started.md) +4. [ThinkPython: The way of the program](basics/the-way-of-the-program.md) +5. [Variables, Booleans and None](basics/variables.md) +6. [Using functions](basics/using-functions.md) +7. [If, else and elif](basics/if.md) +8. [Handy stuff with strings](basics/handy-stuff-strings.md) +9. [Lists and tuples](basics/lists-and-tuples.md) +10. [Loops](basics/loops.md) +11. [Trey Hunner: zip and enumerate](basics/trey-hunner-zip-and-enumerate.md) +12. [Dictionaries](basics/dicts.md) +13. [Defining functions](basics/defining-functions.md) +14. [What is true?](basics/what-is-true.md) +15. [Files](basics/files.md) +16. [Exceptions](basics/exceptions.md) +17. [Modules](basics/modules.md) +18. [Classes](basics/classes.md) + +### Advanced + +If you want to learn more advanced techniques, you can also read this +section. Most of the techniques explained here are great when you're +working on a large project, and your code would be really repetitive +without these things. + +You can experient with these things freely, but please **don't use these +techniques just because you know how to use them.** Prefer the simple +techniques from the Basics part instead when possible. Simple is better +than complex. + +1. [Iterables and iterators](advanced/iterators.md) + +### Other things this tutorial comes with - **Important:** [getting help](getting-help.md) - [Contact me](contact-me.md) - [Setting up a text editor](editor-setup.md) -- [Answers for the exercises](answers.md) +- Answers for excercises in [basics](basics/answers.md) and + [advanced](advanced/answers.md) sections - [The TODO list](TODO.md) ## How to read this tutorial without an internet connection diff --git a/advanced/answers.md b/advanced/answers.md new file mode 100644 index 0000000..acf2603 --- /dev/null +++ b/advanced/answers.md @@ -0,0 +1,7 @@ + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](../LICENSE). + +[List of contents](../README.md#list-of-contents) diff --git a/advanced/iterators.md b/advanced/iterators.md new file mode 100644 index 0000000..b216214 --- /dev/null +++ b/advanced/iterators.md @@ -0,0 +1,264 @@ +# Iterables and iterators + +So far we have used for loops with many different kinds of things. + +```py +>>> for name in ['theelous3', 'RubyPinch', 'go|dfish']: +... print(name) +... +theelous3 +RubyPinch +go|dfish +>>> for letter in 'abc': +... print(letter) +... +a +b +c +>>> +``` + +For looping over something is one way to **iterate** over it. Some other +things also iterate, for example, `' '.join(['a', 'b', 'c'])` iterates +over the list `['a', 'b', 'c']`. If we can for loop over something, then +that something is **iterable**. For example, strings and lists are +iterable, but integers and floats are not. + +```py +>>> for thing in 123: +... print(thing) +... +Traceback (most recent call last): + File "", line 1, in +TypeError: 'int' object is not iterable +>>> +``` + +## Iterators + +Lists and strings don't change when we iterate over them. + +```py +>>> word = 'hi' +>>> for character in word: +... print(character) +... +h +i +>>> word +'hello' +>>> +``` + +We can also iterate over [files](../basics/files.md), but they change +when we do that. They remember their position, so if we iterate over +them twice we get the content once only. + +```py +>>> with open('test.txt', 'w') as f: +... print("one", file=f) +... print("two", file=f) +... +>>> a = [] +>>> b = [] +>>> with open('test.txt', 'r') as f: +... for line in f: +... a.append(line) +... for line in f: +... b.append(line) +... +>>> a +['one\n', 'two\n'] +>>> b +[] +>>> +``` + +We have also used [enumerate](../basics/trey-hunner-zip-and-enumerate.md) +before, and it actually remembers its position also: + +```py +>>> e = enumerate('hello') +>>> for pair in e: +... print(pair) +... +(0, 'h') +(1, 'e') +(2, 'l') +(3, 'l') +(4, 'o') +>>> for pair in e: +... print(pair) +... +>>> +``` + +Iterators are **iterables that remember their position**. For example, +`open('test.txt', 'r')` and `enumerate('hello')` are iterators. +Iterators can only be used once, so we need to create a new iterator if +we want to do another for loop. + +Here's a picture that hopefully explains this better: + +![Iterables and iterators.](../images/iters.png) + +## Iterating manually + +Iterators have a magic method called `__next__`, and there's a built-in +function called `next()` for calling that. Calling `next()` on an +iterator gets the next value and moves it forward. Like this: + +```py +>>> e = enumerate('abc') +>>> e.__next__() +(0, 'a') +>>> e.__next__() +(1, 'b') +>>> e.__next__() +(2, 'c') +>>> +``` + +There's also a built-in `next()` function that does the same thing: + +```py +>>> e = enumerate('abc') +>>> next(e) +(0, 'a') +>>> next(e) +(1, 'b') +>>> next(e) +(2, 'c') +>>> +``` + +Here `e` remembers its position, and every time we call `next(e)` it +gives us the next element and moves forward. When it has no more values +to give us, calling `next(e)` raises a StopIteration: + +```py +>>> next(e) +Traceback (most recent call last): + File "", line 1, in +StopIteration +>>> +``` + +There is usually not a good way to check if the iterator is at the end, +and it's best to just try to get an value from it and catch +StopIteration. + +This is actually what for looping over an iterator does. For example, +this code... + +```py +for pair in enumerate('hello'): + print(pair) +``` + +...does roughly the same thing as this code: + +```py +e = enumerate('hello') +while True: + try: + pair = next(e) + except StopIteration: + # it's at the end, time to stop + break + # we got a pair + print(pair) +``` + +The for loop version is much simpler to write and I wrote the while loop +version just to explain what the for loop does. + +## Converting to iterators + +Now we know what iterating over an iterator does. But how about +iterating over a list or a string? They are not iterators, so we can't +call `next()` on them: + +```py +>>> next('abc') +Traceback (most recent call last): + File "", line 1, in +TypeError: 'str' object is not an iterator +>>> +``` + +There's a built-in function called `iter()` that converts anything +iterable to an iterator. + +```py +>>> i = iter('abc') +>>> i + +>>> next(i) +'a' +>>> next(i) +'b' +>>> next(i) +'c' +>>> next(i) +Traceback (most recent call last): + File "", line 1, in +StopIteration +>>> +``` + +Calling `iter()` on anything non-iterable gives us an error. + +```py +>>> iter(123) +Traceback (most recent call last): + File "", line 1, in +TypeError: 'int' object is not iterable +>>> +``` + +If we try to convert an iterator to an iterator using `iter()` we just +get back the same iterator. + +```py +>>> e = enumerate('abc') +>>> iter(e) is e +True +>>> +``` + +So code like this... + +```py +for thing in stuff: + print(thing) +``` + +...works roughly like this: + +```py +iterator = iter(stuff) +while True: + try: + thing = next(iterator) + except StopIteration: + break + print(thing) +``` + +## Custom iterables + +Implementing a custom iterator is easy. All we need to do is to define a +`__next__` method that gets the next element, and an `__iter__` method +that returns the iterator itself. For example, here's an iterator that +behaves like `iter([1, 2, 3])`: + + + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](../LICENSE). + +[Previous](../basics/classes.md) | [Next](../README.md) | +[List of contents](../README.md#advanced) diff --git a/answers.md b/basics/answers.md similarity index 99% rename from answers.md rename to basics/answers.md index f152a46..42cf837 100644 --- a/answers.md +++ b/basics/answers.md @@ -436,6 +436,6 @@ isn't exactly like mine but it works just fine it's ok, and you can *** You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](../LICENSE). -[List of contents](README.md#list-of-contents) +[List of contents](../README.md#list-of-contents) diff --git a/basics/classes.md b/basics/classes.md new file mode 100644 index 0000000..003b86d --- /dev/null +++ b/basics/classes.md @@ -0,0 +1,428 @@ +# Defining and using custom classes in Python + +When I was getting started in Python I learned to make classes for +tkinter GUI's before I understood how they work. Everything I did with +classes worked, but I didn't understand how. Hopefully you'll first +learn to understand classes, and then learn to use them. + +This tutorial assumes that you know [how functions work](using-functions.md) +and [how to create your own functions](defining-functions.md). If you +don't I highly recommend learning that first, and then moving to classes. + +## Why should I use custom classes in my projects? + +Python comes with a lot of classes that you are already familiar with. + +```py +>>> str + +>>> int + +>>> list + +>>> dict + +>>> +``` + +Calling these classes as if they were functions makes a new **instance** +of them. For example, `str()` makes a `str` instance, also known as a +string. + +```py +>>> str() +'' +>>> int() +0 +>>> list() +[] +>>> dict() +{} +>>> +``` + +We can also get an instance's class with `type()`: + +```py +>>> type('') + +>>> type(0) + +>>> type([]) + +>>> type({}) + +>>> +``` + +Let's say you make a program that processes data about websites. With a +custom class, you're not limited to `str`, `int` and other classes +Python comes with. Instead you can define a Website class, and make +Websites and process information about websites directly. Defining your +own object types like this is called **object-orientated programming**. + +## First class + +In Python, `pass` does nothing. + +```py +>>> pass +>>> +``` + +Let's use it to define an empty class. + +```py +>>> class Website: +... pass +... +>>> Website + +>>> +``` + +Note that I named the class `Website`, not `website`. This way we know +that it's a class. Built-in classes use lowercase names (like `str` +instead of `Str`) because they are faster to type, but use CapsWord +names for your classes. + +Now we can make a Website instance by calling the class. + +```py +>>> stackoverflow = Website() +>>> stackoverflow +<__main__.Website object at 0x7f36e4c456d8> +>>> type(stackoverflow) + +>>> +``` + +We can say that `stackoverflow` is "a Website instance", "a Website +object" or "a Website". All of these mean the same thing. + +Now we can attach more information about stackoverflow to our Website. + +```py +>>> stackoverflow.url = 'http://stackoverflow.com/' +>>> stackoverflow.founding_year = 2008 +>>> stackoverflow.free_to_use = True +>>> +``` + +We can also access the information easily. + +```py +>>> stackoverflow.url +'http://stackoverflow.com/' +>>> stackoverflow.founding_year +2008 +>>> stackoverflow.free_to_use +True +>>> +``` + +As you can see, our Website is mutable, like lists are, not immutable +like strings are. We can change the website in-place without creating a +new Website. + +`url`, `founding_year` and `free_to_use` are not variables, they are +**attributes**. More specifically, they are **instance attributes**. +The biggest difference is that we need to use a dot for setting and +getting values of attributes, but we don't need that with variables. + +Modules also use instance attributes for accessing their content. For +example, when we do `random.randint`, `random` is a module instance and +`randint` is one of its attributes. + +If we make another Website, does it have the same `url`, `founding_year` +and `free_to_use`? + +```py +>>> effbot = Website() +>>> effbot.url +Traceback (most recent call last): + File "", line 1, in +AttributeError: 'Website' object has no attribute 'url' +>>> +``` + +It doesn't. We'd need to define the attributes for effbot also. + +The attributes are stored in a dictionary called `__dict__`. It's not +recommended to use it for code that needs to be reliable, but it's a +handy way to see which attributes the instance contains. + +```py +>>> stackoverflow.__dict__ +{'free_to_use': True, + 'founding_year': 2008, + 'url': 'http://stackoverflow.com/'} +>>> effbot.__dict__ +{} +>>> +``` + +## Class attributes + +What happens if we set an attribute of the `Website` class to some value +instead of doing that to an instance? + +```py +>>> Website.is_online = True +>>> Website.is_online +True +>>> +``` + +Seems to be working, but what happened to the instances? + +```py +>>> stackoverflow.is_online +True +>>> effbot.is_online +True +>>> +``` + +What was that? Setting `Website.is_online` to a value also set +`stackoverflow.is_online` and `effbot.is_online` to that value! + +Actually, `is_online` is still not in stackoverflow's or effbot's +`__dict__`. stackoverflow and effbot get that attribute directly from +the `Website` class. + +```py +>>> stackoverflow.__dict__ +{'free_to_use': True, + 'founding_year': 2008, + 'url': 'http://stackoverflow.com/'} +>>> effbot.__dict__ +{} +>>> +``` + +`Website.is_online` is `Website`'s class attribute, and in Python you can +access class attributes through instances also, so in this case +`stackoverflow.is_online` points to `Website.is_online`. That can be +confusing, which is why it's not recommended to use class attributes like +this. Use instance attributes instead, e.g. `stackoverflow.is_online = True`. + +## Functions and methods + +Let's define a function that prints information about a website. + +```py +>>> def website_info(website): +... print("URL:", website.url) +... print("Founding year:", website.founding_year) +... print("Free to use:", website.free_to_use) +... +>>> website_info(stackoverflow) +URL: http://stackoverflow.com/ +Founding year: 2008 +Free to use: True +>>> +``` + +Seems to be working. We should be able to get information about all +websites, so maybe we should attach the `website_info` function to the +Website class? + +```py +>>> Website.info = website_info +>>> Website.info(stackoverflow) +URL: http://stackoverflow.com/ +Founding year: 2008 +Free to use: True +>>> +``` + +It's working, but `Website.info(stackoverflow)` is a lot of typing, so +wouldn't `stackoverflow.info()` be much better? + +```py +>>> stackoverflow.info() +URL: http://stackoverflow.com/ +Founding year: 2008 +Free to use: True +>>> +``` + +What the heck happened? We didn't define a `stackoverflow.info`, it just +magically worked! + +`Website.info` is our `website_info` function, so `stackoverflow.info` +should also be the same function. But `Website.info` takes a `website` +argument, which we didn't give it when we called `stackoverflow.info()`! + +But is `stackoverflow.info` the same thing as `Website.info`? + +```py +>>> Website.info + +>>> stackoverflow.info +> +>>> +``` + +It's not. + +Instead, `stackoverflow.info` is a **method**. If we set a function as a +class attribute, the instances will have a method with the same name. +Methods are "links" to the class attribute functions. So +`Website.info(stackoverflow)` does the same thing as `stackoverflow.info()`, +and when `stackoverflow.info()` is called it automatically gets +`stackoverflow` as an argument. + +In other words, **`Class.method(instance)` does the same thing as +`instance.method()`**. This also works with built-in classes, for +example `'hello'.lower()` is same as `str.lower('hello')`. + +## Defining methods when defining the class + +Maybe we could define a method when we make the class instead of adding +it later? + +```py +>>> class Website: +... +... def info(self): # self will be stackoverflow +... print("URL:", self.url) +... print("Founding year:", self.founding_year) +... print("Free to use:", self.free_to_use) +... +>>> stackoverflow = Website() +>>> stackoverflow.url = 'http://stackoverflow.com/' +>>> stackoverflow.founding_year = 2008 +>>> stackoverflow.free_to_use = True +>>> stackoverflow.info() +URL: http://stackoverflow.com/ +Founding year: 2008 +Free to use: True +>>> +``` + +It's working. The `self` argument in `Website.info` was `stackoverflow`. +You could call it something else too such as `me`, `this` or `instance`, +but use `self` instead. Other Python users have gotten used to it, and +the official style guide recommens it also. + +We still need to set `url`, `founding_year` and `free_to_use` manually. +Maybe we could add a method to do that? + +```py +>>> class Website: +... +... def initialize(self, url, founding_year, free_to_use): +... self.url = url +... self.founding_year = founding_year +... self.free_to_use = free_to_use +... +... def info(self): +... print("URL:", self.url) +... print("Founding year:", self.founding_year) +... print("Free to use:", self.free_to_use) +... +>>> stackoverflow = Website() +>>> stackoverflow.initialize('http://stackoverflow.com/', 2008, True) +>>> stackoverflow.info() +URL: http://stackoverflow.com/ +Founding year: 2008 +Free to use: True +>>> +``` + +That works. The attributes we defined in the initialize method are also +available in the info method. We could also access them directly from +`stackoverflow`, for example with `stackoverflow.url`. + +But we still need to call `stackoverflow.initialize`. In Python, there's +a "magic" method that runs when we create a new Website by calling the +Website class. It's called `__init__` and it does nothing by default. If +our `__init__` method takes other arguments than self we can call the +class with arguments and they will be given to `__init__`. Like this: + +```py +>>> class Website: +... +... def __init__(self, url, founding_year, free_to_use): +... self.url = url +... self.founding_year = founding_year +... self.free_to_use = free_to_use +... +... def info(self): +... print("URL:", self.url) +... print("Founding year:", self.founding_year) +... print("Free to use:", self.free_to_use) +... +>>> stackoverflow = Website('http://stackoverflow.com/', 2008, True) +>>> stackoverflow.info() +URL: http://stackoverflow.com/ +Founding year: 2008 +Free to use: True +>>> +``` + +Classes have many other magic methods too, but I'm not going to cover +them in this tutorial. + +## When should I use classes? + +Don't do this: + +```py +class MyProgram: + + def __init__(self): + print("Hello!") + word = input("Enter something: ") + print("You entered " + word + ".") + + +program = MyProgram() +``` + +You should avoid using things like `print` and `input` in the `__init__` +method. The `__init__` method should be simple and it should just set +things up. + +Usually you shouldn't use a class if you're only going to make one +instance of it, and you don't need a class either if you're only going +to have one method. In this example `MyProgram` has only one method and +only one instance. + +Make functions instead, or just write your code without any functions if +it's short enough for that. This program does the same thing and it's +much more readable: + +```py +print("Hello!") +word = input("Enter something: ") +print("You entered " + word + ".") +``` + +## Summary + +- Object-orientated programming is programming with custom data types. + In Python that means using classes and instances. +- Use CapsWords for class names and lowercase_words_with_underscores for + other names. This makes it easy to see which objects are classes and + which objects are instances. +- Calling a class as if it was a function makes a new instance of it. +- `foo.bar = baz` sets `foo`'s attribute `bar` to `baz`. +- Use class attributes for functions and instance attributes for other + things. +- Functions as class attributes can be accessed as instance methods. + They get their instance as the first argument. Call that `self` when + you define the method. +- `__init__` is a special method, and it's ran when a new instance of a + class is created. It does nothing by default. +- Don't use classes if your code is easier to read without them. + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](../LICENSE). + +[Previous](modules.md) | [Next](../advanced/iterators.md) | +[List of contents](../README.md#basics) diff --git a/defining-functions.md b/basics/defining-functions.md similarity index 99% rename from defining-functions.md rename to basics/defining-functions.md index e93e2c3..58e74cb 100644 --- a/defining-functions.md +++ b/basics/defining-functions.md @@ -156,7 +156,7 @@ NameError: name 'd' is not defined Let's draw a diagram of these variables: -![Locals and globals.](images/locals-and-globals.png) +![Locals and globals.](../images/locals-and-globals.png) However, modifying a global variable in-place from a function is easy. @@ -529,7 +529,7 @@ Answers for the first, second and third exercise are *** You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](../LICENSE). [Previous](dicts.md) | [Next](what-is-true.md) | -[List of contents](README.md#list-of-contents) +[List of contents](../README.md#basics) diff --git a/dicts.md b/basics/dicts.md similarity index 99% rename from dicts.md rename to basics/dicts.md index 3e57b0d..aebab9f 100644 --- a/dicts.md +++ b/basics/dicts.md @@ -300,7 +300,7 @@ Running the program might look like this: *** You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](../LICENSE). [Previous](trey-hunner-zip-and-enumerate.md) | [Next](defining-functions.md) | -[List of contents](README.md#list-of-contents) +[List of contents](../README.md#basics) diff --git a/exceptions.md b/basics/exceptions.md similarity index 99% rename from exceptions.md rename to basics/exceptions.md index 259b584..8ff5b71 100644 --- a/exceptions.md +++ b/basics/exceptions.md @@ -459,7 +459,7 @@ except OSError: *** You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](../LICENSE). [Previous](files.md) | [Next](modules.md) | -[List of contents](README.md#list-of-contents) +[List of contents](../README.md#basics) diff --git a/files.md b/basics/files.md similarity index 99% rename from files.md rename to basics/files.md index c76550b..17e3fad 100644 --- a/files.md +++ b/basics/files.md @@ -366,7 +366,7 @@ else: *** You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](../LICENSE). [Previous](what-is-true.md) | [Next](exceptions.md) | -[List of contents](README.md#list-of-contents) +[List of contents](../README.md#basics) diff --git a/getting-started.md b/basics/getting-started.md similarity index 98% rename from getting-started.md rename to basics/getting-started.md index db117bf..21c3b47 100644 --- a/getting-started.md +++ b/basics/getting-started.md @@ -214,7 +214,7 @@ Powers are calculated before `*` and `/`, but after `()`. *** You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](../LICENSE). [Previous](installing-python.md) | [Next](the-way-of-the-program.md) | -[List of contents](README.md#list-of-contents) +[List of contents](../README.md#basics) diff --git a/handy-stuff-strings.md b/basics/handy-stuff-strings.md similarity index 96% rename from handy-stuff-strings.md rename to basics/handy-stuff-strings.md index a97f37d..1a5cc92 100644 --- a/handy-stuff-strings.md +++ b/basics/handy-stuff-strings.md @@ -50,7 +50,7 @@ So the syntax is like `some_string[start:end]`. This picture explains how the slicing works: -![Slicing with non-negative values](images/slicing1.png) +![Slicing with non-negative values](../images/slicing1.png) But what happens if we slice with negative values? @@ -63,7 +63,7 @@ But what happens if we slice with negative values? It turns out that slicing with negative values simply starts counting from the end of the string. -![Slicing with negative values](images/slicing2.png) +![Slicing with negative values](../images/slicing2.png) If we don't specify the beginning it defaults to 0, and if we don't specify the end it defaults to the length of the string. For example, we @@ -124,7 +124,7 @@ first character is `our_string[0]`, the second character is So string indexes work like this: -![Indexing with non-negative values](images/indexing1.png) +![Indexing with non-negative values](../images/indexing1.png) How about negative values? @@ -144,7 +144,7 @@ thing as indexing with 0. Indexing with negative values works like this: -![Indexing with negative values](images/indexing2.png) +![Indexing with negative values](../images/indexing2.png) ## String methods @@ -383,12 +383,12 @@ ValueError: could not convert string to float: 'hello' - Slicing returns a copy of a string with indexes from one index to another index. The indexes work like this: - ![Slicing](images/slicing3.png) + ![Slicing](../images/slicing3.png) - Indexing returns one character of a string. Remember that we don't need a `:` with indexing. The indexes work like this: - ![Indexing](images/indexing3.png) + ![Indexing](../images/indexing3.png) - Python has many string methods. Use [the documentation](https://docs.python.org/3/library/stdtypes.html#string-methods) @@ -430,7 +430,7 @@ The answers are [here](answers.md#handy-stuff-strings). *** You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](../LICENSE). [Previous](if.md) | [Next](lists-and-tuples.md) | -[List of contents](README.md#list-of-contents) +[List of contents](../README.md#basics) diff --git a/if.md b/basics/if.md similarity index 98% rename from if.md rename to basics/if.md index c0e5c13..c428335 100644 --- a/if.md +++ b/basics/if.md @@ -92,7 +92,7 @@ At this point it's easier to put our code into a file and use it there. If you use IDLE, go to File at top left and select New File, or just press Ctrl+N. -![New File in IDLE](images/idle-new.png) +![New File in IDLE](../images/idle-new.png) If you don't use IDLE, please take the time to [set up your editor correctly](editor-setup.md). When you're done your @@ -330,7 +330,7 @@ The answers are [here](answers.md#if-else-and-elif). *** You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](../LICENSE). [Previous](using-functions.md) | [Next](handy-stuff-strings.md) | -[List of contents](README.md#list-of-contents) +[List of contents](../README.md#basics) diff --git a/installing-python.md b/basics/installing-python.md similarity index 97% rename from installing-python.md rename to basics/installing-python.md index 2524604..b256054 100644 --- a/installing-python.md +++ b/basics/installing-python.md @@ -61,7 +61,7 @@ programming tools are not going to help you with this at all. Launch Python's IDLE like any other program. You should see something like this: -![IDLE](images/idle.png) +![IDLE](../images/idle.png) From now on, I'll instead show everything like this, so I don't have to take more screenshots: @@ -110,7 +110,7 @@ Now you should have Python installed, and you should be able run it. *** You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](../LICENSE). [Previous](what-is-programming.md) | [Next](getting-started.md) | -[List of contents](README.md#list-of-contents) +[List of contents](../README.md#basics) diff --git a/lists-and-tuples.md b/basics/lists-and-tuples.md similarity index 97% rename from lists-and-tuples.md rename to basics/lists-and-tuples.md index 627180f..31c6511 100644 --- a/lists-and-tuples.md +++ b/basics/lists-and-tuples.md @@ -36,7 +36,7 @@ names = ['wub_wub', 'theelous3', 'Nitori', 'RubyPinch', 'go|dfish'] Here the `names` variable points to a list, which then points to strings, like this: -![List of names.](images/people.png) +![List of names.](../images/people.png) ## What can we do with lists? @@ -188,7 +188,7 @@ This can be confusing at first, but it's actually easy to explain. The problem with this code example is the `b = a` line. If we draw a picture of the variables it looks like this: -![Same list.](images/samelist.png) +![Same list.](../images/samelist.png) This is when the `is` keyword comes in. It can be used to check if two variables point to the **same** thing. @@ -228,7 +228,7 @@ False If we draw a picture of our variables in this example it looks like this: -![Different lists.](images/differentlist.png) +![Different lists.](../images/differentlist.png) If you're using Python 3.2 or older you need to do `a[:]` instead of `a.copy()`. `a[:]` is a slice of the whole list, just like @@ -348,7 +348,7 @@ The answers are [here](answers.md#lists-and-tuples). *** You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](../LICENSE). [Previous](handy-stuff-strings.md) | [Next](loops.md) | -[List of contents](README.md#list-of-contents) +[List of contents](../README.md#basics) diff --git a/loops.md b/basics/loops.md similarity index 100% rename from loops.md rename to basics/loops.md diff --git a/modules.md b/basics/modules.md similarity index 99% rename from modules.md rename to basics/modules.md index a32158c..8471104 100644 --- a/modules.md +++ b/basics/modules.md @@ -46,7 +46,7 @@ OSX. You'll see a bunch of files and a few directories in the folder that opens: -![My Python's modules.](images/modules.png) +![My Python's modules.](../images/modules.png) All of these `.py` files can be imported like we just imported `random.py`. In random.py, there's a like like `randint = something`, @@ -488,7 +488,7 @@ section at the bottom. *** You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](../LICENSE). [Previous](exceptions.md) | [Next](classes.md) | -[List of contents](README.md#list-of-contents) +[List of contents](../README.md#basics) diff --git a/the-way-of-the-program.md b/basics/the-way-of-the-program.md similarity index 96% rename from the-way-of-the-program.md rename to basics/the-way-of-the-program.md index 1e33f0a..abf9251 100644 --- a/the-way-of-the-program.md +++ b/basics/the-way-of-the-program.md @@ -39,7 +39,7 @@ learned everything. *** You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](../LICENSE). [Previous](getting-started.md) | [Next](variables.md) | -[List of contents](README.md#list-of-contents) +[List of contents](../README.md#basics) diff --git a/trey-hunner-zip-and-enumerate.md b/basics/trey-hunner-zip-and-enumerate.md similarity index 97% rename from trey-hunner-zip-and-enumerate.md rename to basics/trey-hunner-zip-and-enumerate.md index 263f3c4..210f165 100644 --- a/trey-hunner-zip-and-enumerate.md +++ b/basics/trey-hunner-zip-and-enumerate.md @@ -136,7 +136,7 @@ The answers are [here](answers.md). *** You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](../LICENSE). [Previous](loops.md) | [Next](dicts.md) | -[List of contents](README.md#list-of-contents) +[List of contents](../README.md#basics) diff --git a/using-functions.md b/basics/using-functions.md similarity index 98% rename from using-functions.md rename to basics/using-functions.md index 336c6f4..8b93d2e 100644 --- a/using-functions.md +++ b/basics/using-functions.md @@ -229,7 +229,7 @@ should work normally. *** You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](../LICENSE). [Previous](variables.md) | [Next](if.md) | -[List of contents](README.md#list-of-contents) +[List of contents](../README.md#basics) diff --git a/variables.md b/basics/variables.md similarity index 97% rename from variables.md rename to basics/variables.md index 28105e4..544cb62 100644 --- a/variables.md +++ b/basics/variables.md @@ -16,7 +16,7 @@ Variables are easy to understand. They simply **point to values**. Let's draw a diagram of these variables. -![Variable diagram](images/variables1.png) +![Variable diagram](../images/variables1.png) We can also change the value of a variable after setting it. @@ -29,7 +29,7 @@ We can also change the value of a variable after setting it. So now our diagram looks like this: -![Variable diagram](images/variables2.png) +![Variable diagram](../images/variables2.png) Setting a variable to another variable gets the value of the other variable and sets the first variable to point to that value. @@ -273,7 +273,7 @@ what you are doing. We'll learn more about it later. *** You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](../LICENSE). [Previous](the-way-of-the-program.md) | [Next](using-functions.md) | -[List of contents](README.md#list-of-contents) +[List of contents](../README.md#basics) diff --git a/what-is-programming.md b/basics/what-is-programming.md similarity index 97% rename from what-is-programming.md rename to basics/what-is-programming.md index ccdaa89..42b00cb 100644 --- a/what-is-programming.md +++ b/basics/what-is-programming.md @@ -25,7 +25,7 @@ which keys you need to press to produce these characters because your keyboard is probably different than mine. But the keyboard can tell what you need to press. For example, my Finnish keyboard has a key like this: -![A key on my keyboard.](images/key.png) +![A key on my keyboard.](../images/key.png) Here's what the characters on this key mean: @@ -127,7 +127,7 @@ rest of this tutorial only if you don't understand the code. *** You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](../LICENSE). -[Previous](README.md) | [Next](installing-python.md) | -[List of contents](README.md#list-of-contents) +[Previous](../README.md) | [Next](installing-python.md) | +[List of contents](../README.md#basics) diff --git a/what-is-true.md b/basics/what-is-true.md similarity index 98% rename from what-is-true.md rename to basics/what-is-true.md index 1dd2402..fdff814 100644 --- a/what-is-true.md +++ b/basics/what-is-true.md @@ -214,7 +214,7 @@ if value is None: ... # best *** You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](../LICENSE). [Previous](defining-functions.md) | [Next](files.md) | -[List of contents](README.md#list-of-contents) +[List of contents](../README.md#basics) diff --git a/classes.md b/classes.md index 5f2b682..fb526a8 100644 --- a/classes.md +++ b/classes.md @@ -1,428 +1 @@ -# Defining and using custom classes in Python - -When I was getting started in Python I learned to make classes for -tkinter GUI's before I understood how they work. Everything I did with -classes worked, but I didn't understand how. Hopefully you'll first -learn to understand classes, and then learn to use them. - -This tutorial assumes that you know [how functions work](using-functions.md) -and [how to create your own functions](defining-functions.md). If you -don't I highly recommend learning that first, and then moving to classes. - -## Why should I use custom classes in my projects? - -Python comes with a lot of classes that you are already familiar with. - -```py ->>> str - ->>> int - ->>> list - ->>> dict - ->>> -``` - -Calling these classes as if they were functions makes a new **instance** -of them. For example, `str()` makes a `str` instance, also known as a -string. - -```py ->>> str() -'' ->>> int() -0 ->>> list() -[] ->>> dict() -{} ->>> -``` - -We can also get an instance's class with `type()`: - -```py ->>> type('') - ->>> type(0) - ->>> type([]) - ->>> type({}) - ->>> -``` - -Let's say you make a program that processes data about websites. With a -custom class, you're not limited to `str`, `int` and other classes -Python comes with. Instead you can define a Website class, and make -Websites and process information about websites directly. Defining your -own object types like this is called **object-orientated programming**. - -## First class - -In Python, `pass` does nothing. - -```py ->>> pass ->>> -``` - -Let's use it to define an empty class. - -```py ->>> class Website: -... pass -... ->>> Website - ->>> -``` - -Note that I named the class `Website`, not `website`. This way we know -that it's a class. Built-in classes use lowercase names (like `str` -instead of `Str`) because they are faster to type, but use CapsWord -names for your classes. - -Now we can make a Website instance by calling the class. - -```py ->>> stackoverflow = Website() ->>> stackoverflow -<__main__.Website object at 0x7f36e4c456d8> ->>> type(stackoverflow) - ->>> -``` - -We can say that `stackoverflow` is "a Website instance", "a Website -object" or "a Website". All of these mean the same thing. - -Now we can attach more information about stackoverflow to our Website. - -```py ->>> stackoverflow.url = 'http://stackoverflow.com/' ->>> stackoverflow.founding_year = 2008 ->>> stackoverflow.free_to_use = True ->>> -``` - -We can also access the information easily. - -```py ->>> stackoverflow.url -'http://stackoverflow.com/' ->>> stackoverflow.founding_year -2008 ->>> stackoverflow.free_to_use -True ->>> -``` - -As you can see, our Website is mutable, like lists are, not immutable -like strings are. We can change the website in-place without creating a -new Website. - -`url`, `founding_year` and `free_to_use` are not variables, they are -**attributes**. More specifically, they are **instance attributes**. -The biggest difference is that we need to use a dot for setting and -getting values of attributes, but we don't need that with variables. - -Modules also use instance attributes for accessing their content. For -example, when we do `random.randint`, `random` is a module instance and -`randint` is one of its attributes. - -If we make another Website, does it have the same `url`, `founding_year` -and `free_to_use`? - -```py ->>> effbot = Website() ->>> effbot.url -Traceback (most recent call last): - File "", line 1, in -AttributeError: 'Website' object has no attribute 'url' ->>> -``` - -It doesn't. We'd need to define the attributes for effbot also. - -The attributes are stored in a dictionary called `__dict__`. It's not -recommended to use it for code that needs to be reliable, but it's a -handy way to see which attributes the instance contains. - -```py ->>> stackoverflow.__dict__ -{'free_to_use': True, - 'founding_year': 2008, - 'url': 'http://stackoverflow.com/'} ->>> effbot.__dict__ -{} ->>> -``` - -## Class attributes - -What happens if we set an attribute of the `Website` class to some value -instead of doing that to an instance? - -```py ->>> Website.is_online = True ->>> Website.is_online -True ->>> -``` - -Seems to be working, but what happened to the instances? - -```py ->>> stackoverflow.is_online -True ->>> effbot.is_online -True ->>> -``` - -What was that? Setting `Website.is_online` to a value also set -`stackoverflow.is_online` and `effbot.is_online` to that value! - -Actually, `is_online` is still not in stackoverflow's or effbot's -`__dict__`. stackoverflow and effbot get that attribute directly from -the `Website` class. - -```py ->>> stackoverflow.__dict__ -{'free_to_use': True, - 'founding_year': 2008, - 'url': 'http://stackoverflow.com/'} ->>> effbot.__dict__ -{} ->>> -``` - -`Website.is_online` is `Website`'s class attribute, and in Python you can -access class attributes through instances also, so in this case -`stackoverflow.is_online` points to `Website.is_online`. That can be -confusing, which is why it's not recommended to use class attributes like -this. Use instance attributes instead, e.g. `stackoverflow.is_online = True`. - -## Functions and methods - -Let's define a function that prints information about a website. - -```py ->>> def website_info(website): -... print("URL:", website.url) -... print("Founding year:", website.founding_year) -... print("Free to use:", website.free_to_use) -... ->>> website_info(stackoverflow) -URL: http://stackoverflow.com/ -Founding year: 2008 -Free to use: True ->>> -``` - -Seems to be working. We should be able to get information about all -websites, so maybe we should attach the `website_info` function to the -Website class? - -```py ->>> Website.info = website_info ->>> Website.info(stackoverflow) -URL: http://stackoverflow.com/ -Founding year: 2008 -Free to use: True ->>> -``` - -It's working, but `Website.info(stackoverflow)` is a lot of typing, so -wouldn't `stackoverflow.info()` be much better? - -```py ->>> stackoverflow.info() -URL: http://stackoverflow.com/ -Founding year: 2008 -Free to use: True ->>> -``` - -What the heck happened? We didn't define a `stackoverflow.info`, it just -magically worked! - -`Website.info` is our `website_info` function, so `stackoverflow.info` -should also be the same function. But `Website.info` takes a `website` -argument, which we didn't give it when we called `stackoverflow.info()`! - -But is `stackoverflow.info` the same thing as `Website.info`? - -```py ->>> Website.info - ->>> stackoverflow.info -> ->>> -``` - -It's not. - -Instead, `stackoverflow.info` is a **method**. If we set a function as a -class attribute, the instances will have a method with the same name. -Methods are "links" to the class attribute functions. So -`Website.info(stackoverflow)` does the same thing as `stackoverflow.info()`, -and when `stackoverflow.info()` is called it automatically gets -`stackoverflow` as an argument. - -In other words, **`Class.method(instance)` does the same thing as -`instance.method()`**. This also works with built-in classes, for -example `'hello'.lower()` is same as `str.lower('hello')`. - -## Defining methods when defining the class - -Maybe we could define a method when we make the class instead of adding -it later? - -```py ->>> class Website: -... -... def info(self): # self will be stackoverflow -... print("URL:", self.url) -... print("Founding year:", self.founding_year) -... print("Free to use:", self.free_to_use) -... ->>> stackoverflow = Website() ->>> stackoverflow.url = 'http://stackoverflow.com/' ->>> stackoverflow.founding_year = 2008 ->>> stackoverflow.free_to_use = True ->>> stackoverflow.info() -URL: http://stackoverflow.com/ -Founding year: 2008 -Free to use: True ->>> -``` - -It's working. The `self` argument in `Website.info` was `stackoverflow`. -You could call it something else too such as `me`, `this` or `instance`, -but use `self` instead. Other Python users have gotten used to it, and -the official style guide recommens it also. - -We still need to set `url`, `founding_year` and `free_to_use` manually. -Maybe we could add a method to do that? - -```py ->>> class Website: -... -... def initialize(self, url, founding_year, free_to_use): -... self.url = url -... self.founding_year = founding_year -... self.free_to_use = free_to_use -... -... def info(self): -... print("URL:", self.url) -... print("Founding year:", self.founding_year) -... print("Free to use:", self.free_to_use) -... ->>> stackoverflow = Website() ->>> stackoverflow.initialize('http://stackoverflow.com/', 2008, True) ->>> stackoverflow.info() -URL: http://stackoverflow.com/ -Founding year: 2008 -Free to use: True ->>> -``` - -That works. The attributes we defined in the initialize method are also -available in the info method. We could also access them directly from -`stackoverflow`, for example with `stackoverflow.url`. - -But we still need to call `stackoverflow.initialize`. In Python, there's -a "magic" method that runs when we create a new Website by calling the -Website class. It's called `__init__` and it does nothing by default. If -our `__init__` method takes other arguments than self we can call the -class with arguments and they will be given to `__init__`. Like this: - -```py ->>> class Website: -... -... def __init__(self, url, founding_year, free_to_use): -... self.url = url -... self.founding_year = founding_year -... self.free_to_use = free_to_use -... -... def info(self): -... print("URL:", self.url) -... print("Founding year:", self.founding_year) -... print("Free to use:", self.free_to_use) -... ->>> stackoverflow = Website('http://stackoverflow.com/', 2008, True) ->>> stackoverflow.info() -URL: http://stackoverflow.com/ -Founding year: 2008 -Free to use: True ->>> -``` - -Classes have many other magic methods too, but I'm not going to cover -them in this tutorial. - -## When should I use classes? - -Don't do this: - -```py -class MyProgram: - - def __init__(self): - print("Hello!") - word = input("Enter something: ") - print("You entered " + word + ".") - - -program = MyProgram() -``` - -You should avoid using things like `print` and `input` in the `__init__` -method. The `__init__` method should be simple and it should just set -things up. - -Usually you shouldn't use a class if you're only going to make one -instance of it, and you don't need a class either if you're only going -to have one method. In this example `MyProgram` has only one method and -only one instance. - -Make functions instead, or just write your code without any functions if -it's short enough for that. This program does the same thing and it's -much more readable: - -```py -print("Hello!") -word = input("Enter something: ") -print("You entered " + word + ".") -``` - -## Summary - -- Object-orientated programming is programming with custom data types. - In Python that means using classes and instances. -- Use CapsWords for class names and lowercase_words_with_underscores for - other names. This makes it easy to see which objects are classes and - which objects are instances. -- Calling a class as if it was a function makes a new instance of it. -- `foo.bar = baz` sets `foo`'s attribute `bar` to `baz`. -- Use class attributes for functions and instance attributes for other - things. -- Functions as class attributes can be accessed as instance methods. - They get their instance as the first argument. Call that `self` when - you define the method. -- `__init__` is a special method, and it's ran when a new instance of a - class is created. It does nothing by default. -- Don't use classes if your code is easier to read without them. - -*** - -You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). - -[Previous](modules.md) | [Next](README.md) | -[List of contents](README.md#list-of-contents) +This file has been moved [here](basics/files.md). diff --git a/images/drawings.odg b/images/drawings.odg index 12799b3fcdc3e65e7c8a9103f2c385c2b0382ac4..fadd0324a4a073e6ce7f06ff0445db2f84b9c273 100644 GIT binary patch delta 16300 zcmb_@Wmq0flP;EEA-KD{6WrYi?(Tu$ZiBl!!6CQ?LI@t*9TEuc?(S#uzUPzOv**w5 z&UHQgRLgYtRCiU~RXuYM1bLGM`S!gWGz8Mo zZs`apGRlO6L}ktd)QndI{lREvD7dgTKWOquNxqA_5p=QyzoTFXq)%EYSuVRgxljC> zuo;rJ>GSO2y3*#`a?-N1P@;5mv`{0es2D4!jF8s_9JNFAmMHtuaHw7HzuND% z@wGp$#_}D8wl`0p8$~{RjHCD%=xjpQR=XQ9U znOyD9&If7CX_u)K;d9w7dhTR%*)MO>;}fubK%uSGZ}_18jgqoNtxP3kdJBbmc`dZ& zTnvDMg8B?s!{n_TiC3pP6Q)XVEvu)eR;|aw$LBp+ATj5(J(A(R;(OB>1Y1~G$j;7Q zb~f`+p;_ZZnf_AUa(sV(P-C9?r2Ea**z|`#WLD0nPtAT$_w)6Zu&-VvC>a^8a@mzP zi-<8v4X+m&njNRd(TjbT@b&0{p*-d5czFgMR#%Mx0I;*Mvf4f08gBf!!0CRxSgqf3 zJokm1p8nwZ;Y13u#qFqTG!H*I2G8sI&~vRT1RD0OL#bRE6DleycO1Lr7>Df~3pu&z zbg{z6g>U9N`C?&$PnXlFjJj@zbCU}e7vD_$5m*=OBr|SiDYDEVcO3EVFgP&QkcCiFJ zbslHy@$o3MKw2|ULeUj5Xye>&|(CggSbL16&gXPe1+i;#<=&iJLZjP>^Qy|{Nk~YnQ70xQN=F!qFny&hQOdQO$m?vhlZ?T; zYR6ZUQevu6x0(6jT3k|6QdD%NI}sLFbD}=;jL5}HMYVkbyzn_fq||9u4?+Wux8ULu zLc%`#*MuPxR~vQ+egn2MEZ5i9=afz-o187tepPCtEBU`I&C^o>`HR}w?)%_&yvSoc zMNy4)Q)@fV7B~@sPQA|myTL}v=4w0BehT89-C{b`p%QSPlze~`;b7eGVO9rR!z>YrSKJz;ph*|WugG7S1HL;jV^W`W?ScXf)X++A1?D3 zvHokVQFwc0O!SnQ!9B)B)lMt;eYG6Ll+t-SYW7ts|O9fR~NU>ELG-PMKznffnL|k+tnb zH?mNrcD=>z>00_I56AHk;m{)h%GV&NprGH*Shg9r)kL0ZiDG{G=BC+HPhZ~<1xZ{1 zG!zsCWUuo3qu&jKVRedG++XZh+P|3gTbP@-opvEEHM<`CZm1Y2nmZBJ?xH{I*LPoX zeSY*j_Ve)I?i2Jpr^pS0MP3HgS^zYx4!9Aj_4%U1Iz!(Q?q^x-TmqCh4~21ppID5c zRQQ}W2U6%Yd0qE0Fff9Pc)VVoZVcPJX1|k7*X2>rz7^2_?qK|Mf0ZRVIY7q9_;K;O zBTX^bWq&N8nDMV_eO2GNvvu@ebaqUJ?fhl~DEzPr@Tm*+mgBniZ4yXt;o&{c2dP<0 z_zf|`)_hz74KujxiGW<6Hjgv1-(96j{AWEs0-&v12e2@mE?Z98*~?9Y*hFy;J6jm^ zo0Adq;9MpOB%-81EiAx<3*SB9?dX5r@2nYzU zEsR4JdPE7*cbv`>2?E)K1{?mxk-D?96OAd|dx$93$z7y^#j^tg z1HzV6Z5WzuUap)Iu;n`69Y_O(Jz*%-D>RDqTS9V4E`Cpvc{)8Y-Be;%i>&Lh-}o19 zGOKFeNfc06^D4Z(ZC!8gU+&etUoCb(FI!Zj6(^Y$mlBvNZI)ngv(n z`EDHOE7%6knkj@~XpBI~{`xM7TFGKufvX3XgBKni-oEuL)Kih3dWZlKZNg(TowX2D zL~%mT-?J#864M*wg~a7EGcsf@(b3Vx$U{~>fIGp>?He~sb^K9Jk2usPQ2Qntfg1Fy zm7af(E*dQ;?hyniUS;Xm#;1{j-_37d+aWOmqV*P|W|6P?MzaXz2NWHl>y}#F?a{b* zj)&CV=)klq7hgKMb=>QKm4d?;;Rakc zhSw?O3br|JNU|-qxHAhuVu$F8T7p_FHauJyp{%UTj0h7m#Dvp+c_g$)E7$Mdx=<2` z`Hr9KdyPwXve@LjmdRyMi3CBLc(GskKB=RWb$<~ z$pg(bmw-TUAkwAmlGm0WKTc#QYOv`D8@28xx zYE~z?AK%Si3T4*i)gyQo$XrBiM`WajmMiIQJKZEYAS2;(ZXTR%^gmqgi4BV?`GMfz z_Kgo|bztfxGH?t135V50+{%hZ3N_}^5#bKn7smJboE?XBie(Lz*kcvay1tg<Mp7Jx`?5qd3hbD7Bi!SH>tFZuWHZIep@!Sk_|vve}ET*%EV zt{zF_VmO(!sc2x6k9;trD$Ben^jtDxUu@)klaskuD5zvEoaIrSc;s~_-jMKQ`%zh< zLTvL1ACCmUuyqeaCvNeP%hXZQdwuqCGQQ-4f`;yJR?X>Mqm%IsPpCakGxYO3ocr={ z+!ELR1D4olqFNtl0rk3Cx!T~CUtg3p&yd^2_GpZ!JSO#4lk?8cDqUhno{(42;V-;IYtrIMvwL z*dqK}k6p5oveSM1nDOYRcZS|a?`#c0Ej%(Z^7->;jVeILxK=FeZNlrQ`-g{<<+jWo zWo6|7iJvembP2dbAgmLy%%TZG8dI4F+x+48CVKD;;R@W@%7uNi6`Dod86~@i=F;E( z?6U&3dF*(;V%8q`3_j7r^-)sc77q-qvhOPU zvfsl|bo3jB;4>EJv0O0_FZBh(Q8F?jsRAKkVWyZE?`sU&K-0NB8p&Z6(k5Xx<|w1x z3Hj0!TB+6eVYZydd7D7U?{V4tq=;MZ?U&)(vyH({{;m|8g<9k8j+dvCSBO~gq0%7- z@`{Q?EJpsCnlNXMvWmp#?{ms?6B9)Vk&uvjN5Uaqa#K=VLGue516ebY1lreffRYlh zSCm$IpBOZ9KMy`mUkv`8>;)<=E-o>#kj+nqZ$(w8T;!@wX2kfV=F~7T51gewYpNY@JLREgd8g!0GCcpLv@MrJ&Nx@r3!mmiEIkp zjML5=vo{(giiF9es)6uyX^gs|t0UUQ42~4x5t5OGYzl)`$?InOpJ;)opH&i3Sc$Kf zK)j(M+ny9Rgh?sz96(w6of~<-?F(z&+Ja(8_Tz|AP zM_MC;c84wjvL=nQ{%}3FUZeSAa%L}_%O1MZbO(>p=A3vRWEQ2uDf zotUVK&8M&mhze}higkd^IK%T;M=yD0K#%rKdj)dbud$ig6)Yc3VzO}XNhX(4+|9Da zO%8WHanO~Kso37fGx_&t-ZnyDdYo?#g3i#CjP+b?{+>emyCd`NR$QCc>{;0= zJ7i>3A6Tt7a}6VJ>av+vumr{z|BI}g;VI%b>O;JyPqtB(mCa6QF3X`6NPj?#|CIECu|Ny zJ?mszBXvCAAFxfcG7+)jaTvej;>xge@LMHe-pHyoAR?PQq{8{7Ty_ACaU%b?wd zhoArPxCJ;d_+k>$(ea|HB#@Grcn-RAu&}Ukp#KOW0#HtJxE;wffQwNsP`ECHp3mYy zGYUK%7@C@xY>#G!S(yby5D9oO7`B7^@gDR{6y)S|TimK1Eu|;zB|z^Fgq+dc^!RAB zoW3YDMjb~Bjlas(<(^L~XxybPMcQhB)z{RMAp8aIRz3-PgUevnC zAO`QVEPYLDVtl-CU}a_H^V5US?P`$s^`VFu z+fh)qRVnBSNlb=$9)nX~iN<>unQ8ReQtn+Z7BFDb2!c_+leU}4Qe<`@;SD+!HMMGo z(Bo5$C%mYuvX3Y&SI zpG9cTay&<&h23TMJ=z98_ZjGJ%_UM~=ua#&MWPDK z$Q;eba|E_ty39VN(yA6u@y~7L5C$@w(sVp5oot>7 z@Wyw<>`xUTD#rGJ0fkHs>%>-jeTHo8i;Af9xSF+=4Pu_A1MUG31a(?iSPVI@9v<4J zwXl;RpKj88aM%*0k%aX?b-Z#)ZPjFynw%(-OVewrpB96y!ag52nrCOd13meQ1%Nqab?AI)e zk&W>QA}&SVTF^{@?w3-Slzwa{hs^3%vVihRyDfQ!7ct6usH}qmFTK`W(Po z%kvPl1kCVe1R9~gHb>tuCFY(EQs)K-2cw*(wykz=sr#nmF&wyn#y3(Ls(Zke)sAEP z2DrIFMnW1L7$6zTvtP^;fyVts7T?1O7vclDLCIh+#bK@Mk1T^0%|%^0+KL6IIOS-g zKaN?e*63%YcCrbGkw-JR;{1@Z(_S8TgfNnGauhAonOL*ez@X7hPwl4gN$9$n@K4Vt zo+kRZ1b@4?v@&8VVNp`VF6Mir(}1Rl(9=Gsd@5ZS88oC@4}@6IFbU-x(jKl3q|~>+ zO(EgF`+)K632ue()k!I0U(i@d6QH2ff)e=07x2D0_B)>KHZd{zzPAhC>vOl2rlvjS z^?bK8IWLARAP!(wxPZX|Qqnchx1#X4S#l>QBa6P^cG;c4HuULC0VbeDjRyw@K|%Mr z-z&K}SphZ&P_OfldD%dq>fA21kyS@QABTj?29uI>7m9>`iVH?#dX!^u*(LFccXxNQ z`P>V<^}=uLwvW16?te&Y#d^^WJ1Af52AW)fZb&(mXy@znc%5+jA5J(#Ndtig1ETlU zm$GI(&LDuL*959ROZ1z_28IFP>^Um0Pg+T zOqps>VBlP_i&uvSVa6z3RZ4#nq)`8mX`KNdT0iL;%LFlxGnRQmO2*25Tc&5rsog`D zK<}M1`WIrZMz5>=+c;4B#eq`q=yN@9sb=-*y3P9rh;){e;b8sx>ee}pkIi-KTDJCv zJdU5uq$j*ew{a-hz4^Nq9Dc44V33+qR7 z2b&ZOchqe_56EsesP=$h!9jXVlk(B8`5dP!g@`R|^A+PYv49uGc$f`C5^1^n6{!f# zEP$7!x~5U3(@U)*LZg)&DL2~PJ>4_m06N3yG_;(Y*GG*joakx_mN4D90^Zj--p8F$ zS$yuXNRjcCD7Y4>Pg&uOKSt01`3$yKl*T*-@t}v01kFc#(~E6rR#JA!L2NmewYKPE zm=d4T{~8IeM^n3QiTP#=PjC|Um!8H7kZ|Vp60#6eVFju@_tf3Qhj5;<``g#H41$u& zDWWtu(dkB@jkPFKRgEwg&)TPF3>+b*5@YYrmW+fs4|R{iVzesZ4n~j>TQ63~Ol!CTg()Qe5&*E`-}*e-3|%g z#u+=bXfP=8vU$Q8J9g9U(kBb2Rx>H9lvp!B7Mmg&<1zudKX)+pO-V_Ix_6hmA)gFdS37(ci`?fLNA2rXhUK##Sn9SO~^J zwrl8mAE(TVfPhW|kF^k7c8h^S#q(s5Inc-^`hg*uO;D5`4PWkm*-}taGJ=tmDISU^ zEr#sG#5(KgVgU3eoYz;LuelKPznHx0jc6oMVtPkPYP>s<-{y5CDtyvaBErMdIjqrcvU5IyP~X(l6pS4IY_wkiWsE#czs1cs6ND7Ty@Y&j zZwR@Br4GRy_aZjWWtkI&ZLbOXpjtxj7*BO~(K@GnV9f+8H}{#9TM z8I0fjsxcIDJH(0fJne+-?(PP?mRN3ScE88lr-z#)c0+3U^wa%{n#6^jTtG1pw8pA1 zfmC6j12hD{fueid6M+u8%p3<0$y}`k$kUk$^755nD9*{L?r~xFa&LNmx?G*!7LaL6 zlY}&dfq`kgS@xc50b`ppCxX8BwV<#af;#qSzCH|wW;F;|5QoQ!B6nQiX3?gmEmWBY z`)Tl06V%E@LA+ju||IOeXcHESZ@OXbKP zy7D>v87gK!LVv>EIZ=Y)97doKQQu2~xR@3U_=vz{^STyfloYF=^7Qx$d7P4r^4AGV z`j}9=4LLapcwLfEUS-k*xS4^mLaA5+$0n)qIoe@_#HvkVboB0$N4erwr$7v8s_twG zu`(;g%|IrJ1`xaC@Ve5a1-lsd-I=R>H|`Fl*Q^Esne2A;5I?dCFckgRN?yJN%iKqt z{>NVScp8!V2v+BO67V=(1tI3kbz?`7!TQ}O4h8Cf@W$;=zQFEtd4-J-#8 zb1Ayfra%0A>J*GfjSK1BC*+rddY82ni>ro#ded*HoCe0mj(=8VK6bLQ zA`O|wji4qw@gTk4Hl&>4AB#D^I(_MJhetqg z_z26lw{+WN`6_+zm<>LMi~?30LX}O#%&!Ttxy6ZiU@*DUsa;(E?4Y}qc#B{x5pqUkFqf*KYct`X=tpWF%_^vpNeMd?ptkIv_n%GdSl@rL@>#W+~? zf}6RYqn@8XmO%%gDWp}uFfqRAEk?%8OMW*toG)nB8aD7NrJp(VL!>IP3#HW+HiOpt zYXh+-iR2=UVw_7-Qlgxo<8{z|R*tB!oy`|r2hv&sRivfEdzd`!MHQJEH=yi8OeSCj z)U_*k85k=0Uls!H)?6YGz4j7Wia>u1lU{@2tfECCvK-m-X)lVoJ)Uc8xQaVCE4Tf1 z){Vx*`Bd82$Ve-praL``I`K?sa&q!=n|E4~WTP1krm~Lm)fcNtGCFbX?4=XRo>3TB z0Jep|naMXv_iM#j7Kk|L+oNdXZatiRqV8E@D&()v&WQJH!e8Qx-uOHoW6lCr!z$uF z+62`q975VnjHQAY_~ppGq5n6W^xwz=|C5{l7w!e#+x|CZ{l75q{~Z_jA93%0J`X)G z3i#h)K;H|b$7SAoHX5oV2=J1TP!z8gH46Ou+#3!K?yqz2q$&(*0GiYYlH66OxZUEBtv2>6LaPQCVK)l%k`PMQ0yheg2%^R34apvQe>`7E|NR(~-mlC))hv<8@WD<|0^{$ss$Je<3WvNZ zmcfKdHanS4hA|Bm`f@hD@B)L|uWxr@@?pjfLcUem9=m2~{cu@`$qCyoFKI|TYBQ(0 zR@g6GYi+usG2OKI1Iqo(n?w#a>!*9T$Ol9{MahgEtTI>`m@+85th9DcDS2@ zOc^U7jJoW8`dQCA^>~^>3-V!XH#d+c9c88<47tsgo5V7=gVHi;7-*O_(xKK~y}2@` zV|}YsqleokgVj~;uXz;K*zR)$`(6$fE{Rh8%@8C61PcrV#D7}gN-QE^!D*cv#doDf zTKSN~-w%J*v{R}DsN{h}xkS@}Up2NQ-TpE-`1T(ektyb;c&ap7 z9!l4a52m`YYvLWn2Yp4_)DW=axo0HI{0wn)B+um5Y_1ylcr!_1HT3pjh$spM@==`N zI^w6{Ybxzmu%RUBFdTXSdKiy*&0y7hL5cg(bX#BZ2vpA|W`^KX`XUva(6qH# zO7n}va%&yh_7=i@_5n%^lrNnnsK;aTMXod%`FCYB2a_!qv_&V9Qs_SsqmY>Chg_|n zJo!F(!{rWP#xU~ETojFRJ`Za8lboofTOD?m|I+ZaZMn94u&8$fL_h15+HDx)zn*Q0 zasCNJN((bbCPa;H4fH((ey(gK!)cdNBDG!~ca{v7dOLv&gLQ?tkZH0toEaW2+Th{r zs>vICN4d+H6(N3Daj>v3vTM2-DS`HwQcNRjaZ4qBAyIH=zNNv3+p!DT5gv}1HnFr5 zXnbza>umP@%PcJx&|SNAoH6(+Dd2snq;Y=nMGv`{U6lRf7g&4MNK%rJawEtQD0>#! zYyHQ!g3#$D;`V2dknIxWsTT|F5+?yXhY*}n!8=lDZH=e_QnX{M#V6P7F2S9fy^Gpj zYJy^S48>v4%P>8?@dw;672^e5=-P)>u&=kF?>?{TeJcq_0K(u6z8F{%)4a5+C1_T|;}Vv|5PHT+Vnkd3|T zXD7SoT*@>XGVOOm%STSETozia0xYd=$bYV=50n zfEwDyns|U41K^z*?Zjk!7KYy2YcxGe6i;^<69m$b;BA;-6ir3h0b%B{u8K`#%`Vs0Hi zK1Ks1-3J&fZ{u`oiUp4zA%yI_IbFo)eieq6q|)ndZU7pVfw7w(Y%f34D?Pn|8*E`Ui0I4?wR946GulRVxh5{{|Pey!3@3gRDvKxyY%Q@@n$eP ziV>+bESa`K=~m`fyn*_Bn+az^qqv)sH$%3Y&GD`MlGkyvGhvUlPYl-v# zFtb)gGlKr44ig;E|BygqxVm6h+PR}bQM?ax zOZbKX1V!)a9eXm9#KH;kPnaKUO0;F*6*1#%PZKRumO}1O#!a6v^@qhAk5JT2Y)@}S zPa;vMd`L%!|Kx}j!|k+J*iV4!#Z~j{Hey8j=HefcGqWA*VPht80l1c7wG437Ly0GT33P?a;wOGR=7_Y^zm$Hlp9wIjt9 zw12{!yLalC>KjCDIgPR12PbXx1tZtFz~7SS#m36zR*^wg85uO_Is1%q-8<*IY$)^u zr|U*eg>)P8YS1)+z76*m*sna6A1gjbi!_oAX**Z-2hFNUP~R9culOS;)1QR8l<)Czb!Q?}4+>qxU`TcGgeh;d*u@as#)$ z0(cm|Rv*n(A@L*4!M!w%;Q)0xT+ld!S|nB_*2w9 zJ+-LwbGMv690M*hSNUA6N4mcHH4T^T1%PW9k}0?H$Ykvoj=s>J4H(lN>A&y_m8(o+ zvFayJi$Atmq1*W7o)70kdV~~SF-x>3@fP#Pv9UNngx+yDn(QKbzo!idYo{-Y!_drm zB|r?21jQnT7sez`b=Ek__WRYSKmBEfS_9vx>b!=4IHUXzW(XR5u`cP6fDo{WtC043 z&M{o`NST$yThQ|f$k{WXjFgOU89TNraaNX87B@Y#cpU`&ow+`9B|h#BxT7qCiavnC z5yKtY{ZA74?5K0C>M z-fuCgcl@|xOgI;oz0r@(cM6zZdIyhP7lv_MIr_joh5d+J-0f_1Q@li3K<->Vi?bAn zZz4{#DUvFX)$-cHVCteAI1m zY5OSGW!s@+eB_jBRvZ=CUTvs$`OforEYeW!_ML^HvdQ_%FXj>_%;S9n#GN8h^RVOg z>yO1vgBL+01NrOdQ$snxk68?JK{+AxrWN}7jxf8!U~#t=ww8~cZbWBBniw3(O4<1Y z=sQT*cdck^!s3+FR`nb_;{;W59rr8kes`08u5LeR>%9dpdaerR&Xp1(+^RJ*UnMtw zp3rI6ZJ}9h)tiNPG^UBUHNoP2Ac=Mkyz zijCrakf*Y*zIe`Lo#j)WvDI?&=-9KU?G@iE3%Kg7ah~XMb#@w- z@PCGM5xiF1U8fk9Q}oVj4=@`>#Pc!#NsPWC?5a||L8x2(n2OLr1xM8ahiRr}9P|Y3 z$hou=(h}!o7)Eam)GpVq3~*?ibIF#*qFNH5e*#FL&4{P)s z8lR&*!z7Q*BP%Q~y(5yPSDjr}hIdDuSrQ>PJ{9e@%jI%fkR#9Z5MP6yu%Xoh9C`48M0y2n#FCPzZA{~8bu&Pr$@wJ8nt>-weRbXA4M)F2 zftIv1;D@g2fhG4vPo&`TG zlPgx|r1#qUrPcZ)7G4Mm={c_QOoCk0Er*BvVt|w1(|}X`Sj8;lw-+L#+NLtIdL!!Y z1-U--#hId(?Y5-QtlaQ{DZ%jF4JNueb4xD9x<{>C4J zPBRy)FB$aaDXZp0azf5UM`%R%OyY~;t5B!DakjZlXRWKEE(aTNmUg>9tUgY?fU_!c zClIp#QwnZ;@y$9NB-;EvrLF-#*N_HH*}`2x?BJW6i*1j2(e2^Ri!6_1s`ZW10K5|7 z>Cf=X8>igQ;JI1u<8=fxX<&R-P#Ubj!KD1&a@+<#ymp$O0B>@^f54R5+k^brmVj z0E4~;fjSzlg+SE>P4)@(3l!NVNf(N|ID|L{xu`k}`&rEoaWN{jQuIWYe0U2o7%DtA z@NI2Ic=Q5GR~w@OQuKlnSHO2#-lN)Z;74mRWK~uGa!S^_ik{##F>=+fE{an8uhO@S zszYpK);`fi%9`k^%+<{(o>c)_K6nxKz3bD>eU`PiE@-)(>(ecLmUXw=6oN^;Tqk(M ztf~VLOw#`1PN5EyJfbNQ-#??2Gjxp|u&~yRpr|0dNysAAbB%p(iHe6Ink`}F66-KV z#z7nGjFmsn)AcGS{zKX9E9lybR2}mcw3OEa*OVW2;It#H{TaF~&)xxm1*biW4td`P z-mBK=$`Pc{5BIk+O?&w|_8cRxrt_eX6s)x1ibbIDK26kO$OpaU;K(Hmk*CrY=oC8EQXG!Cc%Q-72*ZGCW1K<1j)~_E`mN11pnv%QeG#d%!QpSc)ZA% zZ7CXVvflcty<|G-KmbU12T!yMTUYfBR;EZ&=r#PzuDiaRaE#xJxIdmg8kukm6Fh33 zWLhxX`$D;Hn9@meW2l+kIu^(eF52l3@0uCp{qfrP-ZcyAPsno1$__9JxK_&a?@Bw! z;Vmv6>V-F%tWL^KVn)?C(^hn@7k>Tr8YEe32iFT{hNz-yyaAquE~wA1RuH0UEoFEm zrK7ghv5ar({9+`ekNEN^_i&7N@X4+I)Eq7Toz<25JL{YOr}ie%{u^=G)MwLReP}as z=>pSk%Pg^9kNJxQogU#hNRvusx)0=|{YpuE0E7EGx^2xolhU|yU6n82p)kc#?7sq^ zO=xo>^XWe6uzf)r?|J{uk1>O#hn-bz)<%v>{!IRjI_z>Hyd*4BaAf{*w3S>49oYI9 z^MhQ7(TlEp?|b+0hN5)@)sN}cQSrf187oWgF!LnriX;S?*aETcs%_w{5>9gACdlMO zVXP7;NujROlmOoUpO#L#~xA@E@KKP6%Rto>)Z z=82?T9EbC7ok_c?R>zrerxc07|3wlC4_1WyBLV(JHdm*oYL%|*MTCDf@QJ{&&0A=BO*Ui>@huD&JFLE=EFF{X}O_UXPsh_;O`^yiS&q%Rz;1ggY{*MOLU}PSH51= z>?t%Oi1J7l@W48w0pE)tGDmKg;Fs-d3YVG>az_nIL|t?uX>o^LC!Km0<_E;B2?Ga6 z8E&Dk%;m|GgEM_$=9uB-@+sb2C3xtn;(>%Z+0@TONg8;u6#0gCpHXGI-ctrw9a#m} zv8XA0v|-1~XLzG-y8Js*k_J(1$$9d3_+LcO%mmVz zz-yeZ{Z-)*M_<78xCXR98S`cUWlSJ77;b_HlrgI~P{zLYgEIEp6qK=}FW^48#?i>P zlWZR4Bb_#B5NwV245s)&iCBv)WcHS9BYXtp4thqvbPL%9$Q_Ao)~T@pkUOmjp7GIq zY;kq&Pi_HX;6H4f84=}1;z;3PCv}F@AUEX&4d8t$yRFP-H^@Ik^qALT&2O*E z$Zg|N-k(3;wiSR)Dq9+a{xoSG&TruRi`Xe?;QEVzu5Mrl2_u~)gEb`J^`NE1Pz4_< z_@dEU64m46$PfoQ;Zg?4QU-qnl*RA_I%v$P@RV2YA*bX;oXjEh{Ef8Zjd1rv_!IwR zthD2;aGUKs&4!`AL#)-2tkpp<2{$uHHjjAeEK5VQpfIZ@av8KPw&7a^_%!KsEH-H* zYci`sAodJr)1M>s3S`uQ)E5iBk$^k;vgV6w(roKt7+lMQzl;re66Jp* z!LeTp7ViOGsIAOU%h-4zNl=q5GPUb z0k6Pb-Y|eoKj(>@_IQ@ETe4I&A(Q?1Dv9>b~8hjYB(JA>`!{4?AYG)lf z3M9lC3|sgM5CLf@b1EGkF|3oLC^S9;1xe6YT_R+xtt9>Q!+qCECbd;`KyB5SNsC3N zp$6t7VsOj$UEqtZ4YBx2d-L8&=g+{3Sm@M8ZeeEYK{Q812GyC9SGyS@;jWPjoRb(U zW>f4FveP10i_K5!!|0}=0Z%)DzU4BR1X<#+nZUEqA=Qvei(&qV{TyS~2*`{F=Z zW`U@(^Z5SzV+hr@n$411Pfc~lQ|rO;_a!_^sW8b}k-g^NDn(h$Hco|PgZH0?i}Vp8 zlh7YEU49icCC0^N->g;>_aEPXf692CspT>bXVaZdz9u;dOM4N2sRpLA7q7X4ztE}C zzR34YsSE66(+<{ql43rVWHM2=u^KzbeIAz?q_+XO$@LJ^S}M%w+carKI@)8DQh57TQ~ z7qGt?4FejR!4`a-Jox#5PnEohe%gPMkw@}_%|lz@1N+wEpQ)KA9iI$JmyV| zWw<0(84y^|Q__ap3|E{&zGhvxLP zQp1pcsxul>>f{(OD)0Nino+nLld5wK8)<3Gpp4`AN&JhMA#(3))hc}s>@*2y83GD+ z`VyK7I(-XQ^Uu^$fJXDDXLS_|m2_cS*W1-RKou{dM*|#`F*_3XpP9mZ z4qHf@wuy?S1r7>YE#EQQoLxAn%{I`PY1ZoHS7RbUzC&`Y1a=#>7pn>a@;s|mtG4i6 zoAXtpw@zc&ZV_IODVunq)>_3Uz|~qo?37x}RcrgxOYy8{7y7AmOtw#+Jis^X8YE1K zBt4OhRO@i`lZ75mFe8wNb}8Ju&(br|d*u|{=VFJ%%zqfqJ8-XmdL>YZ5^w_H)fc;K zwNkLijoXm=8aVHbI;cb{{Sak5u~)W}@G%MR)nxhLoqlZ4P~&vjP6*0H`R}^V1@0Q? zVFSi#nX-MX3c#`$eBx-dPF=HT#eBS@aZaH zwwOcSkK3$_>@BWR!>aa@z#D(f9pcc36x6?>ye%c$(*uz0qjLk>HeQ&LjQEuKV}#Z( zr@0C*-P51%7fjGB-=xmdTKtO1WmQ+$@Og9znL^6P)hy1##1-ooI&@HW_v`*+Yy6CMXT`)3v zO2m4%^n;%LAX$mhjzvH(Bq5KQ5@rZ%OOxpB2OS-?zQ`<-k-*WuhHO}$fvd(6Xy(rQ zB{#{ff!1ne(e!rb`BESv**L41zjV7@OVsi5lLqL2qcQI!2_-OlH4iX9j z0t4b72jTx7x_3*+0by!y=VET>@?Z5{J2BF- z2YzZE%>@C0@E>l>7Dzf3#QFOnP(<*c+9i_|d5PZsJ-L5;ou2fk=2|kzL5Sw>mRUl0 zP)t%u?Ysp4x#gc4GpVF!A*z41{3Mk`$48K4B#iKPnVm2m)Pxkc2Wc7p!G?c~^zU;6 zx%F=swRF;oFyp@_Y9B0<<{|N;DPlr WGz0{=o&N3m3HB>O{hI!-9{&%=6evvq delta 13010 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 diff --git a/images/iters.png b/images/iters.png new file mode 100644 index 0000000000000000000000000000000000000000..f138729f681d91911afdfaf4d07dfcfb3a8351ab GIT binary patch literal 16776 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 literal 0 HcmV?d00001 diff --git a/make-html.py b/make-html.py index e8de6bb..3c4bc2f 100755 --- a/make-html.py +++ b/make-html.py @@ -90,9 +90,18 @@ def askyesno(question, default=True): return default +def mkdir_open(filename, mode): + """Like built-in open(), but make a directories as needed.""" + directory = os.path.dirname(filename) + os.makedirs(directory, exist_ok=True) + return open(filename, mode) + + def fix_filename(filename): - if filename == 'README.md': - return 'index.html' + if filename == 'README.md' or filename.endswith('/README.md'): + # 'README.md' -> 'index.html' + # 'some/place/README.md' -> 'some/place/index.html' + return filename[:-9] + 'index.html' if filename.endswith('.md'): return filename[:-3] + '.html' return filename @@ -207,7 +216,6 @@ def main(): shutil.rmtree('html') else: os.remove('html') - os.mkdir('html') print("Getting a list of files to generate...") with open('README.md', 'r') as f: @@ -217,12 +225,12 @@ def main(): for markdownfile in filelist: htmlfile = os.path.join('html', fix_filename(markdownfile)) print(' ', markdownfile, '->', htmlfile) - with open(markdownfile, 'r') as f: + with open(markdownfile.replace('/', os.sep), 'r') as f: markdown = f.read() renderer = TutorialRenderer() body = mistune.markdown(markdown, renderer=renderer) html = HTML_TEMPLATE.format(title=renderer.title, body=body) - with open(htmlfile, 'w') as f: + with mkdir_open(htmlfile.replace('/', os.sep), 'w') as f: print(html, file=f) print("Copying other files...") diff --git a/update-ends.py b/update-ends.py index 8481f8e..3ea1d10 100755 --- a/update-ends.py +++ b/update-ends.py @@ -28,22 +28,26 @@ """Update ends of markdown files.""" +import os import re +# Markdown and HTML links use / as a path separator so there's no need +# for os.path, but we do need to replace it with os.sep when opening the +# files. BASIC_END = """\ You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE]({toplevel}LICENSE). -[List of contents](README.md#list-of-contents) +[List of contents]({toplevel}README.md#list-of-contents) """ CHAPTER_END = """\ You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](../LICENSE). [Previous]({prev}) | [Next]({next}) | -[List of contents](README.md#list-of-contents) +[List of contents](../README.md#{sectionname}) """ @@ -54,7 +58,8 @@ def get_filenames(): """Get chapter files and other files from README. - Return a two-tuple of chapter files and other files. + Return a two-tuple of chapter file names and other file names as + iterables of strings. """ chapters = [] with open('README.md', 'r') as f: @@ -65,13 +70,15 @@ def get_filenames(): # now let's read the content list for line in f: line = line.strip() + if line.startswith('## '): + # end of content list + break if line: # not empty line match = re.search(CHAPTER_LINK_REGEX, line) - if match is None: - # end of content list - break - chapters.append(match.group(1)) + if match is not None: + # it's a link to a chapter + chapters.append(match.group(1)) # now let's find other links to markdown files with open('README.md', 'r') as f: @@ -82,7 +89,12 @@ def get_filenames(): def update_end(filename, end): - """Add *** and end to a file if it doesn't contain them already.""" + """Add *** and end to a file if it doesn't have them already. + + filename should be relative to the toplevel using / as a path + separator. + """ + filename = filename end = '\n***\n\n' + end with open(filename, 'r') as f: content = f.read() @@ -108,19 +120,44 @@ def main(): # make previous of first file and next of last file to just bring # back to README - prevs = ['README.md'] + chapter_files[:-1] - nexts = chapter_files[1:] + ['README.md'] + prevs = ['./README.md'] + chapter_files[:-1] + nexts = chapter_files[1:] + ['./README.md'] print("Chapter files:") - for filename, prev, next in zip(chapter_files, prevs, nexts): - end = CHAPTER_END.format(prev=prev, next=next) - update_end(filename, end) + for prevpath, thispath, nextpath in zip(prevs, chapter_files, nexts): + # the paths are like 'section/file.md' + prevsection, prevfile = prevpath.split('/') + thissection, thisfile = thispath.split('/') + nextsection, nextfile = nextpath.split('/') + + # make previous and next relative to this file + if prevsection == thissection: + # they are in the same place + prev = prevfile + elif prevsection == '.': + # something from the top level + prev = '../' + prevfile + else: + # it comes from some other place + prev = '../' + prevpath + + if nextsection == thissection: + next_ = nextfile + elif nextsection == '.': + next_ = '../' + nextfile + else: + next_ = '../' + nextpath + + end = CHAPTER_END.format(prev=prev, next=next_, + sectionname=thissection) + update_end(thispath, end) print() print("Other files:") for filename in other_files: - update_end(filename, BASIC_END) + end = BASIC_END.format(toplevel='../' * filename.count('/')) + update_end(filename, end) if __name__ == '__main__': From 0a37e109670f295b9f0015488767c7af904a7b14 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 15 Jan 2017 12:16:56 +0200 Subject: [PATCH 162/329] oh crap --- classes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes.md b/classes.md index fb526a8..8d1778a 100644 --- a/classes.md +++ b/classes.md @@ -1 +1 @@ -This file has been moved [here](basics/files.md). +This file has been moved [here](basics/classes.md). From d5f97987aec61b0c8131e67f761d9edd5f9c8d30 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 15 Jan 2017 22:08:44 +0200 Subject: [PATCH 163/329] magic methods --- README.md | 3 +- advanced/magicmethods.md | 258 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 260 insertions(+), 1 deletion(-) create mode 100644 advanced/magicmethods.md diff --git a/README.md b/README.md index b560343..ac50666 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,8 @@ techniques just because you know how to use them.** Prefer the simple techniques from the Basics part instead when possible. Simple is better than complex. -1. [Iterables and iterators](advanced/iterators.md) +1. [Magic methods](advanced/magicmethods.md) +2. [Iterables and iterators](advanced/iterators.md) ### Other things this tutorial comes with diff --git a/advanced/magicmethods.md b/advanced/magicmethods.md new file mode 100644 index 0000000..3f58fec --- /dev/null +++ b/advanced/magicmethods.md @@ -0,0 +1,258 @@ +# Magic methods + +In [the class tutorial](../basics/classes.md) we learned to define a +class like this: + +```py +class Website: + + def __init__(self, url, founding_year, free_to_use): + self.url = url + self.founding_year = founding_year + self.free_to_use = free_to_use + + def info(self): + print("URL:", self.url) + print("Founding year:", self.founding_year) + print("Free to use:", self.free_to_use) +``` + +After doing that we can create a new Website object like +`Website('https://github.com/', 2008, True)`. Python first creates the +Website object, and then calls `__init__` with the arguments we passed +to Website to set it up. Methods that have a name `__like_this__` and a +special meaning are called **magic methods** or **special methods**. + +Most magic methods define what the object has or what it can do, like +"does it have a length" or "can we for loop over it". There are other +magic methods that do other things also, like `__init__`. + +Some magic methods have a default implementation that is used if the +class doesn't define anything else. For example, if we don't define an +`__init__` then our class will take no arguments and it won't have any +attributes by default. We'll learn more about this when we'll talk about +[inheritance](classes2.md). + +**TODO:** write a `classes2.md`. + +## Custom len() + +Let's get started by defining an object that has a length: + +```py +>>> class Thing: +... def __len__(self): +... return 5 +... +>>> t = Thing() +>>> t +<__main__.Thing object at 0x7f05e4597198> +>>> t.__len__() +5 +>>> len(t) +5 +>>> +``` + +This is what most magic methods are like. So far we have learned to use +`len()` with lists, strings and other built-in types, but now we can +call `len()` on our own Thing object. Many things can be fully +customized with magic methods. + +Note that magic methods like `__len__` need to be defined in the class, +just attaching an attribute called `__len__` doesn't work: + +```py +>>> class EmptyThing: +... pass +... +>>> def length(): +... return 5 +... +>>> e = EmptyThing() +>>> e.__len__ = length +>>> e.__len__() +5 +>>> len(e) +Traceback (most recent call last): + File "", line 1, in +TypeError: object of type 'EmptyThing' has no len() +>>> +``` + +You don't really need to worry about why Python works like this, but +it's explained +[here](https://docs.python.org/3/reference/datamodel.html#special-method-lookup) +if you want to know more about it. + +## Custom str() and repr() + +You have probably noticed that typing something to the interactive `>>>` +prompt is not quite the same thing as printing it. For example, +strings behave like this: + +```py +>>> 'hello' +'hello' +>>> print('hello') +hello +>>> +``` + +Typing `'hello'` without a print displayed it with quotes, but printing +it displayed it without the quotes. Both of these can be customized with +magic methods. `print('hello')` does the same thing as +`print(str('hello'))`, and typing `'hello'` without a print does roughly +the same thing as `print(repr('hello'))`. + +```py +>>> repr('hello') # a string that literally contains 'hello' +"'hello'" +>>> str('hello') # same as just 'hello' +'hello' +>>> print(repr('hello')) +'hello' +>>> print(str('hello')) +hello +>>> +``` + +As usual, `repr(thing)` does the same thing as `thing.__repr__()` and +`str(thing)` does the same thing as `thing.__str__()`. Usually you don't +need to and you shouldn't define `__str__` yourself because `__str__` +defaults to `__repr__`. + +Here's an example that hopefully clarifies things: + +```py +>>> class Website: +... def __repr__(self): +... return '' +... +>>> w = Website() +>>> w.__repr__() +'' +>>> repr(w) +'' +>>> w.__str__() +'' +>>> str(w) +'' +>>> w + +>>> print(w) + +>>> +``` + +The `repr()` values can also be easily used with string formatting. +Instead of this... + +```py +>>> message = 'hello' +>>> print("message is " + repr(message)) +message is 'hello' +>>> +``` + +...you can do this: + +```py +>>> print("message is %r" % message) +message is 'hello' +>>> print("message is {!r}".format(message)) +message is 'hello' +>>> +``` + +The `__repr__` method can return any string, but usually you should +follow one of these styles: + +1. A piece of code that describes how another, similar object can be + created. + + ```py + >>> class Website: + ... def __init__(self, name, founding_year): + ... self.name = name + ... self.founding_year = founding_year + ... def __repr__(self): + ... return 'Website(name=%r, founding_year=%r)' % ( + ... self.name, self.founding_year) + ... + >>> github = Website('GitHub', 2008) + >>> github + Website(name='GitHub', founding_year=2008) + >>> + ``` + + This is useful for simple data containers like this Website class. + +2. A description of the object wrapped between `<` and `>`. + + ```py + >>> class Website: + ... def __init__(self, name, founding_year): + ... self.name = name + ... self.founding_year = founding_year + ... def __repr__(self): + ... return '' % ( + ... self.name, self.founding_year) + ... + >>> github = Website('GitHub', 2008) + >>> github + + >>> + ``` + + This style is good when you want to tell more about the object than + you can by showing the `__init__` arguments. Python's built-in + things also use this style more: + + ```py + >>> import random + >>> random + + >>> + ``` + +## Other magic methods + +There are many more magic methods, and I don't see any reason to list +them all here. [The official +documentation](https://docs.python.org/3/reference/datamodel.html) has +more information about magic methods if you need it. You can also just +keep reading this tutorial, and we'll learn more about some of the most +useful and commonly used magic methods. + +## When should we use magic methods? + +Usually magic methods are overkill. `website.has_user(user)` or +`user in website.userlist` is way better than something weird like +`user @ website`. People expect `website.has_user(user)` to check if +the user has registered on the website, but nobody knows what +`user @ website` does. Explicit is better than implicit, and simple is +better than complex. + +On the other hand, adding informative `__repr__` methods can make a +module much nicer to use. I recommend using `__repr__` methods in things +that other people will import and use in their projects, but `__repr__` +methods aren't worth it for simple scripts that aren't meant to be +imported. + +## Summary + +- Magic methods define what instances of a class can do and how, like + "does it have a length" or "what does it look like when I print it". +- Python uses magic methods to implement many things internally. +- Defining custom `__repr__` methods is often a good idea when making + things that other people will import and use in their own projects. + Other than that, magic methods are usually not worth it. + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](../LICENSE). + +[Previous](../basics/classes.md) | [Next](iterators.md) | +[List of contents](../README.md#advanced) From de519297ee21167757a71239f3ba90fff9b01959 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 15 Jan 2017 22:08:56 +0200 Subject: [PATCH 164/329] typo --- make-html.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make-html.py b/make-html.py index 3c4bc2f..af75a6b 100755 --- a/make-html.py +++ b/make-html.py @@ -91,7 +91,7 @@ def askyesno(question, default=True): def mkdir_open(filename, mode): - """Like built-in open(), but make a directories as needed.""" + """Like built-in open(), but make a directory as needed.""" directory = os.path.dirname(filename) os.makedirs(directory, exist_ok=True) return open(filename, mode) From 00dc3a6822e995c62abe66db995e20feca1be8a1 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 16 Jan 2017 19:16:22 +0200 Subject: [PATCH 165/329] working on magicmethods.md --- advanced/magicmethods.md | 82 ++++++++++++++++++++-------------------- 1 file changed, 42 insertions(+), 40 deletions(-) diff --git a/advanced/magicmethods.md b/advanced/magicmethods.md index 3f58fec..7821fd0 100644 --- a/advanced/magicmethods.md +++ b/advanced/magicmethods.md @@ -35,7 +35,7 @@ attributes by default. We'll learn more about this when we'll talk about **TODO:** write a `classes2.md`. -## Custom len() +## Custom length Let's get started by defining an object that has a length: @@ -85,7 +85,7 @@ it's explained [here](https://docs.python.org/3/reference/datamodel.html#special-method-lookup) if you want to know more about it. -## Custom str() and repr() +## str() and repr() You have probably noticed that typing something to the interactive `>>>` prompt is not quite the same thing as printing it. For example, @@ -117,6 +117,22 @@ hello >>> ``` +The `repr()` values can also be easily used with string formatting. +Instead of this... + +```py +print("message is " + repr(message)) +``` + +...you can use one of these instead: + +```py +print("message is %r" % (message,)) +print("message is {!r}".format(message)) +``` + +## Customizing str() and repr() values + As usual, `repr(thing)` does the same thing as `thing.__repr__()` and `str(thing)` does the same thing as `thing.__str__()`. Usually you don't need to and you shouldn't define `__str__` yourself because `__str__` @@ -145,26 +161,6 @@ Here's an example that hopefully clarifies things: >>> ``` -The `repr()` values can also be easily used with string formatting. -Instead of this... - -```py ->>> message = 'hello' ->>> print("message is " + repr(message)) -message is 'hello' ->>> -``` - -...you can do this: - -```py ->>> print("message is %r" % message) -message is 'hello' ->>> print("message is {!r}".format(message)) -message is 'hello' ->>> -``` - The `__repr__` method can return any string, but usually you should follow one of these styles: @@ -219,34 +215,40 @@ follow one of these styles: ## Other magic methods There are many more magic methods, and I don't see any reason to list -them all here. [The official +them all here. [The official documentation](https://docs.python.org/3/reference/datamodel.html) has -more information about magic methods if you need it. You can also just -keep reading this tutorial, and we'll learn more about some of the most -useful and commonly used magic methods. +more information about magic methods if you need it. We'll go through +using the most important magic methods in the rest of this tutorial, so +if you just keep reading you'll learn more about them. ## When should we use magic methods? -Usually magic methods are overkill. `website.has_user(user)` or -`user in website.userlist` is way better than something weird like -`user @ website`. People expect `website.has_user(user)` to check if -the user has registered on the website, but nobody knows what -`user @ website` does. Explicit is better than implicit, and simple is -better than complex. - -On the other hand, adding informative `__repr__` methods can make a -module much nicer to use. I recommend using `__repr__` methods in things -that other people will import and use in their projects, but `__repr__` -methods aren't worth it for simple scripts that aren't meant to be -imported. +There's nothing wrong with using `__init__` everywhere, but other than +that, magic methods are usually not needed. `website.has_user(user)` and +`user in website.userlist` are way better than something weird that we +could do with magic methods like `user @ website`. People expect +`website.has_user(user)` check if a user has registered on the website, +but nobody can guess what `user @ website` does. Explicit is better than +implicit, and simple is better than complex. + +On the other hand, using magic methods when needed can turn something +good into something great. Especially the `__repr__` method is useful +because people can get a good idea of what an object is by just looking +at it on the `>>>` prompt or printing it. I recommend using `__repr__` +methods in things that other people will import and use in their +projects, but `__repr__` methods aren't worth it for simple scripts that +are not meant to be imported. ## Summary - Magic methods define what instances of a class can do and how, like "does it have a length" or "what does it look like when I print it". -- Python uses magic methods to implement many things internally. +- Python uses magic methods to implement many things internally, and we + can customize everything by implementing the magic methods + ourselves. - Defining custom `__repr__` methods is often a good idea when making - things that other people will import and use in their own projects. + things that other people will import and use in their own projects, + and the `__init__` method is very useful for many things. Other than that, magic methods are usually not worth it. *** From 04d459dfd5da9ed047b374559bc6ab5843942f0f Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 16 Jan 2017 19:16:42 +0200 Subject: [PATCH 166/329] new common.py --- common.py | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++ make-html.py | 41 ++++----------------- update-ends.py | 16 ++++----- 3 files changed, 109 insertions(+), 44 deletions(-) create mode 100644 common.py diff --git a/common.py b/common.py new file mode 100644 index 0000000..6ebff2d --- /dev/null +++ b/common.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python3 + +# This is free and unencumbered software released into the public +# domain. + +# Anyone is free to copy, modify, publish, use, compile, sell, or +# distribute this software, either in source code form or as a +# compiled binary, for any purpose, commercial or non-commercial, and +# by any means. + +# In jurisdictions that recognize copyright laws, the author or +# authors of this software dedicate any and all copyright interest in +# the software to the public domain. We make this dedication for the +# benefit of the public at large and to the detriment of our heirs +# and successors. We intend this dedication to be an overt act of +# relinquishment in perpetuity of all present and future rights to +# this software under copyright law. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +# CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +# For more information, please refer to + +"""Things that other scripts import and use.""" + +import itertools +import re +import sys + + +_LINK_REGEX = r'\[(.*?)\]\((.*?)\)' + + +def find_links(file): + """Find all markdown links in a file object. + + Yield (lineno, regexmatch) tuples. + """ + # don't yield same link twice + seen = set() + + # we need to loop over the file two lines at a time to support + # multi-line (actually two-line) links, so this is kind of a mess + firsts, seconds = itertools.tee(file) + next(seconds) # first line is never second line + + # we want 1-based indexing instead of 0-based and one-line links get + # caught from linepair[1], so we need to start at two + for lineno, linepair in enumerate(zip(firsts, seconds), start=2): + lines = linepair[0] + linepair[1] + for match in re.finditer(_LINK_REGEX, lines, flags=re.DOTALL): + if match.group(0) not in seen: + seen.add(match.group(0)) + yield match, lineno + + +def get_markdown_files(): + """Yield the names of all markdown files in this tutorial. + + This assumes that the README contains links to everything. + """ + yield 'README.md' + with open('README.md', 'r') as f: + for match, lineno in find_links(f): + target = match.group(2) + # Currently the README doesn't link to itself, but I don't + # want to break things if it will in the future. + if target.endswith('.md') and target != 'README.md': + yield target + + +def askyesno(question, default=True): + """Ask a yes/no question and return True or False. + + The default answer is yes if default is True and no if default is + False. + """ + if default: + # yes by default + question += ' [Y/n] ' + else: + # no by default + question += ' [y/N] ' + while True: + result = input(question).upper().strip() + if result == 'Y': + return True + if result == 'N': + return False + if not result: + return default diff --git a/make-html.py b/make-html.py index af75a6b..40307cd 100755 --- a/make-html.py +++ b/make-html.py @@ -29,12 +29,13 @@ """Create HTML files of the tutorial.""" import os -import re import shutil import string import sys import webbrowser +import common + try: import mistune except ImportError: @@ -52,8 +53,6 @@ pygments = None -LINK_REGEX = r'\[.*\]\((.*\.md)\)' - HTML_TEMPLATE = """\ @@ -68,30 +67,8 @@ """ -def askyesno(question, default=True): - """Ask a yes/no question and return True or False. - - The default answer is yes if default is True and no if default is - False. - """ - if default: - # yes by default - question += ' [Y/n] ' - else: - # no by default - question += ' [y/N] ' - while True: - result = input(question).upper().strip() - if result == 'Y': - return True - if result == 'N': - return False - if not result: - return default - - def mkdir_open(filename, mode): - """Like built-in open(), but make a directory as needed.""" + """Like open(), but make directories as needed.""" directory = os.path.dirname(filename) os.makedirs(directory, exist_ok=True) return open(filename, mode) @@ -204,12 +181,12 @@ def main(): print() print("You can also continue without Pygments, but the code examples") print("will not be in color.") - if not askyesno("Continue without pygments?"): + if not common.askyesno("Continue without pygments?"): print("Interrupt.") return if os.path.exists('html'): - if not askyesno("html exists. Do you want to remove it?"): + if not common.askyesno("html exists. Do you want to remove it?"): print("Interrupt.") return if os.path.isdir('html'): @@ -217,12 +194,8 @@ def main(): else: os.remove('html') - print("Getting a list of files to generate...") - with open('README.md', 'r') as f: - filelist = re.findall(LINK_REGEX, f.read()) + ['README.md'] - print("Generating HTML files...") - for markdownfile in filelist: + for markdownfile in common.get_markdown_files(): htmlfile = os.path.join('html', fix_filename(markdownfile)) print(' ', markdownfile, '->', htmlfile) with open(markdownfile.replace('/', os.sep), 'r') as f: @@ -241,7 +214,7 @@ def main(): print("Ready! The files are in the html directory.") print("Go to html and double-click index.html to read the tutorial.") print() - if askyesno("Do you want to view the tutorial now?", default=False): + if common.askyesno("Do you want to view the tutorial now?", default=False): print("Opening the tutorial...") webbrowser.open(os.path.join('html', 'index.html')) diff --git a/update-ends.py b/update-ends.py index 3ea1d10..40e054f 100755 --- a/update-ends.py +++ b/update-ends.py @@ -28,12 +28,13 @@ """Update ends of markdown files.""" -import os import re +import common + # Markdown and HTML links use / as a path separator so there's no need -# for os.path, but we do need to replace it with os.sep when opening the +# for os.path, but we do need to replace / with os.sep when opening the # files. BASIC_END = """\ You may use this tutorial freely at your own risk. See @@ -51,8 +52,7 @@ """ -LINK_REGEX = r'\[.*\]\((.*\.md)\)' -CHAPTER_LINK_REGEX = r'^\d+\. ' + LINK_REGEX + r'$' +CHAPTER_LINK_REGEX = r'^\d+\. \[.*\]\((.*\.md)\)$' def get_filenames(): @@ -80,11 +80,7 @@ def get_filenames(): # it's a link to a chapter chapters.append(match.group(1)) - # now let's find other links to markdown files - with open('README.md', 'r') as f: - all_files = re.findall(LINK_REGEX, f.read()) - others = set(all_files) - set(chapters) - + others = set(common.get_markdown_files()) - set(chapters) return chapters, others @@ -156,7 +152,7 @@ def main(): print("Other files:") for filename in other_files: - end = BASIC_END.format(toplevel='../' * filename.count('/')) + end = BASIC_END.format(toplevel='../'*filename.count('/')) update_end(filename, end) From 650e5a9083c0c65605ae5703901ac7a7a4f22b97 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 16 Jan 2017 19:16:52 +0200 Subject: [PATCH 167/329] link checker --- linkcheck.py | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100755 linkcheck.py diff --git a/linkcheck.py b/linkcheck.py new file mode 100755 index 0000000..8d3322f --- /dev/null +++ b/linkcheck.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python3 + +# This is free and unencumbered software released into the public +# domain. + +# Anyone is free to copy, modify, publish, use, compile, sell, or +# distribute this software, either in source code form or as a +# compiled binary, for any purpose, commercial or non-commercial, and +# by any means. + +# In jurisdictions that recognize copyright laws, the author or +# authors of this software dedicate any and all copyright interest in +# the software to the public domain. We make this dedication for the +# benefit of the public at large and to the detriment of our heirs +# and successors. We intend this dedication to be an overt act of +# relinquishment in perpetuity of all present and future rights to +# this software under copyright law. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +# CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +# For more information, please refer to + +"""Check for broken links.""" + +# The markdown files use posix-style paths, so we need posixpath for +# processing them. See help('posixpath'). +import collections +import os +import posixpath +import re + +import common + + +Link = collections.namedtuple('Link', 'text target markdown lineno file') + + +def check_link(link): + """Check if the link's target exists. + + Return an error message string or "ok". + """ + if link.target.startswith(('http://', 'https://')): + # Checking for http(s) links can be added later, but currently + # it's not needed. + return "ok" + path = posixpath.join(posixpath.dirname(link.file), link.target) + realpath = path.replace('/', os.sep) + if not os.path.exists(realpath): + return "doesn't exist" + if path.endswith('/'): + # A directory. + if os.path.isdir(realpath): + return "ok" + return "not a directory" + else: + # A file. + if os.path.isfile(realpath): + return "ok" + return "not a file" + + +def main(): + print("Searching links...") + links = [] + for path in common.get_markdown_files(): + with open(path.replace('/', os.sep), 'r') as f: + for match, lineno in common.find_links(f): + target = match.group(2) + if '#' in target: + where = target.index('#') + target = target[:where] + link = Link( + text=match.group(1), + target=target, + markdown=match.group(0), + lineno=lineno, + file=path) + links.append(link) + + print("Checking for broken links...") + broken = [] # [(Link, check result), ...] + for link in links: + result = check_link(link) + if result != "ok": + broken.append((link, result)) + + if broken: + print("\n*** %d/%d links seem to be broken! ***\n" + % (len(broken), len(links))) + for link, error in broken: + print(" file {0.file}, line {0.lineno}: {1}" + .format(link, error)) + print(" ", link.markdown.replace('\n', ' ')) + print() + else: + print("All", len(links), "links seem to be OK.") + + +if __name__ == '__main__': + main() From 1e94b1f568d496988d40f65ada8c1f3d41f4f153 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 16 Jan 2017 19:17:22 +0200 Subject: [PATCH 168/329] updating gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 84be1ae..196ae35 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ # generated html files html/ + +# python cache files +__pycache__/ From 5acf1d5036676e2be85a5c8a8971225ae6653a00 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 16 Jan 2017 19:21:47 +0200 Subject: [PATCH 169/329] wow so many broken links --- README.md | 5 ++++- advanced/iterators.md | 2 +- basics/answers.md | 4 ++-- basics/classes.md | 2 +- basics/if.md | 2 +- basics/installing-python.md | 2 +- basics/loops.md | 4 ++-- basics/what-is-programming.md | 4 ++-- editor-setup.md | 11 ++++++----- 9 files changed, 20 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index ac50666..21ad53c 100644 --- a/README.md +++ b/README.md @@ -103,4 +103,7 @@ have helped me with it: *** -You may use this tutorial at your own risk. See [LICENSE](LICENSE). +You may use this tutorial freely at your own risk. See +[LICENSE](LICENSE). + +[List of contents](README.md#list-of-contents) diff --git a/advanced/iterators.md b/advanced/iterators.md index b216214..6a84b47 100644 --- a/advanced/iterators.md +++ b/advanced/iterators.md @@ -260,5 +260,5 @@ behaves like `iter([1, 2, 3])`: You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). -[Previous](../basics/classes.md) | [Next](../README.md) | +[Previous](magicmethods.md) | [Next](../README.md) | [List of contents](../README.md#advanced) diff --git a/basics/answers.md b/basics/answers.md index 7f9146f..cb4cd14 100644 --- a/basics/answers.md +++ b/basics/answers.md @@ -2,7 +2,7 @@ These are my answers for exercises in the chapters. If your solution isn't exactly like mine but it works just fine it's ok, and you can -[ask me](contact-me.md) why I didn't do it like you did it. +[ask me](../contact-me.md) why I didn't do it like you did it. ## ThinkPython: The way of the program @@ -407,7 +407,7 @@ isn't exactly like mine but it works just fine it's ok, and you can print(get_greeting()) ``` -3. See [the return or print section](defining-functions.html#return-or-print). +3. See [the return or print section](defining-functions.md#return-or-print). The greet function prints a greeting. diff --git a/basics/classes.md b/basics/classes.md index 003b86d..a9beba6 100644 --- a/basics/classes.md +++ b/basics/classes.md @@ -424,5 +424,5 @@ print("You entered " + word + ".") You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). -[Previous](modules.md) | [Next](../advanced/iterators.md) | +[Previous](modules.md) | [Next](../advanced/magicmethods.md) | [List of contents](../README.md#basics) diff --git a/basics/if.md b/basics/if.md index c428335..ade5401 100644 --- a/basics/if.md +++ b/basics/if.md @@ -95,7 +95,7 @@ just press Ctrl+N. ![New File in IDLE](../images/idle-new.png) If you don't use IDLE, please take the time to -[set up your editor correctly](editor-setup.md). When you're done your +[set up your editor correctly](../editor-setup.md). When you're done your editor should give you four spaces every time you press tab. Create a file called `rain.py`, and type the following content into it: diff --git a/basics/installing-python.md b/basics/installing-python.md index b256054..635c907 100644 --- a/basics/installing-python.md +++ b/basics/installing-python.md @@ -25,7 +25,7 @@ you. ### Mac OSX I don't have an up-to-date copy of Mac OSX. If you would like to write -instructions for OSX, [tell me](contact-me.md). +instructions for OSX, [tell me](../contact-me.md). ### GNU/Linux diff --git a/basics/loops.md b/basics/loops.md index 974d978..560c487 100644 --- a/basics/loops.md +++ b/basics/loops.md @@ -421,7 +421,7 @@ while True: *** You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](../LICENSE). [Previous](lists-and-tuples.md) | [Next](trey-hunner-zip-and-enumerate.md) | -[List of contents](README.md#list-of-contents) +[List of contents](../README.md#basics) diff --git a/basics/what-is-programming.md b/basics/what-is-programming.md index 42b00cb..e119911 100644 --- a/basics/what-is-programming.md +++ b/basics/what-is-programming.md @@ -80,10 +80,10 @@ should you do if you have a problem with the tutorial? 3. If there's something you haven't seen before in the tutorial and it's not explained, try to find it from the previous chapters. 4. If you still have trouble understanding the tutorial or any other problems - with the tutorial, please [tell me about it](contact-me.md). I want to + with the tutorial, please [tell me about it](../contact-me.md). I want to improve this tutorial so other readers won't have the same problem as you have. -5. See [Getting help](getting-help.md) if you can't contact me for some +5. See [Getting help](../getting-help.md) if you can't contact me for some reason. You are free to combine this tutorial with other learning resources. If this diff --git a/editor-setup.md b/editor-setup.md index c85b5cf..2bb52aa 100644 --- a/editor-setup.md +++ b/editor-setup.md @@ -1,10 +1,11 @@ # Setting up an editor for programming -Python comes with its IDLE, and you can use it in this tutorial. If you -don't like using it for some reason, you need [PowerShell, command prompt or -terminal](installing-python.md#if-you-like-working-with-powershell-command-prompt-or-terminal) -for trying out things. You also need an editor for writing code that will -be stored in files. +Python comes with its IDLE, and you can use it in this tutorial. If you +don't like using it for some reason, you need [PowerShell, command +prompt or +terminal](basics/installing-python.md#if-you-like-working-with-powershell-command-prompt-or-terminal) +for trying out things. You also need an editor for writing code that +will be stored in files. If you use IDLE as your editor, **it comes with everything set up for you, and you don't need to worry about setting up anything**. If you From bc1d7e1a3197ebc752e5886f154c112a22f4c307 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 16 Jan 2017 19:21:59 +0200 Subject: [PATCH 170/329] explicit is better than implicit --- update-ends.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/update-ends.py b/update-ends.py index 40e054f..213318b 100755 --- a/update-ends.py +++ b/update-ends.py @@ -96,7 +96,7 @@ def update_end(filename, end): content = f.read() if content.endswith(end): # No need to do anything. - print(" Has end:", filename) + print(" Has correct end:", filename) return if '\n***\n' in content: From 562bc51acb1bfe1be9dc4395cc81e9ad9efd9702 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 16 Jan 2017 21:50:49 +0200 Subject: [PATCH 171/329] explain iterables --- basics/loops.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/basics/loops.md b/basics/loops.md index 560c487..7a06d0d 100644 --- a/basics/loops.md +++ b/basics/loops.md @@ -275,6 +275,10 @@ Or if we just want to clear a list, we can use the `clear` >>> ``` +Later we'll learn that for loops are not actually limited to lists. +There are many other things we can for loop over. Things that can be for +looped over are called **iterables**. + If you're using Python 3.2 or older you need to use `stuff[:]` instead of `stuff.copy()` and `stuff[:] = []` instead of `stuff.clear()`. `stuff[:]` is a slice of the whole list, just like `stuff[0:]`. @@ -285,6 +289,7 @@ of `stuff.copy()` and `stuff[:] = []` instead of `stuff.clear()`. - While loops repeat something as long as a condition is true, and they check the condition only in the beginning. - For loops can be used for repeating something to each item in a list. +- An iterable is something that can be for looped over. - The `break` keyword can be used to interrupt the innermost loop at any time. From b7d5ecbb6af74b0c6ef27a7e341b054c7cd23e20 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 16 Jan 2017 21:50:58 +0200 Subject: [PATCH 172/329] function stuff --- README.md | 5 +- advanced/functions.md | 244 +++++++++++++++++++++++++++++++++++++++ advanced/magicmethods.md | 2 +- basics/classes.md | 2 +- 4 files changed, 249 insertions(+), 4 deletions(-) create mode 100644 advanced/functions.md diff --git a/README.md b/README.md index 21ad53c..adc126d 100644 --- a/README.md +++ b/README.md @@ -61,8 +61,9 @@ techniques just because you know how to use them.** Prefer the simple techniques from the Basics part instead when possible. Simple is better than complex. -1. [Magic methods](advanced/magicmethods.md) -2. [Iterables and iterators](advanced/iterators.md) +1. [Advanced stuff with functions](advanced/functions.md) +2. [Magic methods](advanced/magicmethods.md) +3. [Iterables and iterators](advanced/iterators.md) ### Other things this tutorial comes with diff --git a/advanced/functions.md b/advanced/functions.md new file mode 100644 index 0000000..137475f --- /dev/null +++ b/advanced/functions.md @@ -0,0 +1,244 @@ +# Advanced things with functions + +Now we know [how to define functions](../basics/defining-functions.md). +Functions can take arguments, and they will end up with local variables +that have the same name. Like this: + +```py +def print_box(message, border='*'): + print(border * (len(message) + 4)) + print(border, message, border) + print(border * (len(message) + 4)) + +print_box("hello") +``` + +In this chapter we'll learn more things we can do with defining +functions and how they are useful. + +## Multiple return values + +Function can take multiple arguments, but they can only return one +value. But sometimes it makes sense to remove multiple values as well: + +```py +def login(): + username = input("Username: ") + password = input("Password: ") + # how the heck are we going to return these? +``` + +The best solution is to just return a tuple of values, and just unpack +that wherever the function is called: + +```py +def login(): + ... + return username, password + + +username, password = login(): +... +``` + +That gets kind of messy if there are more than three values to return, +but I have never needed to return more than three values. If you think +you need to return four or more values you probably want to use [a +class](../basics/classes.md) instead and store the values like +`self.thing = stuff`. + +## \*args + +Sometimes you might see code like this: + +```py +def thing(*args, **kwargs): + ... +``` + +Functions like this are actually quite easy to understand. Let's make a +function that takes `*args` and prints it. + +```py +>>> def thing(*args): +... print("now args is", args) +... +>>> thing() +now args is () +>>> thing(1, 2, 3) +now args is (1, 2, 3) +>>> +``` + +So far we have learned that if we want to call a function like +`thing(1, 2, 3)`, then we need to define the arguments when defining the +function like `def thing(a, b, c)`. But `*args` just magically gets +whatever positional arguments the function is given and turns them into +a tuple, and never raises errors. Of course, we could also use whatever +variable name we wanted instead of `args`. + +Our function with just `*args` takes no keyword arguments: + +```py +>>> thing(a=1) +Traceback (most recent call last): + File "", line 1, in +TypeError: thing() got an unexpected keyword argument 'a' +>>> +``` + +We can also save our arguments to a variable as a list, and then pass +them to a function by adding a `*`. Actually it doesn't need to be a +list or a tuple, anything [iterable](../basics/loops.md#summary) will +work. + +```py +>>> stuff = ['hello', 'world', 'test'] +>>> print(*stuff) +hello world test +>>> +``` + +## \*\*kwargs + +`**kwargs` is the same thing as `*args`, but with keyword arguments +instead of positional arguments. + +```py +>>> def thing(**kwargs): +... print('now kwargs is', kwargs) +... +>>> thing(a=1, b=2) +now kwargs is {'b': 2, 'a': 1} +>>> thing(1, 2) +Traceback (most recent call last): + File "", line 1, in +TypeError: thing() takes 0 positional arguments but 2 were given +>>> def print_box(message, border='*'): +... print(border * len(message)) +... print(message) +... print(border * len(message)) +... +>>> kwargs = {'message': "Hello World!", 'border': '-'} +>>> print_box(**kwargs) +------------ +Hello World! +------------ +>>> +``` + +Sometimes it's handy to capture all arguments our function takes. We can +combine `*args` and `**kwargs` easily: + +```py +>>> def thing(*args, **kwargs): +... print("now args is", args, "and kwargs is", kwargs) +... +>>> thing(1, 2, a=3, b=4) +now args is (1, 2) and kwargs is {'b': 4, 'a': 3} +>>> +``` + +This is often used for calling a function from another "fake function" +that represents it. We'll find uses for this later. + +```py +>>> def fake_print(*args, **kwargs): +... print(*args, **kwargs) +... +>>> print('this', 'is', 'a', 'test', sep='-') +this-is-a-test +>>> fake_print('this', 'is', 'a', 'test', sep='-') +this-is-a-test +>>> +``` + +## Keyword-only arguments + +Let's say that we have a function that moves a file. It probably takes +`source` and `destination` arguments, but it might also take other +arguments. For example, it might take an `overwrite` argument that makes +it remove `destination` before copying if it exists already or a +`backup` argument that makes it do a backup of the file just in case the +copying fails. So our function would look like this: + +```py +def move(source, destination, overwrite=False, backup=False): + if overwrite: + print("deleting", destination) + if backup: + print("backing up") + print("moving", source, "to", destination) +``` + +Then we can move files like this: + +```py +>>> move('file1.txt', 'file2.txt') +moving file1.txt to file2.txt +>>> move('file1.txt', 'file2.txt', overwrite=True) +deleting file2.txt +moving file1.txt to file2.txt +>>> +``` + +This works just fine, but if we accidentally give the function three +filenames, bad things will happen: + +```py +>>> move('file1.txt', 'file2.txt', 'file3.txt') +deleting file2.txt +moving file1.txt to file2.txt +>>> +``` + +Oh crap, that's not what we wanted at all. We have just lost the +original `file2.txt`! + +The problem was that now `overwrite` was `'file2.txt'`, and the +`if overwrite` part [treated the string as +True](../basics/what-is-true.md) and deleted the file. That's not nice. + +The solution is to change our move function so that `overwrite` and +`backup` are keyword-only: + +```py +def move(source, destination, *, overwrite=False, backup=False): + ... +``` + +Note the `*` between `destination` and `overwrite`. It means that the +arguments after it must be specified as keyword arguments. + +Our new move function also makes it impossible to write things like +`move('file1.txt', 'file2.txt', False, True)`. The problem with calling +the move function like that is that nobody can guess what it does by +just looking at it, but it's much easier to guess what +`move('file1.txt', 'file2.txt', backup=True)` does. + +## When should we use these things? + +We don't need `*args` and `**kwargs` for most of the functions we write. +Often functions just do something and arguments are a way to change how +they do that, and by not taking `*args` or `**kwargs` we can make sure +that we'll get an error if the function gets an invalid argument. + +When we need to make something that takes whatever arguments it's given +or call a function with arguments that come from a list we need `*args` +and `**kwargs`, and there's no need to avoid them. + +I don't recommend using keyword-only arguments with functions like our +`print_box`. It's easy enough to guess what `print_box('hello', '-')` +does, and there's no need to force everyone to do +`print_box('hello', border='-')`. On the other hand, it's hard to guess +what `copy('file1.txt', 'file2.txt', True, False)` does, so using +keyword-only arguments makes sense and also avoids the file deleting +problem. + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](../LICENSE). + +[Previous](../basics/classes.md) | [Next](magicmethods.md) | +[List of contents](../README.md#advanced) diff --git a/advanced/magicmethods.md b/advanced/magicmethods.md index 7821fd0..f2a3b14 100644 --- a/advanced/magicmethods.md +++ b/advanced/magicmethods.md @@ -256,5 +256,5 @@ are not meant to be imported. You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). -[Previous](../basics/classes.md) | [Next](iterators.md) | +[Previous](functions.md) | [Next](iterators.md) | [List of contents](../README.md#advanced) diff --git a/basics/classes.md b/basics/classes.md index a9beba6..6e96a8f 100644 --- a/basics/classes.md +++ b/basics/classes.md @@ -424,5 +424,5 @@ print("You entered " + word + ".") You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). -[Previous](modules.md) | [Next](../advanced/magicmethods.md) | +[Previous](modules.md) | [Next](../advanced/functions.md) | [List of contents](../README.md#basics) From 8c5300755018376b5bc9a28b5ab07e0babaf5622 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 17 Jan 2017 11:43:27 +0200 Subject: [PATCH 173/329] function stuff --- advanced/functions.md | 150 +++++++++++++++++++++++++----------------- 1 file changed, 88 insertions(+), 62 deletions(-) diff --git a/advanced/functions.md b/advanced/functions.md index 137475f..d2a6947 100644 --- a/advanced/functions.md +++ b/advanced/functions.md @@ -1,7 +1,7 @@ # Advanced things with functions -Now we know [how to define functions](../basics/defining-functions.md). -Functions can take arguments, and they will end up with local variables +Now we know [how to define functions](../basics/defining-functions.md). +Functions can take arguments, and they will end up with local variables that have the same name. Like this: ```py @@ -13,12 +13,12 @@ def print_box(message, border='*'): print_box("hello") ``` -In this chapter we'll learn more things we can do with defining +In this chapter we'll learn more things we can do with defining functions and how they are useful. ## Multiple return values -Function can take multiple arguments, but they can only return one +Function can take multiple arguments, but they can only return one value. But sometimes it makes sense to remove multiple values as well: ```py @@ -28,8 +28,8 @@ def login(): # how the heck are we going to return these? ``` -The best solution is to just return a tuple of values, and just unpack -that wherever the function is called: +The best solution is to return a tuple of values, and just unpack that +wherever the function is called: ```py def login(): @@ -37,13 +37,13 @@ def login(): return username, password -username, password = login(): +username, password = login() ... ``` -That gets kind of messy if there are more than three values to return, -but I have never needed to return more than three values. If you think -you need to return four or more values you probably want to use [a +That gets kind of messy if there are more than three values to return, +but I have never needed to return more than three values. If you think +you need to return four or more values you probably want to use [a class](../basics/classes.md) instead and store the values like `self.thing = stuff`. @@ -56,58 +56,58 @@ def thing(*args, **kwargs): ... ``` -Functions like this are actually quite easy to understand. Let's make a +Functions like this are actually quite easy to understand. Let's make a function that takes `*args` and prints it. ```py >>> def thing(*args): ... print("now args is", args) -... +... >>> thing() now args is () >>> thing(1, 2, 3) now args is (1, 2, 3) ->>> +>>> ``` So far we have learned that if we want to call a function like -`thing(1, 2, 3)`, then we need to define the arguments when defining the -function like `def thing(a, b, c)`. But `*args` just magically gets -whatever positional arguments the function is given and turns them into +`thing(1, 2, 3)`, then we need to define the arguments when defining the +function like `def thing(a, b, c)`. But `*args` just magically gets +whatever positional arguments the function is given and turns them into a tuple, and never raises errors. Of course, we could also use whatever variable name we wanted instead of `args`. -Our function with just `*args` takes no keyword arguments: +Our function with nothing but `*args` takes no keyword arguments: ```py >>> thing(a=1) Traceback (most recent call last): File "", line 1, in TypeError: thing() got an unexpected keyword argument 'a' ->>> +>>> ``` -We can also save our arguments to a variable as a list, and then pass -them to a function by adding a `*`. Actually it doesn't need to be a -list or a tuple, anything [iterable](../basics/loops.md#summary) will +We can also save our arguments to a variable as a list, and then pass +them to a function by adding a `*`. Actually it doesn't need to be a +list or a tuple, anything [iterable](../basics/loops.md#summary) will work. ```py >>> stuff = ['hello', 'world', 'test'] >>> print(*stuff) hello world test ->>> +>>> ``` ## \*\*kwargs -`**kwargs` is the same thing as `*args`, but with keyword arguments +`**kwargs` is the same thing as `*args`, but with keyword arguments instead of positional arguments. ```py >>> def thing(**kwargs): ... print('now kwargs is', kwargs) -... +... >>> thing(a=1, b=2) now kwargs is {'b': 2, 'a': 1} >>> thing(1, 2) @@ -118,49 +118,50 @@ TypeError: thing() takes 0 positional arguments but 2 were given ... print(border * len(message)) ... print(message) ... print(border * len(message)) -... +... >>> kwargs = {'message': "Hello World!", 'border': '-'} >>> print_box(**kwargs) ------------ Hello World! ------------ ->>> +>>> ``` -Sometimes it's handy to capture all arguments our function takes. We can +Sometimes it's handy to capture all arguments our function takes. We can combine `*args` and `**kwargs` easily: ```py >>> def thing(*args, **kwargs): ... print("now args is", args, "and kwargs is", kwargs) -... +... >>> thing(1, 2, a=3, b=4) now args is (1, 2) and kwargs is {'b': 4, 'a': 3} ->>> +>>> ``` -This is often used for calling a function from another "fake function" +This is often used for calling a function from another "fake function" that represents it. We'll find uses for this later. ```py >>> def fake_print(*args, **kwargs): ... print(*args, **kwargs) -... +... >>> print('this', 'is', 'a', 'test', sep='-') this-is-a-test >>> fake_print('this', 'is', 'a', 'test', sep='-') this-is-a-test ->>> +>>> ``` ## Keyword-only arguments -Let's say that we have a function that moves a file. It probably takes -`source` and `destination` arguments, but it might also take other -arguments. For example, it might take an `overwrite` argument that makes -it remove `destination` before copying if it exists already or a -`backup` argument that makes it do a backup of the file just in case the -copying fails. So our function would look like this: +Let's say that we have a function that moves a file. It probably takes +`source` and `destination` arguments, but it might also take other +arguments that customize how it moves the file. For example, it might +take an `overwrite` argument that makes it remove `destination` before +moving if it exists already or a `backup` argument that makes it do a +backup of the file just in case the moving fails. So our function would +look like this: ```py def move(source, destination, overwrite=False, backup=False): @@ -179,27 +180,27 @@ moving file1.txt to file2.txt >>> move('file1.txt', 'file2.txt', overwrite=True) deleting file2.txt moving file1.txt to file2.txt ->>> +>>> ``` -This works just fine, but if we accidentally give the function three +This works just fine, but if we accidentally give the function three filenames, bad things will happen: ```py >>> move('file1.txt', 'file2.txt', 'file3.txt') deleting file2.txt moving file1.txt to file2.txt ->>> +>>> ``` -Oh crap, that's not what we wanted at all. We have just lost the +Oh crap, that's not what we wanted at all. We have just lost the original `file2.txt`! The problem was that now `overwrite` was `'file2.txt'`, and the `if overwrite` part [treated the string as True](../basics/what-is-true.md) and deleted the file. That's not nice. -The solution is to change our move function so that `overwrite` and +The solution is to change our move function so that `overwrite` and `backup` are keyword-only: ```py @@ -207,33 +208,58 @@ def move(source, destination, *, overwrite=False, backup=False): ... ``` -Note the `*` between `destination` and `overwrite`. It means that the -arguments after it must be specified as keyword arguments. +The `*` between `destination` and `overwrite` means that `overwrite` and +`backup` must be given as keyword arguments. + +```py +>>> move('file1.txt', 'file2.txt', overwrite=True) +deleting file2.txt +moving file1.txt to file2.txt +>>> move('file1.txt', 'file2.txt', True) +Traceback (most recent call last): + File "", line 1, in +TypeError: move() takes 2 positional arguments but 3 were given +>>> +``` -Our new move function also makes it impossible to write things like -`move('file1.txt', 'file2.txt', False, True)`. The problem with calling -the move function like that is that nobody can guess what it does by -just looking at it, but it's much easier to guess what -`move('file1.txt', 'file2.txt', backup=True)` does. +As you can see, our new move function also forces everyone to use it +like `move('file1.txt', 'file2.txt', overwrite=True)` instead of +`move('file1.txt', 'file2.txt', True)`. That's good because it's hard to +guess what a positional `True` does, but it's easy to guess what +`overwrite=True` does. ## When should we use these things? -We don't need `*args` and `**kwargs` for most of the functions we write. -Often functions just do something and arguments are a way to change how -they do that, and by not taking `*args` or `**kwargs` we can make sure +There's nothing wrong with returning a tuple from a function, and you +are free to do that whenever you need it. + +We don't need `*args` and `**kwargs` for most of the functions we write. +Often functions just do something and arguments are a way to change how +they do that, and by not taking `*args` or `**kwargs` we can make sure that we'll get an error if the function gets an invalid argument. -When we need to make something that takes whatever arguments it's given -or call a function with arguments that come from a list we need `*args` +When we need to make something that takes whatever arguments it's given +or call a function with arguments that come from a list we need `*args` and `**kwargs`, and there's no need to avoid them. -I don't recommend using keyword-only arguments with functions like our -`print_box`. It's easy enough to guess what `print_box('hello', '-')` -does, and there's no need to force everyone to do -`print_box('hello', border='-')`. On the other hand, it's hard to guess -what `copy('file1.txt', 'file2.txt', True, False)` does, so using -keyword-only arguments makes sense and also avoids the file deleting -problem. +I don't recommend using keyword-only arguments with functions like our +`print_box`. It's easy enough to guess what `print_box('hello', '-')` +does, and there's no need to deny that. On the other hand, it's much +harder to guess what `move('file1.txt', 'file2.txt', True, False)` does, +so using keyword-only arguments makes sense and gets rid of the file +deleting problem. + +## Summary + +- If you want to return multiple values from a function you can return + a tuple. +- Defining a function that takes `*args` as an argument makes `args` a + tuple of positional arguments. `**kwargs` is the same thing with + dictionaries and keyword arguments. +- Adding a `*` in a function definition makes all arguments after it + keyword-only. This is useful when using positional arguments would + look implicit, like the True and False in `move('file1.txt', + 'file2.txt', True, False)`. *** From 375a8f69683d7c9f0a1b222804e28792b63c826d Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 17 Jan 2017 11:43:34 +0200 Subject: [PATCH 174/329] whitespace stripper --- strip.py | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100755 strip.py diff --git a/strip.py b/strip.py new file mode 100755 index 0000000..935bff1 --- /dev/null +++ b/strip.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 + +# This is free and unencumbered software released into the public +# domain. + +# Anyone is free to copy, modify, publish, use, compile, sell, or +# distribute this software, either in source code form or as a +# compiled binary, for any purpose, commercial or non-commercial, and +# by any means. + +# In jurisdictions that recognize copyright laws, the author or +# authors of this software dedicate any and all copyright interest in +# the software to the public domain. We make this dedication for the +# benefit of the public at large and to the detriment of our heirs +# and successors. We intend this dedication to be an overt act of +# relinquishment in perpetuity of all present and future rights to +# this software under copyright law. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +# CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +# For more information, please refer to + +"""Strip trailing whitespace from markdown files.""" + +import common + + +def needs_stripping(file): + with open(file, 'r') as f: + for line in f: + line = line.rstrip('\n') + if line != line.rstrip(): + # contains trailing whitespace other than '\n' + print(repr(line)) + return True + return False + + +def strip(file): + lines = [] + with open(file, 'r') as f: + for line in f: + lines.append(line.rstrip()) + with open(file, 'w') as f: + for line in lines: + print(line, file=f) + + +def main(): + print("Stripping trailing whitespace...") + for file in common.get_markdown_files(): + if needs_stripping(file): + strip(file) + print(" Was stripped:", file) + else: + print(" No trailing whitespace:", file) + + +if __name__ == '__main__': + main() From c8e3a07647e169976936e1ad7b104a0286bb767d Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 17 Jan 2017 11:43:42 +0200 Subject: [PATCH 175/329] running strip.py --- README.md | 14 ++-- advanced/iterators.md | 86 ++++++++++++------------- advanced/magicmethods.md | 2 +- basics/answers.md | 16 ++--- basics/classes.md | 60 ++++++++--------- basics/defining-functions.md | 64 +++++++++--------- basics/dicts.md | 32 ++++----- basics/exceptions.md | 58 ++++++++--------- basics/files.md | 48 +++++++------- basics/getting-started.md | 20 +++--- basics/handy-stuff-strings.md | 40 ++++++------ basics/if.md | 20 +++--- basics/installing-python.md | 4 +- basics/lists-and-tuples.md | 38 +++++------ basics/loops.md | 30 ++++----- basics/modules.md | 36 +++++------ basics/trey-hunner-zip-and-enumerate.md | 16 ++--- basics/using-functions.md | 30 ++++----- basics/variables.md | 28 ++++---- basics/what-is-true.md | 22 +++---- editor-setup.md | 10 +-- 21 files changed, 337 insertions(+), 337 deletions(-) diff --git a/README.md b/README.md index adc126d..ad8f5c3 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ The tutorial consists of two sections: ### Basics -This section will get you started with using Python and you'll be able +This section will get you started with using Python and you'll be able to learn more about whatever you want after studying it. 1. [What is programming?](basics/what-is-programming.md) @@ -51,14 +51,14 @@ to learn more about whatever you want after studying it. ### Advanced -If you want to learn more advanced techniques, you can also read this -section. Most of the techniques explained here are great when you're -working on a large project, and your code would be really repetitive +If you want to learn more advanced techniques, you can also read this +section. Most of the techniques explained here are great when you're +working on a large project, and your code would be really repetitive without these things. -You can experient with these things freely, but please **don't use these -techniques just because you know how to use them.** Prefer the simple -techniques from the Basics part instead when possible. Simple is better +You can experient with these things freely, but please **don't use these +techniques just because you know how to use them.** Prefer the simple +techniques from the Basics part instead when possible. Simple is better than complex. 1. [Advanced stuff with functions](advanced/functions.md) diff --git a/advanced/iterators.md b/advanced/iterators.md index 6a84b47..7154204 100644 --- a/advanced/iterators.md +++ b/advanced/iterators.md @@ -5,33 +5,33 @@ So far we have used for loops with many different kinds of things. ```py >>> for name in ['theelous3', 'RubyPinch', 'go|dfish']: ... print(name) -... +... theelous3 RubyPinch go|dfish >>> for letter in 'abc': ... print(letter) -... +... a b c ->>> +>>> ``` -For looping over something is one way to **iterate** over it. Some other -things also iterate, for example, `' '.join(['a', 'b', 'c'])` iterates -over the list `['a', 'b', 'c']`. If we can for loop over something, then -that something is **iterable**. For example, strings and lists are +For looping over something is one way to **iterate** over it. Some other +things also iterate, for example, `' '.join(['a', 'b', 'c'])` iterates +over the list `['a', 'b', 'c']`. If we can for loop over something, then +that something is **iterable**. For example, strings and lists are iterable, but integers and floats are not. ```py >>> for thing in 123: ... print(thing) -... +... Traceback (most recent call last): File "", line 1, in TypeError: 'int' object is not iterable ->>> +>>> ``` ## Iterators @@ -42,23 +42,23 @@ Lists and strings don't change when we iterate over them. >>> word = 'hi' >>> for character in word: ... print(character) -... +... h i >>> word 'hello' ->>> +>>> ``` -We can also iterate over [files](../basics/files.md), but they change -when we do that. They remember their position, so if we iterate over +We can also iterate over [files](../basics/files.md), but they change +when we do that. They remember their position, so if we iterate over them twice we get the content once only. ```py >>> with open('test.txt', 'w') as f: ... print("one", file=f) ... print("two", file=f) -... +... >>> a = [] >>> b = [] >>> with open('test.txt', 'r') as f: @@ -66,12 +66,12 @@ them twice we get the content once only. ... a.append(line) ... for line in f: ... b.append(line) -... +... >>> a ['one\n', 'two\n'] >>> b [] ->>> +>>> ``` We have also used [enumerate](../basics/trey-hunner-zip-and-enumerate.md) @@ -81,7 +81,7 @@ before, and it actually remembers its position also: >>> e = enumerate('hello') >>> for pair in e: ... print(pair) -... +... (0, 'h') (1, 'e') (2, 'l') @@ -89,13 +89,13 @@ before, and it actually remembers its position also: (4, 'o') >>> for pair in e: ... print(pair) -... ->>> +... +>>> ``` -Iterators are **iterables that remember their position**. For example, -`open('test.txt', 'r')` and `enumerate('hello')` are iterators. -Iterators can only be used once, so we need to create a new iterator if +Iterators are **iterables that remember their position**. For example, +`open('test.txt', 'r')` and `enumerate('hello')` are iterators. +Iterators can only be used once, so we need to create a new iterator if we want to do another for loop. Here's a picture that hopefully explains this better: @@ -104,8 +104,8 @@ Here's a picture that hopefully explains this better: ## Iterating manually -Iterators have a magic method called `__next__`, and there's a built-in -function called `next()` for calling that. Calling `next()` on an +Iterators have a magic method called `__next__`, and there's a built-in +function called `next()` for calling that. Calling `next()` on an iterator gets the next value and moves it forward. Like this: ```py @@ -116,7 +116,7 @@ iterator gets the next value and moves it forward. Like this: (1, 'b') >>> e.__next__() (2, 'c') ->>> +>>> ``` There's also a built-in `next()` function that does the same thing: @@ -129,11 +129,11 @@ There's also a built-in `next()` function that does the same thing: (1, 'b') >>> next(e) (2, 'c') ->>> +>>> ``` -Here `e` remembers its position, and every time we call `next(e)` it -gives us the next element and moves forward. When it has no more values +Here `e` remembers its position, and every time we call `next(e)` it +gives us the next element and moves forward. When it has no more values to give us, calling `next(e)` raises a StopIteration: ```py @@ -141,14 +141,14 @@ to give us, calling `next(e)` raises a StopIteration: Traceback (most recent call last): File "", line 1, in StopIteration ->>> +>>> ``` -There is usually not a good way to check if the iterator is at the end, -and it's best to just try to get an value from it and catch +There is usually not a good way to check if the iterator is at the end, +and it's best to just try to get an value from it and catch StopIteration. -This is actually what for looping over an iterator does. For example, +This is actually what for looping over an iterator does. For example, this code... ```py @@ -170,13 +170,13 @@ while True: print(pair) ``` -The for loop version is much simpler to write and I wrote the while loop +The for loop version is much simpler to write and I wrote the while loop version just to explain what the for loop does. ## Converting to iterators -Now we know what iterating over an iterator does. But how about -iterating over a list or a string? They are not iterators, so we can't +Now we know what iterating over an iterator does. But how about +iterating over a list or a string? They are not iterators, so we can't call `next()` on them: ```py @@ -184,10 +184,10 @@ call `next()` on them: Traceback (most recent call last): File "", line 1, in TypeError: 'str' object is not an iterator ->>> +>>> ``` -There's a built-in function called `iter()` that converts anything +There's a built-in function called `iter()` that converts anything iterable to an iterator. ```py @@ -204,7 +204,7 @@ iterable to an iterator. Traceback (most recent call last): File "", line 1, in StopIteration ->>> +>>> ``` Calling `iter()` on anything non-iterable gives us an error. @@ -214,17 +214,17 @@ Calling `iter()` on anything non-iterable gives us an error. Traceback (most recent call last): File "", line 1, in TypeError: 'int' object is not iterable ->>> +>>> ``` -If we try to convert an iterator to an iterator using `iter()` we just +If we try to convert an iterator to an iterator using `iter()` we just get back the same iterator. ```py >>> e = enumerate('abc') >>> iter(e) is e True ->>> +>>> ``` So code like this... @@ -248,8 +248,8 @@ while True: ## Custom iterables -Implementing a custom iterator is easy. All we need to do is to define a -`__next__` method that gets the next element, and an `__iter__` method +Implementing a custom iterator is easy. All we need to do is to define a +`__next__` method that gets the next element, and an `__iter__` method that returns the iterator itself. For example, here's an iterator that behaves like `iter([1, 2, 3])`: diff --git a/advanced/magicmethods.md b/advanced/magicmethods.md index f2a3b14..5962321 100644 --- a/advanced/magicmethods.md +++ b/advanced/magicmethods.md @@ -215,7 +215,7 @@ follow one of these styles: ## Other magic methods There are many more magic methods, and I don't see any reason to list -them all here. [The official +them all here. [The official documentation](https://docs.python.org/3/reference/datamodel.html) has more information about magic methods if you need it. We'll go through using the most important magic methods in the rest of this tutorial, so diff --git a/basics/answers.md b/basics/answers.md index cb4cd14..297f09d 100644 --- a/basics/answers.md +++ b/basics/answers.md @@ -117,7 +117,7 @@ isn't exactly like mine but it works just fine it's ok, and you can 2. If we have a look at `help(str.upper)` it looks like this: S.upper() -> str - + Return a copy of S converted to uppercase. We have two problems. First of all, the broken code uses @@ -324,11 +324,11 @@ isn't exactly like mine but it works just fine it's ok, and you can ```py >>> for pair in zip('ABC', 'abc'): ... print(pair) - ... + ... ('A', 'a') ('B', 'b') ('C', 'c') - >>> + >>> ``` Great, it works just like it works with lists. Now let's create @@ -389,7 +389,7 @@ isn't exactly like mine but it works just fine it's ok, and you can def ask_name(): name = input("Enter your name: ") return name - + print("Your name is", ask_name()) ``` @@ -403,7 +403,7 @@ isn't exactly like mine but it works just fine it's ok, and you can ```py def get_greeting(): return "Hello World!" - + print(get_greeting()) ``` @@ -414,7 +414,7 @@ isn't exactly like mine but it works just fine it's ok, and you can ```py >>> greet("World") Hello World - >>> + >>> ``` But it also returns None because we don't tell it to return anything else. @@ -424,7 +424,7 @@ isn't exactly like mine but it works just fine it's ok, and you can Hello World >>> print(return_value) None - >>> + >>> ``` This code from the exercise does the same thing as the code above @@ -434,7 +434,7 @@ isn't exactly like mine but it works just fine it's ok, and you can >>> print(greet("World")) Hello World None - >>> + >>> ``` *** diff --git a/basics/classes.md b/basics/classes.md index 6e96a8f..a96da10 100644 --- a/basics/classes.md +++ b/basics/classes.md @@ -22,7 +22,7 @@ Python comes with a lot of classes that you are already familiar with. >>> dict ->>> +>>> ``` Calling these classes as if they were functions makes a new **instance** @@ -38,7 +38,7 @@ string. [] >>> dict() {} ->>> +>>> ``` We can also get an instance's class with `type()`: @@ -52,7 +52,7 @@ We can also get an instance's class with `type()`: >>> type({}) ->>> +>>> ``` Let's say you make a program that processes data about websites. With a @@ -67,7 +67,7 @@ In Python, `pass` does nothing. ```py >>> pass ->>> +>>> ``` Let's use it to define an empty class. @@ -75,10 +75,10 @@ Let's use it to define an empty class. ```py >>> class Website: ... pass -... +... >>> Website ->>> +>>> ``` Note that I named the class `Website`, not `website`. This way we know @@ -94,7 +94,7 @@ Now we can make a Website instance by calling the class. <__main__.Website object at 0x7f36e4c456d8> >>> type(stackoverflow) ->>> +>>> ``` We can say that `stackoverflow` is "a Website instance", "a Website @@ -106,7 +106,7 @@ Now we can attach more information about stackoverflow to our Website. >>> stackoverflow.url = 'http://stackoverflow.com/' >>> stackoverflow.founding_year = 2008 >>> stackoverflow.free_to_use = True ->>> +>>> ``` We can also access the information easily. @@ -118,7 +118,7 @@ We can also access the information easily. 2008 >>> stackoverflow.free_to_use True ->>> +>>> ``` As you can see, our Website is mutable, like lists are, not immutable @@ -143,7 +143,7 @@ and `free_to_use`? Traceback (most recent call last): File "", line 1, in AttributeError: 'Website' object has no attribute 'url' ->>> +>>> ``` It doesn't. We'd need to define the attributes for effbot also. @@ -159,7 +159,7 @@ handy way to see which attributes the instance contains. 'url': 'http://stackoverflow.com/'} >>> effbot.__dict__ {} ->>> +>>> ``` ## Class attributes @@ -171,7 +171,7 @@ instead of doing that to an instance? >>> Website.is_online = True >>> Website.is_online True ->>> +>>> ``` Seems to be working, but what happened to the instances? @@ -181,7 +181,7 @@ Seems to be working, but what happened to the instances? True >>> effbot.is_online True ->>> +>>> ``` What was that? Setting `Website.is_online` to a value also set @@ -198,7 +198,7 @@ the `Website` class. 'url': 'http://stackoverflow.com/'} >>> effbot.__dict__ {} ->>> +>>> ``` `Website.is_online` is `Website`'s class attribute, and in Python you can @@ -216,12 +216,12 @@ Let's define a function that prints information about a website. ... print("URL:", website.url) ... print("Founding year:", website.founding_year) ... print("Free to use:", website.free_to_use) -... +... >>> website_info(stackoverflow) URL: http://stackoverflow.com/ Founding year: 2008 Free to use: True ->>> +>>> ``` Seems to be working. We should be able to get information about all @@ -234,7 +234,7 @@ Website class? URL: http://stackoverflow.com/ Founding year: 2008 Free to use: True ->>> +>>> ``` It's working, but `Website.info(stackoverflow)` is a lot of typing, so @@ -245,7 +245,7 @@ wouldn't `stackoverflow.info()` be much better? URL: http://stackoverflow.com/ Founding year: 2008 Free to use: True ->>> +>>> ``` What the heck happened? We didn't define a `stackoverflow.info`, it just @@ -262,7 +262,7 @@ But is `stackoverflow.info` the same thing as `Website.info`? >>> stackoverflow.info > ->>> +>>> ``` It's not. @@ -285,12 +285,12 @@ it later? ```py >>> class Website: -... +... ... def info(self): # self will be stackoverflow ... print("URL:", self.url) ... print("Founding year:", self.founding_year) ... print("Free to use:", self.free_to_use) -... +... >>> stackoverflow = Website() >>> stackoverflow.url = 'http://stackoverflow.com/' >>> stackoverflow.founding_year = 2008 @@ -299,7 +299,7 @@ it later? URL: http://stackoverflow.com/ Founding year: 2008 Free to use: True ->>> +>>> ``` It's working. The `self` argument in `Website.info` was `stackoverflow`. @@ -312,24 +312,24 @@ Maybe we could add a method to do that? ```py >>> class Website: -... +... ... def initialize(self, url, founding_year, free_to_use): ... self.url = url ... self.founding_year = founding_year ... self.free_to_use = free_to_use -... +... ... def info(self): ... print("URL:", self.url) ... print("Founding year:", self.founding_year) ... print("Free to use:", self.free_to_use) -... +... >>> stackoverflow = Website() >>> stackoverflow.initialize('http://stackoverflow.com/', 2008, True) >>> stackoverflow.info() URL: http://stackoverflow.com/ Founding year: 2008 Free to use: True ->>> +>>> ``` That works. The attributes we defined in the initialize method are also @@ -344,23 +344,23 @@ class with arguments and they will be given to `__init__`. Like this: ```py >>> class Website: -... +... ... def __init__(self, url, founding_year, free_to_use): ... self.url = url ... self.founding_year = founding_year ... self.free_to_use = free_to_use -... +... ... def info(self): ... print("URL:", self.url) ... print("Founding year:", self.founding_year) ... print("Free to use:", self.free_to_use) -... +... >>> stackoverflow = Website('http://stackoverflow.com/', 2008, True) >>> stackoverflow.info() URL: http://stackoverflow.com/ Founding year: 2008 Free to use: True ->>> +>>> ``` Classes have many other magic methods too, but I'm not going to cover diff --git a/basics/defining-functions.md b/basics/defining-functions.md index 58e74cb..52dbfd9 100644 --- a/basics/defining-functions.md +++ b/basics/defining-functions.md @@ -54,7 +54,7 @@ The `pass` keyword does nothing. ```py >>> pass ->>> +>>> ``` Let's use it to define a function that does nothing. @@ -62,10 +62,10 @@ Let's use it to define a function that does nothing. ```py >>> def do_nothing(): ... pass -... +... >>> do_nothing ->>> +>>> ``` Seems to be working so far, we have a function. Actually it's just @@ -74,7 +74,7 @@ what happens if we call it. ```py >>> do_nothing() ->>> +>>> ``` There we go. It did nothing at all. @@ -84,10 +84,10 @@ Maybe we could just do something in the function instead? ```py >>> def print_hi(): ... print("Hi!") -... +... >>> print_hi() Hi! ->>> +>>> ``` It's working. How about printing a variable in the function? @@ -95,11 +95,11 @@ It's working. How about printing a variable in the function? ```py >>> def print_message(): ... print(message) -... +... >>> message = "Hello World!" >>> print_message() Hello World! ->>> +>>> ``` Again, it works. How about setting a variable in the function? @@ -107,14 +107,14 @@ Again, it works. How about setting a variable in the function? ```py >>> def get_username(): ... username = input("Username: ") -... +... >>> get_username() Username: me >>> username Traceback (most recent call last): File "", line 1, in NameError: name 'username' is not defined ->>> +>>> ``` That was weird! Why didn't that work? @@ -131,10 +131,10 @@ program, even in functions. >>> c = "hello" >>> def print_abc(): ... print(a, b, c) -... +... >>> print_abc() 1 hi hello ->>> +>>> ``` But there are also **local variables**. They exist only **inside** @@ -144,14 +144,14 @@ functions, and they are deleted when the function exits. >>> def thingy(): ... d = "hello again, i'm a local variable" ... print('inside thingy:', d) -... +... >>> thingy() inside thingy: hello again, i'm a local variable >>> d Traceback (most recent call last): File "", line 1, in NameError: name 'd' is not defined ->>> +>>> ``` Let's draw a diagram of these variables: @@ -164,11 +164,11 @@ However, modifying a global variable in-place from a function is easy. >>> stuff = ['global stuff'] >>> def add_stuff(): ... stuff.append('local stuff') -... +... >>> add_stuff() >>> stuff ['global stuff', 'local stuff'] ->>> +>>> ``` This doesn't work if the value is of an immutable type, like string or @@ -179,13 +179,13 @@ Fortunately, Python will tell us if something's wrong. >>> foo = 1 >>> def bar(): ... foo += 1 -... +... >>> bar() Traceback (most recent call last): File "", line 1, in File "", line 2, in bar UnboundLocalError: local variable 'foo' referenced before assignment ->>> +>>> ``` ## Input @@ -201,8 +201,8 @@ and prints it. Maybe a custom function could also take an argument? >>> def print_twice(message): ... print(message) ... print(message) -... ->>> +... +>>> ``` Here `message` is an argument. When we call the function we'll get a @@ -220,7 +220,7 @@ This function can be called in two ways: >>> print_twice("hi") hi hi - >>> + >>> ``` When the function was running it had a local `message` variable @@ -236,7 +236,7 @@ This function can be called in two ways: >>> print_twice(message="hi") hi hi - >>> + >>> ``` The name "keyword argument" is a little bit confusing because @@ -357,12 +357,12 @@ Can our function return a value also? ```py >>> def times_two(x): ... return x * 2 -... +... >>> times_two(3) 6 >>> times_two(5) 10 ->>> +>>> ``` Yes, it can. Now typing `times_two(3)` to the prompt does the same @@ -376,7 +376,7 @@ want, just like we can use built-in functions: 10 >>> print('2 * 5 is', times_two(5)) 2 * 5 is 10 ->>> +>>> ``` Note that **returning from a function ends it immediately**. @@ -385,9 +385,9 @@ Note that **returning from a function ends it immediately**. >>> def return_before_print(): ... return None ... print("This never gets printed.") -... +... >>> return_before_print() ->>> +>>> ``` If we don't have any return statements or we have a return statement @@ -396,15 +396,15 @@ that doesn't specify what to return, our function will return None. ```py >>> def return_none_1(): ... pass -... +... >>> def return_none_2(): ... return -... +... >>> print(return_none_1()) None >>> print(return_none_2()) None ->>> +>>> ``` ## Return or print? @@ -426,10 +426,10 @@ If our function returns a value we can always print it, like this: ```py >>> def return_hi(): ... return "hi" -... +... >>> print(return_hi()) hi ->>> +>>> ``` ## Examples diff --git a/basics/dicts.md b/basics/dicts.md index aebab9f..cd50cf9 100644 --- a/basics/dicts.md +++ b/basics/dicts.md @@ -89,7 +89,7 @@ variable names and values are what our variables point to. 'passwords': {'me': 'my password', 'you': 'your password'}, ...many other things we don't need to care about... } ->>> +>>> ``` So if you have trouble remembering how dictionaries work just compare @@ -108,7 +108,7 @@ lists and dictionaries have a length. 2 >>> len(passwords) # contains two key:value pairs 2 ->>> +>>> ``` We can get a value of a key with `the_dict[key]`. This is a lot easier @@ -119,7 +119,7 @@ and faster than for-looping over a list of pairs. 'my password' >>> passwords['you'] 'your password' ->>> +>>> ``` Trying to get the value of a non-existing key gives us an error, but we @@ -135,7 +135,7 @@ KeyError: 'lol' "lol's password" >>> passwords {'lol': "lol's password", 'you': 'your password', 'me': 'my password'} ->>> +>>> ``` For looping over a dictionary gets its keys, and checking if something @@ -149,11 +149,11 @@ True False >>> for name in passwords: ... print(name) -... +... lol you me ->>> +>>> ``` Dictionaries have a values method that we can use if we want to do @@ -162,7 +162,7 @@ something with the values: ```py >>> passwords.values() dict_values(["lol's password", 'your password', 'my password']) ->>> +>>> ``` The values method returned a `dict_values` object. Things like this @@ -172,11 +172,11 @@ lists. ```py >>> for password in passwords.values(): ... print(password) -... +... lol's password your password my password ->>> +>>> ``` We can do things like `list(passwords.values())` if we need a real list @@ -194,11 +194,11 @@ dict_items([('lol', "lol's password"), ('me', 'my password')]) >>> for name, password in passwords.items(): ... print(name + ": " + password) -... +... lol: lol's password you: your password me: my password ->>> +>>> ``` This is also useful for checking if the dictionary has a `key: value` @@ -209,7 +209,7 @@ pair. True >>> ('me', 'whatever') in passwords.items() # wrong username or password False ->>> +>>> ``` ## Limitations @@ -223,7 +223,7 @@ this because usually we don't need to worry about that. Traceback (most recent call last): File "", line 1, in TypeError: unhashable type: 'list' ->>> +>>> ``` On the other hand, tuples work just fine: @@ -232,7 +232,7 @@ On the other hand, tuples work just fine: >>> stuff = {('a', 'b'): 'c', ('d', 'e'): 'f'} >>> stuff {('a', 'b'): 'c', ('d', 'e'): 'f'} ->>> +>>> ``` The values of a dictionary can be anything. @@ -241,7 +241,7 @@ The values of a dictionary can be anything. >>> stuff = {'a': [1, 2, 3], 'b': [4, 5, 6]} >>> stuff {'a': [1, 2, 3], 'b': [4, 5, 6]} ->>> +>>> ``` ## Summary @@ -287,7 +287,7 @@ for word, count in counts.items(): Running the program might look like this: Enter a sentence: this is a test and this is quite long because this is a test - + is appears 3 times in the sentence long appears once in the sentence a appears 2 times in the sentence diff --git a/basics/exceptions.md b/basics/exceptions.md index 8ff5b71..2678830 100644 --- a/basics/exceptions.md +++ b/basics/exceptions.md @@ -41,7 +41,7 @@ message and keep going. Traceback (most recent call last): File "", line 1, in ValueError: invalid literal for int() with base 10: 'lol' ->>> +>>> ``` Exceptions are [classes](classes.md). @@ -49,7 +49,7 @@ Exceptions are [classes](classes.md). ```py >>> ValueError ->>> +>>> ``` We can also create exceptions. We won't get an error message by doing @@ -59,7 +59,7 @@ that, but we'll use this for displaying our own error messages later. >>> the_problem = ValueError('oh no') >>> the_problem ValueError('oh no',) ->>> +>>> ``` ## Catching exceptions @@ -73,9 +73,9 @@ exception. ... print(int('lol')) ... except ValueError: ... print("Oops!") -... +... Oops! ->>> +>>> ``` The except part doesn't run if the try part succeeds. @@ -85,9 +85,9 @@ The except part doesn't run if the try part succeeds. ... print("Hello World!") ... except ValueError: ... print("What the heck? Printing failed!") -... +... Hello World! ->>> +>>> ``` ValueError is raised when something gets an invalid value, but the @@ -100,7 +100,7 @@ the type is wrong, we will get a TypeError instead. Traceback (most recent call last): File "", line 1, in TypeError: unsupported operand type(s) for +: 'int' and 'str' ->>> +>>> ``` Exceptions always interrupt the code even if we catch them. Here the @@ -113,9 +113,9 @@ block. Everything after the try block runs normally. ... print("This doesn't get printed.") ... except TypeError: ... print("Oops!") -... +... Oops! ->>> +>>> ``` Does an `except ValueError` also catch TypeErrors? @@ -125,11 +125,11 @@ Does an `except ValueError` also catch TypeErrors? ... print(123 + 'hello') ... except ValueError: ... print("Oops!") -... +... Traceback (most recent call last): File "", line 2, in TypeError: unsupported operand type(s) for +: 'int' and 'str' ->>> +>>> ``` No, it doesn't. But maybe we could except for both ValueError and @@ -142,7 +142,7 @@ TypeError? ... print('wrong value') ... except TypeError: ... print('wrong type') -... +... wrong value >>> try: ... 123 + 'hello' @@ -150,9 +150,9 @@ wrong value ... print('wrong value') ... except TypeError: ... print('wrong type') -... +... wrong type ->>> +>>> ``` Seems to be working. @@ -165,15 +165,15 @@ We can also also catch multiple exceptions by catching ... 123 + 'hello' ... except (ValueError, TypeError): ... print('wrong value or type') -... +... wrong value or type >>> try: ... int('lol') ... except (ValueError, TypeError): ... print('wrong value or type') -... +... wrong value or type ->>> +>>> ``` Catching `Exception` will catch all errors. We'll learn more about why @@ -184,15 +184,15 @@ it does that in a moment. ... 123 + 'hello' ... except Exception: ... print("Oops!") -... +... Oops! >>> try: ... int('lol') ... except Exception: ... print("Oops!") -... +... Oops! ->>> +>>> ``` It's also possible to catch an exception and store it in a variable. @@ -204,12 +204,12 @@ Here we are catching an exception that Python created and storing it in ... 123 + 'hello' ... except TypeError as e: ... our_error = e -... +... >>> our_error TypeError("unsupported operand type(s) for +: 'int' and 'str'",) >>> type(our_error) ->>> +>>> ``` ## When should we catch exceptions? @@ -268,7 +268,7 @@ and then an exception we want to raise: Traceback (most recent call last): File "", line 1, in ValueError: lol is not a number ->>> +>>> ``` Of course, we can also raise an exception from a variable. @@ -279,7 +279,7 @@ Of course, we can also raise an exception from a variable. Traceback (most recent call last): File "", line 1, in ValueError: lol is not a number ->>> +>>> ``` If we [define a function](defining-functions.md) that raises an @@ -289,17 +289,17 @@ says which functions we ran to get to that error. ```py >>> def oops(): ... raise ValueError("oh no!") -... +... >>> def do_the_oops(): ... oops() -... +... >>> do_the_oops() Traceback (most recent call last): File "", line 1, in File "", line 2, in do_the_oops File "", line 2, in oops ValueError: oh no! ->>> +>>> ``` If our code was in a file we would also see the line of code @@ -422,7 +422,7 @@ This program allows the user to customize the message it prints by modifying a file the greeting is stored in, and it can create the file for the user if it doesn't exist already. This example also uses things from [the file chapter](files.md), [the function defining -chapter](defining-functions.md) and [the module chapter](modules.md). +chapter](defining-functions.md) and [the module chapter](modules.md). ```py # These are here so you can change them to customize the program diff --git a/basics/files.md b/basics/files.md index 17e3fad..5e83a91 100644 --- a/basics/files.md +++ b/basics/files.md @@ -62,8 +62,8 @@ Let's create a file and write a hello world to it. ```py >>> with open('hello.txt', 'w') as f: ... print("Hello World!", file=f) -... ->>> +... +>>> ``` Doesn't seem like it did anything. But actually it created a `hello.txt` @@ -81,7 +81,7 @@ object that is assigned to the variable `f`. ```py >>> f <_io.TextIOWrapper name='hello.txt' mode='w' encoding='UTF-8'> ->>> +>>> ``` File objects are not the same thing as paths and filenames, so if we try @@ -107,7 +107,7 @@ the file was indeed closed. ```py >>> f.closed True ->>> +>>> ``` When we had opened the file we could just print to it. The print is just @@ -125,10 +125,10 @@ we created to a list of lines. >>> with open('hello.txt', 'r') as f: ... for line in f: ... lines.append(line) -... +... >>> lines ['Hello World!\n'] ->>> +>>> ``` Trying to open a non-existent file with `w` or `a` creates the file for @@ -138,11 +138,11 @@ about errors [later](exceptions.md). ```py >>> with open('this-doesnt-exist.txt', 'r') as f: ... print("It's working!") -... +... Traceback (most recent call last): File "", line 1, in FileNotFoundError: [Errno 2] No such file or directory: 'this-doesnt-exist.txt' ->>> +>>> ``` So now we have the hello world in the `lines` variable, but it's @@ -162,15 +162,15 @@ Let's see how that works if we have more than one line in the file. ... print("Hello one!", file=f) ... print("Hello two!", file=f) ... print("Hello three!", file=f) -... +... >>> lines = [] >>> with open('hello.txt', 'r') as f: ... for line in f: ... lines.append(line) -... +... >>> lines ['Hello one!\n', 'Hello two!\n', 'Hello three!\n'] ->>> +>>> ``` There we go, each of our lines now ends with a `\n`. When we for @@ -185,10 +185,10 @@ great for this: >>> stripped = [] >>> for line in lines: ... stripped.append(line.rstrip('\n')) -... +... >>> stripped ['Hello one!', 'Hello two!', 'Hello three!'] ->>> +>>> ``` It's also possible to read lines one by one. Files have [a readline @@ -199,7 +199,7 @@ that reads the next line, and returns `''` if we're at the end of the file. >>> with open('hello.txt', 'r') as f: ... first_line = f.readline() ... second_line = f.readline() -... +... >>> first_line 'Hello one!\n' >>> second_line @@ -218,12 +218,12 @@ once: ... first.append(line) ... for line in f: ... second.append(line) -... +... >>> first ['Hello one!\n', 'Hello two!\n', 'Hello three!\n'] >>> second [] ->>> +>>> ``` File objects remember their position. When we tried to read the @@ -237,16 +237,16 @@ is in the beginning and everything works. >>> with open('hello.txt', 'r') as f: ... for line in f: ... first.append(line) -... +... >>> with open('hello.txt', 'r') as f: ... for line in f: ... second.append(line) -... +... >>> first ['Hello one!\n', 'Hello two!\n', 'Hello three!\n'] >>> second ['Hello one!\n', 'Hello two!\n', 'Hello three!\n'] ->>> +>>> ``` Usually it's best to just read the file once, and use the @@ -258,10 +258,10 @@ method](https://docs.python.org/3/library/io.html#io.TextIOBase.read). ```py >>> with open('hello.txt', 'r') as f: ... full_content = f.read() -... +... >>> full_content 'Hello one!\nHello two!\nHello three!\n' ->>> +>>> ``` We can also open full paths, like `open('C:\\Users\\me\\myfile.txt', 'r')`. @@ -277,7 +277,7 @@ C:\some ame >>> print('C:\\some\\name') C:\some\name ->>> +>>> ``` Another way to create paths is to tell Python to escape them by @@ -287,7 +287,7 @@ is short for "raw", not "read". ```py >>> r'C:\some\name' 'C:\\some\\name' ->>> +>>> ``` If our program is not meant to be ran on Windows and the paths @@ -297,7 +297,7 @@ don't contain backslashes we don't need to double anything or use ```py >>> print('/some/name') /some/name ->>> +>>> ``` Doing things like `open('C:\\Users\\me\\myfile.txt', 'r')` is not diff --git a/basics/getting-started.md b/basics/getting-started.md index 21c3b47..3580fba 100644 --- a/basics/getting-started.md +++ b/basics/getting-started.md @@ -23,10 +23,10 @@ Oops! That didn't work. But like I wrote in the Maybe we can press Enter without typing anything? ```py ->>> ->>> ->>> ->>> +>>> +>>> +>>> +>>> ``` That worked. How about numbers? @@ -40,7 +40,7 @@ That worked. How about numbers? 3.14 >>> -12.3 -12.3 ->>> +>>> ``` There we go, it echoes them back. @@ -51,7 +51,7 @@ instead of `3.14`. Maybe Python knows that? ```py >>> 3,14 (3, 14) ->>> +>>> ``` We didn't get an error... but `(3, 14)` is not at all what we expected! @@ -62,7 +62,7 @@ What if we type a `#`? ```py >>> # ->>> +>>> ``` Nothing happened at all. Maybe we can type a `#` and then some text @@ -70,7 +70,7 @@ after it? ```py >>> # hello there ->>> +>>> ``` Again, nothing happened. @@ -80,8 +80,8 @@ If you're not using IDLE, the prompt will change from `>>>` to ```py >>> # hello again -... ->>> +... +>>> ``` In Python, these pieces of text starting with a `#` are known as diff --git a/basics/handy-stuff-strings.md b/basics/handy-stuff-strings.md index 1a5cc92..ce9aa99 100644 --- a/basics/handy-stuff-strings.md +++ b/basics/handy-stuff-strings.md @@ -6,7 +6,7 @@ Python strings are just pieces of text. >>> our_string = "Hello World!" >>> our_string 'Hello World!' ->>> +>>> ``` So far we know how to add them together. @@ -14,7 +14,7 @@ So far we know how to add them together. ```py >>> "I said: " + our_string 'I said: Hello World!' ->>> +>>> ``` We also know how to repeat them multiple times. @@ -22,7 +22,7 @@ We also know how to repeat them multiple times. ```py >>> our_string * 3 'Hello World!Hello World!Hello World!' ->>> +>>> ``` Python strings are [immutable](https://docs.python.org/3/glossary.html#term-immutable). @@ -43,7 +43,7 @@ characters and the fifth place between the characters, we can do this: ```py >>> our_string[2:5] 'llo' ->>> +>>> ``` So the syntax is like `some_string[start:end]`. @@ -57,7 +57,7 @@ But what happens if we slice with negative values? ```py >>> our_string[-5:-2] 'orl' ->>> +>>> ``` It turns out that slicing with negative values simply starts counting @@ -74,7 +74,7 @@ can get everything except the first or last character like this: 'ello World!' >>> our_string[:-1] 'Hello World' ->>> +>>> ``` Remember that strings can't be changed in-place. @@ -84,7 +84,7 @@ Remember that strings can't be changed in-place. Traceback (most recent call last): File "", line 1, in TypeError: 'str' object does not support item assignment ->>> +>>> ``` There's also a step argument we can give to our slices, but I'm not @@ -97,7 +97,7 @@ So now we know how slicing works. But what happens if we forget the `:`? ```py >>> our_string[1] 'e' ->>> +>>> ``` That's interesting. We got a string that is only one character long. But @@ -119,7 +119,7 @@ first character is `our_string[0]`, the second character is 'l' >>> our_string[4] 'o' ->>> +>>> ``` So string indexes work like this: @@ -131,7 +131,7 @@ How about negative values? ```py >>> our_string[-1] '!' ->>> +>>> ``` We got the last character. @@ -224,7 +224,7 @@ like this: >>> name = 'Akuli' >>> 'My name is ' + name + '.' 'My name is Akuli.' ->>> +>>> ``` But that gets complicated if we have many things to add. @@ -234,7 +234,7 @@ But that gets complicated if we have many things to add. >>> network = 'freenode' >>> "My name is " + name + " and I'm on the " + channel + " channel on " + network + "." "My name is Akuli and I'm on the ##learnpython channel on freenode." ->>> +>>> ``` Instead it's recommended to use string formatting. It means putting @@ -253,7 +253,7 @@ our problem: 'Hello Akuli.' >>> "My name is {} and I'm on the {} channel on {}.".format(name, channel, network) "My name is Akuli and I'm on the ##learnpython channel on freenode." - >>> + >>> ``` - `%s`-formatting, also known as old-style formatting. This has less @@ -267,7 +267,7 @@ our problem: 'Hello Akuli.' >>> "My name is %s and I'm on the %s channel on %s." % (name, channel, network) "My name is Akuli and I'm on the ##learnpython channel on freenode." - >>> + >>> ``` In the second example we had `(name, channel, network)` on the right @@ -287,7 +287,7 @@ our problem: 'we have hello and (1, 2, 3)' >>> "we have %s" % (thestuff,) 'we have (1, 2, 3)' - >>> + >>> ``` Here `(thestuff,)` was a tuple that contained nothing but `thestuff`. @@ -311,7 +311,7 @@ All of these formatting styles have many other features also: 'Three zeros and number one: 0001' >>> 'Three zeros and number one: %04d' % 1 'Three zeros and number one: 0001' ->>> +>>> ``` If you need to know more about formatting I recommend reading @@ -330,7 +330,7 @@ True False >>> "Python" not in our_string True ->>> +>>> ``` We can get the length of a string with the `len` function. The name @@ -343,7 +343,7 @@ We can get the length of a string with the `len` function. The name 0 >>> len('\n') # python thinks of \n as one character 1 ->>> +>>> ``` We can convert strings, integers and floats with each other with @@ -360,7 +360,7 @@ are [later](classes.md). '123' >>> int('123') 123 ->>> +>>> ``` Giving an invalid string to `int` or `float` produces an error @@ -375,7 +375,7 @@ ValueError: invalid literal for int() with base 10: 'lol' Traceback (most recent call last): File "", line 1, in ValueError: could not convert string to float: 'hello' ->>> +>>> ``` ## Summary diff --git a/basics/if.md b/basics/if.md index ade5401..c572898 100644 --- a/basics/if.md +++ b/basics/if.md @@ -23,13 +23,13 @@ That's when `if` comes in. >>> its_raining = True >>> if its_raining: ... print("It's raining!") -... +... It's raining! >>> its_raining = False >>> if its_raining: ... print("It's raining!") # nothing happens -... ->>> +... +>>> ``` The prompt changed from `>>>` to `...`. It meant that Python was @@ -48,9 +48,9 @@ example code looks more like this: >>> if its_raining: print("It's raining!") - + It's raining! ->>> +>>> ``` But why is that `if its_raining` instead of `if(its_raining)`? @@ -63,7 +63,7 @@ Earlier we learned that `if` is a **keyword**. if = 123 ^ SyntaxError: invalid syntax ->>> +>>> ``` **Functions** like `print` need `()` after their name to work. But `if` is @@ -118,10 +118,10 @@ on your desktop, type `cd Desktop` before running the file. Running from IDLE looks like this: - >>> + >>> ========================= RESTART: /some/place/rain.py ========================= It's raining! - >>> + >>> And running from the Windows PowerShell or command prompt looks like this: @@ -129,14 +129,14 @@ this: C:\Users\You> cd Desktop C:\Users\You\Desktop> py rain.py It's raining! - C:\Users\You\Desktop> + C:\Users\You\Desktop> Running from a terminal looks like this: you@YourComputer:~$ cd Desktop you@YourComputer:~/Desktop$ python3 rain.py It's raining! - you@YourComputer:~/Desktop$ + you@YourComputer:~/Desktop$ From now on, **if a code example starts with `>>>` run it on the interactive prompt, and if it doesn't, write it to a file and run the diff --git a/basics/installing-python.md b/basics/installing-python.md index 635c907..5c9dbfd 100644 --- a/basics/installing-python.md +++ b/basics/installing-python.md @@ -91,10 +91,10 @@ On GNU/Linux or Mac OSX, you should have a terminal application installed already. Run it and type `python3`: you@YourComputer:~$ python3 - Python 3.4.3 (default, Oct 14 2015, 20:28:29) + Python 3.4.3 (default, Oct 14 2015, 20:28:29) [GCC 4.8.4] on linux Type "help", "copyright", "credits" or "license" for more information. - >>> + >>> Now you can type `exit()` and press Enter to get out of Python. diff --git a/basics/lists-and-tuples.md b/basics/lists-and-tuples.md index 31c6511..08e58bb 100644 --- a/basics/lists-and-tuples.md +++ b/basics/lists-and-tuples.md @@ -46,7 +46,7 @@ Let's open the `>>>` prompt and create a name list. >>> names = ['wub_wub', 'theelous3', 'RubyPinch', 'go|dfish', 'Nitori'] >>> names ['wub_wub', 'theelous3', 'RubyPinch', 'go|dfish', 'Nitori'] ->>> +>>> ``` There's many things [we can do with strings](handy-stuff-strings.md), @@ -59,7 +59,7 @@ and some of these things also work with lists. ['wub_wub', 'theelous3', 'RubyPinch', 'go|dfish', 'Nitori', 'Akuli'] >>> ['theelous3', 'RubyPinch'] * 2 # repeating ['theelous3', 'RubyPinch', 'theelous3', 'RubyPinch'] ->>> +>>> ``` With strings indexing and slicing both returned a string, but @@ -71,7 +71,7 @@ from the list if we're indexing. ['wub_wub', 'theelous3'] >>> names[0] # the first name 'wub_wub' ->>> +>>> ``` If we want to check if the program knows a name all we need to @@ -82,7 +82,7 @@ do is to use the `in` keyword. False >>> 'RubyPinch' in names True ->>> +>>> ``` We can't use this for checking if a list of names is a part of @@ -93,7 +93,7 @@ our name list. False >>> ['RubyPinch'] in names False ->>> +>>> ``` Lists have a few [useful @@ -115,7 +115,7 @@ multiple items from another list and `remove` removes an item. >>> names.extend(['go|dfish', 'theelous3']) # wb guys >>> names ['wub_wub', 'RubyPinch', 'Nitori', 'Akuli', 'go|dfish', 'theelous3'] ->>> +>>> ``` Note that `remove` removes only the first match it finds. @@ -125,7 +125,7 @@ Note that `remove` removes only the first match it finds. >>> names.remove('theelous3') >>> names # the second theelous3 is still there! ['go|dfish', 'theelous3'] ->>> +>>> ``` If we need to remove all matching items we can use a simple while loop. @@ -135,10 +135,10 @@ We'll talk more about loops [in the next chapter](loops.md). >>> names = ['theelous3', 'go|dfish', 'theelous3'] >>> while 'theelous3' in names: ... names.remove('theelous3') -... +... >>> names ['go|dfish'] ->>> +>>> ``` We can also use slicing and indexing to change the content: @@ -148,7 +148,7 @@ We can also use slicing and indexing to change the content: >>> names[1] = 'wub_wub' # replace LOL with wub_wub >>> names ['theelous3', 'wub_wub', 'RubyPinch', 'go|dfish', 'Nitori'] ->>> +>>> ``` As you can see, **list can be changed in-place**. In other @@ -164,7 +164,7 @@ most mutable things because they're designed to be changed in-place. >>> names = names.remove('Akuli') >>> print(names) # now it's None! None ->>> +>>> ``` This is the same thing that happened way back when [we assigned @@ -181,7 +181,7 @@ behave like this: >>> b.append(4) >>> a # this changed also! [1, 2, 3, 4] ->>> +>>> ``` This can be confusing at first, but it's actually easy to @@ -196,7 +196,7 @@ check if two variables point to the **same** thing. ```py >>> a is b True ->>> +>>> ``` Typing `[]` creates a **new** list every time. @@ -206,7 +206,7 @@ Typing `[]` creates a **new** list every time. False >>> [1, 2, 3] is [1, 2, 3] False ->>> +>>> ``` If we need **a new list with similar content** we can use the @@ -222,7 +222,7 @@ False [1, 2, 3, 4] >>> a [1, 2, 3] ->>> +>>> ``` If we draw a picture of our variables in this example it looks @@ -247,7 +247,7 @@ with `()` instead of `[]`. >>> thing = () >>> thing () ->>> +>>> ``` If we need to create a tuple that contains only one item we @@ -263,7 +263,7 @@ used in places like `(1 + 2) * 3`. 9 >>> (1 + 2,) * 3 (3, 3, 3) ->>> +>>> ``` It's also possible to create tuples by just separating things with @@ -275,7 +275,7 @@ but some people like to do it this way. (1, 2, 3) >>> 'hello', ('hello',) ->>> +>>> ``` Tuples don't have methods like append, extend and remove @@ -287,7 +287,7 @@ because they can't change themselves in-place. Traceback (most recent call last): File "", line 1, in AttributeError: 'tuple' object has no attribute 'append' ->>> +>>> ``` So, why the heck would we use tuples instead of lists? There are diff --git a/basics/loops.md b/basics/loops.md index 7a06d0d..c6bfa4c 100644 --- a/basics/loops.md +++ b/basics/loops.md @@ -19,7 +19,7 @@ if its_raining: print("Oh crap, it's raining!") ``` -While loops are really similar to if statements. +While loops are really similar to if statements. ```py its_raining = True @@ -115,7 +115,7 @@ while True: The program works like this: - Is it raining? (y=yes, n=no) who knows + Is it raining? (y=yes, n=no) who knows Enter y or n. Is it raining? (y=yes, n=no) y It's raining! @@ -183,13 +183,13 @@ We could also create an index variable, and use a while loop: >>> while index < length_of_stuff: ... print(stuff[index]) ... index += 1 -... +... hello hi how are you doing im fine how about you ->>> +>>> ``` But there's `len()` and an index variable we need to increment and a @@ -203,13 +203,13 @@ This is when for loops come in: ... # this is repeated for each element of stuff, that is, first ... # for stuff[0], then for stuff[1], etc. ... print(thing) -... +... hello hi how are you doing im fine how about you ->>> +>>> ``` Without the comments, that's only two simple lines, and one variable. @@ -218,13 +218,13 @@ Much better than anything else we tried before. ```py >>> for thing in stuff: ... print(thing) -... +... hello hi how are you doing im fine how about you ->>> +>>> ``` Note that `for thing in stuff:` is not same as `for (thing in stuff):`. @@ -246,10 +246,10 @@ be surprising: >>> stuff = ['hello', 'hi', 'how are you doing', 'im fine', 'how about you'] >>> for thing in stuff: ... stuff.remove(thing) -... +... >>> stuff ['hi', 'im fine'] ->>> +>>> ``` Instead, we can create a copy of stuff and loop over it. @@ -258,10 +258,10 @@ Instead, we can create a copy of stuff and loop over it. >>> stuff = ['hello', 'hi', 'how are you doing', 'im fine', 'how about you'] >>> for thing in stuff.copy(): ... stuff.remove(thing) -... +... >>> stuff [] ->>> +>>> ``` Or if we just want to clear a list, we can use the `clear` @@ -272,11 +272,11 @@ Or if we just want to clear a list, we can use the `clear` >>> stuff.clear() >>> stuff [] ->>> +>>> ``` -Later we'll learn that for loops are not actually limited to lists. -There are many other things we can for loop over. Things that can be for +Later we'll learn that for loops are not actually limited to lists. +There are many other things we can for loop over. Things that can be for looped over are called **iterables**. If you're using Python 3.2 or older you need to use `stuff[:]` instead diff --git a/basics/modules.md b/basics/modules.md index 8471104..fb2bd27 100644 --- a/basics/modules.md +++ b/basics/modules.md @@ -15,7 +15,7 @@ Let's say we want to generate a random number between 1 and 2 >>> random.randint(1, 3) 2 ->>> +>>> ``` That's cool... but how does that work? @@ -29,7 +29,7 @@ gave us? ```py >>> random ->>> +>>> ``` So it's a module, and it comes from a path... but what does @@ -92,7 +92,7 @@ Traceback (most recent call last): File "/home/akuli/random.py", line 4, in print("A random number between 1 and 3:", random.randint(1, 3)) AttributeError: 'module' object has no attribute 'randint' ->>> +>>> ``` So first of all, what is that random variable? @@ -100,7 +100,7 @@ So first of all, what is that random variable? ```py >>> random ->>> +>>> ``` What the heck? It's a module called random... but it's not the @@ -137,7 +137,7 @@ places that modules are searched from: '/home/akuli/.local/lib/python3.4/site-packages', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages'] ->>> +>>> ``` So that's where my Python finds its modules. The first thing in my @@ -157,21 +157,21 @@ Let's go ahead and import it, and see how it works. ```py >>> import hello Hello World! ->>> +>>> ``` Works as expected, but what happens if we try to import it again? ```py >>> import hello ->>> +>>> ``` Nothing happened at all. The reason why the module wasn't loaded twice is simple. In a large project with many files it's normal to import the same -module in many files, so it gets imported multiple times. If +module in many files, so it gets imported multiple times. If Python would reload the module every time it's imported, dividing code to multiple files would make the code run slower. @@ -202,7 +202,7 @@ The official documentation is >>> random.shuffle(colors) # mix the color list in-place >>> colors ['yellow', 'red', 'blue'] ->>> +>>> ``` ### Things that are built into Python @@ -225,13 +225,13 @@ Hello! hello >>> line 'hello\n' ->>> +>>> >>> # information about Python's version, behaves like a tuple >>> sys.version_info sys.version_info(major=3, minor=4, micro=2, releaselevel='final', serial=0) >>> sys.version_info[:3] # this is Python 3.4.2 (3, 4, 2) ->>> +>>> >>> sys.exit() # exit out of Python ``` @@ -274,7 +274,7 @@ sys. The official documentation is 90.0 >>> math.sin(math.pi/2) # sin of 90 degrees or 1/2 π radians 1.0 ->>> +>>> ``` ### Time-related things @@ -289,7 +289,7 @@ The official documentation for the time module is 1474896325.2394648 >>> time.strftime('%d.%m.%Y %H:%M:%S') # format current time nicely '26.09.2016 16:33:58' ->>> +>>> ``` You are probably wondering how `time.time()` can be used and why its @@ -316,7 +316,7 @@ is running on. The official documentation is >>> os.getcwd() # short for "get current working directory" '/home/akuli' >>> os.mkdir('stuff') # create a folder, short for "make directory" ->>> +>>> >>> os.path.isfile('hello.txt') # check if it's a file True >>> os.path.isfile('stuff') @@ -329,7 +329,7 @@ True True >>> os.path.exists('stuff') True ->>> +>>> >>> # this joins with '\\' on windows and '/' on most other systems >>> path = os.path.join('stuff', 'hello-world.txt') >>> path @@ -337,10 +337,10 @@ True >>> with open(path, 'w') as f: ... # now this goes to the stuff folder we created ... print("Hello World!", file=f) -... +... >>> os.listdir('stuff') # create a list of everything in stuff ['hello-world.txt'] ->>> +>>> ``` ## Examples @@ -432,7 +432,7 @@ while True: ## More modules! Python's standard library has many awesome modules and I just -can't tell about each and every module I use here. Here's some of +can't tell about each and every module I use here. Here's some of my favorite modules from the standard library. Don't study them one by one, but look into them when you think you might need them. When reading the documentation it's usually easiest to find what diff --git a/basics/trey-hunner-zip-and-enumerate.md b/basics/trey-hunner-zip-and-enumerate.md index 210f165..3b9197c 100644 --- a/basics/trey-hunner-zip-and-enumerate.md +++ b/basics/trey-hunner-zip-and-enumerate.md @@ -13,7 +13,7 @@ assigning values to multiple variables at once. It works like this: 1 >>> b 2 ->>> +>>> ``` We can use `()` and `[]` around these values however we want and @@ -26,7 +26,7 @@ everything will still work the same way. `[]` creates a list, and 1 >>> b 2 ->>> +>>> ``` We can also have `[]` or `()` on one side but not on the other @@ -38,7 +38,7 @@ side. 1 >>> b 2 ->>> +>>> ``` Python created a tuple automatically. @@ -46,7 +46,7 @@ Python created a tuple automatically. ```py >>> 1, 2 (1, 2) ->>> +>>> ``` If we're for looping over a list with pairs of values in it we @@ -57,11 +57,11 @@ could do this: >>> for pair in items: ... a, b = pair ... print(a, b) -... +... a 1 b 2 c 3 ->>> +>>> ``` Or we can tell the for loop to unpack it for us. @@ -69,11 +69,11 @@ Or we can tell the for loop to unpack it for us. ```py >>> for a, b in items: ... print(a, b) -... +... a 1 b 2 c 3 ->>> +>>> ``` Now you're ready to read [this awesome looping diff --git a/basics/using-functions.md b/basics/using-functions.md index 8b93d2e..085425c 100644 --- a/basics/using-functions.md +++ b/basics/using-functions.md @@ -5,7 +5,7 @@ Now we know how to make Python show text. ```py >>> 'Hello!' 'Hello!' ->>> +>>> ``` But that includes `''`. One way to show text to the user without `''` @@ -15,7 +15,7 @@ to do with physical printers, it just means showing text on the screen. ```py >>> print('Hello!') Hello! ->>> +>>> ``` Now we are ready for a classic example, which is also the first program @@ -24,7 +24,7 @@ in many tutorials :) ```py >>> print("Hello World!") Hello World! ->>> +>>> ``` But what exactly is print? @@ -36,7 +36,7 @@ Let's see what happens if we type `print` without the `('Hello')` part. ```py >>> print ->>> +>>> ``` We could also type `print(print)`, it would do the same thing. Python @@ -66,7 +66,7 @@ Now we know that `thingy = print('hello')` doesn't store the hello >>> print(thingy) # thingy is now None None ->>> +>>> ``` So doing `thingy = print('hello')` set `thingy` to None. @@ -107,7 +107,7 @@ getting a string from the user. Enter something:hello >>> stuff 'hello' ->>> +>>> ``` `input("Enter something:")` showed the text `Enter something:` on the @@ -120,7 +120,7 @@ Usually we want to add a space after the `:`, like this: ```py >>> stuff = input("Enter something: ") # now there's space between : and where i type Enter something: hello ->>> +>>> ``` ## Handy things about print @@ -131,7 +131,7 @@ arguments. ```py >>> print() ->>> +>>> ``` In Python, `\n` is a newline character. Printing a string that contains @@ -141,7 +141,7 @@ a newline character also prints a newline: >>> print('hello\nworld') hello world ->>> +>>> ``` If we want to print a real backslash, we need to **escape** it by typing @@ -152,7 +152,7 @@ two backslashes. >>> print('hello\\nworld') hello\nworld - >>> + >>> We can also pass multiple arguments to the print function. We need to separate them with commas and print will add spaces between them. @@ -160,7 +160,7 @@ separate them with commas and print will add spaces between them. ```py >>> print("Hello", "World!") Hello World! ->>> +>>> ``` Unlike with `+`, the arguments don't need to be strings. @@ -168,7 +168,7 @@ Unlike with `+`, the arguments don't need to be strings. ```py >>> print(42, "is an integer, and the value of pi is", 3.14) 42 is an integer, and the value of pi is 3.14 ->>> +>>> ``` ## Variables names and built-in things @@ -182,7 +182,7 @@ valid variable name because it's a keyword. if = 123 ^ SyntaxError: invalid syntax ->>> +>>> ``` But `print` and `input` are not keywords, so can we use them as @@ -192,7 +192,7 @@ variable names? >>> print = "hello" >>> print 'hello' ->>> +>>> ``` We can, but there's a problem. Now we can't even do our hello world! @@ -202,7 +202,7 @@ We can, but there's a problem. Now we can't even do our hello world! Traceback (most recent call last): File "", line 1, in TypeError: 'str' object is not callable ->>> +>>> ``` The error message complains that strings aren't callable because we diff --git a/basics/variables.md b/basics/variables.md index 544cb62..ffe0066 100644 --- a/basics/variables.md +++ b/basics/variables.md @@ -24,7 +24,7 @@ We can also change the value of a variable after setting it. >>> a = 2 # make a point to 2 instead of 1 >>> a 2 ->>> +>>> ``` So now our diagram looks like this: @@ -40,7 +40,7 @@ variable and sets the first variable to point to that value. >>> a = 5 >>> b # b didn't change when a changed 1 ->>> +>>> ``` Trying to access a variable that is not defined creates an error @@ -51,7 +51,7 @@ message. Traceback (most recent call last): File "", line 1, in NameError: name 'thingy' is not defined ->>> +>>> ``` Variables are simple to understand, but there's a few details that we @@ -78,7 +78,7 @@ underscores. ```py >>> magic_number = 123 >>> greeting = "Hello World!" ->>> +>>> ``` Variable names are case-sensitive, like many other things in Python. @@ -108,7 +108,7 @@ keyword as a variable name causes a syntax error. if = 123 ^ SyntaxError: invalid syntax ->>> +>>> ``` When assigning something to a variable using a `=`, the right side of @@ -121,7 +121,7 @@ back to the same variable on the left side. >>> a = a + 1 >>> a 2 ->>> +>>> ``` To do something to a variable (for example, to add something to it) we @@ -133,7 +133,7 @@ can also use `+=`, `-=`, `*=` and `/=` instead of `+`, `-`, `*` and >>> a -= 2 # a = a - 2 >>> a *= 2 # a = a * 2 >>> a /= 2 # a = a / 2 ->>> +>>> ``` This is not limited to integers. @@ -144,7 +144,7 @@ This is not limited to integers. >>> a += 'world' >>> a 'hellohellohelloworld' ->>> +>>> ``` Now we also understand why typing hello to the prompt didn't work in @@ -155,7 +155,7 @@ variable called hello and then type hello: >>> hello = 'hello there' >>> hello 'hello there' ->>> +>>> ``` ## Booleans @@ -171,7 +171,7 @@ True >>> a = 2 >>> a == 1 False ->>> +>>> ``` `a == 1` is the same as `(a == 1) == True`, but `a == 1` is more @@ -188,7 +188,7 @@ True False >>> (a == 1) == True False ->>> +>>> ``` ## None @@ -204,7 +204,7 @@ first: ```py >>> thingy = None >>> thingy ->>> +>>> ``` That was weird! We set thingy to None, but typing `thingy` didn't echo @@ -219,7 +219,7 @@ If we want to see a None on the interactive prompt, we can use print. ```py >>> print(thingy) None ->>> +>>> ``` Another confusing thing is that if we do something weird to None we get @@ -235,7 +235,7 @@ AttributeError: 'NoneType' object has no attribute 'hello' Traceback (most recent call last): File "", line 1, in TypeError: 'NoneType' object is not callable ->>> +>>> ``` ## Other comparing operators diff --git a/basics/what-is-true.md b/basics/what-is-true.md index fdff814..05d4c83 100644 --- a/basics/what-is-true.md +++ b/basics/what-is-true.md @@ -45,7 +45,7 @@ True True >>> bool('False') # this isn't special in any way True ->>> +>>> ``` As we can see, the Boolean value of most strings is True. The @@ -55,7 +55,7 @@ only string that has a false Boolean value is the empty string, ```py >>> bool('') False ->>> +>>> ``` Most other things are also treated as False if they're empty and @@ -74,7 +74,7 @@ False True >>> bool({}) False ->>> +>>> ``` None and zero are also falsy, but positive and negative numbers @@ -91,7 +91,7 @@ False True >>> bool(-1) True ->>> +>>> ``` Most other things are also treated as True. @@ -101,7 +101,7 @@ Most other things are also treated as True. True >>> bool(print) True ->>> +>>> ``` ## When and why should we use Boolean values of things? @@ -122,7 +122,7 @@ empty lists: ... print("It's empty!") ... else: ... print("It's not empty.") -... +... >>> is_this_empty([1, 2, 3]) It's not empty. >>> is_this_empty([]) @@ -133,7 +133,7 @@ It's not empty. It's not empty. >>> is_this_empty({}) It's not empty. ->>> +>>> ``` We could improve the code by checking against different empty @@ -145,8 +145,8 @@ things. ... print("It's empty!") ... else: ... print("It's not empty.") -... ->>> +... +>>> ``` But Python has many other data types that can be empty and we @@ -160,8 +160,8 @@ work with all of them: ... print("It's not empty.") ... else: ... print("It's empty!") -... ->>> +... +>>> ``` There's also cases when we should not rely on the Boolean value. diff --git a/editor-setup.md b/editor-setup.md index 2bb52aa..3b54ea6 100644 --- a/editor-setup.md +++ b/editor-setup.md @@ -1,10 +1,10 @@ # Setting up an editor for programming -Python comes with its IDLE, and you can use it in this tutorial. If you -don't like using it for some reason, you need [PowerShell, command -prompt or -terminal](basics/installing-python.md#if-you-like-working-with-powershell-command-prompt-or-terminal) -for trying out things. You also need an editor for writing code that +Python comes with its IDLE, and you can use it in this tutorial. If you +don't like using it for some reason, you need [PowerShell, command +prompt or +terminal](basics/installing-python.md#if-you-like-working-with-powershell-command-prompt-or-terminal) +for trying out things. You also need an editor for writing code that will be stored in files. If you use IDLE as your editor, **it comes with everything set up for From 2827bbfb389b882e4b28acd7ad52835b16bae5f9 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 17 Jan 2017 13:05:29 +0200 Subject: [PATCH 176/329] typo --- advanced/functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/advanced/functions.md b/advanced/functions.md index d2a6947..2ce4ee9 100644 --- a/advanced/functions.md +++ b/advanced/functions.md @@ -19,7 +19,7 @@ functions and how they are useful. ## Multiple return values Function can take multiple arguments, but they can only return one -value. But sometimes it makes sense to remove multiple values as well: +value. But sometimes it makes sense to return multiple values as well: ```py def login(): From 630b3c1603274cad846bcb8c81209d343f1f0e48 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 17 Jan 2017 18:24:12 +0200 Subject: [PATCH 177/329] working on iteration stuff --- README.md | 2 +- advanced/iterators.md | 264 ----------------------- advanced/iters.md | 447 +++++++++++++++++++++++++++++++++++++++ advanced/magicmethods.md | 2 +- images/drawings.odg | Bin 20087 -> 23195 bytes images/freeze-melt.png | Bin 0 -> 41886 bytes images/generators.png | Bin 0 -> 15713 bytes 7 files changed, 449 insertions(+), 266 deletions(-) delete mode 100644 advanced/iterators.md create mode 100644 advanced/iters.md create mode 100644 images/freeze-melt.png create mode 100644 images/generators.png diff --git a/README.md b/README.md index ad8f5c3..1ca6a81 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ than complex. 1. [Advanced stuff with functions](advanced/functions.md) 2. [Magic methods](advanced/magicmethods.md) -3. [Iterables and iterators](advanced/iterators.md) +3. [Iterables, iterators and generators](advanced/iters.md) ### Other things this tutorial comes with diff --git a/advanced/iterators.md b/advanced/iterators.md deleted file mode 100644 index 7154204..0000000 --- a/advanced/iterators.md +++ /dev/null @@ -1,264 +0,0 @@ -# Iterables and iterators - -So far we have used for loops with many different kinds of things. - -```py ->>> for name in ['theelous3', 'RubyPinch', 'go|dfish']: -... print(name) -... -theelous3 -RubyPinch -go|dfish ->>> for letter in 'abc': -... print(letter) -... -a -b -c ->>> -``` - -For looping over something is one way to **iterate** over it. Some other -things also iterate, for example, `' '.join(['a', 'b', 'c'])` iterates -over the list `['a', 'b', 'c']`. If we can for loop over something, then -that something is **iterable**. For example, strings and lists are -iterable, but integers and floats are not. - -```py ->>> for thing in 123: -... print(thing) -... -Traceback (most recent call last): - File "", line 1, in -TypeError: 'int' object is not iterable ->>> -``` - -## Iterators - -Lists and strings don't change when we iterate over them. - -```py ->>> word = 'hi' ->>> for character in word: -... print(character) -... -h -i ->>> word -'hello' ->>> -``` - -We can also iterate over [files](../basics/files.md), but they change -when we do that. They remember their position, so if we iterate over -them twice we get the content once only. - -```py ->>> with open('test.txt', 'w') as f: -... print("one", file=f) -... print("two", file=f) -... ->>> a = [] ->>> b = [] ->>> with open('test.txt', 'r') as f: -... for line in f: -... a.append(line) -... for line in f: -... b.append(line) -... ->>> a -['one\n', 'two\n'] ->>> b -[] ->>> -``` - -We have also used [enumerate](../basics/trey-hunner-zip-and-enumerate.md) -before, and it actually remembers its position also: - -```py ->>> e = enumerate('hello') ->>> for pair in e: -... print(pair) -... -(0, 'h') -(1, 'e') -(2, 'l') -(3, 'l') -(4, 'o') ->>> for pair in e: -... print(pair) -... ->>> -``` - -Iterators are **iterables that remember their position**. For example, -`open('test.txt', 'r')` and `enumerate('hello')` are iterators. -Iterators can only be used once, so we need to create a new iterator if -we want to do another for loop. - -Here's a picture that hopefully explains this better: - -![Iterables and iterators.](../images/iters.png) - -## Iterating manually - -Iterators have a magic method called `__next__`, and there's a built-in -function called `next()` for calling that. Calling `next()` on an -iterator gets the next value and moves it forward. Like this: - -```py ->>> e = enumerate('abc') ->>> e.__next__() -(0, 'a') ->>> e.__next__() -(1, 'b') ->>> e.__next__() -(2, 'c') ->>> -``` - -There's also a built-in `next()` function that does the same thing: - -```py ->>> e = enumerate('abc') ->>> next(e) -(0, 'a') ->>> next(e) -(1, 'b') ->>> next(e) -(2, 'c') ->>> -``` - -Here `e` remembers its position, and every time we call `next(e)` it -gives us the next element and moves forward. When it has no more values -to give us, calling `next(e)` raises a StopIteration: - -```py ->>> next(e) -Traceback (most recent call last): - File "", line 1, in -StopIteration ->>> -``` - -There is usually not a good way to check if the iterator is at the end, -and it's best to just try to get an value from it and catch -StopIteration. - -This is actually what for looping over an iterator does. For example, -this code... - -```py -for pair in enumerate('hello'): - print(pair) -``` - -...does roughly the same thing as this code: - -```py -e = enumerate('hello') -while True: - try: - pair = next(e) - except StopIteration: - # it's at the end, time to stop - break - # we got a pair - print(pair) -``` - -The for loop version is much simpler to write and I wrote the while loop -version just to explain what the for loop does. - -## Converting to iterators - -Now we know what iterating over an iterator does. But how about -iterating over a list or a string? They are not iterators, so we can't -call `next()` on them: - -```py ->>> next('abc') -Traceback (most recent call last): - File "", line 1, in -TypeError: 'str' object is not an iterator ->>> -``` - -There's a built-in function called `iter()` that converts anything -iterable to an iterator. - -```py ->>> i = iter('abc') ->>> i - ->>> next(i) -'a' ->>> next(i) -'b' ->>> next(i) -'c' ->>> next(i) -Traceback (most recent call last): - File "", line 1, in -StopIteration ->>> -``` - -Calling `iter()` on anything non-iterable gives us an error. - -```py ->>> iter(123) -Traceback (most recent call last): - File "", line 1, in -TypeError: 'int' object is not iterable ->>> -``` - -If we try to convert an iterator to an iterator using `iter()` we just -get back the same iterator. - -```py ->>> e = enumerate('abc') ->>> iter(e) is e -True ->>> -``` - -So code like this... - -```py -for thing in stuff: - print(thing) -``` - -...works roughly like this: - -```py -iterator = iter(stuff) -while True: - try: - thing = next(iterator) - except StopIteration: - break - print(thing) -``` - -## Custom iterables - -Implementing a custom iterator is easy. All we need to do is to define a -`__next__` method that gets the next element, and an `__iter__` method -that returns the iterator itself. For example, here's an iterator that -behaves like `iter([1, 2, 3])`: - - - -*** - -You may use this tutorial freely at your own risk. See -[LICENSE](../LICENSE). - -[Previous](magicmethods.md) | [Next](../README.md) | -[List of contents](../README.md#advanced) diff --git a/advanced/iters.md b/advanced/iters.md new file mode 100644 index 0000000..27dc7ec --- /dev/null +++ b/advanced/iters.md @@ -0,0 +1,447 @@ +# Iterables, iterators and generators + +So far we have used for loops with many different kinds of things. + +```py +>>> for name in ['theelous3', 'RubyPinch', 'go|dfish']: +... print(name) +... +theelous3 +RubyPinch +go|dfish +>>> for letter in 'abc': +... print(letter) +... +a +b +c +>>> +``` + +For looping over something is one way to **iterate** over it. Some other +things also iterate, for example, `' '.join(['a', 'b', 'c'])` iterates +over the list `['a', 'b', 'c']`. If we can iterate over something, then +that something is **iterable**. For example, strings and lists are +iterable, but integers and floats are not. + +```py +>>> for thing in 123: +... print(thing) +... +Traceback (most recent call last): + File "", line 1, in +TypeError: 'int' object is not iterable +>>> +``` + +## Iterators + +Lists and strings don't change when we iterate over them. + +```py +>>> word = 'hi' +>>> for character in word: +... print(character) +... +h +i +>>> word +'hello' +>>> +``` + +We can also iterate over [files](../basics/files.md), but they change +when we do that. They remember their position, so if we iterate over +them twice we get the content once only. + +```py +>>> with open('test.txt', 'w') as f: +... print("one", file=f) +... print("two", file=f) +... +>>> a = [] +>>> b = [] +>>> with open('test.txt', 'r') as f: +... for line in f: +... a.append(line) +... for line in f: +... b.append(line) +... +>>> a +['one\n', 'two\n'] +>>> b +[] +>>> +``` + +We have also used [enumerate](../basics/trey-hunner-zip-and-enumerate.md) +before, and it actually remembers its position also: + +```py +>>> e = enumerate('hello') +>>> for pair in e: +... print(pair) +... +(0, 'h') +(1, 'e') +(2, 'l') +(3, 'l') +(4, 'o') +>>> for pair in e: +... print(pair) +... +>>> +``` + +**Iterators are iterables that remember their position.** For example, +`open('test.txt', 'r')` and `enumerate('hello')` return iterators. +Iterators can only be used once, so we need to create a new iterator if +we want to do another for loop. + +Here's a picture that might explain this better: + +![Iterables and iterators.](../images/iters.png) + +## Iterating manually + +Iterators have a magic method called `__next__`, and there's a built-in +function called `next()` for calling that. Calling `next()` on an +iterator gets the next value and moves it forward. Like this: + +```py +>>> e = enumerate('abc') +>>> e.__next__() +(0, 'a') +>>> e.__next__() +(1, 'b') +>>> e.__next__() +(2, 'c') +>>> +``` + +There's also a built-in `next()` function that does the same thing: + +```py +>>> e = enumerate('abc') +>>> next(e) +(0, 'a') +>>> next(e) +(1, 'b') +>>> next(e) +(2, 'c') +>>> +``` + +Here `e` remembers its position, and every time we call `next(e)` it +gives us the next element and moves forward. When it has no more values +to give us, calling `next(e)` raises a StopIteration: + +```py +>>> next(e) +Traceback (most recent call last): + File "", line 1, in +StopIteration +>>> +``` + +There is usually not a good way to check if the iterator is at the end, +and it's best to just try to get a value from it and catch +StopIteration. That's actually what for looping over an iterator does. +For example, this code... + +```py +for pair in enumerate('hello'): + print(pair) +``` + +...does roughly the same thing as this code: + +```py +e = enumerate('hello') +while True: + try: + pair = next(e) + except StopIteration: + # it's at the end, time to stop + break + # we got a pair + print(pair) +``` + +The for loop version is much simpler to write and I wrote the while loop +version just to explain what the for loop does. + +## Converting to iterators + +Now we know what iterating over an iterator does. But how about +iterating over a list or a string? They are not iterators, so we can't +call `next()` on them: + +```py +>>> next('abc') +Traceback (most recent call last): + File "", line 1, in +TypeError: 'str' object is not an iterator +>>> +``` + +There's a built-in function called `iter()` that converts anything +iterable to an iterator. + +```py +>>> i = iter('abc') +>>> i + +>>> next(i) +'a' +>>> next(i) +'b' +>>> next(i) +'c' +>>> next(i) +Traceback (most recent call last): + File "", line 1, in +StopIteration +>>> +``` + +Calling `iter()` on anything non-iterable gives us an error. + +```py +>>> iter(123) +Traceback (most recent call last): + File "", line 1, in +TypeError: 'int' object is not iterable +>>> +``` + +If we try to convert an iterator to an iterator using `iter()` we just +get back the same iterator. + +```py +>>> e = enumerate('abc') +>>> iter(e) is e +True +>>> +``` + +So code like this... + +```py +for thing in stuff: + print(thing) +``` + +...works roughly like this: + +```py +iterator = iter(stuff) +while True: + try: + thing = next(iterator) + except StopIteration: + break + print(thing) +``` + +## Generators + +It's possible to create a custom iterator with a class that defines an +`__iter__` method that returns self and a `__next__` method that gets +the next value. I'm not going to talk about it now because there's a +much simpler way to implement iterators. Let's make a function that +creates an iterator that behaves like `iter([1, 2, 3])` using the +`yield` keyword: + +```py +>>> def thingy(): +... yield 1 +... yield 2 +... yield 3 +... +>>> +``` + +We can only `yield` inside a function, yielding elsewhere raises an +error. + +```py +>>> yield 'hi' + File "", line 1 +SyntaxError: 'yield' outside function +>>> +``` + +Let's try out our thingy function and see how it works. + +```py +>>> thingy() + +>>> +``` + +What the heck? We don't return anything from the function, but it still +doesn't return None! Putting a `yield` anywhere in a function makes it +return **generators** instead of returning anything. **Generators are +iterators** with some more features that we don't need to care about. + +![Generators.](../images/generators.png) + +The generator we got works just like other iterators: + +>>> c = thingy() +>>> t + +>>> next(t) +1 +>>> next(t) +2 +>>> next(t) +3 +>>> next(t) +Traceback (most recent call last): + File "", line 1, in +StopIteration +>>> for number in thingy(): +... print(number) +... +1 +2 +3 +>>> + +This whole thing may feel kind of insane. If we add some parts between +the yields, when do they run? How does Python know when to run what? + +Let's find out. + +```py +>>> def printygen(): +... print("starting") +... yield 1 +... print("between 1 and 2") +... yield 2 +... print("between 2 and 3") +... yield 3 +... print("end") +... +>>> p = printygen() +>>> +``` + +That's weird! We called it, but it didn't print "starting"! + +Let's see what happens if we call `next()` on it. + +```py +>>> got = next(p) +starting +>>> got +1 +>>> +``` + +Now it started, but it's frozen! It's just stuck on that `yield 1`. + +An easy way to think about this is to compare it to our computers. +When we suspend a computer it goes into some kind of stand-by mode, +and we can later continue using the computer all of our programs are +still there just like they were when we left. + +A similar thing happens here. Our function is running, but it's just +stuck at the yield and waiting for us to call `next()` on it again. + +```py +>>> next(p) +between 1 and 2 +2 +>>> next(p) +between 2 and 3 +3 +>>> next(p) +end +Traceback (most recent call last): + File "", line 1, in +StopIteration +>>> +``` + +Here's a drawing of what's going on: + +![A picture of printygen.](../images/freeze-melt.png) + +The good news is that **usually we don't need to worry about when the +parts between the yields run**. Actually we don't even need to use +`iter()` or `next()` most of the time, but I think it's nice to know how +for loops work. + +`yield` is useful when we want the function to output so many things +that making a list of them would be too slow or the list wouldn't fit in +the computer's memory. So instead of this... + +```py +def get_things(): + result = [] + # code that appends things to result + return result +``` + +...we can do this: + +```py +def get_things(): + # code that yields stuff +``` + +Both of these functions can be used like this: + +```py +for thing in get_things(): + # do something with thing +``` + +It's actually possible to create an iterator that yields an infinite +number of things: + +```py +>>> def count(): +... current = 1 +... while True: +... yield current +... current += 1 +... +>>> c = count() +>>> next(c) +1 +>>> next(c) +2 +>>> next(c) +3 +>>> next(c) +4 +>>> +``` + +[The itertools module](https://docs.python.org/3/library/itertools.html) +contains many useful functions like this. For example, +`itertools.count(1)` does the same thing as our `count()`. + +## Summary + +- An iterable is something that we can for loop over. +- An iterator is an iterable that remembers its position. +- For loops create an iterator of the iterable and call its `__next__` + method until it raises a StopIteration. +- Functions that contain yields return generators. Iterating the + generator runs the function bit by bit and gives us the values it + yields. +- The itertools module contains many useful functions that return + iterators. + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](../LICENSE). + +[Previous](magicmethods.md) | [Next](../README.md) | +[List of contents](../README.md#advanced) diff --git a/advanced/magicmethods.md b/advanced/magicmethods.md index 5962321..9857fce 100644 --- a/advanced/magicmethods.md +++ b/advanced/magicmethods.md @@ -256,5 +256,5 @@ are not meant to be imported. You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). -[Previous](functions.md) | [Next](iterators.md) | +[Previous](functions.md) | [Next](iters.md) | [List of contents](../README.md#advanced) diff --git a/images/drawings.odg b/images/drawings.odg index fadd0324a4a073e6ce7f06ff0445db2f84b9c273..627ee36c61c5864060fd4d0f937cd39a91e5ce42 100644 GIT binary patch literal 23195 zcmeEtQ;=oB(`VbZZQJHFr#Wrgw(V(6+qUg#+qP}Hd++==zK1Vjcb_(5U-m}a%Di>z z~u6N8<-iLJ4nk&BIqtuup}qk+A-g^`oOe-ju1q*yRb0R;5#iv-�s;nt0s(NI!nx5vKorSR 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 IWr+IqKh0#cH~;_u literal 20087 zcmeFYRdgLO*Cl95OmWQ2%*-4!Gc!}n%*@Qp%pBV>Gc(0@%*@O@m9MA&UNhZ2PxCh8 zweBgYq+8{ZboSZ%sII&eI0Om^2owkiXBC}fE;!u)H3$gEzYlN<#M;8z#L3;x#K6wZ z%EHLN$->r#-o?h4&ep)u!jaC_&cw#p*2vk~#Kwuv%)!9U+``CF{{M186ReYiUw9xO z|2`PN1(nU6tqpAqEUX;qo&I}~&d$axTwYcT4h9Pb=mIApF02R~n?OK7L7>2Zl7~QE z6bJ~Or-ZP8vRl@9w!58*$iuK6$_f&+76G&+2)Ohz5}JfM3{=Ai8I(b8`iLfncsLjl zX?%Qw0$V&{`WKwxAS7c1Oi0TfiabJs-@-09y$nIDBs2lkiJPSx<#(4a3BTg^f>Zar zKHQu)JH6X4+YeVuHXLn2w7NI$jr=Ke!cKosaESi zn)X@Ke(~~hT5FQ|uGMU1VASIWnw680(dP61veIY<`Q=NzoWA}RyG=!#fDoP7_)f8& z@kLrJwa{-7Z?^#m(kt%n&yUxwEqz~KUmHtv^P`*n@fPbeG+c zOEJ)Pm-D{KJnX1wERTmX_wBx5aLDg=Wm2hhh=_-?c+B3OQSzdqo zoo;XDWU;xS)_9ezl?S_%(Xn ze9gWG>1I1SJIiucv#pM1NJ~{3$Z~$)%ks1pfx$)W?eczgxme@0m?Nn{d#tlsVG5WD zM<(Cl`P*bEW_f>*X*&nPYO|I`b|&Zhl9+S~7j9?J^m9=Yn7}MfN0Ph;`-qUkZ91Pr93dIn@tJ(N%zdMZYTczFFFwW~W znxDyTn*q6&Ku{YWr66JV{^Bf~s_+JbN~Q0asI{RWjwseOXm2wZfjS!9`1bzZN_ELA zPa}oW&9{fRpU!Odag*8|g~!Xq#N=@Lry8SNtyWhZc2(cP>b4)Aze=Og^yz9lZIYAa zVhnfe4REYcLOwp9!>Mdz4)d8jrBd1aw7os!xq+dfF%p8<0&p-e63{^f`SZU`qoED5 zSseAYn_cxr!=@%ComYLZ>ut`bf14^tikB~cX!KEE59_$DJAb^nU--DWaSZXf-;m@6 zLc(tVXyy+NsR=BC8XfMa(B6>mxF=brhj*kHuZ6LE84Lzsirfx+BgxciT+SybC@4Y2 zoF1R=k9wURi@%BH8}djfzw_$+wljEtxz7@u9U-EnwO;#ePf-F~aX1E7$Y7~PN6CBn zdIx!l%7#v_i^q5bfd^6sI%T!dY+B2wzABaEp!+G*pMX_RB8j3PXM-LCmw>b{d_wB-lJCrlzZ^@A@pCquuqj&A+d4Brc4Oy*lw+VL<)oW`}txY}$DKxtw^g7IA0gha{W$jHbKGqO$;wN4Lbwi(C@&EIx} z0YBU!NL4CTi*?$Aa|v$$&Jwvhywg2aq1OoPXfr?h74Fe1X*`P*kXUfZe1GcL=^EY` z)Oy(}u|qCjQ>GLqn4i2pe{!#A;1L?O@^UcK^S)mMrsLyz+IOhn;JS_E2Ly#a;L*QW z6UpUFr)Ag&Fj=^up`mR%u0z~qsmaH1V3B6rCes)T0sM*O|M;Cn3YL)862~trotd64 zafghIEJPf<`4d|h2+9GirUW_S!(}ehbf4+*IXaryWJ8O`f z?R2&fvUn?+B#MFDAt}j}Dz0pD|6(M8xtV|>bX8I7691)#?JMAz@)ldYjxbtWYf!gx+jc> zaNS!m%iaIpU|nLK#>rhG(i5j1Nr19S92{VZG0K8}950FE7vJV|JlAL@cRaYqjUaeD z2b1;@9~Si+QUR^umPiTvbg7mf2t?_{%>YVft=Rh9W+o+}cwuxI11=kuMlFCaQUHXO zB4HJ&6q?@D8Ogbce55x_Xapt3wf%%Xtz9E^<%%X|4!iyIEu-c^_dRYj!{%&RLFGOT zI+BFMi}=3iQCA7@bt8h z3OTIR6;n%xkp>aVuAAk%zee)u$2}rqv_k9A-z+f~KHaDjbLyW$& zhj|9~hVcHlVa6bwW7tN-ciRHBXslzg-k&WLI}Ss1LT;neYK{^bsJOnq9>5%+NF!h@@cDP%%!M#+DnpqVrOQ>M_*nKN6iL|%Y=%=mty)}3$&B3^1V9JART9u-C6 zZ^3K(82dC>#s?E=VV=cJnuCBJ$fVtB5FO5J9-c+a)v`Yp8E{fqw}(x*4;P`suT!yy zE+Wnsb|O@t{~~XdRK|BRwRxRJWSk4Sm&HCHYES|tkvbRUyT?sDnqHk{(i(Cj8h#=) zA>Zm?;t>L1%dMj{q64S2*335o&TJntGenRB?jIKu{t!(4BT)(a+{6+Mq|_coUJeF# z++g6~-Hu8*gWFUR-eK`|7pZza?q|#OuNUpHT|JQaUNZoz0kB-TLV0xGXDHHwbIj%T zU^3cW8kKy%)$#C8wH7)q?s}0#Vh0kUeH{34CY$vOfYPq#f0L1q4R)l8IGF9s8c2~F zJl^k@8XFs5A20DyQ0`)V-wI8}Qw$6YOv9Q7Y?9;@9A4t43??&J^*qm6t@HrsotT&? zDk@T~)-4^>U*#b3j2sVMOE)1Ort(CLTcH1kAE10^z0-NZAf_Wn#O2Uc9BZ2Co3(@<9@RTprP@E!hqAsLizr9YWLGlWJ$`r`bb_AiyR(f z&^Rt*92pr|NG%I;Qj^F1PaepWArS?f*GiSje}phBEDQ)e4!qi^vIQ>Zf2a9B-?~5U z=`}`*fCqYgI8Q9x=Y*hC@ZMtH@OeFtiuy(qbj<)hl`90WqoE)uQd(L#rQpy|BUBXm zTHQ_{Rvt`7uowq-iWpDXOK9|heh!3Gski)Gtl)G!z~T3K+wivRu+#z-%m{q;@VzP7XL;*ry@5YK@b-X4sLKF4CFI6 zIoTPAw?F`pG$x3r{3<0U=X+e7TK199^@3x<;7A3X~gIH4~Sa>caK|qX_<_pZ5 zvZ~TLsXT)BNR=XUYN=#0)q=y}H{)-rrLwq5gh~O>RH?LDAzKp~B{cRVVd0_?g-kM| z=1DuoCmEEHf2u_y(GtF{1N1^svMVum43(7k!=JS5HwXMlXFXT0=|P?Q6lJ(cw__=W zmh8Z$IEB(o9D1m6>~NGLOKJ;^Mz;qxu zQ;yANqh~&;TMp%!5S}R7!|2G$z4y>ckVl%&sT98fQ%#o*ibeP?ZxYTD`>4`3+}2wM02lQ>j+D-RzA5l4nlBV!1B= zSSF42+@!w))AB2GR<`0H5fRx>MvJ{%y@mwl>ryoClBvYwKx62QF zW6ba90|eU6FrFt36VuIps@_l;fNI5&)U}(Vr_nblY&Jtx#nKJHoY%NsZUAmM=Wbeh zXTcc>_p;37tG*GxHx~J!nP~yn{qb_jG|xzf=RNW?2T;cjoAtJW$o^z4#Q4E5L}HiA z4P10|*SDwZXl!=fE-y|Vp0|tkOWk_I;O_2EB{|;YgoGPFvOz*Z#sU%%U;u!FZ^icmTVM>Zis=qGa<%pwRC=Uu{{cP?7q$s-$ogyA$ZF-TF#C3lLr4%L zCosO77#p9hw?DqzpGIS`X7Kxd0FmMv?o15REdzi_*))cH)5#3&Me5p)gt)jL0aaC1 zAMdaHPg{YW4`%{GOy_~w=4F835t$8jzX1O8%_uC^h)n&jW>Tz!XuczsEdcNIx$Jz5 zD1&E?|AtIPPOj9=|8~{C-5=^WU;pk03T{WJ)nX%pX8rfqO0zZg93j_AgUL8>>wtg& z1Z48LJQ6apf=s}BYqVRDa;FKIZ2weYCTodav?{MnkHiyu-k+!p*gK{FO-M=-4lmw` z<%W^4f6#MS^Q|N>$`Fa=-&^4YxH#6K)BYIhPB<{uS-hTXe0*K9*<2_B#Q>G&9h|MQ zOJe)ZOk5a=PQSy$z<+Euog>rE>~tiLw9CVB4QQ(61TqUiRRS!F_#?TLQ>1k(vlWFD z8GnHK(kxRTvcQ-y#1H7{3Ocl60zF|2IN0FW=pWU)x-u+^c-M!&6$OpC4EZr{b{Y(3=|0Vq$e zsj2Chh$8XTrv22PJWuHnyr4k@>4gw8NvI2QYj?f0 zS#7R%pA|qG?XcShLoBZPK@#~V9-iD#4VsU{KV6#Srobfr{*1(Tk7zz1Oaw|fK8ywy z4Hb2tv43P=-Te$ee|l(R9MzDey~%HM3AtCJ6;D&A>WG^b8Lw2cr4 z>mRXVv|%}Te0+q5gPR-~A(+auUCR>y$6O+c8(@P9_5#FC5|Ame+wS}4!$1skQW1|b zXTT^)KHnXVrB|=h|5K%rWC*a~$xQZGAGqw)&$mN2`EUo8LD<%;7``_UpTuzx5b6Ne`^Wh`A1{0^7W)ki4SydWK@WO8 z@24tjOnH1fAI`1_!Sf3HqEP*TS(vE8f&66#nuOeTor#ODw=>?=$l)iR(Ejma#E zRdRH6l+Ep0;He$poiwml9Qc!?tc zrz3(dHFuK61C9V!rBqKi^u)RQ!Idav4FSRdp)d}DVt|Jbb3BUIEqTJF#h`TgcYv$ zgaQoPl}M5?C+l+n6U%oE;0or8{5Nq%O)GLvWyu-e=e`*LyqS~ zZ)6s?YYbdOTonSQY07(6SWC|YlCN|+(-%?$&Vo2V2_%AZQ$7x&>lv4p-?8AEO=WGb zdFds`B@cgv!x~W2XjrFz+{faZg4c5wNfn)<4$ zrnt+=DvoJEF%b}cwTrR93itcwEh!mi0Ihc632&%*sD)@XuBhKI%%VQ^h)se?BueD2 zmu#o&cboLt9e6Q3zR@1tf?iuYed*9qO>)3!%X7$mX71u)#nF8rlXw}97Y<7`C{Chh zzvl@$C1m1h)fJ>E)4i5@nyu#z5&4`vhpWPQ$iyYK7Tgi7ypfc`;*OjoBpJ<@CF=0q zApMXM2?8NbGVh1_)>}Ve_gZoF+nO)Wjzjk#y$(h!O9D6}@;X{Nx?&FLj*jTPX{WgPZ>Ki=~Z( z>A^(x#%#AQ7*>3EbMq5eVGVyYR?;ZlEZtgs$D>PjhdbGLVav0pRDZlMF_rz$D+IC} z2enj#Z*wNazW%+sZrj0_%%&q}vNuTr%Rp33@B#8Kdw>(Y>3zN|S&@*E(gJysIZl#y zb(-viga(WG5p#F>5Gp59*{6PfkMrPHoXDr*x~4|9EG1Ay?W1Q9?M z3do!>Unsz5F9yPq0a46y3X;U$Q2;-mDI+ai1?1Qq92(wMkM54=SLQ2JsI4SAQ$<0I zARr(*9ydIf+kuSb!X=;gOC8{4X8^FCuQY~2P;3Rl^I>p0kmOGDKCW5Tc7`Z$qQ8$` zsR2-29LVKyXTC6`A(O!(@Uw`V)PWNaKo{%n3V1aEE@B_4Q1pHK+ZK459fZA%7sB9Y}#(4Q&goj)w?-2_=xs5rD|%axO?OEm1_|9Ps9MyCRt6Y4{=PWk~Ka z=HS5VaYsOUpGo2GVhrQ}#bR*mTg9fADaT z0_a4V0IHJ1$>*>_gHI;ivrzkOS`e zgkF3#IT^feS6cv^{CsHXF4o<7p2VP_A{-&$`ystdMn^Zb@8cj9{BcwmYhEz|!96Rw zbp>R|4kywRb8VUOpj|tCvHv`=0S`^4Cr7l+Q)g$74X$h*^OV4_=Nuu8!{H!He>lX}yT29uAGV1a1 zYLL+i?`{FYsu_CEFIcvGeD(6|$)r}I#Pf!4^kms=G1@nKyK z?vEssTJuRq`)#lU9y2eAb!t4H&$uIWWGQ)=KILbG6223u`8_&~y8MH#(7Q-dv1$p% z9U&oJPT<83AdnTpE3Fpu1$R>00~E!@!v^TwZ3SiNT6V!~gAHdOc~vwjxoBvrcs^JC zpSPXDVLgr$7>WVWg-WeTb6wdk5>Wx~{(c-u-xbHcKVHodl$G1{HS1Az=4LK+YGR@T zSIw0gMFoE$Bq=Frqti3BShU5M0#!j%;lAE{mWWDNBYXXlbYKz!60#k~ksRG< z7CZQJxmjC9Cr-v>GN1%Mdcz2tS-yc2>VpzHD>yT%P_q&{qa&^+wtc}~F%{qJ z(ifEEQb;a7zg%g(WquiZeBhbJU4!nTX&L%f0CBRC)Y~8s>*xO(DYfegruC zqDjOZp6Psk9r-Cb?WN2ir7VHju+d&Y9E0C=N`0O}GG|9gPW_ZE}XN}dz@CIb3zX)N}CeSJ59(QWKIgVJ6i84j1DkjbZT|r zbc-=ILe-3}K35M?S96B-S=~sgQYbTX3aQ=-8Hl~u7_cHD2(rMEKpWQcvxuZ6@T`%9 zkrI%#d$1z{nA^l#Kn(m6alKW48>dPPoH=>)`Jf%O5EFQ{s^TN!;}`-cLfLfEFK0Uj8!w;hAzVPofU` zI(3vAz?p`yP!I~=X~jWcmfKBg7CG+QG_S8ouCeuaZ$QQPU9MIeb4UWMufk95JhY|D z>mE{G3KA-jROQeVDNQPk834}RYJEzqe9gC57RAY$yJhoLEYEwycV-@?t6NeHQ`eFA|;QZSN_-~iPfHxFG~ zWxI(ECQ5~3H$V;H7N-`Zl+Q=9YLUD?o1A9lZ4!>?-bzmsbVXgPh!K*yy+~?un^0k) zN!itod%`?Iih@wzTZ(uwwNmU%k)HotPH{TheoI+=DJq8i2R0Ipo_fsL;@zD)!xJiZ z3^kgTYvHzdlI>$u&5z(xInDg6w_-`v+p7J+=GC;(MX*S_%x2dB`|DzRwBsM&2=O2E z5%H0e`y)fI0Yz0EL>OISa)cHe(~hEHV&7*lA<*t&S2GRw$1}si1e@F(oz=L4o=K0` zvciSWDo0}O6-2OW)n z*Dq3{_1EoRq>p|{^p`IaHOMcy9UvC6iL`yIhqP6SAS4K`&y7%XsnB12($ft-zOAc=HnM2_O2HQ5X1DjJZyh*a7zpP5e^it zg~?u2+K(UL$9r6&Q;}a%3$_aiRXAW}q~-NMm_o^Pa*?Oxn0rQoJ0Q~~`uBK$%clDj zs};auKxrs}tj1<>?3YAk(mJI^1diE%Un_%|BT(olNecXY1s8JZ_VUsnA?QCvVfY@a zSzE$){szKtTJHTD)R@Dbn_tk-9CbRW&{~Hh z&pYg?+n5xkxlAdcJ4oox zUCP{xV9!p&J9Q`N`s4M_5kgN8u&nNlrMNiQrUG@0jC11X*v(I)|ESeWD@c9wi&2+Ek z<=Dwr_i_>`*iy3!2L8sMn$8gBul4H@L87_8WtKa9CPR>Y33Z8YM)3`dI?}#yrzePk z;^UbyIo%WKOvfsw$2geB+aN6iJtU2tzoZ)ujlP&5X_z^f-;0`sBT@XBh76ryj~310 za9lWygXqCt`{6R7Px$TjJ~7y#o_{QlDZWIO+`@v=P6kR_^2*16Yq)|7;mWU^(#qfz0p3k7 zx9DHoHr^_Wq6AB;zMLzl`R^8=R4H4&F=)Gd6Z@>~d^suO_qv5EUGZ*;|Jf=tu`VI@ zZL#%l{m;bgd?TI9qu$tQI32xj1>H4X*lt)%_;C9cdGx16&0xFOCR`R42SpF2skMVw zV;%LGh3vsZZWyZr+P`C;7JXD-9~L(wb}_puU#A~bCUa%EG)w6}>FJ;6 z2L?K?oebF9e_xct4m*0UGNb!NZLEo@?A$fU@_t)|=ej()#tFAIEVY=+SyU{Nv3=Mr z8`85ITX%_Lt$dJuAXHm{W?%r#Z5vPwvflKB!x8 z;XS=bS0YylPb?FI9Z1MCi@o6yyr(>+e`ptVaV&~j&KF*MUxL6G*s#Lrgt^{Yd&yy+ zT9xP6`Qbz?*1!1Ez)31Txzv&w@H{)WTeV<9o!JpmK1p?^u{@kUBQXiO>fZHEc$c7U>3QJxy-S@%sr2M5&Gm3V zRmY2i9(t7jOgF2}#k^{HM}0k1HmD(Qb?{5$273IV{Qjx6R=ZQDwN#%~x2D0lLyB=p zWJFhup7I^5`^8j*p41bosh)!2&E^t)sRQc8i7xD6v7kxlMc0FMN$cosAi+rf4)WYs zPR}BW37-@{a_c5_V|S>{S&* z`5TYJVtJYT!AIWw;jCD*i>p=hmIBjF21V8mg=(y95cm#m&$fOT+#c(p7fNkWw^6q_ z!lLeia%`{Q?)EYNtyIP?HI}RCOmaY844WT!nAL(CZSn>jo24t=ie@#v3U@U!r%UR! z^zDk`J<6Ux=Ck*C+yIPqCC6z+D_w7wpl(%@Im@mpP**Hi~9uMJrS zAABxZiJ7pXW++n=T5Xp#t^rWIugi&ho;M}*&$)f=8DWI0W6?!9X+ihkR+|5DQ=Qngys&xN_FLlE2D|_%L_R_5b z%5(girprxY@s=*kdIPIFoZ#aUh^s&HxMNFM>B}?1;Kf1W(UWu9n zvK=FFSuGW$Cggq(yjN&J5XX$d8hu#UhSVfQ6^I$k71wh-Tioq9IA+J&+46NecK6p% zjLp-Pu$&CP;p@#{C|i~Jo?qWY2J1*D(AOTo#$wZM8areOBHM_oi?|gNa>p*p+SuEg zro`vRxQY2_FQb-&lx%JVF{P67%x%t~I&2dB*-j!!agj2_T<6D%2=))ZuD)oo`T>{7y1n ziNoy;xNm7&zmAfMW>*qPYe(KubyT!2cI|!6c-vD`d$g2J%{XocBDBZ(bNa}3hHY|g z<4KpgEoJlSMGqtu+!~kB$q(w~5>AKxv@ni}1}IZgf1kAf zp=-Ca(aDQ!SB;Lm8C1a1Dr)30kSH*VA??_ZS~LS9=aZa?Tu49Ut38=2z^JKCkAYA`Wl zr)_vs&xNnvTkp^`3L=M`x3;-WuLOU}IdNFH-TF+YHc8$x!IR>5EIvoVd!Z9v6W#*5 z@{YC2ZN2W;5_CG5ArgR#7x!mRz$LaU;9l4DYb&Tli<5%B!{pk zO{=Fpo50bY9Q-AnU|Stj`7ze#x`;U)gW!;ks5v2x;9n=7R76df$T*+WYmM;8>FnnD zkUFTz%U{`SUqp}iRxLUy)HvHlz(hfDx@-FlaLx_^N`+1K0;hDgT(W>f~ zK>ubZeO)Ej5sm#0^WDBeZe)2T7A(2&I|09+8dHp~Z;7v2u?7FQALj@4#%WuQRkr@& zz_wWertROiSCH(QsHFH3y5zIZ-SsvDjG&+#Lba&4QL#zrYz*IvS?k~!T&)kb)Vw{0 zhtaR6wZvZA^ee@bP=)ihCU=*G{3OAFk@k~ymb85}vglS@;XZeC7+Xxe$oYhlEI+~4A(EpBi(wf2LPRv9>)5Qi%>rqg%jTZM^rSp-eyz#8ict?;8)y8^2TR3W90R8Etkp{xrMkDQq)yd7; z#-}qQ$ss8@Ld)x1B{6&?ZYPDcwsxi+)@rylD>;iAS?fqy*}GHttNANXWUL$ADO?yM zi>&qJZ0Z9m`mzZVS!X7}B`O|ypn_)b*x(Z_B7V-DM|zB5aEMK8{;%bH?Y~vEr2bpg zJO5wnV}flne)(LHQIHO}F|l}oQNLN1(9&D}T0yT{7zW&|T)EaO@#L^vBDXJ%D=XE3 zTApE9Y=xF${ckW-p=8@%MTV3)5&2XZnoRXb(*yFXKD6l!1I&!diK>yQS(G>ibeS7 zm;%tAYb>G7<1cfeW{9K&A_9K!87CBEOB^Y{! zD3Fa*KC6Cp8{EulmdV&|$R-E@sP2H9owdQk^s{xfW4v$p$;RO(#*#mMSh$-Giuq)J7hdgmmr8kOsuz@*6QoK7-f>YNfn z{>ubI1J(bV3H`6u|LWH^lX!$-chlUPc$8v(kqLE0k`VO2Fd@)DL-7A>+G^5L)XR3X z!^3{*dWB=#TktR+G%Jha=KdszQa}qOOE<9= zAxieilLl3vn+G*8D9cz|GGpb_d{Z&n_!}Wg0V}lbIQuv3KZU@BzrmtsQE&&7aJ=RN zb9S4|W_EcN#k{%!4;a6OtHVIf>w(F5PzRjLlLl}u-jpDy89czb%wqxP`ZWwV*Iy&R zxz6i>CGvownr|c8HpxvmZ`j1w5$7I6(nAVc2hVT(ooF{~0vH?Q^kMOKqFZ2WL=G6| zrbd9V>4*iq`L_dg=f9w>0+ZCq_-5FSCR(`Og5uDV|Z@~ z?n%jD7rH!&oKYl#d{H+qWQmO+b}|?96>1!akM9gG9-^In;TRPhh1GJk=0qVCDnC!> zs53(IsUH7&+(jH1lyUv}^S!eG=u*|*#Q(2L+jxEx_kRk9rA_SrDS+2BF#`pC&2`;v zxUZvTB4d@@h`>8X-wBj1k|KibsD6~uh?dd#!62-K#Z!T!&V?m^kq4cV7H}{D)%MfZ zh||YB3Fb-oS25R!GskSRaW@_Z`wg<)K(O5aLieMMMzn3hLvuqMq#c1?DS=(LW33b0 z+~2EJvwN*oHA#(L2?TavJe&FkW?($2r|n0_TI)Y64P6DCUe`iI4@$klT4cn~T^n&W> zus6^_FC+aPMOaSifYZkwh#mA`8|e1^Bt5T0Bm|%v=!BrqS6xuh;y@qqA7CByf-q=X z-iS8YC5A9PZPO(%J_^fsFjj|2ubrq{tyd{~rmvdmVF9OInrlCI~E;;ebR$f3Xam;|bwr{}yO>gB5g9>yNLsvFm2!9xp`R&1rD< z*Q!AIx?59*06(2(AA1$VKNVqFvD+=0adr}c!fT`;5ge^gfQYe!V3>M*=t0h~u9~W@ zddjffv{z3R^$j+t{opy^Q_B)xc(beR__Fs;KxGVg${WWIdW%scdsrH!h08BT>A_*n z5vy#oD4WJ}%rlbn0{3fe?<(WaYNKVUw|xPMrN?izLI}RECvLh74b3U1zRVf2rN^_G zbV7J;L0q2$tk-OL6G6tk3dlyD-CCd3_Qm-?cXf;YG#VSupG}2w|J=*dZB+EDEDB>7NDfSw zEb1E>eH*pLk@6SGPaCENDpZXo9b=iWGs*^7ss({#6l78?%CHDBmqk5|3 zLi?^N{H*5aUr<0d``OH-X%1_`B=#A-uy|dY9H6nqA!tD*tMn`~$>W1NJYN<=-U!a- zZLW+W{obHICD+R`qF*uelQF&UC^|*+0W!kOfJOnsK0~it5UTN3wo-EqXZ5K zGj%CNC6$h;vq=%Tm}*UDF$a>0 zWtfv{>53L6tq0XHojcV8tNwss4FxG=cN2X+HeGmaS;|)#MB!p;BwsrP)b50n54upV zvv$JP1H9sS-qV5(Ggf-b>strq#U?6awL0zm8dNw?RygOXqZW;|>H_~f_Zp?@eQf8p ze5I)Ut7xVtn6Fa`h8~D@=5g^*b><+4Wv0tD8h+GboIBZtK8oG5U9*?3&`n3W@pA%+ z??e+dnk>UaA!jr6Fa&~qGB2)+)O6GyIVHBa=)ut|Kd19fT^rxO@D?KYUxIiH#T=P$ z7OZh#Hl=*M8H_xwf-CzOX)tqKei(0^i1lT*V)R)jCUC4}zWgv4;kM#$Ls5aNDsm`{ zq;s%FbnXXqGV1AI`z^2d`Pi>M2f^60QCHzK{pUp!ZvtZaGP(f)w^e5Y}!lU%6u}I-q%5g6H7!G1W@)P%(vu`OoYWTz!VE6H;ld#>>lZ zJdEh9B7Q3NzdWNBJSbriM$*~P--&U*t1y9`(?(U6^DRvW$9u%zst7)rQ3b&hCx`F! zi@(~A5|zpwn)(ld;&Lj>p$0Ryw+cS})YMcSipVmY2$&pd%7*kBxo;^2r|*496#s6u zp!;+^Ai9fi_j>#Z`frDkV1x%R85IPC=o<9@VTbYG52YQQ+^tOh+y0`KrOhq}(nohG z154U_>5)Mx_q7YtG9(s;J`?wH&U!bvW`Px15`}yc?jz~Jp|1W^9r{t`nM6s%LSO@_ zm~2)N`T7rp`UvC2VUIe=vCzv4B|Z%$4Tg9f&ffG(X>+vjG?Q`a!%co)C;F_*n$J4{ z66nYy9yEpYIqBBmzYdzx`VOiSaMxp$CT!?M`hz^gl(Yv_8If70_eHIfyh~c?h@H#J z#~CX*)kmFJ+?ej%j-!TeQ$QV8ssR(IgDQD?5Dm$8(f`hbVn?!&MOlsC$!R>h7}KCk zp60b}T*kRrFXAOn4-^HDHSUH zZ#%DS{K|aS-e&$LOAlWJci@&0jo!@u#Io`1LMT8)CC4yZ+6n36zny3t?BpEjikDWf zs277=A?_>uY9IgL|JBPM5{FKwaFpGnG%EHFmK$VLkg*lZ-AKDx1yV2m!qr+L3%Vk! zAIWYY-5C-ap;56S9}ZKTW+R;m&SOIWhZ1}rBu8z#snc!r{OH$ExNV1F1SfNE^9a)h zqsv}s|4Tx--7bAB>w>s(vSiYN2}8&4Uw?SyDvibo|IT5%tkTa#LyuK&81wxDlg*%n zqO=(LIQ@AOcVGw;NT5?~XmT;rS~KrNL?A*=QeY!ZtgG$Iu-$~2lV*l;G4>4EN%~1i zo-3{@Z6izuW(KBEXZlrZQZ;)EodlCauc6TzKJ+0h(mLFD^YkkblTT98cR$nk94dcylB!q?g2U+oA0Y7vvrcS8yEd;EzMq`!uqmJ(Xvr zNKK2@Boe*)k#hG+GxpTD%pya1y6u`088J&H9WlR6y8bbKv>`@%?_8fMfoea71fis3}$>iP9)F#VElT|}&Z-P1)X7Gg@4 zLgw`?Vn+YWwTaP*gn zup&Q_kSy2fz24we^R$?=P}jHGjD*;*Lt$dD zO~ZJ@V%%9s(5Y{z4?jQOn;1DP5yubivXV^b$YJwX%-+AFT!r+>;d1<3 z{eU2UvdE-^a2*ONu~|#c_O0wZiz^Y^Lf`|1%w}EtA`?`^3S|qQe>{o+6P4Y~8DvT> ze6%A&BsOdvyE3;A5>x21!ciVuaS#q>{lzY{}Uoa|M;jDEkiksuVD@smNHH=QHL=kWoogjrryiYSpJf3r zE5Qz2^WFs;7c%oE$JS97pz`+oT>_f53=2h7$FwovwD{mxD&tiNa+cb(Z2PX)g*c8PB}ugR~YPl(w| zlvmO_Ujv-E?;izSZ_O$vnJW zc)O=^7ha#~d{`P>5a&p1pd;2RC!97F!(^&J=?IYxq_6f$9Mk2nj(H?T>#|x{MZTNK6$^7+8 z14C9nIa|?-Qzk8%qW^IH@1x&6z25A5?_Kqrw`OY6++5j9iVLPo28Y(#ed{^2PvXJb znxb&qN7vJS#8yAK)*|&>wRGW@W~Xh%UiNo?`0<}-ye#b@Y<*abk##TU3c0JlLl3mh zJ-CZsHg1-iyXyQD2H-OPzo$k1$ixe!JxVoqO8!LBC z`LVOIG=y6*`AiqTSkt`+g`q7|M7(A{+4gsV(3C@pHFGc6-M$|#wYG43U6uBG3AxLE zHQFMTHw0?_VC>UkOGvmHb8np-+Z3UzE$;qiXslWirFVasgEh>U84qyhhJlR2u7#Tpv?|=aA0FwvGqI*0uH!(f6Sl=nL zBsa037*D8SizQH~6(r`R=HSsMgT>NxI z8~^_EGq*oJd-D;Op=7^k^;7*d3|ICU-Uxm3_)i@0^ozaL7Ol%#T|Vv8XtVR_-;iXv z=!@1&l|W06Nn5@!Zun?r?J(*7>!(k?bciujhrRE*x!zRl)I$4j#ig^?>NYR(K6+%< zi9K%@7_M4k=WsNH<64HR^UNJdht(7IJ$Vuv@-V3+>5*jLXVu;QA;;7lzpL`!SX&^m z+)5z%pQbqbk{<>qL_?dTI}QI%$zWRaaNFf)hi)nN3g4BPQN?}x@jRPt%T5^~8I%SX znM4?H9~K1+StI~EItpDE`iW2oErCELuJfT_rof^Uc^xJ=p~8)^1|~@0p;h3ux9GZ% zSIU6aXd-~MBI=4wbe+h(GSEsI1UL`OS4it>&^02LR-jHB0?f5V?!v+J;VR1z`u4eD zW;o=M4KqWW3s_9SQBvZIHc-ik0O}r?!Guvx;`S$~q(p!eEQTSMo4CyZm7EAL q2a7qVHAr}Xrk`w{10ZqbMt_FCsvVoKd0HGOh)wH%3hz9^uwcvvQ diff --git a/images/freeze-melt.png b/images/freeze-melt.png new file mode 100644 index 0000000000000000000000000000000000000000..8739c637928eca8dfd1c3c05dfb4362fca3077c7 GIT binary patch literal 41886 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 literal 0 HcmV?d00001 diff --git a/images/generators.png b/images/generators.png new file mode 100644 index 0000000000000000000000000000000000000000..1b609fed1897b75306f9e493a7d332510c785fe0 GIT binary patch literal 15713 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 Date: Tue, 17 Jan 2017 18:24:53 +0200 Subject: [PATCH 178/329] cleaning up --- linkcheck.py | 127 ++++++++++++++++++++++++++++++------------------- strip.py | 1 - update-ends.py | 51 ++++++++++---------- 3 files changed, 104 insertions(+), 75 deletions(-) diff --git a/linkcheck.py b/linkcheck.py index 8d3322f..e53761c 100755 --- a/linkcheck.py +++ b/linkcheck.py @@ -26,7 +26,20 @@ # For more information, please refer to -"""Check for broken links.""" +"""Check for broken links. + +This finds links like this... + + [click here](some-file.md) + [or here](../some/path/another-file.md) + ![here's an image](../images/some-cool-image.png) + +...but not like this: + + [some website](http://github.com/) + [another website](https://github.com/) + [local header](#some-header) +""" # The markdown files use posix-style paths, so we need posixpath for # processing them. See help('posixpath'). @@ -38,32 +51,61 @@ import common -Link = collections.namedtuple('Link', 'text target markdown lineno file') +class Link: + def __init__(self, regexmatch, filepath, lineno): + # The .group(0) is not perfect, but it's good enough. + self.markdown = regexmatch.group(0) + self.text = regexmatch.group(1) + self.target = regexmatch.group(2) + self.filepath = filepath + self.lineno = lineno + self.status = None -def check_link(link): - """Check if the link's target exists. - - Return an error message string or "ok". - """ - if link.target.startswith(('http://', 'https://')): - # Checking for http(s) links can be added later, but currently - # it's not needed. - return "ok" - path = posixpath.join(posixpath.dirname(link.file), link.target) - realpath = path.replace('/', os.sep) - if not os.path.exists(realpath): - return "doesn't exist" - if path.endswith('/'): - # A directory. - if os.path.isdir(realpath): - return "ok" - return "not a directory" - else: - # A file. - if os.path.isfile(realpath): + def _get_status(self): + if self.target.startswith(('http://', 'https://')): + # Checking for http(s) links can be added later, but + # currently it's not needed. return "ok" - return "not a file" + + target = self.target + if '#' in target: + where = target.index('#') + if where == 0: + # It's a link to a title in the same file, we need to + # skip it. + return "ok" + target = target[:where] + + path = posixpath.join(posixpath.dirname(self.filepath), target) + realpath = path.replace('/', os.sep) + + if not os.path.exists(realpath): + return "doesn't exist" + if target.endswith('/'): + # A directory. + if os.path.isdir(directory): + return "ok" + return "not a directory" + else: + # A file. + if os.path.isfile(realpath): + return "ok" + return "not a file" + + def check(self): + """Check if the link's target is like it should be. + + Return an error message string or "ok". The return value is also + assigned to the status attribute. + """ + self.status = self._get_status() + return self.status + + def print_status(self): + print(" file {0.filepath}, line {0.lineno}: {0.status}".format(self)) + print(" " + self.markdown) + print() def main(): @@ -72,35 +114,22 @@ def main(): for path in common.get_markdown_files(): with open(path.replace('/', os.sep), 'r') as f: for match, lineno in common.find_links(f): - target = match.group(2) - if '#' in target: - where = target.index('#') - target = target[:where] - link = Link( - text=match.group(1), - target=target, - markdown=match.group(0), - lineno=lineno, - file=path) - links.append(link) + links.append(Link(match, path, lineno)) + print(" found", len(links), "links") print("Checking for broken links...") - broken = [] # [(Link, check result), ...] + brokens = 0 for link in links: - result = check_link(link) - if result != "ok": - broken.append((link, result)) - - if broken: - print("\n*** %d/%d links seem to be broken! ***\n" - % (len(broken), len(links))) - for link, error in broken: - print(" file {0.file}, line {0.lineno}: {1}" - .format(link, error)) - print(" ", link.markdown.replace('\n', ' ')) - print() + if link.check() != "ok": + link.print_status() + brokens += 1 + + if brokens == 0: + print("All links seem to be OK.") + elif brokens == 1: + print("1 link is broken!") else: - print("All", len(links), "links seem to be OK.") + print(brokens, "links are broken!") if __name__ == '__main__': diff --git a/strip.py b/strip.py index 935bff1..95ed16d 100755 --- a/strip.py +++ b/strip.py @@ -37,7 +37,6 @@ def needs_stripping(file): line = line.rstrip('\n') if line != line.rstrip(): # contains trailing whitespace other than '\n' - print(repr(line)) return True return False diff --git a/update-ends.py b/update-ends.py index 213318b..d26ba3f 100755 --- a/update-ends.py +++ b/update-ends.py @@ -28,30 +28,22 @@ """Update ends of markdown files.""" +# Markdown and HTML links use / as a path separator so we need posixpath +# for parsing them and we do need to replace / with os.sep when opening +# the files. +import posixpath import re import common -# Markdown and HTML links use / as a path separator so there's no need -# for os.path, but we do need to replace / with os.sep when opening the -# files. -BASIC_END = """\ +END_TEMPLATE = """\ You may use this tutorial freely at your own risk. See -[LICENSE]({toplevel}LICENSE). +[LICENSE]({license}). -[List of contents]({toplevel}README.md#list-of-contents) +{extralinks}[List of contents]({readme}#{readmeheader}) """ -CHAPTER_END = """\ -You may use this tutorial freely at your own risk. See -[LICENSE](../LICENSE). - -[Previous]({prev}) | [Next]({next}) | -[List of contents](../README.md#{sectionname}) -""" - - CHAPTER_LINK_REGEX = r'^\d+\. \[.*\]\((.*\.md)\)$' @@ -122,9 +114,9 @@ def main(): print("Chapter files:") for prevpath, thispath, nextpath in zip(prevs, chapter_files, nexts): # the paths are like 'section/file.md' - prevsection, prevfile = prevpath.split('/') - thissection, thisfile = thispath.split('/') - nextsection, nextfile = nextpath.split('/') + prevsection, prevfile = posixpath.split(prevpath) + thissection, thisfile = posixpath.split(thispath) + nextsection, nextfile = posixpath.split(nextpath) # make previous and next relative to this file if prevsection == thissection: @@ -132,27 +124,36 @@ def main(): prev = prevfile elif prevsection == '.': # something from the top level - prev = '../' + prevfile + prev = posixpath.join('..', prevfile) else: # it comes from some other place - prev = '../' + prevpath + prev = posixpath.join('..', prevpath) if nextsection == thissection: next_ = nextfile elif nextsection == '.': - next_ = '../' + nextfile + next_ = posixpath.join('..', nextfile) else: - next_ = '../' + nextpath + next_ = posixpath.join('..', nextpath) - end = CHAPTER_END.format(prev=prev, next=next_, - sectionname=thissection) + extralinks = "[Previous](%s) | [Next](%s) |\n" % (prev, next_) + end = END_TEMPLATE.format( + license='../LICENSE', readme='../README.md', + extralinks=extralinks, readmeheader=thissection) update_end(thispath, end) print() print("Other files:") for filename in other_files: - end = BASIC_END.format(toplevel='../'*filename.count('/')) + # move to the top level as needed + parts = ['..'] * filename.count('/') + licenseparts = parts + ['LICENSE'] + readmeparts = parts + ['README.md'] + end = END_TEMPLATE.format( + license=posixpath.join(*licenseparts), + readme=posixpath.join(*readmeparts), + extralinks="", readmeheader='list-of-contents') update_end(filename, end) From 16c69dae178d444f1a98914f6f53ec72a8833908 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 17 Jan 2017 18:25:23 +0200 Subject: [PATCH 179/329] little things --- advanced/functions.md | 8 ++++---- basics/classes.md | 5 ----- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/advanced/functions.md b/advanced/functions.md index 2ce4ee9..8aaaf11 100644 --- a/advanced/functions.md +++ b/advanced/functions.md @@ -244,10 +244,10 @@ and `**kwargs`, and there's no need to avoid them. I don't recommend using keyword-only arguments with functions like our `print_box`. It's easy enough to guess what `print_box('hello', '-')` -does, and there's no need to deny that. On the other hand, it's much -harder to guess what `move('file1.txt', 'file2.txt', True, False)` does, -so using keyword-only arguments makes sense and gets rid of the file -deleting problem. +does, and there's no need to deny that. It's much harder to guess what +`move('file1.txt', 'file2.txt', True, False)` does, so using +keyword-only arguments makes sense and also solves the file deleting +problem. ## Summary diff --git a/basics/classes.md b/basics/classes.md index a96da10..b2728a7 100644 --- a/basics/classes.md +++ b/basics/classes.md @@ -285,7 +285,6 @@ it later? ```py >>> class Website: -... ... def info(self): # self will be stackoverflow ... print("URL:", self.url) ... print("Founding year:", self.founding_year) @@ -312,12 +311,10 @@ Maybe we could add a method to do that? ```py >>> class Website: -... ... def initialize(self, url, founding_year, free_to_use): ... self.url = url ... self.founding_year = founding_year ... self.free_to_use = free_to_use -... ... def info(self): ... print("URL:", self.url) ... print("Founding year:", self.founding_year) @@ -344,12 +341,10 @@ class with arguments and they will be given to `__init__`. Like this: ```py >>> class Website: -... ... def __init__(self, url, founding_year, free_to_use): ... self.url = url ... self.founding_year = founding_year ... self.free_to_use = free_to_use -... ... def info(self): ... print("URL:", self.url) ... print("Founding year:", self.founding_year) From 0802c91a6dbddfb8ff7c395d62143878b50670d7 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 17 Jan 2017 18:28:45 +0200 Subject: [PATCH 180/329] oops --- images/drawings.odg | Bin 23195 -> 26897 bytes images/generators.png | Bin 15713 -> 15430 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/images/drawings.odg b/images/drawings.odg index 627ee36c61c5864060fd4d0f937cd39a91e5ce42..120dc3260dadc63fccafaa7f409dcf77bce7f667 100644 GIT binary patch delta 23995 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 F{{uGkwu1lw delta 20236 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 Date: Tue, 17 Jan 2017 18:53:50 +0200 Subject: [PATCH 181/329] cleaning more stuff --- advanced/iters.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/advanced/iters.md b/advanced/iters.md index 27dc7ec..68c8435 100644 --- a/advanced/iters.md +++ b/advanced/iters.md @@ -50,9 +50,9 @@ i >>> ``` -We can also iterate over [files](../basics/files.md), but they change -when we do that. They remember their position, so if we iterate over -them twice we get the content once only. +We can also iterate over [files](../basics/files.md), but they remember +their position and we get the content once only if we iterate over them +twice. ```py >>> with open('test.txt', 'w') as f: @@ -98,7 +98,8 @@ before, and it actually remembers its position also: Iterators can only be used once, so we need to create a new iterator if we want to do another for loop. -Here's a picture that might explain this better: +All iterators are iterables, but not all iterables are iterators. Like +this: ![Iterables and iterators.](../images/iters.png) From e53f386140462c7f7a573b0c0279598006ff8063 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 17 Jan 2017 18:58:38 +0200 Subject: [PATCH 182/329] oopsies --- advanced/iters.md | 2 ++ images/drawings.odg | Bin 26897 -> 26831 bytes images/generators.png | Bin 15430 -> 14991 bytes 3 files changed, 2 insertions(+) diff --git a/advanced/iters.md b/advanced/iters.md index 68c8435..a4c1271 100644 --- a/advanced/iters.md +++ b/advanced/iters.md @@ -290,6 +290,7 @@ iterators** with some more features that we don't need to care about. The generator we got works just like other iterators: +```py >>> c = thingy() >>> t @@ -310,6 +311,7 @@ StopIteration 2 3 >>> +``` This whole thing may feel kind of insane. If we add some parts between the yields, when do they run? How does Python know when to run what? diff --git a/images/drawings.odg b/images/drawings.odg index 120dc3260dadc63fccafaa7f409dcf77bce7f667..e890e1c92e212f22914aa3d1e05e299842701d8e 100644 GIT binary patch delta 16667 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 diff --git a/images/generators.png b/images/generators.png index 98e6b256dfca43308ce37e29f71a7e61f420596f..dd397b198769d5649c0071f6783594b8c335bba8 100644 GIT binary patch literal 14991 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 H^zwfIXzrqE literal 15430 zcmd6u1yq%5yRN6GC?KLBpoADS2uOFRlypc)$)Z8JTS*lOLAtxUq+x<>l; z{F;+(pZrL~(e|%jY&JNxZ?b&H;W`UFJ+2}G(6R9l{L~^!2t@h=%}atSM^E$c*AMFK8YaQ5E_41F)=aQ^%22VBSXX2uU|X-`nf(ki-V1w@RLydj!>_l zprD59skOPext7-Khue=AI%Ch*3Ol#a6?4^jTuu-wxCS~4;-BO@YcX=&Hi*VWY2 zg#C!_5fO1)ElGcoJUy88S1Ea0W-*VR{cK(No7r@nfP2F^Rzz1utN(o-PP@&iYUg7* zwQ_kyMPV_A-KD2yQ~VklleM+Ab?(uVL2;r3n&4PE+aN_BAIk-Y-}~hKP%8p#cEo+k?oOevmbozpCjFVmKcwg zn9mAX|N1#x_+wyzm5xqQ8)Iv0i(B2A|7oes`fGw4J-1{JCp!7gRW+O4uVE=J8@k69=2a+V_{8_O4>!b*cIJ`7!5Zr=?L+QXZTgZv_9c*q#%GwLu(l zjaazUWE>X8c&b#aD+O&;rt8Vp4;dL5bSV>tCu$WoJPy1173*|7JXOibp25q_OqL7c z3NhUFjF@7}qTfw=-kA><=&Z0l>lO`%3lyBEh;_1 zx|!feR^y0g(HQu2+Io8UxVUOHE>-#YUoZtd4Gj(DO;m@dKRt=bQ_NAlZ4h{!xO^;E zgU{h(zJ<27wung6!Pab5Rh7Y9rV3##Y2KvYM}Pm)YRg4Qaq$}xUGkDjh`#AMfrEem zo_r5J3HevA$O>+6X^6+KXQ@|ll935kk})qUl#TWG2ZxT2joBRzWUI^&$_snbb%s54 zFRyK}wzfY1n%I35_EZarM8>$D*^j?QAyyR-xHM0Vn`OXTU^33BReDVv3zNcL+3q*B zq=TOPx|JI3%WDbGXoI%AxV_t#+|Z`ETk9;zU*EZ)C= z&+Oh{H*hl7+HCgZ(o);RgnE!%;tXFg)qOhHD3xo=%cAZm^z`)Cu3aM}Bt%a~!y*5$ zQC?j=(cS$e*i*uJ<|D<(+me@@R>Mf-Z`}!k%&OxxuC68~CNeT#%o>~zHZ@lUk)9aV zMp#x()G?E=^ROk;Yvqe}(De26^zO6WA*piMV?3aHDJEvm@$g~Y_;~arEj_)d<(|=C z&Xz|qqef0adPzwM)_v|bI@D>E)Xx{`eyxw%`VskRcSdm(TCWbox*UBRFSgxK_w*Pq zG6-ry+~X|x^aq5e9lL^Umgpm`E|5!Zf<_F+j>Nkt6Ij$${JE4l_>LRaBXdkRk5?FX>)H+ zXRsa}i#?6Il0m!a)_ofdr>*awaA{OkRqw1Ubtq2ST1K{dHLS$+h3xhXoI9OaprIITadG}hf%Eg zTb$5+%3w|HkzaJj;+0lfnww+RX}L4sa_Q2gAO0kI^Ocp{(^m_Rtin@#x#s&`O}Q&G zh(UvS$jHb@L6O>S`BN-}_DeIx+DvMp72f^(>eA9?n^OXw^LL`5UodCjYMfU6nwXsw ztL-BFndr|eYoB7Y(wDBRtURN*(Q;#4$JBIVX-WUI^fECXHlBQ3-N;RjmqY|@tZZzV zL=3V$-EDBomf`1)r+i_0dUHod4s;#nx?fvc_FLca_Y6>t`FMF_gzUdMGlv=L>zkRG zZT|Wd%cSQQ8mbtHCKlw7A$55(Fc4csWmG0n2wGV>SBrs;PO;0W!>0~-sNJ=4<18g3 zHXM&1&o+F-`TqTTpI1f(b;es`V~K16M(yjq5mW=_=^^&@iAEi}haF!oT}E{}nD&n7 zOJa99KmElrSx}N4@hElL<_;celfk#g=q>gZ#shtot(WI?J7cmn32WQ_t#|*Y4gG)C ziwyTVxp!{R$8uV~EceCuxF+KLij$C(mfyR!7kw+qkLt`PAP<3%6+oiY)}USUT1h!S z%Iz8cw{KZ1zYfcijBLJi(xtGtI9c>))U;-OVIf5|yQs)&Fh`9!F*iNkz`y`jZ>hh( zl!(ZOni|*R(r_v&Dou%uoSc+Mc<}N2oe?ZXU2y`9hJi2OGs&qqIPBXaShAcpCaR*M zqM$fNbJ;>$M9(CHA98YDhushKWe-bDC#wy5Q=Vv4k2N-?@I+=8h|XI~x*Qu@S?yNZ z?~Ii31U^HeSY01cfB)iPa$ZtNNyu-u&4FZ2&Cu;xO~%qpFdX;S;_FORRihM+`-4P+ zC@rB!zkx<^`*wVR8=6|u_lKI7!~@;k>lfN1qobo|XJ@g9IUDex8nszbuY zkz%9EmoKMltoM?pUwn$JxOiKhX1(@y)C`*A>5;Yi!#~<=VnTv$M^tl55QUV9v9VhI zZ&xdz5&qO^4Jnq2?Ct5%AIu`Ub&LOro({EYnFSdIg?CGzZiY~mQ7pMACK|?@zyte? zv(w`p&-V8A%BVlvq;;(GzOp(UE$!Dd&z9|-9eWOLZdE%)C8fJ!N}h%(H!uF9!~R+` zx{ZyE)AZ~QfBUk81h-IkcXv-*kN%8|3{vCNu41D>yW#r!=XRl+DR~j;&ygr$q(Bl| z=)S(bm9*UE^s*9$NM{aq_Ujwi6P18Vj>RGtz@7mYUNhxxw(4t zqotfPPkj`r6_M@Af02eMmQ zT6$BZNH{D!Rw#41E-H5DKPz^FZE7>Mrlw|dbMu;8HY{79SQj4JntC4o(oHD=F`=RII@#>H#kjrN6E~l0LFhJzF6NQN);mPj-i~-?1 zp`ppl$uWV8%FD|uEw#0_Cg!lvHZ#i`)=1l&_2)AgE|_l#rs*?sbv^gQz>k>3vM_t~ z>eVFN0d@5WSg!kcfP?oNbGuQQlFFu1jAx9!0mJpKyRS0&rTm274`Y?aaVj8 zKXT0w%Nbh+}>CQdVmQl0O3jcK_A>x~k5KwdQmhk7h)6f*x*2H@op-n3)D5Su2l$@N;$=oFuo~Qec^SGHJRy>Sh8hTo5D81fn z#mdUc>G3ZNzSmkSutyI}&u=@lI<01xR#sI#dGf?`qVjO3lTS}qmmt>~K@E4d=Z%DY zd_~1^PqLUj5)U80)HHEKN?(5|Ni;}%TZ&FL9M$3NVZPRnHY&~K__=G>D3xH66*F2r z=YD^!$zX4u9I;+2jvb=<&Fmo;S4CRd($U^3Y<}ddmAHh2uMEM!O^=$}jKCVdL-tcy zAJQ+8k*%#ei=B&G=v|uO^_E{3nlcr0B}GMV=cY7MoQr?mJZAnAmmBr{2MuWSzs7&alWd~!U|cOx5{67$gkULY|iXXoL)Jfs%6u8jvN zH+R&1xqU)XKp7vrC!hTM_V@Qo^77Jha_A^2o7&pMU%q6tVY+nIN`%e&7Xw0V{-W`T zjj*pBi}!$EGd?J&_bZj$=brl?zkU1G(9i(*iNCf$UvpCMrVeG66^%cNgOnE2SpUT0 zciQ{P^*imcto`)3My8MNHU7-x)MCBUqrJDJ z7+rPnEP7gbd3jxC8a@IM{te(l>u^dgTFVbVVxuA7RdQzLujQ4%{r`${2HO~I5de_M z-qz4*FLpC*VI3W^W0P!XZO2DP)!QvJjV8pkBzHM952@~)x}uqXirThtj}0%gTE?b7 zUzT!ZTx(=W?aD=PP}%ee9MR0p%xrgXZHVOSSl4)5k0Z3aTVKKy!ww@ZL!q1~wROoE z%H3Po3Pv?&M>I5DQGJb#jo*9?u0?0pAW*eEJl3z{2dubjl)jPFP$5f@+fzIc`+$J5 zrC@{1@T${ zCJasHNc}630{C%E(A_UC+z7=(i|z9=Lj3w4vXy1x&!RA-#r&2ja9)mDg}yzEVzANx z-k|b5d-m+)^mKIWLG~+o`Q5!i4SaljHda=@yH9^RJ2~v+J*Ley+gs@ez=-8>EXm5s zDladG2>_UHVq&7d-+Hd;OI=+ZAbfuf2EbnyMiEB&Ff`%UIs;kC?x>hOH5mVAaVc}` zsugg@LFxakxOC;le4$)HlFq7`zJm9rCNU zXygK6QA$QIH;;^Pg0l7S;d=>hCPv0*e~C$l$H%?WU;ZX0g``aULra31u^W}1l_f4J z3JQ>xwLU$qX7M_T@x|UfS%5O7*B&A03Gm&M7V;$NN@^MR`s-3UB6hQPq4=~){O6cZ zLkWfy@Ftrs_N2y+gcIQb<7t(2H+pU4K!ziNv5$%t>N1&|-V>xSV2by58HsP`5Vaoy^?) z{Fa5ZbigLvw0#T``Rt2t*Oe$891#4NJvs5|RGT_F=%}g70r0i761NX>Qc{E>z0MU~ zTzKh$m@qa#i_${Nl$Hp$!`D|3sDGv4_xbY;G_-qsE|sOFY?%AjModd5dFj9SwJ0nq+T8Tzv5u>gWI~S*4hroYKYT>9&OlsJ)qo9p&26Ep6Kt_VmsSAV?+MI_i3Uo95uBuq)#@ zAu)QKQmb*Zanq#q7*Y*B@^S-Jj<#PMnV6VHKPwKCTvnq&mi!apbDD%2Di~mH0?zDB z@+Fb^(maXn5`b~z#tG=ZPh*U)(OO!$Fqyd8Nm|*!`ohG-G*-az=i4%CZfcs+k&@~R z3%d(~QwuNXO%CY*F9JIQ8GXrOq0o{QQi!y#i5^O*x zAh#w=X^o%n)o;9%lEPQ$Etod!em6Kd>AKVvk3%7;E%w!4F0-;0VP!effJRDd#m@X7 zJ1a|j{)tLSTQryA!zmGceSJeiYK%I-&8{L&O3DwYM%mff%vTcorDA!V=bCP3Bw8|Y zb92+FS2nf4I)-+fysiPuVTOf^OXZxdYmSG5BU~*nI4CG6EUYQldmbNKnmpq~HQWp8 zbE7XINKBoW1k7o+8xtWRA^rXR$aB%o7#`~h_OPd2c;J2 zz9 zou5$gqgBHpPqs;?po#l|fq`Eu_#Kt=-qb~LSX$|qc>&o{%_NWVhS8B`aU^an-zmMXsY1t{6{b7zb_rR!))!kUOWhTcZ|ad z)pTdoQdWCx^V7aY&%Sk$(W7;E4BKF$NJ>gp*sQNiR8{0hUOs>Can=10u$xLfz1HP} zG!a(T%|K~l-;#3@2h-!x$uptzb3o&*Sl@U19v&>NfqqxYPEJl>^k|){xyfa}t^IKy zWu@!f31l3oy`Yd{prLJDcwatKlL2{e5dI{5DWPmMHGpm8TZylbY=qXrh~4zbj<;{$ zs=FM{L#t?-t7$pQbvqVH#A4kRA3K%29h3n zfa1P z0C);yvzpWW$Z}!jMLLm;q$H1G;RC{1(3A+6^#e3*U!2>oXh}-m40b&`Tr4l=beJHp z!H>(n`85yv`^S$T0hDIMOq$lAbdMAnz`$6VpD$B3qp0D0A(Se>5OtrY9{LrPnE`jQ zUJ$T-l@C6>Y$24} zxfa4d;ckOE4*xf$YcRE@yg1h49Bj}mT5FPFy#wsiW(cQgEV9CIZ-cDsnUX5orB=j zmPdao#tlz)e?{YN8biQ~>gsA{^mV-C=H)hbCer9fj@R%quMDv)Id5n$JW8Z%xtLAp2<3D!u#fhM%k0thBNR0>;0wf z=k=)y+OSX77&QrOcWf~n@UEhw%BJ2ZmQz$zRLA3`dqYe7NVB)MSLO9D3Bih~!&@Lw4wZ9j=BibsxYnQTrt--IbQ=Xy&|al`au|Dl zND`8_hT?cyQ7i2rD+CuTa|rrG5|uVIse`JboNel#KYxma(#@l(sH$eENbMQ$2@=xV zt`10)q83q+lY8;B+<67>u2IuLb9e3`!vhEDgU?V>-$k^y$bSQ0*)c)ZJ)OY1U78CX zEe*X~1EFDIT;a_xc_-XxXz1wJ6W=>`n$Fk>ac8ucrx6)tWycw1pRvEvebe7aE0v#fmv%@BwPh9E^cL;KT&=V#mOD? z^o$JIGEP3tqXrzQO;04QwXUY-!=TuNSEU|$QSjJbNZRxYDdeh02L?WxcoRLTc%#Qf zbW3=+qr;E>PDys6wE(-%_U7iT39?FqfMz_3H7ds(H*@O`9=JE%JoMBAGtfkB?WH5_ zjP}-09&dXRhlht7H)e|a|H5@1nM@YLx4|R_RcZ-@I}_tugA0jo1H1uGxL}$5{+2^u z$WPDh!|&r?Ho0fj`w)8otigje=^qd3WgmVSj4!#-bM*^W=Xq4t0!iDdjn7R%|RuO~Ksebo~i!-lc9t zYI^#|VAHX0bvHdOcB9uwb)VWTzsfrugWx2nIjLz9b@9DF!)>wNH8@X`NvuBp$)!+j zwH%nwo0Tqwf1!r^cgmjR`{3F$?B@SagNn=v@}w)F1^MKPC33h-cl=>RI!OfcuE#QHx+N!*am{V7 z=GLqX2%IkWUM29_X*ikjp@*Ep^vuko0(yy+!cL_^j1mhA3v3*m!@azdXDCKSM!_Wg zz4xS)99}f~lbF^%aW~<7fplVt5=3R){?B{o(;a%55IXdM}EouAB8;*f#n!5 zk#lRhex0@5vXb*|WaQQ?ZP}_gxOQvTpe8YK*0Pi5SFaRb^IR{A;b)l+o|RtDckkZ8 z7+Ywet{$_QC{4|m7%%Gl50RTLr+^0pEXJvB*`v-KgL^!Wj$93icA@Hq+oQevK>cK*!=_jWqS(QMWhuqwiadA^qb?)e`RIM{JGYvJpppylnN?b7I zq$lrsDiw#=5R5-CSKc*p$*{yvk&KQA4o*HyE+804rMRo(EGrvm;kfi(G!c+2gGXuA^+1VYq!z+c(4t%L- z+vV1);G<9(jg61%!Qi#?@-lf=l3JYaj~_pzqS(Kv5B-bsl^U7`qNE+NXUfEzhzzCp zqEyX?DaP*idRQH7PQzFkx80p6>>HfNXp66M2igB2%TFVtXA2NP_{tW3>XSFdA-I&*CB1lmTE}a(J zCHV{g;Qzgh77+uT2<*#W;FJKv0|c)3B)39L1|XC0?p=2Mt_NDBHxXwTXhtvZ^Ew^C zXsD~Ji|$Gc>4<6(lin1G*QYrNWeyABdUp5DZ!y65(QF6P9w_OqN6QpiY*!G>o*pds zzz^b9hiPpQMoi<8BA3%67G`G9OWsaaM|VCXa+F7TW@SxWSGb8}M~ z?(TjHZVJp3^Z!8j%w{Nv|G&D5s=SF#YexLd7gNp}%_;aM#=M-u4 zA7nRNLu#Um{}gGdN?-1*XO7!uYR2SnsFQ;5&f)evD=RCt;>k*8?m#Xy z7-pM}=4L8d+N9d#x&ncc&hC)VCn^IYBP}K|A+tP~7rNd2pP{g2Vlqa?0^f5t%K3kj z?s`*C|0diOnnhp29$;3jwEGeo>#&l}x@rpOIos&F@^idU4+~Rrc4kI?f`*%@u5Vz# z1RkDH0qQU>J_$+ZtfmK+Z@vd9FSJGx_kT^2_qSrNaz`goO0Nmq>zf4L(5#;=g3&z*pNyT%oynF`x+iDn%=NsZD~o!WkV}bby2u}XGju07qFtk zVT29|XvK6pN#fC|vKtN1Qg=y53l+b8NXFhiZ!lP1d=49;vJ%{Y zBhxOv5Y!StoU2!_PP(2~mAA`|dej>hzVL?t1ds3dr~NlC(ZrYr&W~%(69+3d4W$dM zU^~D#h8_w885+7gOjQk?#X(FAg9hqXdlW}dFkHX5Rt_$WLS7_rRElU0e8=PatZ(nC zgi@@5TX&<_*{>%ka0E(Vixlr6X?x4@?sEM`a(}R*`M-q8zO4JiJ=vVrgD@ExEsfkX zIDlD$eZm=dI5>$a#|BfKtzc=|T395Y@MP7`t3%AuIx-sM=FMqVvE4}s=^TJ|)y}IY zL8WQ%&J03LTBS&K2szp*AD|{Wd3g&N!ytB&g5-EQZ65~mLh$j-=-OlrpN5D#z50OV zF;RP+GPgOD1e}RVv*~AGnZpbS&ln^w5?-gYJkN*-f-SYQpxD^X*6HbKWCh6E2gjfC zA{e*!dtZ2XWoAKk@g6odqsxh%si`T!+UkHV)AP;**OOTikaL)Ao+s(N#A3xv9Lkcj zlP(B~%f}+Ykr`lTXa69-K>rq-h^P&nHq>)j_0_9n3v1piJBV!^Je&UHU=oW{HutWi z&|z=o>(@J5Pp(^P&>$ajV5WH3qM4#+QsEfzg+J9owSFJGy0UUcCH#E+saB)(2fp)@ zo${hlRd9tsOv`N7`*4pT*&`XBwS5X!@9YwUKBR`Ww=K3j<_E2t=O~Ps)5(*}t`AL( zE|%MFz->vb2mtMPhgDJnRjzTaY2cWZN7b<4jkXXIqkTPE$y^* zpE)rhAyj%t2ZzRnhOS-Dg3iW9uV;ox544Ca96p_fyIZn}F0sRE zKGX20UU8l$_uFs3Sy>g8xBL-j&~cF5u{`y9w70M0N_1`mlat*b%)s9VlYddfNQ0h0 zO<#4F$AMXDsHlk9;qvSsWIAkCtY5pjvB3vHT?fixY-{0%kSe)R-0KI1@)a};;@ion zRh#x)2yBLpJ!8T$X0hgcf8dvQ-< zO=cFEAWeCXkWg$i6`$gF`|_ZCcR%@KqHK4vt;F@BgJ9$-D@j zCf=D;+u1X+fQOnAO`q>ENk(&i*Ek=xpf-|S15%ZClMWZM{Ahvt_G8~@XfwUc)Sp`9 ziJKF&%9uQr`2)3+ykZ|83<;D2@0;>Anvi7#lcTo`11j2|kvA<7r65Rf+$JG8_jf&U z*Da=g>_xq~`ZSbQ`B9Km8rhMRSKlZW78WEU*zGpskQSc?L5|q+p@gu{vh&hJmE%l> z-A+5(^7?z-%PnegRkZ(zT5uMrJ_j;;^uxaP?E_7TkHNwH#~U?La)V%Zf#Ly1J@`0K zD9gc!KRlGFyh+3!(4X`9vvINrQ;m8|>aa(t^+KpO?ru(dlNc6YyzF7Ei5JRL!x-hiNW~pC)}8!Y zUhKcGViKddI?804wlS6;9UTp-J7%Y(ETpH#V7u^@7C=P9aU3WIS|Z?e4T7^{HPW8W~=Nm zIFu)F-H>p?yw7b11}uH$rd!Lpe*Zj`Tncba%N))oD0P`*9q_xBmX^-8IJeo*ApR*ldOibrBpFL5h&M9%C#`b99FXJM0%ZF` zpp?HIX8iJsd5zJN#fQ6GY&<1Ly{d(VW-{|tC{@-WmMvuRM z9hP@BKh!K1+BzE6i#1TP2bd#dGm*E)uTuRhI)odoAe~d7W|U2-|Q9T7Max8MKQJbh1~@^uSd}@qM5vU@4-s4!Q5Gpzemj!C%>> z6WjayDP?oOat3&y$24z%k2Cj}w%~#ZE|Fsv=zsWu2m73rfuU=7Soyr9yVf_M2DFEZ z0}EPo7dd>*F@1|Ufe+*hYdtd0dN;wx^dn^RYc#)8LA`3!uX8`*k=77I9DQ-+$+O7S z7U(pp+gd?&S1c9Q0TG#+4W)~mG|Q%^r{|#V68ZonIRZ7dnD|XV(L=Vt5b}Fc(7gU1 zYMPiwNC@8VjO03sN3YHeNoeX9f`VJ$%52snct?{M=I1vz%~r1Bl1oHbK|Z&yPk#RB zwRN~RIZ0aM_wV`c*+o78WiJK>?kZ%`^{PDhUCImk$pl8^yp97#x04_OF2=&r(%v4H z+6=z@!s6l%$qqjl7eF>%7v*Vzo6wyH%_RkBrqjnFS z!wk$U4!ZONgmldJ*OV2ePY!o>LAKt4Fg@epGWmR=8{?A-ag|veP5lzlf5>r$)sGO^ z3S7voZWws8?RB7HPpcs#9d0slxcEgTe4?LQw6Uu1*keLA7nJYp!8aNaZB~+z5%7g% z`bKYRC**RJu2NqdECJKqX%H!CE^DP6ZsrbRz1KK<7#n;kkJ&iZ8uS-R!*z867wN}% zFF^uzmn2+**V_eoH7mNqBR1g+XJ7Le54#aIwV}Rr=_r_5z*u%H!4Az@lR(#d8X1lWVx||tw3|p<@huW9v_un;lzR~*H>u8 znS)t$27jV=EQDB!6ub!JxA;h;A+;i8+<31N;T}lmoXR9^r*q=kAv3rN;*CQ+DJqn% zVBicuA&QUS^}2D-VrxclA{1sh!*217h5e`HZn5n$zJMNe<9 zXTRO>#6*mctT4H`FSuG8JU=Z0t1!iAwoDer>(#NsQ{QdHHca|GgMSm?-==)Kq<2QsXCvS33?WYfRr?@(D1*~L!~%@n4E_>Rg&?= zX%D5Y-lf2Sf}$d#r@vhxqs0Z)Xvm(Gped7Z!AJ)fb*<+r_4(0iZbWVqPKbiyuVr;a za6sM&q~ZZB_<}0b^KWdM=V6iU8g7wS%zs}&01c6t=8%P;JKc=NB;<+X{CTWE&6R2gQ^b~ z4ax1JP;pD>t?t&y9(%}mB0c{Q=N?xIeKLMAz9_wS``$g#*_YG(C@qv5XJ@}^=#>i~ zvncq@2}FRE>K%XWk6pA$vQ{2~GE z_zykq_#b-QZ2|&n!3$;cX8;X|2kOjl^q^8-6EYFZm2j*C=T+iT5^HBP*DtUYu@7J2 zW|z~dBI%!|pq#&Ozl0OAZ~#qBPq+sxvuq>~1PV5mmd9Y8;^Ji-Paup#Y3?$-sr4pt8PYA*toMS{#_LQq{fT+LRw~*XfpW?k zope7M8+!;5xYg%p#}JQjDRX;?MZ!B)YD%IZ6SRK$`a{ilOK?w9?NPrQf$If(p&X6-2 zA~n5t6@nt59R`&@eKYa@Hyf{G`II4;=3@J>KU5a6*$fx@dz^R6r{ zBg4Yln#G2ORPQC)F>E(5qK=@aG@4vT+^vNG!RPTS&Ec}hYKZ^9dI}hjqY;gV&PSz1rJPc$?_8`-mgUdxAe8ZGLnGC!2-^unp)kd;1Gf(;C zB5J3^*_3XC=Yc}OHZ@RN2^`zs*LSx97tw>1fitb?OEG!SF19u|1DaiJG9*lvNC(H%2D6qSfMgsgUPr$U*!^c3TUHpsglIpc6s@P2~<@b zR*=za^_UPxAV%)xkRkr}hgSbf#7`3e>%9j=%o0~Q1Va3^pr9ub8y5}Iaf5Wemk@N`zmRtqoqgDNuS6sXYV~Acy)KeQr_~$XPv6FBj_W9LSU?_5Oa#<>BYII0f#?` Date: Tue, 17 Jan 2017 19:00:12 +0200 Subject: [PATCH 183/329] oopsies 2 --- advanced/iters.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/advanced/iters.md b/advanced/iters.md index a4c1271..087468a 100644 --- a/advanced/iters.md +++ b/advanced/iters.md @@ -291,7 +291,7 @@ iterators** with some more features that we don't need to care about. The generator we got works just like other iterators: ```py ->>> c = thingy() +>>> t = thingy() >>> t >>> next(t) From e182e8b7d0b24a2294aa66efd4bf7be8f38b458c Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 18 Jan 2017 22:13:28 +0200 Subject: [PATCH 184/329] cleaning up stuff --- common.py | 7 +++---- linkcheck.py | 10 ++++------ strip.py | 17 ++++++++++------- update-ends.py | 48 +++++++++++++++--------------------------------- 4 files changed, 32 insertions(+), 50 deletions(-) diff --git a/common.py b/common.py index 6ebff2d..11ce1b1 100644 --- a/common.py +++ b/common.py @@ -30,7 +30,6 @@ import itertools import re -import sys _LINK_REGEX = r'\[(.*?)\]\((.*?)\)' @@ -44,12 +43,12 @@ def find_links(file): # don't yield same link twice seen = set() - # we need to loop over the file two lines at a time to support + # we need to loop over the file two lines at a time to support # multi-line (actually two-line) links, so this is kind of a mess firsts, seconds = itertools.tee(file) next(seconds) # first line is never second line - # we want 1-based indexing instead of 0-based and one-line links get + # we want 1-based indexing instead of 0-based and one-line links get # caught from linepair[1], so we need to start at two for lineno, linepair in enumerate(zip(firsts, seconds), start=2): lines = linepair[0] + linepair[1] @@ -68,7 +67,7 @@ def get_markdown_files(): with open('README.md', 'r') as f: for match, lineno in find_links(f): target = match.group(2) - # Currently the README doesn't link to itself, but I don't + # Currently the README doesn't link to itself, but I don't # want to break things if it will in the future. if target.endswith('.md') and target != 'README.md': yield target diff --git a/linkcheck.py b/linkcheck.py index e53761c..a92733f 100755 --- a/linkcheck.py +++ b/linkcheck.py @@ -43,10 +43,8 @@ # The markdown files use posix-style paths, so we need posixpath for # processing them. See help('posixpath'). -import collections import os import posixpath -import re import common @@ -64,7 +62,7 @@ def __init__(self, regexmatch, filepath, lineno): def _get_status(self): if self.target.startswith(('http://', 'https://')): - # Checking for http(s) links can be added later, but + # Checking for http(s) links can be added later, but # currently it's not needed. return "ok" @@ -72,7 +70,7 @@ def _get_status(self): if '#' in target: where = target.index('#') if where == 0: - # It's a link to a title in the same file, we need to + # It's a link to a title in the same file, we need to # skip it. return "ok" target = target[:where] @@ -84,7 +82,7 @@ def _get_status(self): return "doesn't exist" if target.endswith('/'): # A directory. - if os.path.isdir(directory): + if os.path.isdir(realpath): return "ok" return "not a directory" else: @@ -96,7 +94,7 @@ def _get_status(self): def check(self): """Check if the link's target is like it should be. - Return an error message string or "ok". The return value is also + Return an error message string or "ok". The return value is also assigned to the status attribute. """ self.status = self._get_status() diff --git a/strip.py b/strip.py index 95ed16d..fb61d3b 100755 --- a/strip.py +++ b/strip.py @@ -28,11 +28,13 @@ """Strip trailing whitespace from markdown files.""" +import os + import common -def needs_stripping(file): - with open(file, 'r') as f: +def needs_stripping(realfile): + with open(realfile, 'r') as f: for line in f: line = line.rstrip('\n') if line != line.rstrip(): @@ -41,12 +43,12 @@ def needs_stripping(file): return False -def strip(file): +def strip(realfile): lines = [] - with open(file, 'r') as f: + with open(realfile, 'r') as f: for line in f: lines.append(line.rstrip()) - with open(file, 'w') as f: + with open(realfile, 'w') as f: for line in lines: print(line, file=f) @@ -54,8 +56,9 @@ def strip(file): def main(): print("Stripping trailing whitespace...") for file in common.get_markdown_files(): - if needs_stripping(file): - strip(file) + realfile = file.replace('/', os.sep) + if needs_stripping(realfile): + strip(realfile) print(" Was stripped:", file) else: print(" No trailing whitespace:", file) diff --git a/update-ends.py b/update-ends.py index d26ba3f..c54e8b6 100755 --- a/update-ends.py +++ b/update-ends.py @@ -28,9 +28,10 @@ """Update ends of markdown files.""" -# Markdown and HTML links use / as a path separator so we need posixpath -# for parsing them and we do need to replace / with os.sep when opening +# Markdown and HTML links use / as a path separator so we need posixpath +# for parsing them and we do need to replace / with os.sep when opening # the files. +import os import posixpath import re @@ -50,7 +51,7 @@ def get_filenames(): """Get chapter files and other files from README. - Return a two-tuple of chapter file names and other file names as + Return a two-tuple of chapter file names and other file names as iterables of strings. """ chapters = [] @@ -79,12 +80,12 @@ def get_filenames(): def update_end(filename, end): """Add *** and end to a file if it doesn't have them already. - filename should be relative to the toplevel using / as a path + filename should be relative to the toplevel using / as a path separator. """ - filename = filename + real_filename = filename.replace('/', os.sep) end = '\n***\n\n' + end - with open(filename, 'r') as f: + with open(real_filename, 'r') as f: content = f.read() if content.endswith(end): # No need to do anything. @@ -95,11 +96,11 @@ def update_end(filename, end): # We need to remove the old ending first. print(" Removing old end:", filename) where = content.index('\n***\n') - with open(filename, 'w') as f: + with open(real_filename, 'w') as f: f.write(content[:where]) print(" Adding end:", filename) - with open(filename, 'a') as f: + with open(real_filename, 'a') as f: f.write(end) @@ -108,34 +109,15 @@ def main(): # make previous of first file and next of last file to just bring # back to README - prevs = ['./README.md'] + chapter_files[:-1] - nexts = chapter_files[1:] + ['./README.md'] + prevs = ['README.md'] + chapter_files[:-1] + nexts = chapter_files[1:] + ['README.md'] print("Chapter files:") for prevpath, thispath, nextpath in zip(prevs, chapter_files, nexts): - # the paths are like 'section/file.md' - prevsection, prevfile = posixpath.split(prevpath) - thissection, thisfile = posixpath.split(thispath) - nextsection, nextfile = posixpath.split(nextpath) - - # make previous and next relative to this file - if prevsection == thissection: - # they are in the same place - prev = prevfile - elif prevsection == '.': - # something from the top level - prev = posixpath.join('..', prevfile) - else: - # it comes from some other place - prev = posixpath.join('..', prevpath) - - if nextsection == thissection: - next_ = nextfile - elif nextsection == '.': - next_ = posixpath.join('..', nextfile) - else: - next_ = posixpath.join('..', nextpath) - + # thispath is always like 'section/file.md', never e.g. 'README.md' + thissection, thisfile = thispath.split('/') + prev = posixpath.relpath(prevpath, thissection) + next_ = posixpath.relpath(nextpath, thissection) extralinks = "[Previous](%s) | [Next](%s) |\n" % (prev, next_) end = END_TEMPLATE.format( license='../LICENSE', readme='../README.md', From 0c350f169bd6c563caeff44afa3204077bd4f8d9 Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 19 Jan 2017 16:27:44 +0200 Subject: [PATCH 185/329] upd8 2do stuff --- TODO.md | 7 +++---- todo/dicts-and-tuples.md | 3 --- todo/genexample.py | 18 ------------------ todo/iterators.md | 40 ---------------------------------------- todo/yield-example.py | 18 ------------------ 5 files changed, 3 insertions(+), 83 deletions(-) delete mode 100644 todo/dicts-and-tuples.md delete mode 100644 todo/genexample.py delete mode 100644 todo/iterators.md delete mode 100644 todo/yield-example.py diff --git a/TODO.md b/TODO.md index 102cf2c..3a8bfce 100644 --- a/TODO.md +++ b/TODO.md @@ -4,6 +4,7 @@ This tutorial is not complete. It still needs: - range somewhere - **More exercises and examples everywhere!** + - especially "fix this" exercises - classes part 1: Akuli: I would probably add an example of refactoring @@ -11,13 +12,12 @@ This tutorial is not complete. It still needs: into a class because it's a pretty typical usecase - classes part 2 - - non-public `_variables` (maybe reading PEP-8 is enough to explain this?) + - non-public `_variables` - "singular" inheritance, inheritance of built-in classes - using super - advise to avoid multiple inheritance -- iterables and iterators: something most Python programmers need to be - aware of - last chapter: "What should I do now?" links to other resources + - first of all: read zen and pep8 - GUI programming tutorials - easygui - tkinter in effbot (warn the readers about star imports) @@ -27,7 +27,6 @@ This tutorial is not complete. It still needs: - David Beazley's metaprogramming and other talks - "What the heck is this?" section for stuff i haven't talked about - regexes - - yield *** diff --git a/todo/dicts-and-tuples.md b/todo/dicts-and-tuples.md deleted file mode 100644 index ff2fed0..0000000 --- a/todo/dicts-and-tuples.md +++ /dev/null @@ -1,3 +0,0 @@ -# Dictionaries and tuples - -So far we know how to store multiple diff --git a/todo/genexample.py b/todo/genexample.py deleted file mode 100644 index 0016a05..0000000 --- a/todo/genexample.py +++ /dev/null @@ -1,18 +0,0 @@ -def thing(): - print("starting") - print("blah blah blah") - print("yielding 1") - yield 1 -# -------------------- CUT HERE -------------------- - print("running") - print("blah blah blah") - print("yielding 2") - yield 2 -# -------------------- CUT HERE -------------------- - print("done") - - -t = Thing() # run nothing at all -print("got from next(t):", next(t)) # run the first piece -print("got from next(t):", next(t)) # run the second piece -print("got from next(t):", next(t)) # run the last piece and raise StopIteration diff --git a/todo/iterators.md b/todo/iterators.md deleted file mode 100644 index e72b503..0000000 --- a/todo/iterators.md +++ /dev/null @@ -1,40 +0,0 @@ -# Iterables and iterators - -We have used for loops in many exercises and other things so far. One of -the simplest things we can for loop over are lists. - -```py ->>> for item in ['a', 'b', 'c']: -... print(item) -... -a -b -c ->>> -``` - -But what exactly is happening behind the scenes? - -## Iterables - -An **iterable** is anything we can put after a `for item in`. For -example, strings, lists, tuples and dictionaries are all iterable. -Iterating over an iterable is simple: - -```py -string = 'hello' -for character in string: - print(character) -``` - -You might think that under the covers Python does something like this: - -```py -string = 'hello' -index = 0 -while index < len(string): - print(string[index]) - index += 1 -``` - -But actually, th diff --git a/todo/yield-example.py b/todo/yield-example.py deleted file mode 100644 index 627b8a7..0000000 --- a/todo/yield-example.py +++ /dev/null @@ -1,18 +0,0 @@ -def thing(): - print("starting") - print("blah blah blah") - print("yielding 1") - yield 1 -# -------------------- CUT HERE -------------------- - print("running") - print("blah blah blah") - print("yielding 2") - yield 2 -# -------------------- CUT HERE -------------------- - print("done") - - -t = Thing() # run nothing at all -print("got", next(t)) # run the first piece -print("got", next(t)) # run the second piece -print("got", next(t)) # run the last piece and raise StopIteration From 3be5d01f49040568c4c489acdf4c01f169d51927 Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 20 Jan 2017 22:51:34 +0200 Subject: [PATCH 186/329] function stuff --- advanced/functions.md | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/advanced/functions.md b/advanced/functions.md index 8aaaf11..98a13e3 100644 --- a/advanced/functions.md +++ b/advanced/functions.md @@ -114,16 +114,16 @@ now kwargs is {'b': 2, 'a': 1} Traceback (most recent call last): File "", line 1, in TypeError: thing() takes 0 positional arguments but 2 were given ->>> def print_box(message, border='*'): +>>> def print_box(message, border): ... print(border * len(message)) ... print(message) ... print(border * len(message)) ... ->>> kwargs = {'message': "Hello World!", 'border': '-'} +>>> kwargs = {'message': "Hello World!", 'border': '*'} >>> print_box(**kwargs) ------------- +************ Hello World! ------------- +************ >>> ``` @@ -209,24 +209,30 @@ def move(source, destination, *, overwrite=False, backup=False): ``` The `*` between `destination` and `overwrite` means that `overwrite` and -`backup` must be given as keyword arguments. +`backup` must be given as keyword arguments. The basic idea is really +simple: now it's impossible to overwrite by doing `move('file1.txt', +'file2.txt', True)` and the overwrite must be always given like +`overwrite=True`. ```py ->>> move('file1.txt', 'file2.txt', overwrite=True) -deleting file2.txt +>>> move('file1.txt', 'file2.txt') moving file1.txt to file2.txt >>> move('file1.txt', 'file2.txt', True) Traceback (most recent call last): File "", line 1, in TypeError: move() takes 2 positional arguments but 3 were given +>>> move('file1.txt', 'file2.txt', 'file3.txt') +Traceback (most recent call last): + File "", line 1, in +TypeError: move() takes 2 positional arguments but 3 were given +>>> move('file1.txt', 'file2.txt', overwrite='file3.txt') +deleting file2.txt +moving file1.txt to file2.txt >>> ``` -As you can see, our new move function also forces everyone to use it -like `move('file1.txt', 'file2.txt', overwrite=True)` instead of -`move('file1.txt', 'file2.txt', True)`. That's good because it's hard to -guess what a positional `True` does, but it's easy to guess what -`overwrite=True` does. +Doing `overwrite='file3.txt'` doesn't make much sense and it's easy to +notice that something's wrong. ## When should we use these things? @@ -246,8 +252,7 @@ I don't recommend using keyword-only arguments with functions like our `print_box`. It's easy enough to guess what `print_box('hello', '-')` does, and there's no need to deny that. It's much harder to guess what `move('file1.txt', 'file2.txt', True, False)` does, so using -keyword-only arguments makes sense and also solves the file deleting -problem. +keyword-only arguments makes sense. ## Summary @@ -258,8 +263,8 @@ problem. dictionaries and keyword arguments. - Adding a `*` in a function definition makes all arguments after it keyword-only. This is useful when using positional arguments would - look implicit, like the True and False in `move('file1.txt', - 'file2.txt', True, False)`. + look implicit, like the True and False in + `move('file1.txt', 'file2.txt', True, False)`. *** From dde8f28586f9b3cb02ae8c352e5de08cf8cf67fe Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 20 Jan 2017 23:31:06 +0200 Subject: [PATCH 187/329] moving more stuff to common.py --- common.py | 18 +++++++++++++++++- linkcheck.py | 2 +- make-html.py | 9 +++++---- strip.py | 19 ++++++++----------- update-ends.py | 11 +++-------- 5 files changed, 34 insertions(+), 25 deletions(-) diff --git a/common.py b/common.py index 11ce1b1..dfe7347 100644 --- a/common.py +++ b/common.py @@ -26,9 +26,15 @@ # For more information, please refer to -"""Things that other scripts import and use.""" +"""Things that other scripts import and use. + +The markdown files use / as a path separator. That's why they need the +posixpath module for processing paths, but they use functions in this +file when actually opening files. +""" import itertools +import os import re @@ -93,3 +99,13 @@ def askyesno(question, default=True): return False if not result: return default + + +def slashfix(path): + """Replace / with os.sep.""" + return path.replace('/', os.sep) + + +def slashfix_open(file, mode): + """An easy way to use slashfix() and open() together.""" + return open(slashfix(file), mode) diff --git a/linkcheck.py b/linkcheck.py index a92733f..ff26bf3 100755 --- a/linkcheck.py +++ b/linkcheck.py @@ -110,7 +110,7 @@ def main(): print("Searching links...") links = [] for path in common.get_markdown_files(): - with open(path.replace('/', os.sep), 'r') as f: + with common.slashfix_open(path, 'r') as f: for match, lineno in common.find_links(f): links.append(Link(match, path, lineno)) print(" found", len(links), "links") diff --git a/make-html.py b/make-html.py index 40307cd..bf6723b 100755 --- a/make-html.py +++ b/make-html.py @@ -67,8 +67,9 @@ """ -def mkdir_open(filename, mode): - """Like open(), but make directories as needed.""" +def mkdir_slashfix_open(filename, mode): + """Like common.slashfix_open(), but make directories as needed.""" + filename = common.slashfix(filename) directory = os.path.dirname(filename) os.makedirs(directory, exist_ok=True) return open(filename, mode) @@ -198,12 +199,12 @@ def main(): for markdownfile in common.get_markdown_files(): htmlfile = os.path.join('html', fix_filename(markdownfile)) print(' ', markdownfile, '->', htmlfile) - with open(markdownfile.replace('/', os.sep), 'r') as f: + with common.slashfix_open(markdownfile, 'r') as f: markdown = f.read() renderer = TutorialRenderer() body = mistune.markdown(markdown, renderer=renderer) html = HTML_TEMPLATE.format(title=renderer.title, body=body) - with mkdir_open(htmlfile.replace('/', os.sep), 'w') as f: + with mkdir_slashfix_open(htmlfile, 'w') as f: print(html, file=f) print("Copying other files...") diff --git a/strip.py b/strip.py index fb61d3b..b8d7f9d 100755 --- a/strip.py +++ b/strip.py @@ -28,13 +28,11 @@ """Strip trailing whitespace from markdown files.""" -import os - import common -def needs_stripping(realfile): - with open(realfile, 'r') as f: +def needs_stripping(file): + with common.slashfix_open(file, 'r') as f: for line in f: line = line.rstrip('\n') if line != line.rstrip(): @@ -43,12 +41,12 @@ def needs_stripping(realfile): return False -def strip(realfile): +def strip(file): lines = [] - with open(realfile, 'r') as f: + with common.slashfix_open(file, 'r') as f: for line in f: lines.append(line.rstrip()) - with open(realfile, 'w') as f: + with common.slashfix_open(file, 'w') as f: for line in lines: print(line, file=f) @@ -56,10 +54,9 @@ def strip(realfile): def main(): print("Stripping trailing whitespace...") for file in common.get_markdown_files(): - realfile = file.replace('/', os.sep) - if needs_stripping(realfile): - strip(realfile) - print(" Was stripped:", file) + if needs_stripping(file): + print(" Stripping:", file) + strip(file) else: print(" No trailing whitespace:", file) diff --git a/update-ends.py b/update-ends.py index c54e8b6..aa02d60 100755 --- a/update-ends.py +++ b/update-ends.py @@ -28,10 +28,6 @@ """Update ends of markdown files.""" -# Markdown and HTML links use / as a path separator so we need posixpath -# for parsing them and we do need to replace / with os.sep when opening -# the files. -import os import posixpath import re @@ -83,9 +79,8 @@ def update_end(filename, end): filename should be relative to the toplevel using / as a path separator. """ - real_filename = filename.replace('/', os.sep) end = '\n***\n\n' + end - with open(real_filename, 'r') as f: + with common.slashfix_open(filename, 'r') as f: content = f.read() if content.endswith(end): # No need to do anything. @@ -96,11 +91,11 @@ def update_end(filename, end): # We need to remove the old ending first. print(" Removing old end:", filename) where = content.index('\n***\n') - with open(real_filename, 'w') as f: + with common.slashfix_open(filename, 'w') as f: f.write(content[:where]) print(" Adding end:", filename) - with open(real_filename, 'a') as f: + with common.slashfix_open(filename, 'a') as f: f.write(end) From 36b737f0bdb33d8c087e7aedfa84d87ade2a6770 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 21 Jan 2017 12:31:22 +0200 Subject: [PATCH 188/329] loop stuff --- basics/answers.md | 91 +++++++++++------------------------------------ basics/loops.md | 55 +++++++++++++++++++--------- 2 files changed, 58 insertions(+), 88 deletions(-) diff --git a/basics/answers.md b/basics/answers.md index 297f09d..6e8dc1d 100644 --- a/basics/answers.md +++ b/basics/answers.md @@ -220,84 +220,33 @@ isn't exactly like mine but it works just fine it's ok, and you can ## Loops -1. For loop over the users, each user is a list that contains a - username and a password. +1. The problem is that `things` is a string because we converted it to a + string with `str`, so the for loop loops over the characters `[`, + `1`, `,` and so on. Replace `str([1, 2, 3, 4, 5])` with + `[1, 2, 3, 4, 5]`. - ```py - users = [ - ['foo', 'biz'], - ['bar', 'baz'], - ] - - username = input("Username: ") - password = input("Password: ") - - logged_in = False - for user in users: - if username == user[0] and password == user[1]: - logged_in = True - break - - if logged_in: - print("Welcome, " + username + "!") - else: - print("Wrong username or password.") - ``` - -2. Just put the whole thing in a `while True:`. Remember that a break - will always break the innermost loop it's in. +2. The code appends each list in `before` to `after`, so the `number` + variable actually pointed to a list like `[1, 2]`. An easy solution + is to just write two for loops inside each other: ```py - users = [ - ['foo', 'biz'], - ['bar', 'baz'], - ] - - while True: - username = input("Username: ") - password = input("Password: ") - - logged_in = False - for user in users: - if username == user[0] and password == user[1]: - logged_in = True - break # break the for loop - - if logged_in: - print("Welcome, " + username + "!") - break # break the while loop - else: - print("Wrong username or password.") + before = [[1, 2], [3, 4], [5, 6]] + after = [] + for sublist in before: + for number in sublist: + after.append(number) + print(after) ``` -3. Add a for loop that works as an attempt counter. + Lists also have an extend method that appends each item from another + list, so we can also use that: ```py - users = [ - ['foo', 'biz'], - ['bar', 'baz'], - ] - - for attempts_left in [3, 2, 1, 0]: - if attempts_left == 0: - print("No attempts left!") - break # break the outer for loop - - print(attempts_left, "attempts left.") - username = input("Username: ") - password = input("Password: ") - - logged_in = False - for user in users: - if username == user[0] and password == user[1]: - logged_in = True - break # break the inner for loop - - if logged_in: - print("Welcome, " + username + "!") - break # break the outer for loop - else: - print("Wrong username or password.") + before = [[1, 2], [3, 4], [5, 6]] + after = [] + for sublist in before: + after.extend(sublist) + print(after) ``` ## Trey Hunner: zip and enumerate diff --git a/basics/loops.md b/basics/loops.md index c6bfa4c..1a4b9b0 100644 --- a/basics/loops.md +++ b/basics/loops.md @@ -238,6 +238,31 @@ with than while loops and index variables, especially in large projects. For looping is also a little bit faster than while looping with an index variable. +For loops are not actually limited to lists. We can for loop over many +other things also, including strings and +[tuples](lists-and-tuples.md#tuples). For looping over a tuple gives us +its items, and for looping over a string gives us its characters as +strings of length one. + +```py +>>> for short_string in 'abc': +... print(short_string) +... +a +b +c +>>> for item in (1, 2, 3): +... print(item) +... +1 +2 +3 +>>> +``` + +If we can for loop over something, then that something is **iterable**. +Lists, tuples and strings are all iterable. + There's only one big limitation with for looping over lists. We shouldn't modify the list in the for loop. If we do, the results can be surprising: @@ -275,10 +300,6 @@ Or if we just want to clear a list, we can use the `clear` >>> ``` -Later we'll learn that for loops are not actually limited to lists. -There are many other things we can for loop over. Things that can be for -looped over are called **iterables**. - If you're using Python 3.2 or older you need to use `stuff[:]` instead of `stuff.copy()` and `stuff[:] = []` instead of `stuff.clear()`. `stuff[:]` is a slice of the whole list, just like `stuff[0:]`. @@ -403,25 +424,25 @@ while True: ## Exercises -1. Back in "Using if, else and elif" we created a program that asked - for username and password and checks them, and we made users "foo" - and "bar" with passwords "biz" and "baz". Adding a new user would - have required adding more code that checks the username and - password. Add this to the beginning of the program: +1. This code is supposed to print each number between 1 and 5. Fix it. ```py - users = [ - ['foo', 'biz'], - ['bar', 'baz'], - ] + things = str([1, 2, 3, 4, 5]) + for thing in things: + print(thing) ``` - Then rewrite the rest of the program using a for loop. +2. This code is supposed to print `[1, 2, 3, 4, 5, 6]`. Fix it. -2. Make the program ask the username and password over and over again - until the user enters them correctly. + ```py + before = [[1, 2], [3, 4], [5, 6]] + after = [] + for number in before: + after.append(number) + print(after) + ``` -3. Can you limit the number of attempts to 3? +The answers are [here](answers.md#loops) *** From 98d1f49138a7618c1c658357672e79c8435e1e73 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 21 Jan 2017 12:31:27 +0200 Subject: [PATCH 189/329] little things --- strip.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/strip.py b/strip.py index b8d7f9d..7705a09 100755 --- a/strip.py +++ b/strip.py @@ -52,13 +52,12 @@ def strip(file): def main(): - print("Stripping trailing whitespace...") for file in common.get_markdown_files(): if needs_stripping(file): - print(" Stripping:", file) + print("Stripping", file) strip(file) else: - print(" No trailing whitespace:", file) + print("No trailing whitespace in", file) if __name__ == '__main__': From 894c92cca437649cff3a1972ae1f22b649b2f6d1 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 21 Jan 2017 12:33:47 +0200 Subject: [PATCH 190/329] they DONT change --- advanced/iters.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/advanced/iters.md b/advanced/iters.md index 087468a..28476f1 100644 --- a/advanced/iters.md +++ b/advanced/iters.md @@ -46,7 +46,7 @@ Lists and strings don't change when we iterate over them. h i >>> word -'hello' +'hi' >>> ``` From a34ab5c803773718ea414889c473e17cb7ba9aec Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 24 Jan 2017 21:45:41 +0200 Subject: [PATCH 191/329] exercises inspired by grimey_grim --- basics/answers.md | 23 +++++++++++++++++++++++ basics/loops.md | 17 +++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/basics/answers.md b/basics/answers.md index 6e8dc1d..771f9ef 100644 --- a/basics/answers.md +++ b/basics/answers.md @@ -249,6 +249,29 @@ isn't exactly like mine but it works just fine it's ok, and you can print(after) ``` +3. The code has some empty lines in it, and they divide it nicely into + three parts. All of these parts have some problems, so I'll go + through them one by one. + + The first part makes a variable called `input`. The problem is that + now the rest of the program [can't use the input + function](using-functions.md#variables-names-and-builtin-things). It + doesn't really matter here because the rest of the program doesn't + use it anyway, but I still recommend using some other variable name, + like `inputlist`. + + The second part runs `numbers = []` three times. It was probably + meant to be ran once before the loop started, like this: + + ```py + numbers = [] + for string in inputlist: + numbers.append(int(string)) + ``` + + The third part calculates `result + n` but throws away the result. + It was probably supposed to do `result += n` instead. + ## Trey Hunner: zip and enumerate 1. Read some lines with `input` into a list and then enumerate it. diff --git a/basics/loops.md b/basics/loops.md index 1a4b9b0..a33abfe 100644 --- a/basics/loops.md +++ b/basics/loops.md @@ -442,6 +442,23 @@ while True: print(after) ``` +3. This program is supposed to convert everything in a list to integers + and then calculate their sum. It should print 6 because `1 + 2 + 3` + is 6. Fix the program. + + ```py + input = ['1', '2', '3'] + + for string in input: + numbers = [] + numbers.append(int(string)) + + result = 0 + for n in numbers: + result + n + print("their sum is", result) + ``` + The answers are [here](answers.md#loops) *** From b90e4de00c13154ae8d47ed8004dfadcf843ff0f Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 24 Jan 2017 22:46:25 +0200 Subject: [PATCH 192/329] better cleaning tool --- basics/handy-stuff-strings.md | 2 +- basics/what-is-true.md | 10 +++++----- strip.py | 15 +++++++++++---- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/basics/handy-stuff-strings.md b/basics/handy-stuff-strings.md index ce9aa99..c411a9f 100644 --- a/basics/handy-stuff-strings.md +++ b/basics/handy-stuff-strings.md @@ -400,7 +400,7 @@ ValueError: could not convert string to float: 'hello' string. - `len(string)` returns string's length. - We can use `str`, `int` and `float` to convert values to different - types. + types. ## Exercises diff --git a/basics/what-is-true.md b/basics/what-is-true.md index 05d4c83..7ae8973 100644 --- a/basics/what-is-true.md +++ b/basics/what-is-true.md @@ -203,13 +203,13 @@ if value is None: ... # best ## Summary - `if thing:` does the same thing as `if bool(thing):`. This also - works with while loops and most other things that are usually used - with Booleans. + works with while loops and most other things that are usually used + with Booleans. - `bool()` of most things is True, but `bool()` values of None, - zero and most empty things are False. + zero and most empty things are False. - Use `is` and `is not` when comparing to None, `==` and `!=` when - checking if a number is zero and rely on the Boolean value - when checking if something is empty. + checking if a number is zero and rely on the Boolean value + when checking if something is empty. *** diff --git a/strip.py b/strip.py index 7705a09..f9e2dfb 100755 --- a/strip.py +++ b/strip.py @@ -31,12 +31,15 @@ import common +def fix(line): + return line.rstrip().expandtabs(4) + + def needs_stripping(file): with common.slashfix_open(file, 'r') as f: for line in f: line = line.rstrip('\n') - if line != line.rstrip(): - # contains trailing whitespace other than '\n' + if line != fix(line): return True return False @@ -45,7 +48,11 @@ def strip(file): lines = [] with common.slashfix_open(file, 'r') as f: for line in f: - lines.append(line.rstrip()) + line = line.rstrip('\n') + # it's important to do as much as possible here because the + # file may be lost if writing fails, that's why fix() is + # here + lines.append(fix(line)) with common.slashfix_open(file, 'w') as f: for line in lines: print(line, file=f) @@ -57,7 +64,7 @@ def main(): print("Stripping", file) strip(file) else: - print("No trailing whitespace in", file) + print("No trailing whitespace or tabs in", file) if __name__ == '__main__': From e2fa0593e893a6a903675c9e7fc0ba1a789446da Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 25 Jan 2017 11:29:03 +0200 Subject: [PATCH 193/329] be more clear (or is it clearlier or clearer? i have no idea) --- basics/answers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basics/answers.md b/basics/answers.md index 771f9ef..22cf0ac 100644 --- a/basics/answers.md +++ b/basics/answers.md @@ -269,7 +269,7 @@ isn't exactly like mine but it works just fine it's ok, and you can numbers.append(int(string)) ``` - The third part calculates `result + n` but throws away the result. + The third part calculates `result + n` but throws away the value. It was probably supposed to do `result += n` instead. ## Trey Hunner: zip and enumerate From b5210299b18e201bef8aedde3544b26d1600b2d4 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sun, 29 Jan 2017 11:25:10 +0200 Subject: [PATCH 194/329] simplifying the scripts --- common.py | 5 +-- linkcheck.py | 113 ++++++++++++++++++------------------------------- make-html.py | 14 +++--- update-ends.py | 18 +++----- 4 files changed, 57 insertions(+), 93 deletions(-) diff --git a/common.py b/common.py index dfe7347..1b471b7 100644 --- a/common.py +++ b/common.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - # This is free and unencumbered software released into the public # domain. @@ -67,7 +65,8 @@ def find_links(file): def get_markdown_files(): """Yield the names of all markdown files in this tutorial. - This assumes that the README contains links to everything. + This assumes that the README contains links to everything. The + yielded paths use / as the path separator. """ yield 'README.md' with open('README.md', 'r') as f: diff --git a/linkcheck.py b/linkcheck.py index ff26bf3..4b271ef 100755 --- a/linkcheck.py +++ b/linkcheck.py @@ -41,93 +41,62 @@ [local header](#some-header) """ -# The markdown files use posix-style paths, so we need posixpath for -# processing them. See help('posixpath'). import os import posixpath import common -class Link: +def check(filepath, target): + """Check if a link's target is like it should be. - def __init__(self, regexmatch, filepath, lineno): - # The .group(0) is not perfect, but it's good enough. - self.markdown = regexmatch.group(0) - self.text = regexmatch.group(1) - self.target = regexmatch.group(2) - self.filepath = filepath - self.lineno = lineno - self.status = None + Return an error message string or "ok". + """ + if target.startswith(('http://', 'https://')): + # We don't need this currently, but checking these links could + # be added later. + return "ok" - def _get_status(self): - if self.target.startswith(('http://', 'https://')): - # Checking for http(s) links can be added later, but - # currently it's not needed. + if '#' in target: + where = target.index('#') + if where == 0: + # It's a link to a title in the same file, we need to skip it. return "ok" - - target = self.target - if '#' in target: - where = target.index('#') - if where == 0: - # It's a link to a title in the same file, we need to - # skip it. - return "ok" - target = target[:where] - - path = posixpath.join(posixpath.dirname(self.filepath), target) - realpath = path.replace('/', os.sep) - - if not os.path.exists(realpath): - return "doesn't exist" - if target.endswith('/'): - # A directory. - if os.path.isdir(realpath): - return "ok" - return "not a directory" - else: - # A file. - if os.path.isfile(realpath): - return "ok" - return "not a file" - - def check(self): - """Check if the link's target is like it should be. - - Return an error message string or "ok". The return value is also - assigned to the status attribute. - """ - self.status = self._get_status() - return self.status - - def print_status(self): - print(" file {0.filepath}, line {0.lineno}: {0.status}".format(self)) - print(" " + self.markdown) - print() + target = target[:where] + + path = posixpath.join(posixpath.dirname(filepath), target) + realpath = common.slashfix(path) + if not os.path.exists(realpath): + return "doesn't exist" + if target.endswith('/'): + # A directory. + if os.path.isdir(realpath): + return "ok" + return "not a directory" + else: + # A file. + if os.path.isfile(realpath): + return "ok" + return "not a file" def main(): - print("Searching links...") - links = [] + print("Searching and checking links...") + broken = 0 + total = 0 for path in common.get_markdown_files(): with common.slashfix_open(path, 'r') as f: for match, lineno in common.find_links(f): - links.append(Link(match, path, lineno)) - print(" found", len(links), "links") - - print("Checking for broken links...") - brokens = 0 - for link in links: - if link.check() != "ok": - link.print_status() - brokens += 1 - - if brokens == 0: - print("All links seem to be OK.") - elif brokens == 1: - print("1 link is broken!") - else: - print(brokens, "links are broken!") + text, target = match.groups() + status = check(path, target) + if status != "ok": + # The .group(0) is not perfect, but it's good enough. + print(" file %s, line %d: %s" % (path, lineno, status)) + print(" " + match.group(0)) + print() + broken += 1 + total += 1 + print("%d/%d links seem to be broken." % (broken, total)) if __name__ == '__main__': diff --git a/make-html.py b/make-html.py index bf6723b..a255bb5 100755 --- a/make-html.py +++ b/make-html.py @@ -29,6 +29,7 @@ """Create HTML files of the tutorial.""" import os +import posixpath import shutil import string import sys @@ -69,14 +70,14 @@ def mkdir_slashfix_open(filename, mode): """Like common.slashfix_open(), but make directories as needed.""" - filename = common.slashfix(filename) - directory = os.path.dirname(filename) + real_filename = common.slashfix(filename) + directory = os.path.dirname(real_filename) os.makedirs(directory, exist_ok=True) - return open(filename, mode) + return open(real_filename, mode) def fix_filename(filename): - if filename == 'README.md' or filename.endswith('/README.md'): + if posixpath.basename(filename) == 'README.md': # 'README.md' -> 'index.html' # 'some/place/README.md' -> 'some/place/index.html' return filename[:-9] + 'index.html' @@ -156,8 +157,7 @@ def block_code(self, code, lang=None): else: lexer = pygments.lexers.PythonLexer() formatter = pygments.formatters.HtmlFormatter( - style='tango', - noclasses=True) + style='tango', noclasses=True) return pygments.highlight(code, lexer, formatter) # we can't highlight it return super().block_code(code, lang) @@ -197,7 +197,7 @@ def main(): print("Generating HTML files...") for markdownfile in common.get_markdown_files(): - htmlfile = os.path.join('html', fix_filename(markdownfile)) + htmlfile = posixpath.join('html', fix_filename(markdownfile)) print(' ', markdownfile, '->', htmlfile) with common.slashfix_open(markdownfile, 'r') as f: markdown = f.read() diff --git a/update-ends.py b/update-ends.py index aa02d60..4ef559c 100755 --- a/update-ends.py +++ b/update-ends.py @@ -109,27 +109,23 @@ def main(): print("Chapter files:") for prevpath, thispath, nextpath in zip(prevs, chapter_files, nexts): - # thispath is always like 'section/file.md', never e.g. 'README.md' - thissection, thisfile = thispath.split('/') - prev = posixpath.relpath(prevpath, thissection) - next_ = posixpath.relpath(nextpath, thissection) + where = posixpath.dirname(thispath) + prev = posixpath.relpath(prevpath, where) + next_ = posixpath.relpath(nextpath, where) extralinks = "[Previous](%s) | [Next](%s) |\n" % (prev, next_) end = END_TEMPLATE.format( license='../LICENSE', readme='../README.md', - extralinks=extralinks, readmeheader=thissection) + extralinks=extralinks, readmeheader=where) update_end(thispath, end) print() print("Other files:") for filename in other_files: - # move to the top level as needed - parts = ['..'] * filename.count('/') - licenseparts = parts + ['LICENSE'] - readmeparts = parts + ['README.md'] + where = posixpath.dirname(filename) end = END_TEMPLATE.format( - license=posixpath.join(*licenseparts), - readme=posixpath.join(*readmeparts), + readme=posixpath.relpath('README.md', where), + license=posixpath.relpath('LICENSE', where), extralinks="", readmeheader='list-of-contents') update_end(filename, end) From cb5b330fd0fb50a7ee03dbb150253c5d95346b72 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 31 Jan 2017 19:36:58 +0200 Subject: [PATCH 195/329] how to write bigger things --- basics/larger-program.md | 220 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100644 basics/larger-program.md diff --git a/basics/larger-program.md b/basics/larger-program.md new file mode 100644 index 0000000..c2f4c47 --- /dev/null +++ b/basics/larger-program.md @@ -0,0 +1,220 @@ +# Writing a larger program + +Now we know enough about Python for creating a program that is actually +useful. Awesome! + +In this tutorial we'll write a program that reads questions and answers +in a text file and asks them. For example, this file would make the +program ask what "text displaying function" and "text asking function" +are: + +``` +text displaying function = print +text asking function = input +``` + +This might seem useless to you right now, but a program like this can +actually be really useful for learning different kinds of things. I +originally wrote a program like this to study words of a foreign +language, but then I realized that I could study pretty much anything +with it. + +But there are many things the program needs to do and writing it seems +really difficult and complicated! How the heck can we do this? + +## Write functions + +Our program will need to do several different things: + +1. Read the questions from a file. +2. Ask the questions. +3. Print statistics about how many questions were answered correctly + and how many wrong. + +Now everything seems much easier. We know how to do each of these steps +one by one, but doing it all at once would be difficult. In situations +like this **it's important to [define +functions](defining-functions.md)**. We are going to write a +`read_questions` function, an `ask_questions` function and a `stats` +function. + +Let's start with the function that reads the question file: + +```py +def read_questions(filename): + answers = {} + with open(questionfile, 'r') as f: + for line in f: + line = line.strip() + if line: # ignore empty lines + question, answer = line.split('=') + answers[question.strip()] = answer.strip() + return answers +``` + +At this point it's best to try out the function to see how it works. You +need to create a `questions.txt` file like the one in the beginning of +this tutorial if you didn't create it already. + +**TODO:** Instructions for using the -i switch. + +```py +>>> read_questions('questions.txt') +{'text displaying function': 'print', 'text asking function': 'input'} +>>> +``` + +If your function doesn't work correctly it doesn't matter, and fixing +the problem is easy because the function is so short. This is one of the +reasons why we write functions. + +Next we'll write the rest of the functions the same way, first writing +and then testing and fixing. Here are my versions of them: + +```py +def ask_questions(answers): + correct = [] + wrong = [] + for question, answer in answers.items(): + if input(question + ' = ').strip() == answer: + print("Correct!") + correct.append(question) + else: + print("Wrong! The correct answer is %s." % answer) + wrong.append(question) + return (correct, wrong) + +def stats(correct, wrong, answers): + print("\n**** STATS ****\n") + print("You answered", len(correct), "questions correctly and", + len(wrong), "questions wrong.") + if wrong: + print("These would have been the correct answers:") + for question in wrong: + print(' ', question, '=', answers[question]) +``` + +Let's try them out. + +```py +>>> answers = read_questions('questions.txt') +>>> correct, wrong = ask_questions(answers) +text displaying function = print +Correct! +text asking function = elif +Wrong! The correct answer is input. +>>> correct +['text displaying function'] +>>> wrong +['text asking function'] +>>> stats(correct, wrong, answers) + +*** STATS *** + +You answered 1 questions right and 1 questions wrong. +These would have been the correct answers: + text asking function = input +>>> +``` + +Everything is working! Now we just need something that runs everything +because we don't want to type this out on the `>>>` prompt every time. + +You might have noticed that the stats function printed `1 questions` +instead of `1 question`, and it looks a bit weird. You can modify the +`print_stats` function to fix this if you want to. + +## The main function + +The last function in a program like this is usually called `main` and it +runs the program using other functions. Our main function consists of +mostly the same pieces of code that we just tried out on the `>>>` +prompt. + +```py +def main(): + filename = input("Name of the question file: ") + answers = read_questions(filename) + correct, wrong = ask_questions(answers) + stats(correct, wrong, answers) +``` + +The last thing we need to add is these two lines: + +```py +if __name__ == '__main__': + main() +``` + +The `__name__` variable is set differently depending on how we run the +file, and **it's `'__main__'` when we run the file directly instead of +importing**. So if we run the file normally it asks us the words, and if +we import it instead we can still run the functions one by one. If you +want to know more about `__name__` just make a file that prints it and +run it in different ways. + +Now the whole program looks like this: + +```py +def read_questions(filename): + answers = {} + with open(questionfile, 'r') as f: + for line in f: + line = line.strip() + if line: # ignore empty lines + question, answer = line.split('=') + answers[question.strip()] = answer.strip() + return answers + +def ask_questions(answers): + correct = [] + wrong = [] + for question, answer in answers.items(): + if input('%s = ' % question).strip() == answer: + print("Correct!") + correct.append(question) + else: + print("Wrong! The correct answer is %s." % answer) + wrong.append(question) + return (correct, wrong) + +def stats(correct, wrong, answers): + print("\n**** STATS ****\n") + print("You answered", len(correct), "questions correctly and", + len(wrong), "questions wrong.") + if wrong: + print("These would have been the correct answers:") + for question in wrong: + print(' ', question, '=', answers[question]) + +def main(): + filename = input("Name of the question file: ") + answers = read_questions(filename) + correct, wrong = ask_questions(answers) + stats(correct, wrong, answers) + +if __name__ == '__main__': + main() +``` + +This is just the beginning. Now [you can](../LICENSE) take your word +asking program and make your own version of it that suits **your** +needs. Then you can share it with your friends so they will find it +useful as well. + +## Summary + +- Make multiple functions when your program needs to do multiple things. + Each function should do one thing. +- Try out the functions on the `>>>` prompt when you want to check if + they work correctly. +- `__name__` is `'__main__'` when the program is supposed to run, and +something else when it's imported. + +*** + +You may use this tutorial freely at your own risk. See +[LICENSE](../LICENSE). + +[Previous](defining-functions.md) | [Next](what-is-true.md) | +[List of contents](../README.md#basics) From 9aeca536cc7af85cf9848c58ad90e05db0bfa321 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 31 Jan 2017 19:37:09 +0200 Subject: [PATCH 196/329] updating the README --- README.md | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 1ca6a81..086ba45 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,8 @@ language. No tutorial is good for everyone. This one is aimed at people with no programming experience at all or very little programming experience. If you have programmed a lot in the past using some other language you -probably want to read -[the official tutorial](https://docs.python.org/3/tutorial/) instead. +probably want to read [the official +tutorial](https://docs.python.org/3/tutorial/) instead. This tutorial was written in Python 3, and you need Python 3 or newer to be able to run the example code yourself. Python 2 is getting outdated @@ -43,11 +43,12 @@ to learn more about whatever you want after studying it. 11. [Trey Hunner: zip and enumerate](basics/trey-hunner-zip-and-enumerate.md) 12. [Dictionaries](basics/dicts.md) 13. [Defining functions](basics/defining-functions.md) -14. [What is true?](basics/what-is-true.md) -15. [Files](basics/files.md) -16. [Exceptions](basics/exceptions.md) -17. [Modules](basics/modules.md) -18. [Classes](basics/classes.md) +14. [Writing a larger program](basics/larger-program.md) +15. [What is true?](basics/what-is-true.md) +16. [Files](basics/files.md) +17. [Exceptions](basics/exceptions.md) +18. [Modules](basics/modules.md) +19. [Classes](basics/classes.md) ### Advanced @@ -74,7 +75,18 @@ than complex. [advanced](advanced/answers.md) sections - [The TODO list](TODO.md) -## How to read this tutorial without an internet connection +## Frequently asked questions + +### How can I thank you for writing and sharing this tutorial? + +You can star this tutorial. Starring is free for you, but it tells me +and other people that you like this tutorial. + +Go [here](https://github.com/Akuli/python-tutorial) if you aren't here +already and click the "Star" button in the top right corner. You will be +asked to create a GitHub account if you don't already have one. + +### How can I read this tutorial without an Internet connection? 1. Go [here](https://github.com/Akuli/python-tutorial) if you aren't here already. From 0d2a3562aa0293476e04230ac6b1ba633d055fd3 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 31 Jan 2017 19:37:24 +0200 Subject: [PATCH 197/329] backups are important --- common.py | 16 ++++++++++++++++ strip.py | 18 ++++++++---------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/common.py b/common.py index 1b471b7..d207e27 100644 --- a/common.py +++ b/common.py @@ -31,9 +31,11 @@ file when actually opening files. """ +import contextlib import itertools import os import re +import shutil _LINK_REGEX = r'\[(.*?)\]\((.*?)\)' @@ -108,3 +110,17 @@ def slashfix(path): def slashfix_open(file, mode): """An easy way to use slashfix() and open() together.""" return open(slashfix(file), mode) + + +@contextlib.contextmanager +def backup(filename): + """A context manager that backs up a file.""" + shutil.copy(filename, filename + '.backup') + try: + yield + except Exception: + # It failed, we need to restore from the backup. + shutil.copy(filename + '.backup', filename) + else: + # Everything's fine, we can safely get rid of the backup. + os.remove(filename + '.backup') diff --git a/strip.py b/strip.py index f9e2dfb..c4888a7 100755 --- a/strip.py +++ b/strip.py @@ -45,23 +45,21 @@ def needs_stripping(file): def strip(file): + real_file = common.slashfix(file) lines = [] - with common.slashfix_open(file, 'r') as f: + with open(real_file, 'r') as f: for line in f: - line = line.rstrip('\n') - # it's important to do as much as possible here because the - # file may be lost if writing fails, that's why fix() is - # here - lines.append(fix(line)) - with common.slashfix_open(file, 'w') as f: - for line in lines: - print(line, file=f) + lines.append(fix(line.rstrip('\n'))) + with common.backup(real_file): + with open(real_file, 'w') as f: + for line in lines: + print(line, file=f) def main(): for file in common.get_markdown_files(): if needs_stripping(file): - print("Stripping", file) + print("Stripping", file, "...") strip(file) else: print("No trailing whitespace or tabs in", file) From 7284b4858fa78030065e4709f9609ca5c799a8d0 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 31 Jan 2017 19:37:40 +0200 Subject: [PATCH 198/329] i forgot to add these --- basics/what-is-true.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basics/what-is-true.md b/basics/what-is-true.md index 7ae8973..6fdcbf3 100644 --- a/basics/what-is-true.md +++ b/basics/what-is-true.md @@ -216,5 +216,5 @@ if value is None: ... # best You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). -[Previous](defining-functions.md) | [Next](files.md) | +[Previous](larger-program.md) | [Next](files.md) | [List of contents](../README.md#basics) From 7dbe3b9c420cc78acf903df9ffb3e94e992cd4fc Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 31 Jan 2017 19:37:54 +0200 Subject: [PATCH 199/329] i also forgot this --- basics/defining-functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basics/defining-functions.md b/basics/defining-functions.md index 52dbfd9..f84b357 100644 --- a/basics/defining-functions.md +++ b/basics/defining-functions.md @@ -531,5 +531,5 @@ Answers for the first, second and third exercise are You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). -[Previous](dicts.md) | [Next](what-is-true.md) | +[Previous](dicts.md) | [Next](larger-program.md) | [List of contents](../README.md#basics) From f7376bef945327772ecd59c1e6c848bba38036c1 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 31 Jan 2017 20:33:13 +0200 Subject: [PATCH 200/329] no bolding and equal number of stars --- basics/larger-program.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/basics/larger-program.md b/basics/larger-program.md index c2f4c47..1d33284 100644 --- a/basics/larger-program.md +++ b/basics/larger-program.md @@ -33,10 +33,9 @@ Our program will need to do several different things: Now everything seems much easier. We know how to do each of these steps one by one, but doing it all at once would be difficult. In situations -like this **it's important to [define -functions](defining-functions.md)**. We are going to write a -`read_questions` function, an `ask_questions` function and a `stats` -function. +like this it's important to [define functions](defining-functions.md). +We are going to write a `read_questions` function, an `ask_questions` +function and a `stats` function. Let's start with the function that reads the question file: @@ -109,7 +108,7 @@ Wrong! The correct answer is input. ['text asking function'] >>> stats(correct, wrong, answers) -*** STATS *** +**** STATS **** You answered 1 questions right and 1 questions wrong. These would have been the correct answers: @@ -147,8 +146,8 @@ if __name__ == '__main__': ``` The `__name__` variable is set differently depending on how we run the -file, and **it's `'__main__'` when we run the file directly instead of -importing**. So if we run the file normally it asks us the words, and if +file, and it's `'__main__'` when we run the file directly instead of +importing. So if we run the file normally it asks us the words, and if we import it instead we can still run the functions one by one. If you want to know more about `__name__` just make a file that prints it and run it in different ways. From d83ce12a7f77bce462e3106838e6b35d1162f659 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 31 Jan 2017 20:57:24 +0200 Subject: [PATCH 201/329] test --- basics/if.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basics/if.md b/basics/if.md index c572898..72673dc 100644 --- a/basics/if.md +++ b/basics/if.md @@ -4,7 +4,7 @@ Now we know what True and False are. -```py +```python >>> 1 == 1 True >>> 1 == 2 From 2c5649a7ef4edece3a4e5ec01fa52887fa1e42b4 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 31 Jan 2017 21:02:37 +0200 Subject: [PATCH 202/329] why did github break this :( --- advanced/functions.md | 30 +++++------ advanced/iters.md | 54 +++++++++---------- advanced/magicmethods.md | 22 ++++---- basics/answers.md | 54 +++++++++---------- basics/classes.md | 44 ++++++++-------- basics/defining-functions.md | 70 ++++++++++++------------- basics/dicts.md | 34 ++++++------ basics/exceptions.md | 44 ++++++++-------- basics/files.md | 30 +++++------ basics/getting-started.md | 32 +++++------ basics/handy-stuff-strings.md | 48 ++++++++--------- basics/if.md | 30 +++++------ basics/larger-program.md | 14 ++--- basics/lists-and-tuples.md | 46 ++++++++-------- basics/loops.md | 44 ++++++++-------- basics/modules.md | 40 +++++++------- basics/trey-hunner-zip-and-enumerate.md | 14 ++--- basics/using-functions.md | 28 +++++----- basics/variables.md | 32 +++++------ basics/what-is-true.md | 26 ++++----- editor-setup.md | 4 +- make-html.py | 2 +- 22 files changed, 371 insertions(+), 371 deletions(-) diff --git a/advanced/functions.md b/advanced/functions.md index 98a13e3..f0bac15 100644 --- a/advanced/functions.md +++ b/advanced/functions.md @@ -4,7 +4,7 @@ Now we know [how to define functions](../basics/defining-functions.md). Functions can take arguments, and they will end up with local variables that have the same name. Like this: -```py +```python def print_box(message, border='*'): print(border * (len(message) + 4)) print(border, message, border) @@ -21,7 +21,7 @@ functions and how they are useful. Function can take multiple arguments, but they can only return one value. But sometimes it makes sense to return multiple values as well: -```py +```python def login(): username = input("Username: ") password = input("Password: ") @@ -31,7 +31,7 @@ def login(): The best solution is to return a tuple of values, and just unpack that wherever the function is called: -```py +```python def login(): ... return username, password @@ -51,7 +51,7 @@ class](../basics/classes.md) instead and store the values like Sometimes you might see code like this: -```py +```python def thing(*args, **kwargs): ... ``` @@ -59,7 +59,7 @@ def thing(*args, **kwargs): Functions like this are actually quite easy to understand. Let's make a function that takes `*args` and prints it. -```py +```python >>> def thing(*args): ... print("now args is", args) ... @@ -79,7 +79,7 @@ variable name we wanted instead of `args`. Our function with nothing but `*args` takes no keyword arguments: -```py +```python >>> thing(a=1) Traceback (most recent call last): File "", line 1, in @@ -92,7 +92,7 @@ them to a function by adding a `*`. Actually it doesn't need to be a list or a tuple, anything [iterable](../basics/loops.md#summary) will work. -```py +```python >>> stuff = ['hello', 'world', 'test'] >>> print(*stuff) hello world test @@ -104,7 +104,7 @@ hello world test `**kwargs` is the same thing as `*args`, but with keyword arguments instead of positional arguments. -```py +```python >>> def thing(**kwargs): ... print('now kwargs is', kwargs) ... @@ -130,7 +130,7 @@ Hello World! Sometimes it's handy to capture all arguments our function takes. We can combine `*args` and `**kwargs` easily: -```py +```python >>> def thing(*args, **kwargs): ... print("now args is", args, "and kwargs is", kwargs) ... @@ -142,7 +142,7 @@ now args is (1, 2) and kwargs is {'b': 4, 'a': 3} This is often used for calling a function from another "fake function" that represents it. We'll find uses for this later. -```py +```python >>> def fake_print(*args, **kwargs): ... print(*args, **kwargs) ... @@ -163,7 +163,7 @@ moving if it exists already or a `backup` argument that makes it do a backup of the file just in case the moving fails. So our function would look like this: -```py +```python def move(source, destination, overwrite=False, backup=False): if overwrite: print("deleting", destination) @@ -174,7 +174,7 @@ def move(source, destination, overwrite=False, backup=False): Then we can move files like this: -```py +```python >>> move('file1.txt', 'file2.txt') moving file1.txt to file2.txt >>> move('file1.txt', 'file2.txt', overwrite=True) @@ -186,7 +186,7 @@ moving file1.txt to file2.txt This works just fine, but if we accidentally give the function three filenames, bad things will happen: -```py +```python >>> move('file1.txt', 'file2.txt', 'file3.txt') deleting file2.txt moving file1.txt to file2.txt @@ -203,7 +203,7 @@ True](../basics/what-is-true.md) and deleted the file. That's not nice. The solution is to change our move function so that `overwrite` and `backup` are keyword-only: -```py +```python def move(source, destination, *, overwrite=False, backup=False): ... ``` @@ -214,7 +214,7 @@ simple: now it's impossible to overwrite by doing `move('file1.txt', 'file2.txt', True)` and the overwrite must be always given like `overwrite=True`. -```py +```python >>> move('file1.txt', 'file2.txt') moving file1.txt to file2.txt >>> move('file1.txt', 'file2.txt', True) diff --git a/advanced/iters.md b/advanced/iters.md index 28476f1..4622cee 100644 --- a/advanced/iters.md +++ b/advanced/iters.md @@ -2,7 +2,7 @@ So far we have used for loops with many different kinds of things. -```py +```python >>> for name in ['theelous3', 'RubyPinch', 'go|dfish']: ... print(name) ... @@ -24,7 +24,7 @@ over the list `['a', 'b', 'c']`. If we can iterate over something, then that something is **iterable**. For example, strings and lists are iterable, but integers and floats are not. -```py +```python >>> for thing in 123: ... print(thing) ... @@ -38,7 +38,7 @@ TypeError: 'int' object is not iterable Lists and strings don't change when we iterate over them. -```py +```python >>> word = 'hi' >>> for character in word: ... print(character) @@ -54,7 +54,7 @@ We can also iterate over [files](../basics/files.md), but they remember their position and we get the content once only if we iterate over them twice. -```py +```python >>> with open('test.txt', 'w') as f: ... print("one", file=f) ... print("two", file=f) @@ -77,7 +77,7 @@ twice. We have also used [enumerate](../basics/trey-hunner-zip-and-enumerate.md) before, and it actually remembers its position also: -```py +```python >>> e = enumerate('hello') >>> for pair in e: ... print(pair) @@ -109,7 +109,7 @@ Iterators have a magic method called `__next__`, and there's a built-in function called `next()` for calling that. Calling `next()` on an iterator gets the next value and moves it forward. Like this: -```py +```python >>> e = enumerate('abc') >>> e.__next__() (0, 'a') @@ -122,7 +122,7 @@ iterator gets the next value and moves it forward. Like this: There's also a built-in `next()` function that does the same thing: -```py +```python >>> e = enumerate('abc') >>> next(e) (0, 'a') @@ -137,7 +137,7 @@ Here `e` remembers its position, and every time we call `next(e)` it gives us the next element and moves forward. When it has no more values to give us, calling `next(e)` raises a StopIteration: -```py +```python >>> next(e) Traceback (most recent call last): File "", line 1, in @@ -150,14 +150,14 @@ and it's best to just try to get a value from it and catch StopIteration. That's actually what for looping over an iterator does. For example, this code... -```py +```python for pair in enumerate('hello'): print(pair) ``` ...does roughly the same thing as this code: -```py +```python e = enumerate('hello') while True: try: @@ -178,7 +178,7 @@ Now we know what iterating over an iterator does. But how about iterating over a list or a string? They are not iterators, so we can't call `next()` on them: -```py +```python >>> next('abc') Traceback (most recent call last): File "", line 1, in @@ -189,7 +189,7 @@ TypeError: 'str' object is not an iterator There's a built-in function called `iter()` that converts anything iterable to an iterator. -```py +```python >>> i = iter('abc') >>> i @@ -208,7 +208,7 @@ StopIteration Calling `iter()` on anything non-iterable gives us an error. -```py +```python >>> iter(123) Traceback (most recent call last): File "", line 1, in @@ -219,7 +219,7 @@ TypeError: 'int' object is not iterable If we try to convert an iterator to an iterator using `iter()` we just get back the same iterator. -```py +```python >>> e = enumerate('abc') >>> iter(e) is e True @@ -228,14 +228,14 @@ True So code like this... -```py +```python for thing in stuff: print(thing) ``` ...works roughly like this: -```py +```python iterator = iter(stuff) while True: try: @@ -254,7 +254,7 @@ much simpler way to implement iterators. Let's make a function that creates an iterator that behaves like `iter([1, 2, 3])` using the `yield` keyword: -```py +```python >>> def thingy(): ... yield 1 ... yield 2 @@ -266,7 +266,7 @@ creates an iterator that behaves like `iter([1, 2, 3])` using the We can only `yield` inside a function, yielding elsewhere raises an error. -```py +```python >>> yield 'hi' File "", line 1 SyntaxError: 'yield' outside function @@ -275,7 +275,7 @@ SyntaxError: 'yield' outside function Let's try out our thingy function and see how it works. -```py +```python >>> thingy() >>> @@ -290,7 +290,7 @@ iterators** with some more features that we don't need to care about. The generator we got works just like other iterators: -```py +```python >>> t = thingy() >>> t @@ -318,7 +318,7 @@ the yields, when do they run? How does Python know when to run what? Let's find out. -```py +```python >>> def printygen(): ... print("starting") ... yield 1 @@ -336,7 +336,7 @@ That's weird! We called it, but it didn't print "starting"! Let's see what happens if we call `next()` on it. -```py +```python >>> got = next(p) starting >>> got @@ -354,7 +354,7 @@ still there just like they were when we left. A similar thing happens here. Our function is running, but it's just stuck at the yield and waiting for us to call `next()` on it again. -```py +```python >>> next(p) between 1 and 2 2 @@ -382,7 +382,7 @@ for loops work. that making a list of them would be too slow or the list wouldn't fit in the computer's memory. So instead of this... -```py +```python def get_things(): result = [] # code that appends things to result @@ -391,14 +391,14 @@ def get_things(): ...we can do this: -```py +```python def get_things(): # code that yields stuff ``` Both of these functions can be used like this: -```py +```python for thing in get_things(): # do something with thing ``` @@ -406,7 +406,7 @@ for thing in get_things(): It's actually possible to create an iterator that yields an infinite number of things: -```py +```python >>> def count(): ... current = 1 ... while True: diff --git a/advanced/magicmethods.md b/advanced/magicmethods.md index 9857fce..9d250d4 100644 --- a/advanced/magicmethods.md +++ b/advanced/magicmethods.md @@ -3,7 +3,7 @@ In [the class tutorial](../basics/classes.md) we learned to define a class like this: -```py +```python class Website: def __init__(self, url, founding_year, free_to_use): @@ -39,7 +39,7 @@ attributes by default. We'll learn more about this when we'll talk about Let's get started by defining an object that has a length: -```py +```python >>> class Thing: ... def __len__(self): ... return 5 @@ -62,7 +62,7 @@ customized with magic methods. Note that magic methods like `__len__` need to be defined in the class, just attaching an attribute called `__len__` doesn't work: -```py +```python >>> class EmptyThing: ... pass ... @@ -91,7 +91,7 @@ You have probably noticed that typing something to the interactive `>>>` prompt is not quite the same thing as printing it. For example, strings behave like this: -```py +```python >>> 'hello' 'hello' >>> print('hello') @@ -105,7 +105,7 @@ magic methods. `print('hello')` does the same thing as `print(str('hello'))`, and typing `'hello'` without a print does roughly the same thing as `print(repr('hello'))`. -```py +```python >>> repr('hello') # a string that literally contains 'hello' "'hello'" >>> str('hello') # same as just 'hello' @@ -120,13 +120,13 @@ hello The `repr()` values can also be easily used with string formatting. Instead of this... -```py +```python print("message is " + repr(message)) ``` ...you can use one of these instead: -```py +```python print("message is %r" % (message,)) print("message is {!r}".format(message)) ``` @@ -140,7 +140,7 @@ defaults to `__repr__`. Here's an example that hopefully clarifies things: -```py +```python >>> class Website: ... def __repr__(self): ... return '' @@ -167,7 +167,7 @@ follow one of these styles: 1. A piece of code that describes how another, similar object can be created. - ```py + ```python >>> class Website: ... def __init__(self, name, founding_year): ... self.name = name @@ -186,7 +186,7 @@ follow one of these styles: 2. A description of the object wrapped between `<` and `>`. - ```py + ```python >>> class Website: ... def __init__(self, name, founding_year): ... self.name = name @@ -205,7 +205,7 @@ follow one of these styles: you can by showing the `__init__` arguments. Python's built-in things also use this style more: - ```py + ```python >>> import random >>> random diff --git a/basics/answers.md b/basics/answers.md index 22cf0ac..d6b3c9d 100644 --- a/basics/answers.md +++ b/basics/answers.md @@ -36,14 +36,14 @@ isn't exactly like mine but it works just fine it's ok, and you can 3. We can simply ask the word with input and print `word * 1000`. - ```py + ```python word = input("Enter a word: ") print(word * 1000) ``` 4. We can add a space to the word before we print it. - ```py + ```python word = input("Enter a word: ") word += " " print(word * 1000) @@ -51,7 +51,7 @@ isn't exactly like mine but it works just fine it's ok, and you can We can also add the space right away on the first line: - ```py + ```python word = input("Enter a word: ") + " " print(word * 1000) ``` @@ -61,7 +61,7 @@ isn't exactly like mine but it works just fine it's ok, and you can end, but it doesn't matter. If we really want to get rid of the space, we can do something like this instead: - ```py + ```python no_space = input("Enter a word: ") yes_space = no_space + " " print(yes_space * 999 + no_space) @@ -69,7 +69,7 @@ isn't exactly like mine but it works just fine it's ok, and you can 5. Like this: - ```py + ```python first = input("Enter a word: ") second = input("Enter another word: ") words = first + " " + second + " " @@ -79,7 +79,7 @@ isn't exactly like mine but it works just fine it's ok, and you can 6. We can compare the word against an empty string (`""` or `''`) to check if it's empty. In this example, the password is "s3cr3t". - ```py + ```python word = input("Enter your password: ") if word == "s3cr3t": @@ -102,7 +102,7 @@ isn't exactly like mine but it works just fine it's ok, and you can The solution is string formatting. At the time of writing this, I recommend replacing the last line with one of these: - ```py + ```python print("You entered %s, %s, %s and %s." % (word1, word2, word3, word4)) print("You entered {}, {}, {} and {}.".format(word1, word2, word3, word4)) ``` @@ -110,7 +110,7 @@ isn't exactly like mine but it works just fine it's ok, and you can In the future when most people will have Python 3.6 or newer, you can also use this: - ```py + ```python print(f"You entered {word1}, {word2}, {word3} and {word4}.") ``` @@ -128,7 +128,7 @@ isn't exactly like mine but it works just fine it's ok, and you can The solution is to do `message.upper()` and save the value we got from that to a variable: - ```py + ```python message = input("What do you want me to say? ") uppermessage = message.upper() print(uppermessage, "!!!") @@ -138,7 +138,7 @@ isn't exactly like mine but it works just fine it's ok, and you can Or we can reuse the same variable name: - ```py + ```python message = input("What do you want me to say? ") message = message.upper() print(message, "!!!") @@ -149,7 +149,7 @@ isn't exactly like mine but it works just fine it's ok, and you can Or we can convert the message to uppercase right away on the first line: - ```py + ```python message = input("What do you want me to say? ").upper() print(message, "!!!") print(message, "!!!") @@ -172,7 +172,7 @@ isn't exactly like mine but it works just fine it's ok, and you can tuple? Let's change the last line to just `print(name)` so our program looks like this: - ```py + ```python print("Hello!") name = input("Enter your name: "), print(name) @@ -202,7 +202,7 @@ isn't exactly like mine but it works just fine it's ok, and you can `namelist` seems to be None. Let's make the program a bit simpler for working on the namelist: - ```py + ```python namelist = ['wub_wub', 'RubyPinch', 'go|dfish', 'Nitori'] namelist = namelist.extend('theelous3') print(namelist) @@ -229,7 +229,7 @@ isn't exactly like mine but it works just fine it's ok, and you can variable actually pointed to a list like `[1, 2]`. An easy solution is to just write two for loops inside each other: - ```py + ```python before = [[1, 2], [3, 4], [5, 6]] after = [] for sublist in before: @@ -241,7 +241,7 @@ isn't exactly like mine but it works just fine it's ok, and you can Lists also have an extend method that appends each item from another list, so we can also use that: - ```py + ```python before = [[1, 2], [3, 4], [5, 6]] after = [] for sublist in before: @@ -263,7 +263,7 @@ isn't exactly like mine but it works just fine it's ok, and you can The second part runs `numbers = []` three times. It was probably meant to be ran once before the loop started, like this: - ```py + ```python numbers = [] for string in inputlist: numbers.append(int(string)) @@ -276,7 +276,7 @@ isn't exactly like mine but it works just fine it's ok, and you can 1. Read some lines with `input` into a list and then enumerate it. - ```py + ```python print("Enter something, and press Enter without typing anything", "when you're done.") @@ -293,7 +293,7 @@ isn't exactly like mine but it works just fine it's ok, and you can 2. Let's start by trying out `zip` with strings: - ```py + ```python >>> for pair in zip('ABC', 'abc'): ... print(pair) ... @@ -306,7 +306,7 @@ isn't exactly like mine but it works just fine it's ok, and you can Great, it works just like it works with lists. Now let's create the letter printing program: - ```py + ```python uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' lowercase = 'abcdefghijklmnopqrstuvwxyz' @@ -318,7 +318,7 @@ isn't exactly like mine but it works just fine it's ok, and you can need to combine `zip` and `enumerate`. One way to do this is to pass a `zip` result to `enumerate`, like this: - ```py + ```python uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' lowercase = 'abcdefghijklmnopqrstuvwxyz' @@ -330,7 +330,7 @@ isn't exactly like mine but it works just fine it's ok, and you can We can also save the zip result to a variable. I would probably do this. - ```py + ```python uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' lowercase = 'abcdefghijklmnopqrstuvwxyz' @@ -343,7 +343,7 @@ isn't exactly like mine but it works just fine it's ok, and you can Another alternative is to pass an `enumerate` result to `zip`. This is a bit more complicated, so I wouldn't do it this way. - ```py + ```python uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' lowercase = 'abcdefghijklmnopqrstuvwxyz' @@ -357,7 +357,7 @@ isn't exactly like mine but it works just fine it's ok, and you can 1. The problem with the first example is that name is a local variable. I explained how to fix this in [the output section](defining-functions.md#output): - ```py + ```python def ask_name(): name = input("Enter your name: ") return name @@ -372,7 +372,7 @@ isn't exactly like mine but it works just fine it's ok, and you can The problem is that we print the actual `get_greeting` function, but we need to **call** it like `get_greeting()`: - ```py + ```python def get_greeting(): return "Hello World!" @@ -383,7 +383,7 @@ isn't exactly like mine but it works just fine it's ok, and you can The greet function prints a greeting. - ```py + ```python >>> greet("World") Hello World >>> @@ -391,7 +391,7 @@ isn't exactly like mine but it works just fine it's ok, and you can But it also returns None because we don't tell it to return anything else. - ```py + ```python >>> return_value = greet("World") Hello World >>> print(return_value) @@ -402,7 +402,7 @@ isn't exactly like mine but it works just fine it's ok, and you can This code from the exercise does the same thing as the code above does, but without a temporary `return_value` variable: - ```py + ```python >>> print(greet("World")) Hello World None diff --git a/basics/classes.md b/basics/classes.md index b2728a7..95dd15d 100644 --- a/basics/classes.md +++ b/basics/classes.md @@ -13,7 +13,7 @@ don't I highly recommend learning that first, and then moving to classes. Python comes with a lot of classes that you are already familiar with. -```py +```python >>> str >>> int @@ -29,7 +29,7 @@ Calling these classes as if they were functions makes a new **instance** of them. For example, `str()` makes a `str` instance, also known as a string. -```py +```python >>> str() '' >>> int() @@ -43,7 +43,7 @@ string. We can also get an instance's class with `type()`: -```py +```python >>> type('') >>> type(0) @@ -65,14 +65,14 @@ own object types like this is called **object-orientated programming**. In Python, `pass` does nothing. -```py +```python >>> pass >>> ``` Let's use it to define an empty class. -```py +```python >>> class Website: ... pass ... @@ -88,7 +88,7 @@ names for your classes. Now we can make a Website instance by calling the class. -```py +```python >>> stackoverflow = Website() >>> stackoverflow <__main__.Website object at 0x7f36e4c456d8> @@ -102,7 +102,7 @@ object" or "a Website". All of these mean the same thing. Now we can attach more information about stackoverflow to our Website. -```py +```python >>> stackoverflow.url = 'http://stackoverflow.com/' >>> stackoverflow.founding_year = 2008 >>> stackoverflow.free_to_use = True @@ -111,7 +111,7 @@ Now we can attach more information about stackoverflow to our Website. We can also access the information easily. -```py +```python >>> stackoverflow.url 'http://stackoverflow.com/' >>> stackoverflow.founding_year @@ -137,7 +137,7 @@ example, when we do `random.randint`, `random` is a module instance and If we make another Website, does it have the same `url`, `founding_year` and `free_to_use`? -```py +```python >>> effbot = Website() >>> effbot.url Traceback (most recent call last): @@ -152,7 +152,7 @@ The attributes are stored in a dictionary called `__dict__`. It's not recommended to use it for code that needs to be reliable, but it's a handy way to see which attributes the instance contains. -```py +```python >>> stackoverflow.__dict__ {'free_to_use': True, 'founding_year': 2008, @@ -167,7 +167,7 @@ handy way to see which attributes the instance contains. What happens if we set an attribute of the `Website` class to some value instead of doing that to an instance? -```py +```python >>> Website.is_online = True >>> Website.is_online True @@ -176,7 +176,7 @@ True Seems to be working, but what happened to the instances? -```py +```python >>> stackoverflow.is_online True >>> effbot.is_online @@ -191,7 +191,7 @@ Actually, `is_online` is still not in stackoverflow's or effbot's `__dict__`. stackoverflow and effbot get that attribute directly from the `Website` class. -```py +```python >>> stackoverflow.__dict__ {'free_to_use': True, 'founding_year': 2008, @@ -211,7 +211,7 @@ this. Use instance attributes instead, e.g. `stackoverflow.is_online = True`. Let's define a function that prints information about a website. -```py +```python >>> def website_info(website): ... print("URL:", website.url) ... print("Founding year:", website.founding_year) @@ -228,7 +228,7 @@ Seems to be working. We should be able to get information about all websites, so maybe we should attach the `website_info` function to the Website class? -```py +```python >>> Website.info = website_info >>> Website.info(stackoverflow) URL: http://stackoverflow.com/ @@ -240,7 +240,7 @@ Free to use: True It's working, but `Website.info(stackoverflow)` is a lot of typing, so wouldn't `stackoverflow.info()` be much better? -```py +```python >>> stackoverflow.info() URL: http://stackoverflow.com/ Founding year: 2008 @@ -257,7 +257,7 @@ argument, which we didn't give it when we called `stackoverflow.info()`! But is `stackoverflow.info` the same thing as `Website.info`? -```py +```python >>> Website.info >>> stackoverflow.info @@ -283,7 +283,7 @@ example `'hello'.lower()` is same as `str.lower('hello')`. Maybe we could define a method when we make the class instead of adding it later? -```py +```python >>> class Website: ... def info(self): # self will be stackoverflow ... print("URL:", self.url) @@ -309,7 +309,7 @@ the official style guide recommens it also. We still need to set `url`, `founding_year` and `free_to_use` manually. Maybe we could add a method to do that? -```py +```python >>> class Website: ... def initialize(self, url, founding_year, free_to_use): ... self.url = url @@ -339,7 +339,7 @@ Website class. It's called `__init__` and it does nothing by default. If our `__init__` method takes other arguments than self we can call the class with arguments and they will be given to `__init__`. Like this: -```py +```python >>> class Website: ... def __init__(self, url, founding_year, free_to_use): ... self.url = url @@ -365,7 +365,7 @@ them in this tutorial. Don't do this: -```py +```python class MyProgram: def __init__(self): @@ -390,7 +390,7 @@ Make functions instead, or just write your code without any functions if it's short enough for that. This program does the same thing and it's much more readable: -```py +```python print("Hello!") word = input("Enter something: ") print("You entered " + word + ".") diff --git a/basics/defining-functions.md b/basics/defining-functions.md index f84b357..be37002 100644 --- a/basics/defining-functions.md +++ b/basics/defining-functions.md @@ -7,7 +7,7 @@ It's probably been a while since you read about using functions. Have a look at this code: -```py +```python print("************") print("Hello World!") print("************") @@ -30,7 +30,7 @@ else: Then compare it to this code: -```py +```python print_box("Hello World!") print_box("Enter a word:") word = input() @@ -52,14 +52,14 @@ test the functions one by one and find the problem easily. The `pass` keyword does nothing. -```py +```python >>> pass >>> ``` Let's use it to define a function that does nothing. -```py +```python >>> def do_nothing(): ... pass ... @@ -72,7 +72,7 @@ Seems to be working so far, we have a function. Actually it's just a value that is assigned to a variable called `do_nothing`. Let's see what happens if we call it. -```py +```python >>> do_nothing() >>> ``` @@ -81,7 +81,7 @@ There we go. It did nothing at all. Maybe we could just do something in the function instead? -```py +```python >>> def print_hi(): ... print("Hi!") ... @@ -92,7 +92,7 @@ Hi! It's working. How about printing a variable in the function? -```py +```python >>> def print_message(): ... print(message) ... @@ -104,7 +104,7 @@ Hello World! Again, it works. How about setting a variable in the function? -```py +```python >>> def get_username(): ... username = input("Username: ") ... @@ -125,7 +125,7 @@ So far we have used nothing but **global variables**. They are called globals because the same variables are available anywhere in our program, even in functions. -```py +```python >>> a = 1 >>> b = "hi" >>> c = "hello" @@ -140,7 +140,7 @@ program, even in functions. But there are also **local variables**. They exist only **inside** functions, and they are deleted when the function exits. -```py +```python >>> def thingy(): ... d = "hello again, i'm a local variable" ... print('inside thingy:', d) @@ -160,7 +160,7 @@ Let's draw a diagram of these variables: However, modifying a global variable in-place from a function is easy. -```py +```python >>> stuff = ['global stuff'] >>> def add_stuff(): ... stuff.append('local stuff') @@ -175,7 +175,7 @@ This doesn't work if the value is of an immutable type, like string or integer because immutable values cannot be modified in-place. Fortunately, Python will tell us if something's wrong. -```py +```python >>> foo = 1 >>> def bar(): ... foo += 1 @@ -197,7 +197,7 @@ think they are. Let's think about what the print function does. It takes an argument and prints it. Maybe a custom function could also take an argument? -```py +```python >>> def print_twice(message): ... print(message) ... print(message) @@ -216,7 +216,7 @@ This function can be called in two ways: This is the recommended way for functions that take only one or two arguments. I would do this in my code. - ```py + ```python >>> print_twice("hi") hi hi @@ -232,7 +232,7 @@ This function can be called in two ways: - Using a **keyword argument**: - ```py + ```python >>> print_twice(message="hi") hi hi @@ -259,7 +259,7 @@ is which. Now it's time to solve our box printing problem: -```py +```python def print_box(message): print('*' * len(message)) print(message) @@ -273,7 +273,7 @@ printing stars? We could change our `print_box` function to take two arguments: -```py +```python def print_box(message, character): print(character * len(message)) print(message) @@ -283,7 +283,7 @@ def print_box(message, character): Then we could change our existing code to always call `print_box` with a star as the second argument: -```py +```python print_box("Hello World", "*") ... ``` @@ -291,7 +291,7 @@ print_box("Hello World", "*") But we don't need to change our existing code. We can make the second argument **optional** by giving it a default value. -```py +```python def print_box(message, character='*'): print(character * len(message)) print(message) @@ -303,13 +303,13 @@ different character in two ways: - Using a positional argument. - ```py + ```python print_box("Hello World!") ``` - Using a keyword argument. - ```py + ```python print_box(message="Hello World!") ``` @@ -318,13 +318,13 @@ need to: - Using two positional arguments. - ```py + ```python print_box("Enter a word:", "?") ``` - Using two keyword arguments. - ```py + ```python print_box(message="Enter a word:", character="?") print_box(character="?", message="Enter a word:") ``` @@ -334,13 +334,13 @@ need to: I would probably do this. If an argument has a default value, I like to use a keyword argument to change it if needed. - ```py + ```python print_box("Enter a word:", character="?") ``` However, this doesn't work: - ```py + ```python print_box(character="?", "Enter a word:") ``` @@ -354,7 +354,7 @@ need to: The built-in input function [returns a value](using-functions.md#return-values). Can our function return a value also? -```py +```python >>> def times_two(x): ... return x * 2 ... @@ -371,7 +371,7 @@ thing as typing `6` to the prompt. We can call the `times_two` function and use the result however we want, just like we can use built-in functions: -```py +```python >>> times_two(2) + times_two(3) # calculate 4 + 6 10 >>> print('2 * 5 is', times_two(5)) @@ -381,7 +381,7 @@ want, just like we can use built-in functions: Note that **returning from a function ends it immediately**. -```py +```python >>> def return_before_print(): ... return None ... print("This never gets printed.") @@ -393,7 +393,7 @@ Note that **returning from a function ends it immediately**. If we don't have any return statements or we have a return statement that doesn't specify what to return, our function will return None. -```py +```python >>> def return_none_1(): ... pass ... @@ -423,7 +423,7 @@ assign it to a variable. If our function returns a value we can always print it, like this: -```py +```python >>> def return_hi(): ... return "hi" ... @@ -436,7 +436,7 @@ hi Ask yes/no questions. -```py +```python def ask_yes_no(prompt): while True: answer = input(prompt + ' (y or n) ') @@ -454,7 +454,7 @@ else: Ask questions with multiple answers. -```py +```python def ask_until_correct(prompt, correct_options, error_message="I don't know what you meant."): while True: @@ -495,7 +495,7 @@ exercises about defining functions you can do. 1. What's wrong with this code? - ```py + ```python def ask_name(): name = input("Enter your name: ") @@ -505,7 +505,7 @@ exercises about defining functions you can do. 2. How about this code? - ```py + ```python def get_greeting(): return "Hello World!" @@ -514,7 +514,7 @@ exercises about defining functions you can do. 3. Why does this print None after greeting the world? - ```py + ```python def greet(target): print("Hello", target) diff --git a/basics/dicts.md b/basics/dicts.md index cd50cf9..2020913 100644 --- a/basics/dicts.md +++ b/basics/dicts.md @@ -5,7 +5,7 @@ to [for loop](loops.md#for-loops) over them. If we make some kind of program that needs to keep track of people's usernames and passwords, we can use a list for that: -```py +```python userlist = [ ('me', 'my password'), ('you', 'your password'), @@ -21,7 +21,7 @@ the password? `username in userlist` is always False because the user list consists of `(username, password)` pairs instead of just usernames, so we need to for loop over the whole userlist: -```py +```python username_exists = False for user in userlist: if user[0] == username: @@ -34,7 +34,7 @@ if username_exists: Or how about getting a user's password if we know the username? This also requires going through the whole list. -```py +```python password = None for user in userlist: if user[0] == username: @@ -50,7 +50,7 @@ way to store our usernames and passwords. A better way to store user information might be a dictionary: -```py +```python passwords = { 'me': 'my password', 'you': 'your password', @@ -83,7 +83,7 @@ Variables are actually stored in a dictionary. We can get that dictionary with the globals function. In this dictionary, keys are variable names and values are what our variables point to. -```py +```python >>> globals() {'userlist': [('me', 'my password'), ('you', 'your password')], 'passwords': {'me': 'my password', 'you': 'your password'}, @@ -103,7 +103,7 @@ getting a user's password is easy. Dictionaries have some similarities with lists. For example, both lists and dictionaries have a length. -```py +```python >>> len(userlist) # contains two elements 2 >>> len(passwords) # contains two key:value pairs @@ -114,7 +114,7 @@ lists and dictionaries have a length. We can get a value of a key with `the_dict[key]`. This is a lot easier and faster than for-looping over a list of pairs. -```py +```python >>> passwords['me'] 'my password' >>> passwords['you'] @@ -125,7 +125,7 @@ and faster than for-looping over a list of pairs. Trying to get the value of a non-existing key gives us an error, but we can add new `key: value` pairs by doing `the_dict[key] = value`. -```py +```python >>> passwords['lol'] Traceback (most recent call last): File "", line 1, in @@ -142,7 +142,7 @@ For looping over a dictionary gets its keys, and checking if something is in the dictionary checks if the dictionary has a key like that. This can be confusing at first but you'll get used to this. -```py +```python >>> 'me' in passwords True >>> 'my password' in passwords @@ -159,7 +159,7 @@ me Dictionaries have a values method that we can use if we want to do something with the values: -```py +```python >>> passwords.values() dict_values(["lol's password", 'your password', 'my password']) >>> @@ -169,7 +169,7 @@ The values method returned a `dict_values` object. Things like this behave a lot like lists and usually we don't need to convert them to lists. -```py +```python >>> for password in passwords.values(): ... print(password) ... @@ -187,7 +187,7 @@ it because the dictionary itself behaves a lot like a list of keys. If we need both keys and values we can use the items method with the `for first, second in thing` trick. -```py +```python >>> passwords.items() dict_items([('lol', "lol's password"), ('you', 'your password'), @@ -204,7 +204,7 @@ me: my password This is also useful for checking if the dictionary has a `key: value` pair. -```py +```python >>> ('me', 'my password') in passwords.items() # correct username and password True >>> ('me', 'whatever') in passwords.items() # wrong username or password @@ -218,7 +218,7 @@ Sometimes it might be handy to use lists as dictionary keys, but it just doesn't work. I'm not going to explain why Python doesn't allow this because usually we don't need to worry about that. -```py +```python >>> stuff = {['a', 'b']: 'c', ['d', 'e']: 'f'} Traceback (most recent call last): File "", line 1, in @@ -228,7 +228,7 @@ TypeError: unhashable type: 'list' On the other hand, tuples work just fine: -```py +```python >>> stuff = {('a', 'b'): 'c', ('d', 'e'): 'f'} >>> stuff {('a', 'b'): 'c', ('d', 'e'): 'f'} @@ -237,7 +237,7 @@ On the other hand, tuples work just fine: The values of a dictionary can be anything. -```py +```python >>> stuff = {'a': [1, 2, 3], 'b': [4, 5, 6]} >>> stuff {'a': [1, 2, 3], 'b': [4, 5, 6]} @@ -263,7 +263,7 @@ This program counts how many times words appear in a sentence. `sentence.split()` creates a list of words in the sentence, see `help(str.split)` for more info. -```py +```python sentence = input("Enter a sentence: ") counts = {} # {word: count, ...} diff --git a/basics/exceptions.md b/basics/exceptions.md index 2678830..40ac5e0 100644 --- a/basics/exceptions.md +++ b/basics/exceptions.md @@ -3,7 +3,7 @@ So far we have made programs that ask the user to enter a string, and we also know how to convert that to an integer. -```py +```python text = input("Enter something: ") number = int(text) print("Your number doubled:", number*2) @@ -18,7 +18,7 @@ Your number doubled: 6 But that doesn't work if the user does not enter a number. -```py +```python Enter a number: lol Traceback (most recent call last): File "/some/place/file.py", line 2, in @@ -36,7 +36,7 @@ in our program. If an exception occurs, the program will stop and we get an error message. The interactive prompt will display an error message and keep going. -```py +```python >>> int('lol') Traceback (most recent call last): File "", line 1, in @@ -46,7 +46,7 @@ ValueError: invalid literal for int() with base 10: 'lol' Exceptions are [classes](classes.md). -```py +```python >>> ValueError >>> @@ -55,7 +55,7 @@ Exceptions are [classes](classes.md). We can also create exceptions. We won't get an error message by doing that, but we'll use this for displaying our own error messages later. -```py +```python >>> the_problem = ValueError('oh no') >>> the_problem ValueError('oh no',) @@ -68,7 +68,7 @@ If we need to try to do something and see if we get an exception, we can use `try` and `except`. This is also known as **catching** the exception. -```py +```python >>> try: ... print(int('lol')) ... except ValueError: @@ -80,7 +80,7 @@ Oops! The except part doesn't run if the try part succeeds. -```py +```python >>> try: ... print("Hello World!") ... except ValueError: @@ -95,7 +95,7 @@ value's type is correct. In this case, `int` can take a string as an argument, but the string needs to contain a number, not `lol`. If the type is wrong, we will get a TypeError instead. -```py +```python >>> 123 + 'hello' Traceback (most recent call last): File "", line 1, in @@ -107,7 +107,7 @@ Exceptions always interrupt the code even if we catch them. Here the print never runs because it's after the error but inside the `try` block. Everything after the try block runs normally. -```py +```python >>> try: ... 123 + 'hello' ... print("This doesn't get printed.") @@ -120,7 +120,7 @@ Oops! Does an `except ValueError` also catch TypeErrors? -```py +```python >>> try: ... print(123 + 'hello') ... except ValueError: @@ -135,7 +135,7 @@ TypeError: unsupported operand type(s) for +: 'int' and 'str' No, it doesn't. But maybe we could except for both ValueError and TypeError? -```py +```python >>> try: ... int('lol') ... except ValueError: @@ -160,7 +160,7 @@ Seems to be working. We can also also catch multiple exceptions by catching [a tuple](lists-and-tuples.md#tuples) of exceptions: -```py +```python >>> try: ... 123 + 'hello' ... except (ValueError, TypeError): @@ -179,7 +179,7 @@ wrong value or type Catching `Exception` will catch all errors. We'll learn more about why it does that in a moment. -```py +```python >>> try: ... 123 + 'hello' ... except Exception: @@ -199,7 +199,7 @@ It's also possible to catch an exception and store it in a variable. Here we are catching an exception that Python created and storing it in `our_error`. -```py +```python >>> try: ... 123 + 'hello' ... except TypeError as e: @@ -216,7 +216,7 @@ TypeError("unsupported operand type(s) for +: 'int' and 'str'",) Never do things like this: -```py +```python try: # many lines of code except Exception: @@ -232,7 +232,7 @@ whole program. There's nothing wrong with doing things like this: -```py +```python try: with open('some file', 'r') as f: content = f.read() @@ -242,7 +242,7 @@ except OSError: # we can't read the file but we can work without it Usually catching errors that the user has caused is also a good idea: -```py +```python import sys text = input("Enter a number: ") @@ -263,7 +263,7 @@ is known as **raising an exception** and **throwing an exception**. Raising an exception is easy. All we need to do is to type `raise` and then an exception we want to raise: -```py +```python >>> raise ValueError("lol is not a number") Traceback (most recent call last): File "", line 1, in @@ -273,7 +273,7 @@ ValueError: lol is not a number Of course, we can also raise an exception from a variable. -```py +```python >>> oops = ValueError("lol is not a number") >>> raise oops Traceback (most recent call last): @@ -286,7 +286,7 @@ If we [define a function](defining-functions.md) that raises an exception and call it we'll notice that the error message also says which functions we ran to get to that error. -```py +```python >>> def oops(): ... raise ValueError("oh no!") ... @@ -407,7 +407,7 @@ Catching Exception doesn't catch them either. Keep asking a number from the user until it's entered correctly. -```py +```python while True: try: number = int(input("Enter a number: ")) @@ -424,7 +424,7 @@ file for the user if it doesn't exist already. This example also uses things from [the file chapter](files.md), [the function defining chapter](defining-functions.md) and [the module chapter](modules.md). -```py +```python # These are here so you can change them to customize the program # easily. default_greeting = "Hello World!" diff --git a/basics/files.md b/basics/files.md index 5e83a91..ab7bfed 100644 --- a/basics/files.md +++ b/basics/files.md @@ -59,7 +59,7 @@ is same as `/home/me/hello.py`. Let's create a file and write a hello world to it. -```py +```python >>> with open('hello.txt', 'w') as f: ... print("Hello World!", file=f) ... @@ -78,7 +78,7 @@ So how does that code work? First of all, we open a path with `open`, and it gives us a Python file object that is assigned to the variable `f`. -```py +```python >>> f <_io.TextIOWrapper name='hello.txt' mode='w' encoding='UTF-8'> >>> @@ -104,7 +104,7 @@ But what is that `with ourfile as f` crap? That's just a fancy way to make sure that the file gets closed, no matter what happens. As we can see, the file was indeed closed. -```py +```python >>> f.closed True >>> @@ -120,7 +120,7 @@ After opening a file with the `r` mode we can for loop over it, just like it was a list. So let's go ahead and read everything in the file we created to a list of lines. -```py +```python >>> lines = [] >>> with open('hello.txt', 'r') as f: ... for line in f: @@ -135,7 +135,7 @@ Trying to open a non-existent file with `w` or `a` creates the file for us, but doing that with `r` gives us an error instead. We'll learn more about errors [later](exceptions.md). -```py +```python >>> with open('this-doesnt-exist.txt', 'r') as f: ... print("It's working!") ... @@ -157,7 +157,7 @@ necessary. Let's see how that works if we have more than one line in the file. -```py +```python >>> with open('hello.txt', 'w') as f: ... print("Hello one!", file=f) ... print("Hello two!", file=f) @@ -181,7 +181,7 @@ But how to get rid of that `\n`? [The rstrip string method](https://docs.python.org/3/library/stdtypes.html#str.rstrip) is great for this: -```py +```python >>> stripped = [] >>> for line in lines: ... stripped.append(line.rstrip('\n')) @@ -195,7 +195,7 @@ It's also possible to read lines one by one. Files have [a readline method](https://docs.python.org/3/library/io.html#io.TextIOBase.readline) that reads the next line, and returns `''` if we're at the end of the file. -```py +```python >>> with open('hello.txt', 'r') as f: ... first_line = f.readline() ... second_line = f.readline() @@ -210,7 +210,7 @@ There's only one confusing thing about reading files. If we try to read the same file object twice we'll find out that it only gets read once: -```py +```python >>> first = [] >>> second = [] >>> with open('hello.txt', 'r') as f: @@ -231,7 +231,7 @@ file again it was already at the end, and there was nothing left to read. But if we open the file again, we get a new file object that is in the beginning and everything works. -```py +```python >>> first = [] >>> second = [] >>> with open('hello.txt', 'r') as f: @@ -255,7 +255,7 @@ content we have read from it multiple times. If we need all of the content as a string, we can use [the read method](https://docs.python.org/3/library/io.html#io.TextIOBase.read). -```py +```python >>> with open('hello.txt', 'r') as f: ... full_content = f.read() ... @@ -284,7 +284,7 @@ Another way to create paths is to tell Python to escape them by adding an `r` to the beginning of the string. In this case the `r` is short for "raw", not "read". -```py +```python >>> r'C:\some\name' 'C:\\some\\name' >>> @@ -294,7 +294,7 @@ If our program is not meant to be ran on Windows and the paths don't contain backslashes we don't need to double anything or use `r` in front of paths. -```py +```python >>> print('/some/name') /some/name >>> @@ -309,7 +309,7 @@ run the program on a different computer that doesn't have a This program prints the contents of files: -```py +```python while True: filename = input("Filename or path, or nothing at all to exit: ") if filename == '': @@ -326,7 +326,7 @@ This program stores the user's username and password in a file. Plain text files are definitely not a good way to store usernames and passwords, but this is just an example. -```py +```python # Ask repeatedly until the user answers 'y' or 'n'. while True: answer = input("Have you been here before? (y/n) ") diff --git a/basics/getting-started.md b/basics/getting-started.md index 3580fba..217cf07 100644 --- a/basics/getting-started.md +++ b/basics/getting-started.md @@ -9,7 +9,7 @@ another command, press Enter and keep going. You probably don't know any Python commands yet. Let's see what happens if we just write something and press Enter. -```py +```python >>> hello Traceback (most recent call last): File "", line 1, in @@ -22,7 +22,7 @@ Oops! That didn't work. But like I wrote in the Maybe we can press Enter without typing anything? -```py +```python >>> >>> >>> @@ -31,7 +31,7 @@ Maybe we can press Enter without typing anything? That worked. How about numbers? -```py +```python >>> 123 123 >>> -123 @@ -48,7 +48,7 @@ There we go, it echoes them back. In some countries, decimal numbers are written with a comma, like `3,14` instead of `3.14`. Maybe Python knows that? -```py +```python >>> 3,14 (3, 14) >>> @@ -60,7 +60,7 @@ worked just fine. Later we'll learn what `(3, 14)` is. What if we type a `#`? -```py +```python >>> # >>> ``` @@ -68,7 +68,7 @@ What if we type a `#`? Nothing happened at all. Maybe we can type a `#` and then some text after it? -```py +```python >>> # hello there >>> ``` @@ -78,7 +78,7 @@ Again, nothing happened. If you're not using IDLE, the prompt will change from `>>>` to `...`. Just press Enter again to get it back to `>>>`. -```py +```python >>> # hello again ... >>> @@ -92,7 +92,7 @@ we can use them to explain what our code does. Maybe we could type mathematical statements? -```py +```python >>> 17 + 3 20 >>> 17 - 3 @@ -109,7 +109,7 @@ It's working, Python just calculates the result and echoes it back. The spaces between numbers and operators don't affect anything, they just make the code easier to read when they are used correctly. -```py +```python >>> 14 + 2 + 1 17 >>> 14 +2+ 1 @@ -120,7 +120,7 @@ just make the code easier to read when they are used correctly. The evaluation order is similar to math. The parentheses `(` and `)` also work the same way. -```py +```python >>> 1 + 2 * 3 # 2 * 3 is calculated first 7 >>> (1 + 2) * 3 # 1 + 2 is calculated first @@ -131,7 +131,7 @@ also work the same way. Square brackets `[]` and curly brackets `{}` cannot be used to change the evaluation order. We'll learn more about what they do later. -```py +```python >>> [1 + 2] * 3 [3, 3, 3] >>> {1 + 2} * 3 @@ -151,7 +151,7 @@ The `//` operator will divide and then throw away the dot and everything after it. For example, `17 / 3` is `5.666666666666667`, and so `17 // 3` is `5` because we throw away the `.666666666666667` part. -```py +```python >>> 17 / 3 5.666666666666667 >>> 17 // 3 @@ -161,7 +161,7 @@ is `5` because we throw away the `.666666666666667` part. The `%` operator gets the division remainder. -```py +```python >>> 17 % 3 2 >>> @@ -171,7 +171,7 @@ For example, if there were 17 apples that should be given evenly to 3 people, everyone would get 5 apples and there would be 2 apples left over. -```py +```python >>> 17 // 3 5 >>> 17 % 3 @@ -182,7 +182,7 @@ over. This is also useful for converting time from minutes to seconds. 500 seconds is 8 minutes and 20 seconds. -```py +```python >>> 500 // 60 8 >>> 500 % 60 @@ -193,7 +193,7 @@ seconds is 8 minutes and 20 seconds. `**` can be used to raise to a power, so 3² in math is `3**2` in Python. Powers are calculated before `*` and `/`, but after `()`. -```py +```python >>> 2 ** 3 8 >>> 2 * 3 ** 2 # 3 ** 2 is calculated first diff --git a/basics/handy-stuff-strings.md b/basics/handy-stuff-strings.md index c411a9f..647d287 100644 --- a/basics/handy-stuff-strings.md +++ b/basics/handy-stuff-strings.md @@ -2,7 +2,7 @@ Python strings are just pieces of text. -```py +```python >>> our_string = "Hello World!" >>> our_string 'Hello World!' @@ -11,7 +11,7 @@ Python strings are just pieces of text. So far we know how to add them together. -```py +```python >>> "I said: " + our_string 'I said: Hello World!' >>> @@ -19,7 +19,7 @@ So far we know how to add them together. We also know how to repeat them multiple times. -```py +```python >>> our_string * 3 'Hello World!Hello World!Hello World!' >>> @@ -40,7 +40,7 @@ Slicing is really simple. It just means getting a part of the string. For example, to get all characters between the second place between the characters and the fifth place between the characters, we can do this: -```py +```python >>> our_string[2:5] 'llo' >>> @@ -54,7 +54,7 @@ This picture explains how the slicing works: But what happens if we slice with negative values? -```py +```python >>> our_string[-5:-2] 'orl' >>> @@ -69,7 +69,7 @@ If we don't specify the beginning it defaults to 0, and if we don't specify the end it defaults to the length of the string. For example, we can get everything except the first or last character like this: -```py +```python >>> our_string[1:] 'ello World!' >>> our_string[:-1] @@ -79,7 +79,7 @@ can get everything except the first or last character like this: Remember that strings can't be changed in-place. -```py +```python >>> our_string[:5] = 'Howdy' Traceback (most recent call last): File "", line 1, in @@ -94,7 +94,7 @@ going to talk about it now. So now we know how slicing works. But what happens if we forget the `:`? -```py +```python >>> our_string[1] 'e' >>> @@ -108,7 +108,7 @@ Programming starts at zero. Indexing strings also starts at zero. The first character is `our_string[0]`, the second character is `our_string[1]`, and so on. -```py +```python >>> our_string[0] 'H' >>> our_string[1] @@ -128,7 +128,7 @@ So string indexes work like this: How about negative values? -```py +```python >>> our_string[-1] '!' >>> @@ -167,7 +167,7 @@ We'll learn more about methods [later](classes.md). Here's an example with some of the most commonly used string methods: -```py +```python >>> our_string.upper() 'HELLO WORLD!' >>> our_string.lower() @@ -220,7 +220,7 @@ them [later](lists-and-tuples.md). To add a string in the middle of another string, we can do something like this: -```py +```python >>> name = 'Akuli' >>> 'My name is ' + name + '.' 'My name is Akuli.' @@ -229,7 +229,7 @@ like this: But that gets complicated if we have many things to add. -```py +```python >>> channel = '##learnpython' >>> network = 'freenode' >>> "My name is " + name + " and I'm on the " + channel + " channel on " + network + "." @@ -248,7 +248,7 @@ our problem: formatting style has a lot of features, but it's a little bit more typing than `%s`-formatting. - ```py + ```python >>> "Hello {}.".format(name) 'Hello Akuli.' >>> "My name is {} and I'm on the {} channel on {}.".format(name, channel, network) @@ -262,7 +262,7 @@ our problem: to use `%s` formatting for simple things and `.format` when I need more powerful features. - ```py + ```python >>> "Hello %s." % name 'Hello Akuli.' >>> "My name is %s and I'm on the %s channel on %s." % (name, channel, network) @@ -277,7 +277,7 @@ our problem: If we have a variable that may be a tuple we need to wrap it in another tuple when formatting: - ```py + ```python >>> thestuff = (1, 2, 3) >>> "we have %s" % thestuff Traceback (most recent call last): @@ -298,7 +298,7 @@ our problem: string is same as it would be with `.format()` but we can use variables directly. - ```py + ```python >>> f"My name is {name} and I'm on the {channel} channel on {network}." "My name is Akuli and I'm on the ##learnpython channel on freenode." >>> @@ -306,7 +306,7 @@ our problem: All of these formatting styles have many other features also: -```py +```python >>> 'Three zeros and number one: {:04d}'.format(1) 'Three zeros and number one: 0001' >>> 'Three zeros and number one: %04d' % 1 @@ -322,7 +322,7 @@ If you need to know more about formatting I recommend reading We can use `in` and `not in` to check if a string contains another string. -```py +```python >>> our_string = "Hello World!" >>> "Hello" in our_string True @@ -336,7 +336,7 @@ True We can get the length of a string with the `len` function. The name `len` is short for "length". -```py +```python >>> len(our_string) # 12 characters 12 >>> len('') # no characters @@ -351,7 +351,7 @@ We can convert strings, integers and floats with each other with behave a lot like functions. We'll learn more about what they really are [later](classes.md). -```py +```python >>> str(3.14) '3.14' >>> float('3.14') @@ -366,7 +366,7 @@ are [later](classes.md). Giving an invalid string to `int` or `float` produces an error message. -```py +```python >>> int('lol') Traceback (most recent call last): File "", line 1, in @@ -406,7 +406,7 @@ ValueError: could not convert string to float: 'hello' 1. Fix this program. - ```py + ```python print("Hello!") word1 = input("Enter something: ") word2 = input("Enter another thing: ") @@ -417,7 +417,7 @@ ValueError: could not convert string to float: 'hello' 2. This program is supposed to say something loudly. Fix it. - ```py + ```python message = input("What do you want me to say? ") message.upper print(message, "!!!") diff --git a/basics/if.md b/basics/if.md index 72673dc..b0ae78d 100644 --- a/basics/if.md +++ b/basics/if.md @@ -4,7 +4,7 @@ Now we know what True and False are. -```python +```pythonthon >>> 1 == 1 True >>> 1 == 2 @@ -19,7 +19,7 @@ True But what if we want to execute different code depending on something? That's when `if` comes in. -```py +```python >>> its_raining = True >>> if its_raining: ... print("It's raining!") @@ -43,7 +43,7 @@ just press space a few times. IDLE does this a bit differently, so if you use IDLE, running the example code looks more like this: -```py +```python >>> its_raining = True >>> if its_raining: print("It's raining!") @@ -57,7 +57,7 @@ But why is that `if its_raining` instead of `if(its_raining)`? Earlier we learned that `if` is a **keyword**. -```py +```python >>> if = 123 File "", line 1 if = 123 @@ -76,7 +76,7 @@ functions. Also note that if statements check the condition once only, so if we set it to false later the if statement won't notice it. -```py +```python >>> its_raining = True >>> if its_raining: ... its_raining = False @@ -100,7 +100,7 @@ editor should give you four spaces every time you press tab. Create a file called `rain.py`, and type the following content into it: -```py +```python its_raining = True if its_raining: print("It's raining!") @@ -147,7 +147,7 @@ file**. What if we want to print a different message if it's not raining? We could do something like this: -```py +```python its_raining = True # you can change this to False its_not_raining = not its_raining # False if its_raining, True otherwise @@ -162,7 +162,7 @@ value of `its_raining` is. We can also add `not its_raining` directly to the second if statement: -```py +```python its_raining = True if its_raining: @@ -173,7 +173,7 @@ if not its_raining: But we can make it even better by using `else`. -```py +```python its_raining = True if its_raining: @@ -185,7 +185,7 @@ else: The else part simply runs when the if statement doesn't run. It doesn't check the condition again. -```py +```python >>> its_raining = True >>> if its_raining: ... its_raining = False @@ -198,7 +198,7 @@ check the condition again. By combining `else` with the input function we can make a program that asks for a password and checks if it's correct. -```py +```python print("Hello!") password = input("Enter your password: ") @@ -231,7 +231,7 @@ a password from the user, but you shouldn't worry about that just yet. If we have more than one condition to check, our code will end up looking a bit messy. -```py +```python print("Hello!") word = input("Enter something: ") @@ -256,7 +256,7 @@ else: Instead of typing `else`, indenting more and typing an `if` we can simply type `elif`, which is short for `else if`. Like this: -```py +```python print("Hello!") word = input("Enter something: ") @@ -290,7 +290,7 @@ else: then try to run it, fix the errors you got, try to run it again and keep going until it works. - ```py + ```python print(Hello!) something == input('Enter something: ) print('You entered:' something) @@ -298,7 +298,7 @@ else: 2. Fix this program the same way: - ```py + ```python print('Hello!') something = input("Enter something: ") if something = 'hello': diff --git a/basics/larger-program.md b/basics/larger-program.md index 1d33284..4fd49a1 100644 --- a/basics/larger-program.md +++ b/basics/larger-program.md @@ -39,7 +39,7 @@ function and a `stats` function. Let's start with the function that reads the question file: -```py +```python def read_questions(filename): answers = {} with open(questionfile, 'r') as f: @@ -57,7 +57,7 @@ this tutorial if you didn't create it already. **TODO:** Instructions for using the -i switch. -```py +```python >>> read_questions('questions.txt') {'text displaying function': 'print', 'text asking function': 'input'} >>> @@ -70,7 +70,7 @@ reasons why we write functions. Next we'll write the rest of the functions the same way, first writing and then testing and fixing. Here are my versions of them: -```py +```python def ask_questions(answers): correct = [] wrong = [] @@ -95,7 +95,7 @@ def stats(correct, wrong, answers): Let's try them out. -```py +```python >>> answers = read_questions('questions.txt') >>> correct, wrong = ask_questions(answers) text displaying function = print @@ -130,7 +130,7 @@ runs the program using other functions. Our main function consists of mostly the same pieces of code that we just tried out on the `>>>` prompt. -```py +```python def main(): filename = input("Name of the question file: ") answers = read_questions(filename) @@ -140,7 +140,7 @@ def main(): The last thing we need to add is these two lines: -```py +```python if __name__ == '__main__': main() ``` @@ -154,7 +154,7 @@ run it in different ways. Now the whole program looks like this: -```py +```python def read_questions(filename): answers = {} with open(questionfile, 'r') as f: diff --git a/basics/lists-and-tuples.md b/basics/lists-and-tuples.md index 08e58bb..01db934 100644 --- a/basics/lists-and-tuples.md +++ b/basics/lists-and-tuples.md @@ -4,7 +4,7 @@ Sometimes we may end up doing something like this. -```py +```python name1 = 'wub_wub' name2 = 'theelous3' name3 = 'RubyPinch' @@ -29,7 +29,7 @@ better to store all names in one variable. This means that our one variable needs to point to multiple values. An easy way to do this is using a list: -```py +```python names = ['wub_wub', 'theelous3', 'Nitori', 'RubyPinch', 'go|dfish'] ``` @@ -42,7 +42,7 @@ strings, like this: Let's open the `>>>` prompt and create a name list. -```py +```python >>> names = ['wub_wub', 'theelous3', 'RubyPinch', 'go|dfish', 'Nitori'] >>> names ['wub_wub', 'theelous3', 'RubyPinch', 'go|dfish', 'Nitori'] @@ -52,7 +52,7 @@ Let's open the `>>>` prompt and create a name list. There's many things [we can do with strings](handy-stuff-strings.md), and some of these things also work with lists. -```py +```python >>> len(names) # len is short for length, we have 5 names 5 >>> names + ['Akuli'] # create a new list with me in it @@ -66,7 +66,7 @@ With strings indexing and slicing both returned a string, but with lists we get a new list when we're slicing and an element from the list if we're indexing. -```py +```python >>> names[:2] # first two names ['wub_wub', 'theelous3'] >>> names[0] # the first name @@ -77,7 +77,7 @@ from the list if we're indexing. If we want to check if the program knows a name all we need to do is to use the `in` keyword. -```py +```python >>> 'lol' in names False >>> 'RubyPinch' in names @@ -88,7 +88,7 @@ True We can't use this for checking if a list of names is a part of our name list. -```py +```python >>> ['RubyPinch', 'go|dfish'] in names False >>> ['RubyPinch'] in names @@ -102,7 +102,7 @@ Some of the most commonly used ones are append, extend and remove. `append` adds an item to the end of a list, `extend` adds multiple items from another list and `remove` removes an item. -```py +```python >>> names ['wub_wub', 'theelous3', 'RubyPinch', 'go|dfish', 'Nitori'] >>> names.remove('theelous3') # sorry theelous3 @@ -120,7 +120,7 @@ multiple items from another list and `remove` removes an item. Note that `remove` removes only the first match it finds. -```py +```python >>> names = ['theelous3', 'go|dfish', 'theelous3'] >>> names.remove('theelous3') >>> names # the second theelous3 is still there! @@ -131,7 +131,7 @@ Note that `remove` removes only the first match it finds. If we need to remove all matching items we can use a simple while loop. We'll talk more about loops [in the next chapter](loops.md). -```py +```python >>> names = ['theelous3', 'go|dfish', 'theelous3'] >>> while 'theelous3' in names: ... names.remove('theelous3') @@ -143,7 +143,7 @@ We'll talk more about loops [in the next chapter](loops.md). We can also use slicing and indexing to change the content: -```py +```python >>> names = ['theelous3', 'LOL', 'RubyPinch', 'go|dfish', 'Nitori'] >>> names[1] = 'wub_wub' # replace LOL with wub_wub >>> names @@ -160,7 +160,7 @@ and then set the result back to the same variable, like `message = message.strip()`. This just doesn't work right with most mutable things because they're designed to be changed in-place. -```py +```python >>> names = names.remove('Akuli') >>> print(names) # now it's None! None @@ -175,7 +175,7 @@ print's return value to a variable](using-functions.md#return-values). After working with lists a while you'll find out that they behave like this: -```py +```python >>> a = [1, 2, 3] >>> b = a >>> b.append(4) @@ -193,7 +193,7 @@ line. If we draw a picture of the variables it looks like this: This is when the `is` keyword comes in. It can be used to check if two variables point to the **same** thing. -```py +```python >>> a is b True >>> @@ -201,7 +201,7 @@ True Typing `[]` creates a **new** list every time. -```py +```python >>> [] is [] False >>> [1, 2, 3] is [1, 2, 3] @@ -212,7 +212,7 @@ False If we need **a new list with similar content** we can use the `copy` method. -```py +```python >>> a = [1, 2, 3] >>> b = a.copy() >>> b is a @@ -240,7 +240,7 @@ Tuples are a lot like lists, but they're immutable so they can't be changed in-place. We create them like lists, but with `()` instead of `[]`. -```py +```python >>> thing = (1, 2, 3) >>> thing (1, 2, 3) @@ -254,7 +254,7 @@ If we need to create a tuple that contains only one item we need to use `(item,)` instead of `(item)` because `(item)` is used in places like `(1 + 2) * 3`. -```py +```python >>> (3) 3 >>> (3,) @@ -270,7 +270,7 @@ It's also possible to create tuples by just separating things with commas and adding no parentheses. Personally I don't like this feature, but some people like to do it this way. -```py +```python >>> 1, 2, 3 (1, 2, 3) >>> 'hello', @@ -281,7 +281,7 @@ but some people like to do it this way. Tuples don't have methods like append, extend and remove because they can't change themselves in-place. -```py +```python >>> stuff = (1, 2, 3) >>> stuff.append(4) Traceback (most recent call last): @@ -312,7 +312,7 @@ post about this](http://nedbatchelder.com/blog/201608/lists_vs_tuples.html). Here's the same program we had in the beginning of this tutorial, but using a list: -```py +```python namelist = ['wub_wub', 'theelous3', 'RubyPinch', 'go|dfish', 'Nitori'] name = input("Enter your name: ") @@ -326,7 +326,7 @@ else: 1. Fix this program. - ```py + ```python print("Hello!") name = input("Enter your name: "), print("Your name is " + name + ".") @@ -334,7 +334,7 @@ else: 2. Fix this program. - ```py + ```python namelist = ['wub_wub', 'RubyPinch', 'go|dfish', 'Nitori'] namelist = namelist.extend('theelous3') if input("Enter your name: ") in namelist: diff --git a/basics/loops.md b/basics/loops.md index a33abfe..9ddcc16 100644 --- a/basics/loops.md +++ b/basics/loops.md @@ -13,7 +13,7 @@ We'll talk about all of these in this tutorial. Now we know how if statements work. -```py +```python its_raining = True if its_raining: print("Oh crap, it's raining!") @@ -21,7 +21,7 @@ if its_raining: While loops are really similar to if statements. -```py +```python its_raining = True while its_raining: print("Oh crap, it's raining!") @@ -58,7 +58,7 @@ have ended and the program would have printed `It's not raining anymore`. Let's actually create a program that does just that: -```py +```python its_raining = True while its_raining: print("It's raining!") @@ -87,7 +87,7 @@ Running the program may look like this: The while loop doesn't check the condition all the time, it only checks it in the beginning. -```py +```python >>> its_raining = True >>> while its_raining: ... its_raining = False @@ -101,7 +101,7 @@ We can also interrupt a loop even if the condition is still true using the `break` keyword. In this case, we'll set condition to True and rely on nothing but `break` to end the loop. -```py +```python while True: answer = input("Is it raining? (y=yes, n=no) ") if answer == 'y': @@ -125,7 +125,7 @@ The program works like this: Unlike setting the condition to False, breaking the loop ends it immediately. -```py +```python >>> while True: ... break ... print("This is never printed.") @@ -138,7 +138,7 @@ immediately. Python doesn't have until loops. If we need an until loop, we can use `while not`: -```py +```python raining = False while not raining: print("It's not raining.") @@ -152,7 +152,7 @@ print("It's raining!") Let's say we have [a list](lists-and-tuples.md) of things we want to print. To print each item in it, we could just do a bunch of prints: -```py +```python stuff = ['hello', 'hi', 'how are you doing', 'im fine', 'how about you'] print(stuff[0]) @@ -176,7 +176,7 @@ stuff, we'll get an error saying "list index out of range". We could also create an index variable, and use a while loop: -```py +```python >>> stuff = ['hello', 'hi', 'how are you doing', 'im fine', 'how about you'] >>> length_of_stuff = len(stuff) >>> index = 0 @@ -198,7 +198,7 @@ just for printing each item. This is when for loops come in: -```py +```python >>> for thing in stuff: ... # this is repeated for each element of stuff, that is, first ... # for stuff[0], then for stuff[1], etc. @@ -215,7 +215,7 @@ how about you Without the comments, that's only two simple lines, and one variable. Much better than anything else we tried before. -```py +```python >>> for thing in stuff: ... print(thing) ... @@ -244,7 +244,7 @@ other things also, including strings and its items, and for looping over a string gives us its characters as strings of length one. -```py +```python >>> for short_string in 'abc': ... print(short_string) ... @@ -267,7 +267,7 @@ There's only one big limitation with for looping over lists. We shouldn't modify the list in the for loop. If we do, the results can be surprising: -```py +```python >>> stuff = ['hello', 'hi', 'how are you doing', 'im fine', 'how about you'] >>> for thing in stuff: ... stuff.remove(thing) @@ -279,7 +279,7 @@ be surprising: Instead, we can create a copy of stuff and loop over it. -```py +```python >>> stuff = ['hello', 'hi', 'how are you doing', 'im fine', 'how about you'] >>> for thing in stuff.copy(): ... stuff.remove(thing) @@ -292,7 +292,7 @@ Instead, we can create a copy of stuff and loop over it. Or if we just want to clear a list, we can use the `clear` [list method](https://docs.python.org/3/tutorial/datastructures.html#more-on-lists): -```py +```python >>> stuff = ['hello', 'hi', 'how are you doing', 'im fine', 'how about you'] >>> stuff.clear() >>> stuff @@ -318,7 +318,7 @@ of `stuff.copy()` and `stuff[:] = []` instead of `stuff.clear()`. Repeat something an endless amount of times. -```py +```python message = input("What do you want me to say? ") while True: print(message, "!!!") @@ -326,7 +326,7 @@ while True: Ask the user to enter five things and print them. -```py +```python things = [] print("Enter 5 things: ") @@ -341,7 +341,7 @@ for thing in things: Ask the user a bunch of questions. -```py +```python questions_and_answers = [ # [question, answer], ... ["What is 2+4? ", "6"], @@ -364,7 +364,7 @@ for qa in questions_and_answers: Store a list of names and let the user check if the program knows the user. -```py +```python # You can add names here so the program will know them automatically # when it starts. namelist = [] @@ -426,7 +426,7 @@ while True: 1. This code is supposed to print each number between 1 and 5. Fix it. - ```py + ```python things = str([1, 2, 3, 4, 5]) for thing in things: print(thing) @@ -434,7 +434,7 @@ while True: 2. This code is supposed to print `[1, 2, 3, 4, 5, 6]`. Fix it. - ```py + ```python before = [[1, 2], [3, 4], [5, 6]] after = [] for number in before: @@ -446,7 +446,7 @@ while True: and then calculate their sum. It should print 6 because `1 + 2 + 3` is 6. Fix the program. - ```py + ```python input = ['1', '2', '3'] for string in input: diff --git a/basics/modules.md b/basics/modules.md index fb2bd27..808ba28 100644 --- a/basics/modules.md +++ b/basics/modules.md @@ -3,7 +3,7 @@ Let's say we want to generate a random number between 1 and 3. The random module is a really easy way to do this: -```py +```python >>> import random >>> random.randint(1, 3) 3 @@ -26,7 +26,7 @@ The first line in the example, `import random`, was an **import statement.** But what is that random thing that it gave us? -```py +```python >>> random >>> @@ -57,7 +57,7 @@ importing it. Create a `random.py` file with the following content: -```py +```python import random print("A random number between 1 and 3:", random.randint(1, 3)) @@ -65,7 +65,7 @@ print("A random number between 1 and 3:", random.randint(1, 3)) Now run the program. -```py +```python Traceback (most recent call last): File "random.py", line 1, in import random @@ -85,7 +85,7 @@ to check what's wrong. If you use IDLE, just run the file normally. We should end up with the same error message, and then a `>>>`. Like this: -```py +```python Traceback (most recent call last): File "random.py", line 1, in import random @@ -97,7 +97,7 @@ AttributeError: 'module' object has no attribute 'randint' So first of all, what is that random variable? -```py +```python >>> random >>> @@ -125,7 +125,7 @@ into Python. Actually the whole module is built-in, so there's no `sys.py` anywhere. The sys module has a list that contains all places that modules are searched from: -```py +```python >>> import sys >>> sys @@ -148,13 +148,13 @@ working directory. Let's create a file called `hello.py` that contains a classic greeting: -```py +```python print("Hello World!") ``` Let's go ahead and import it, and see how it works. -```py +```python >>> import hello Hello World! >>> @@ -162,7 +162,7 @@ Hello World! Works as expected, but what happens if we try to import it again? -```py +```python >>> import hello >>> ``` @@ -190,7 +190,7 @@ about that in the official documentation. The official documentation is [here](https://docs.python.org/3/library/random.html). -```py +```python >>> import random >>> random.randint(1, 3) # 1, 2 or 3 3 @@ -211,7 +211,7 @@ The module name "sys" is short for "system", and it contains things that are built into Python. The official documentation is [here](https://docs.python.org/3/library/sys.html). -```py +```python >>> import sys >>> # special files that the print and input functions use >>> # stdin is short for standard input @@ -243,7 +243,7 @@ the program succeeded, and everything's fine. If our program has an error we should print an error message to `sys.stderr` and then call `sys.exit(1)`. Like this: -```py +```python if something_went_wrong: # of course, we need to make real error messages more # informative than this example is @@ -260,7 +260,7 @@ There's no math.py anywhere, math is a built-in module like sys. The official documentation is [here](https://docs.python.org/3/library/math.html). -```py +```python >>> import math >>> math @@ -282,7 +282,7 @@ sys. The official documentation is The official documentation for the time module is [here](https://docs.python.org/3/library/time.html). -```py +```python >>> import time >>> time.sleep(1) # wait one second >>> time.time() # return time in seconds since beginning of the year 1970 @@ -311,7 +311,7 @@ handy functions for interacting with the operating system that Python is running on. The official documentation is [here](https://docs.python.org/3/library/os.html). -```py +```python >>> import os >>> os.getcwd() # short for "get current working directory" '/home/akuli' @@ -347,7 +347,7 @@ True Mix a list of things. -```py +```python import random print("Enter things to mix, and press Enter without typing", @@ -370,7 +370,7 @@ Measure how long it takes for the user to answer a question. The `%.2f` rounds to 2 decimals, and you can find more formatting tricks [here](https://pyformat.info/). -```py +```python import time start = time.time() @@ -386,7 +386,7 @@ else: Wait a given number of seconds. -```py +```python import sys import time @@ -404,7 +404,7 @@ print("Done!") Check what a path points to. -```py +```python import os import sys diff --git a/basics/trey-hunner-zip-and-enumerate.md b/basics/trey-hunner-zip-and-enumerate.md index 3b9197c..692841a 100644 --- a/basics/trey-hunner-zip-and-enumerate.md +++ b/basics/trey-hunner-zip-and-enumerate.md @@ -7,7 +7,7 @@ do a lot more. To be able to understand for loop tricks we need to first know assigning values to multiple variables at once. It works like this: -```py +```python >>> a, b = 1, 2 >>> a 1 @@ -20,7 +20,7 @@ We can use `()` and `[]` around these values however we want and everything will still work the same way. `[]` creates a list, and `()` creates a tuple. -```py +```python >>> [a, b] = (1, 2) >>> a 1 @@ -32,7 +32,7 @@ everything will still work the same way. `[]` creates a list, and We can also have `[]` or `()` on one side but not on the other side. -```py +```python >>> (a, b) = 1, 2 >>> a 1 @@ -43,7 +43,7 @@ side. Python created a tuple automatically. -```py +```python >>> 1, 2 (1, 2) >>> @@ -52,7 +52,7 @@ Python created a tuple automatically. If we're for looping over a list with pairs of values in it we could do this: -```py +```python >>> items = [('a', 1), ('b', 2), ('c', 3)] >>> for pair in items: ... a, b = pair @@ -66,7 +66,7 @@ c 3 Or we can tell the for loop to unpack it for us. -```py +```python >>> for a, b in items: ... print(a, b) ... @@ -111,7 +111,7 @@ Read it now, then come back here and do the exercises. Start your program like this: - ```py + ```python uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' lowercase = 'abcdefghijklmnopqrstuvwxyz' ``` diff --git a/basics/using-functions.md b/basics/using-functions.md index 085425c..1fabd07 100644 --- a/basics/using-functions.md +++ b/basics/using-functions.md @@ -2,7 +2,7 @@ Now we know how to make Python show text. -```py +```python >>> 'Hello!' 'Hello!' >>> @@ -12,7 +12,7 @@ But that includes `''`. One way to show text to the user without `''` is with the print function. In Python, printing doesn't have anything to do with physical printers, it just means showing text on the screen. -```py +```python >>> print('Hello!') Hello! >>> @@ -21,7 +21,7 @@ Hello! Now we are ready for a classic example, which is also the first program in many tutorials :) -```py +```python >>> print("Hello World!") Hello World! >>> @@ -33,7 +33,7 @@ But what exactly is print? Let's see what happens if we type `print` without the `('Hello')` part. -```py +```python >>> print >>> @@ -61,7 +61,7 @@ type `thingy` later it's not going to run `print('hello')` again. Now we know that `thingy = print('hello')` doesn't store the `print('hello')` call in a variable. But what does it do then? -```py +```python >>> thingy = print('hello') hello >>> print(thingy) # thingy is now None @@ -102,7 +102,7 @@ without any printing. Not all functions return None. The input function can be used for getting a string from the user. -```py +```python >>> stuff = input("Enter something:") Enter something:hello >>> stuff @@ -117,7 +117,7 @@ assigned to `stuff`. Usually we want to add a space after the `:`, like this: -```py +```python >>> stuff = input("Enter something: ") # now there's space between : and where i type Enter something: hello >>> @@ -128,7 +128,7 @@ Enter something: hello We can also print an empty line by calling print without any arguments. -```py +```python >>> print() >>> @@ -137,7 +137,7 @@ arguments. In Python, `\n` is a newline character. Printing a string that contains a newline character also prints a newline: -```py +```python >>> print('hello\nworld') hello world @@ -157,7 +157,7 @@ two backslashes. We can also pass multiple arguments to the print function. We need to separate them with commas and print will add spaces between them. -```py +```python >>> print("Hello", "World!") Hello World! >>> @@ -165,7 +165,7 @@ Hello World! Unlike with `+`, the arguments don't need to be strings. -```py +```python >>> print(42, "is an integer, and the value of pi is", 3.14) 42 is an integer, and the value of pi is 3.14 >>> @@ -176,7 +176,7 @@ Unlike with `+`, the arguments don't need to be strings. In [the previous chapter](variables.md) we learned that `if` is not a valid variable name because it's a keyword. -```py +```python >>> if = 123 File "", line 1 if = 123 @@ -188,7 +188,7 @@ SyntaxError: invalid syntax But `print` and `input` are not keywords, so can we use them as variable names? -```py +```python >>> print = "hello" >>> print 'hello' @@ -197,7 +197,7 @@ variable names? We can, but there's a problem. Now we can't even do our hello world! -```py +```python >>> print("Hello World!") Traceback (most recent call last): File "", line 1, in diff --git a/basics/variables.md b/basics/variables.md index ffe0066..9e0dcab 100644 --- a/basics/variables.md +++ b/basics/variables.md @@ -4,7 +4,7 @@ Variables are easy to understand. They simply **point to values**. -```py +```python >>> a = 1 # create a variable called a that points to 1 >>> b = 2 # create another variable >>> a # get the value that the variable points to @@ -20,7 +20,7 @@ Let's draw a diagram of these variables. We can also change the value of a variable after setting it. -```py +```python >>> a = 2 # make a point to 2 instead of 1 >>> a 2 @@ -34,7 +34,7 @@ So now our diagram looks like this: Setting a variable to another variable gets the value of the other variable and sets the first variable to point to that value. -```py +```python >>> a = 1 >>> b = a # this makes b point to 1, not a >>> a = 5 @@ -46,7 +46,7 @@ variable and sets the first variable to point to that value. Trying to access a variable that is not defined creates an error message. -```py +```python >>> thingy Traceback (most recent call last): File "", line 1, in @@ -75,7 +75,7 @@ uppercase characters, numbers and some other characters, but most of the time we should use simple, lowercase variable names. You can also use underscores. -```py +```python >>> magic_number = 123 >>> greeting = "Hello World!" >>> @@ -83,7 +83,7 @@ underscores. Variable names are case-sensitive, like many other things in Python. -```py +```python >>> thing = 1 >>> THING = 2 >>> thIng = 3 @@ -102,7 +102,7 @@ we can run `help('keywords')` to see the full list if we want to. We'll learn to use most of them later in this tutorial. Trying to use a keyword as a variable name causes a syntax error. -```py +```python >>> if = 123 File "", line 1 if = 123 @@ -116,7 +116,7 @@ the `=` is always executed before the left side. This means that we can do something with a variable on the right side, then assign the result back to the same variable on the left side. -```py +```python >>> a = 1 >>> a = a + 1 >>> a @@ -128,7 +128,7 @@ To do something to a variable (for example, to add something to it) we can also use `+=`, `-=`, `*=` and `/=` instead of `+`, `-`, `*` and `/`. The "advanced" `%=`, `//=` and `**=` also work. -```py +```python >>> a += 2 # a = a + 2 >>> a -= 2 # a = a - 2 >>> a *= 2 # a = a * 2 @@ -138,7 +138,7 @@ can also use `+=`, `-=`, `*=` and `/=` instead of `+`, `-`, `*` and This is not limited to integers. -```py +```python >>> a = 'hello' >>> a *= 3 >>> a += 'world' @@ -151,7 +151,7 @@ Now we also understand why typing hello to the prompt didn't work in the beginning of this tutorial. But we can assign something to a variable called hello and then type hello: -```py +```python >>> hello = 'hello there' >>> hello 'hello there' @@ -164,7 +164,7 @@ There are two Boolean values, True and False. In Python, and in many other programming languages, `=` is assigning and `==` is comparing. `a = 1` sets a to 1, and `a == 1` checks if a equals 1. -```py +```python >>> a = 1 >>> a == 1 True @@ -177,7 +177,7 @@ False `a == 1` is the same as `(a == 1) == True`, but `a == 1` is more readable, so most of the time we shouldn't write `== True` anywhere. -```py +```python >>> a = 1 >>> a == 1 True @@ -201,7 +201,7 @@ None later. None's behavior on the interactive prompt might be a bit confusing at first: -```py +```python >>> thingy = None >>> thingy >>> @@ -216,7 +216,7 @@ None coming up all the time. If we want to see a None on the interactive prompt, we can use print. -```py +```python >>> print(thingy) None >>> @@ -226,7 +226,7 @@ Another confusing thing is that if we do something weird to None we get error messages that talk about NoneType object. The NoneType object they are talking about is always None. -```py +```python >>> None.hello # None has no attribute 'hello' Traceback (most recent call last): File "", line 1, in diff --git a/basics/what-is-true.md b/basics/what-is-true.md index 6fdcbf3..77f64d3 100644 --- a/basics/what-is-true.md +++ b/basics/what-is-true.md @@ -2,7 +2,7 @@ Now we understand how code like this works. -```py +```python message = input("Enter something: ") if message == '': print("You didn't enter anything!") @@ -13,7 +13,7 @@ else: But most Python programmers would write that code like this instead: -```py +```python message = input("Enter something: ") if message: print("You entered:", message) @@ -36,7 +36,7 @@ write the `==True` part anywhere because we don't need it. We can convert things to Booleans like Python did by doing `bool(things)`. Let's try that with strings. -```py +```python >>> bool('hello') True >>> bool('there') @@ -52,7 +52,7 @@ As we can see, the Boolean value of most strings is True. The only string that has a false Boolean value is the empty string, `''` or `""`: -```py +```python >>> bool('') False >>> @@ -61,7 +61,7 @@ False Most other things are also treated as False if they're empty and True if they're not empty. -```py +```python >>> bool([1, 2, 3]) True >>> bool([]) @@ -80,7 +80,7 @@ False None and zero are also falsy, but positive and negative numbers are treated as True. -```py +```python >>> bool(None) False >>> bool(0) @@ -96,7 +96,7 @@ True Most other things are also treated as True. -```py +```python >>> bool(OSError) True >>> bool(print) @@ -116,7 +116,7 @@ something else than a list. It thinks that empty tuples, strings and dictionaries aren't empty just because they aren't empty lists: -```py +```python >>> def is_this_empty(thing): ... if thing == []: ... print("It's empty!") @@ -139,7 +139,7 @@ It's not empty. We could improve the code by checking against different empty things. -```py +```python >>> def is_this_empty(thing): ... if thing == [] or thing == () or thing == '' or thing == {}: ... print("It's empty!") @@ -154,7 +154,7 @@ haven't talked about in this tutorial. Trying to check all of them would be pointless because functions like this already work with all of them: -```py +```python >>> def is_this_empty(thing): ... if thing: ... print("It's not empty.") @@ -168,7 +168,7 @@ There's also cases when we should not rely on the Boolean value. When we're doing things with numbers and None it's best to simply compare to None or zero. Like this: -```py +```python if number != 0: print("number is not zero") @@ -178,7 +178,7 @@ if value is not None: Not like this: -```py +```python if number: print("number is not zero") @@ -194,7 +194,7 @@ to make sure that we don't treat values like that as None. So here's how we should check if something is None: -```py +```python if not value: ... # not good if we want to check if it's None if value == None: ... # better if value is None: ... # best diff --git a/editor-setup.md b/editor-setup.md index 3b54ea6..678b17b 100644 --- a/editor-setup.md +++ b/editor-setup.md @@ -103,7 +103,7 @@ so your editor also needs to run the programs in Python 3 or newer. If you are unsure which Python your editor runs, create a test file with the following contents: -```py +```python import sys print(sys.version) ``` @@ -117,7 +117,7 @@ If the version starts with 2, it's too old. are using Windows, run `python` on a terminal and enter these commands: - ```py + ```python >>> import sys >>> print(sys.executable) ``` diff --git a/make-html.py b/make-html.py index a255bb5..315177a 100755 --- a/make-html.py +++ b/make-html.py @@ -150,7 +150,7 @@ def link(self, link, title, text): def block_code(self, code, lang=None): """Highlight Python code blocks with Pygments if it's installed.""" - if lang == 'py' and pygments is not None: + if lang == 'python' and pygments is not None: # we can highlight it if code.startswith('>>> '): lexer = pygments.lexers.PythonConsoleLexer() From 9a09b1eea9285700f01279c4a35711f6a5504025 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 31 Jan 2017 21:04:53 +0200 Subject: [PATCH 203/329] oops --- basics/if.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basics/if.md b/basics/if.md index b0ae78d..d72c211 100644 --- a/basics/if.md +++ b/basics/if.md @@ -4,7 +4,7 @@ Now we know what True and False are. -```pythonthon +```python >>> 1 == 1 True >>> 1 == 2 From 1020d5d822326327e20355d2e33e8f003fce9fe8 Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 1 Feb 2017 14:12:48 +0200 Subject: [PATCH 204/329] truthiness isn't here yet --- basics/larger-program.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/basics/larger-program.md b/basics/larger-program.md index 4fd49a1..57f3b59 100644 --- a/basics/larger-program.md +++ b/basics/larger-program.md @@ -45,7 +45,7 @@ def read_questions(filename): with open(questionfile, 'r') as f: for line in f: line = line.strip() - if line: # ignore empty lines + if line != '': question, answer = line.split('=') answers[question.strip()] = answer.strip() return answers @@ -160,7 +160,7 @@ def read_questions(filename): with open(questionfile, 'r') as f: for line in f: line = line.strip() - if line: # ignore empty lines + if line != '': question, answer = line.split('=') answers[question.strip()] = answer.strip() return answers From 854f9c9697c8c0c047ccdc973f39ddd2ffcaa89f Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 1 Feb 2017 15:27:29 +0200 Subject: [PATCH 205/329] oops --- basics/larger-program.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/basics/larger-program.md b/basics/larger-program.md index 57f3b59..0206683 100644 --- a/basics/larger-program.md +++ b/basics/larger-program.md @@ -42,7 +42,7 @@ Let's start with the function that reads the question file: ```python def read_questions(filename): answers = {} - with open(questionfile, 'r') as f: + with open(filename, 'r') as f: for line in f: line = line.strip() if line != '': @@ -157,7 +157,7 @@ Now the whole program looks like this: ```python def read_questions(filename): answers = {} - with open(questionfile, 'r') as f: + with open(filename, 'r') as f: for line in f: line = line.strip() if line != '': From 548ec8090a8cd5018522f6462f15c3bafa39ca30 Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 1 Feb 2017 15:27:53 +0200 Subject: [PATCH 206/329] class example, little fixes --- advanced/functions.md | 42 ++++++++++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/advanced/functions.md b/advanced/functions.md index f0bac15..4918f90 100644 --- a/advanced/functions.md +++ b/advanced/functions.md @@ -44,8 +44,34 @@ username, password = login() That gets kind of messy if there are more than three values to return, but I have never needed to return more than three values. If you think you need to return four or more values you probably want to use [a -class](../basics/classes.md) instead and store the values like -`self.thing = stuff`. +class](../basics/classes.md) instead. + +For example, instead of this... + +```python +def get_new_info(username): + print("Changing user information of %s." % username) + username = input("New username: ") + password = input("New password: ") + fullname = input("Full name: ") + phonenumber = input("Phone number: ") + return username, password, fullname, phonenumber +``` + +...you could do this: + +```python +class User: + # you probably want to make many other user related things too, add + # them here + + def change_info(self): + print("Changing user information of %s." % self.username) + self.username = input("New username: ") + self.password = input("New password: ") + self.fullname = input("Full name: ") + self.phonenumber = input("Phone number: ") +``` ## \*args @@ -240,19 +266,15 @@ There's nothing wrong with returning a tuple from a function, and you are free to do that whenever you need it. We don't need `*args` and `**kwargs` for most of the functions we write. -Often functions just do something and arguments are a way to change how -they do that, and by not taking `*args` or `**kwargs` we can make sure -that we'll get an error if the function gets an invalid argument. - When we need to make something that takes whatever arguments it's given or call a function with arguments that come from a list we need `*args` and `**kwargs`, and there's no need to avoid them. I don't recommend using keyword-only arguments with functions like our -`print_box`. It's easy enough to guess what `print_box('hello', '-')` -does, and there's no need to deny that. It's much harder to guess what -`move('file1.txt', 'file2.txt', True, False)` does, so using -keyword-only arguments makes sense. +`print_box`. It's easy enough to guess or remember what +`print_box('hello', '-')` does, and there's no need to deny that. It's +much harder to remember what `move('file1.txt', 'file2.txt', True, False)` +does, so using keyword-only arguments makes sense. ## Summary From 2f429af1ad7e74d38ac6ca604342e0d3d33b326c Mon Sep 17 00:00:00 2001 From: Akuli Date: Wed, 1 Feb 2017 15:28:38 +0200 Subject: [PATCH 207/329] fixing oopsies and improving things --- advanced/iters.md | 46 +++++++++++++++++++++++--------------------- basics/exceptions.md | 28 +++++++++++++-------------- 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/advanced/iters.md b/advanced/iters.md index 4622cee..1c0796a 100644 --- a/advanced/iters.md +++ b/advanced/iters.md @@ -105,9 +105,8 @@ this: ## Iterating manually -Iterators have a magic method called `__next__`, and there's a built-in -function called `next()` for calling that. Calling `next()` on an -iterator gets the next value and moves it forward. Like this: +Iterators have a magic method called `__next__` that gets next value and +moves the iterator forward. ```python >>> e = enumerate('abc') @@ -146,9 +145,11 @@ StopIteration ``` There is usually not a good way to check if the iterator is at the end, -and it's best to just try to get a value from it and catch -StopIteration. That's actually what for looping over an iterator does. -For example, this code... +and it's best to just try to get a value from it and +[catch](../basics/exceptions.md#catching-exceptions) StopIteration. + +That's actually what for loops do. For example, +this code... ```python for pair in enumerate('hello'): @@ -170,7 +171,7 @@ while True: ``` The for loop version is much simpler to write and I wrote the while loop -version just to explain what the for loop does. +version just to show how the for loop works. ## Converting to iterators @@ -282,13 +283,15 @@ Let's try out our thingy function and see how it works. ``` What the heck? We don't return anything from the function, but it still -doesn't return None! Putting a `yield` anywhere in a function makes it -return **generators** instead of returning anything. **Generators are -iterators** with some more features that we don't need to care about. +doesn't return None! + +Putting a `yield` anywhere in a function makes it return **generators**. +**Generators are iterators** with some more features that we don't need +to care about. ![Generators.](../images/generators.png) -The generator we got works just like other iterators: +The generators that thingy gives us work just like other iterators: ```python >>> t = thingy() @@ -373,10 +376,10 @@ Here's a drawing of what's going on: ![A picture of printygen.](../images/freeze-melt.png) -The good news is that **usually we don't need to worry about when the -parts between the yields run**. Actually we don't even need to use -`iter()` or `next()` most of the time, but I think it's nice to know how -for loops work. +The good news is that **usually we don't need to worry about when +exactly the parts between the yields run**. Actually we don't even need +to use `iter()` and `next()` most of the time, but I think it's nice to +know how for loops work. `yield` is useful when we want the function to output so many things that making a list of them would be too slow or the list wouldn't fit in @@ -426,8 +429,8 @@ number of things: ``` [The itertools module](https://docs.python.org/3/library/itertools.html) -contains many useful functions like this. For example, -`itertools.count(1)` does the same thing as our `count()`. +contains many useful things like this. For example, `itertools.count(1)` +does the same thing as our `count()`. ## Summary @@ -435,11 +438,10 @@ contains many useful functions like this. For example, - An iterator is an iterable that remembers its position. - For loops create an iterator of the iterable and call its `__next__` method until it raises a StopIteration. -- Functions that contain yields return generators. Iterating the - generator runs the function bit by bit and gives us the values it - yields. -- The itertools module contains many useful functions that return - iterators. +- Functions that contain yields return generators. Calling `next()` on a + generator runs it to the next yield and gives us the value it yielded. +- [The itertools module](https://docs.python.org/3/library/itertools.html) + contains many useful iterator-related things. *** diff --git a/basics/exceptions.md b/basics/exceptions.md index 40ac5e0..a827d06 100644 --- a/basics/exceptions.md +++ b/basics/exceptions.md @@ -214,7 +214,7 @@ TypeError("unsupported operand type(s) for +: 'int' and 'str'",) ## When should we catch exceptions? -Never do things like this: +Do **not** do things like this: ```python try: @@ -225,9 +225,9 @@ except Exception: There's many things that can go wrong in the `try` block. If something goes wrong all we have is an oops message that doesn't tell us which -line caused the problem. This makes fixing problems a lot harder. If we -want to catch exceptions we need to be specific about what exactly we -want to catch and where instead of catching everything we can in the +line caused the problem. This makes fixing the program really annoying. +If we want to catch exceptions we need to be specific about what exactly +we want to catch and where instead of catching everything we can in the whole program. There's nothing wrong with doing things like this: @@ -311,16 +311,16 @@ Back in [the module chapter](modules.md) we learned to display error messages by printing to `sys.stderr` and then calling `sys.exit(1)`, so when should we use that and when should we raise an exception? -Exceptions are meant for **programmers**, so if we are writing a module -that other people will import we should probably use exceptions. For -other errors (for example, if the **user** of the program has done -something wrong) it's usually better to use `sys.stderr` and `sys.exit`. +Exceptions are meant for **programmers**, so if we are writing something +that other people will import we should use exceptions. If our program +is working like it should be and the **user** has done something wrong, +it's usually better to use `sys.stderr` and `sys.exit`. ## Exception hierarchy -Exceptions are organized like this. I made this tree diagram with -[this program](https://github.com/Akuli/classtree/) on Python 3.4. You -may have more or less exceptions than I have if your Python is newer or +Exceptions are organized like this. I made this tree with [this +program](https://github.com/Akuli/classtree/) on Python 3.4. You may +have more or less exceptions than I have if your Python is newer or older than mine, but they should be mostly similar. Exception @@ -387,9 +387,9 @@ get when [processing files](files.md), and catching Exception catches all of these errors. You don't need to remember this tree, running `help('builtins')` should display a larger tree that this is a part of. -There's also a few exceptions that are not in this tree like SystemExit -and KeyboardInterrupt, but most of the time we shouldn't catch them. -Catching Exception doesn't catch them either. +There are also a few exceptions that are not in this tree like +SystemExit and KeyboardInterrupt, but most of the time we shouldn't +catch them. Catching Exception doesn't catch them either. ## Summary From 73f887ce1f9c769c87601cef89a70e7cd1309f67 Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 2 Feb 2017 16:33:34 +0200 Subject: [PATCH 208/329] way better beginner chapter --- basics/what-is-programming.md | 64 +++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 18 deletions(-) diff --git a/basics/what-is-programming.md b/basics/what-is-programming.md index e119911..e54a49a 100644 --- a/basics/what-is-programming.md +++ b/basics/what-is-programming.md @@ -1,23 +1,49 @@ # What is programming? -**Feel free to [skip this part](#how-to-read-this-tutorial) if you already -know everything it's talking about.** - -As a computer user you know that computers don't have feelings. They don't -work any faster or slower depending on if we're angry at them or if we're -happy. Computers can perform millions of calculations per second, but they -require us to tell them exactly what to do. If they do something else than -we want them to do the problem is usually that they don't understand our -instructions the way we understand them. - -The only big difference between programming and what you're familiar with -already is that instead of clicking buttons to do things we write the -instructions using a **programming language**. Most programming languages -consist of English words, digits and some characters that have special -meanings. This tutorial uses a programming language called Python because it's -easy to learn and we can do many different things with it. For example, we -can create our own applications that have buttons that people can click -instead of just using applications written by others. +**Feel free to [skip this part](#how-to-read-this-tutorial) if you +already know everything it's talking about.** + +As a computer user you know that computers don't have feelings. They +don't work any faster or slower depending on if we're angry at them or +if we're happy. Computers can perform millions of calculations per +second, but they require us to tell them exactly what to do. If they do +something else than we want them to do the problem is usually that they +don't understand our instructions the way we understand them. + +The only big difference between programming and what you're familiar +with already is that instead of clicking buttons to do things we write +the instructions using a **programming language**. Most programming +languages consist of English words, digits and some characters that have +special meanings. + +Unlike people often think, **programming is not complicated**. Large +programs are always made of small, simple pieces, and those pieces are +written one by one. Programming languages are made to be used by humans, +so if there's an easy way to do something and a difficult way to do +something, you should use the easier way. + +## What do I need? + +First of all, **you don't need to be good at math**. Some programmers +are good at math, some are not. Programming and math are two separate +things and being good or bad at one doesn't mean you are automatically +good or bad at the other. + +You also don't need a powerful computer. I could do almost all of my +programming on a 12-year-old computer if I needed to. Fast computers are +nice to work with, but you don't need them. + +Programming takes time like all hobbies do. Some people learn it +quickly, and some people don't. I don't expect you to read this tutorial +in a couple hours and then master everything it's talking about. Take +your time with things, and remember that I learned to program slowly. + +## Getting started + +This tutorial uses a programming language called Python because it's +easy to learn and we can do many different things with it. For example, +we can create our own applications that have buttons that people can +click instead of just using applications written by others. Before we can get started with Python we need to know how to write some of Python's special characters with our keyboards. Unfortunately I don't know @@ -114,6 +140,8 @@ rest of this tutorial only if you don't understand the code. ## Summary - Now you should know what programming and programming languages are. +- You don't need to be good at math and you don't need a new computer. +- Complicated programs consist of simple pieces. - You don't need to remember how to type different characters. Just find the character on your keyboard and press the key, holding down shift or AltGr as needed. From c579abf88617db054310b60fe66a4d0e5881ca02 Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 2 Feb 2017 16:34:09 +0200 Subject: [PATCH 209/329] nobody calls it hyphen lol --- basics/what-is-programming.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basics/what-is-programming.md b/basics/what-is-programming.md index e54a49a..be7e129 100644 --- a/basics/what-is-programming.md +++ b/basics/what-is-programming.md @@ -73,7 +73,7 @@ their meanings later. | Character | Names | |-----------|---------------------------------------| | `+` | plus | -| `-` | minus, dash, hyphen | +| `-` | minus, dash | | `_` | underscore | | `*` | star, asterisk | | `/` | forwardslash (it's leaning forward) | From d0e9b054a3bf73c4de1a3b515ae74adaab81f886 Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 2 Feb 2017 18:06:03 +0200 Subject: [PATCH 210/329] less useless crap --- advanced/magicmethods.md | 58 ++++++++++++++-------------------------- 1 file changed, 20 insertions(+), 38 deletions(-) diff --git a/advanced/magicmethods.md b/advanced/magicmethods.md index 9d250d4..f974b5f 100644 --- a/advanced/magicmethods.md +++ b/advanced/magicmethods.md @@ -85,7 +85,7 @@ it's explained [here](https://docs.python.org/3/reference/datamodel.html#special-method-lookup) if you want to know more about it. -## str() and repr() +## String representations You have probably noticed that typing something to the interactive `>>>` prompt is not quite the same thing as printing it. For example, @@ -99,46 +99,32 @@ hello >>> ``` -Typing `'hello'` without a print displayed it with quotes, but printing -it displayed it without the quotes. Both of these can be customized with -magic methods. `print('hello')` does the same thing as -`print(str('hello'))`, and typing `'hello'` without a print does roughly -the same thing as `print(repr('hello'))`. +If you want to print something the way it's displayed on the `>>>` +prompt you can use the `repr()` function. Here "repr" is short for +"representation". ```python ->>> repr('hello') # a string that literally contains 'hello' -"'hello'" ->>> str('hello') # same as just 'hello' -'hello' ->>> print(repr('hello')) -'hello' ->>> print(str('hello')) -hello +>>> message = 'hello' +>>> print("the message is", repr(message)) +the message is 'hello' >>> ``` -The `repr()` values can also be easily used with string formatting. -Instead of this... - -```python -print("message is " + repr(message)) -``` - -...you can use one of these instead: +Combining `repr()` with [string +formatting](../basics/handy-stuff-strings.md#string-formatting) is also +easy. `%` formatting has a `%r` formatter, and `.format()` formatting +has a `!r` flag. ```python -print("message is %r" % (message,)) -print("message is {!r}".format(message)) +>>> print("the message is %r" % (message,)) +the message is 'hello' +>>> print("the message is {!r}".format(message)) +the message is 'hello' +>>> ``` -## Customizing str() and repr() values - -As usual, `repr(thing)` does the same thing as `thing.__repr__()` and -`str(thing)` does the same thing as `thing.__str__()`. Usually you don't -need to and you shouldn't define `__str__` yourself because `__str__` -defaults to `__repr__`. - -Here's an example that hopefully clarifies things: +The `__repr__` magic method can be used to customize this. For example, +we can do this: ```python >>> class Website: @@ -148,16 +134,12 @@ Here's an example that hopefully clarifies things: >>> w = Website() >>> w.__repr__() '' ->>> repr(w) -'' ->>> w.__str__() -'' >>> str(w) '' ->>> w - >>> print(w) +>>> w + >>> ``` From 7747fa10f642212649eb54131f3ef804834ba993 Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 2 Feb 2017 21:45:54 +0200 Subject: [PATCH 211/329] bolding different stuff --- basics/what-is-programming.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/basics/what-is-programming.md b/basics/what-is-programming.md index be7e129..c4901fe 100644 --- a/basics/what-is-programming.md +++ b/basics/what-is-programming.md @@ -16,11 +16,11 @@ the instructions using a **programming language**. Most programming languages consist of English words, digits and some characters that have special meanings. -Unlike people often think, **programming is not complicated**. Large -programs are always made of small, simple pieces, and those pieces are -written one by one. Programming languages are made to be used by humans, -so if there's an easy way to do something and a difficult way to do -something, you should use the easier way. +Unlike people often think, programming is not complicated. Large +programs are always made of **small, simple pieces**, and those pieces +are written one by one. Programming languages are made to be used by +humans, so if there's an easy way to do something and a difficult way to +do something, you should use the easier way. ## What do I need? From 258da69c44467db7491541bd525b2236516575e0 Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 2 Feb 2017 21:46:04 +0200 Subject: [PATCH 212/329] adding partially done stuff --- advanced/collections.md | 124 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 advanced/collections.md diff --git a/advanced/collections.md b/advanced/collections.md new file mode 100644 index 0000000..f5681b6 --- /dev/null +++ b/advanced/collections.md @@ -0,0 +1,124 @@ +# Handy classes in the standard library + +So far we have learned to use lists, tuples and dictionaries. They are +commonly used data types in Python. The standard library contains more +handy types that behave a lot like the datatypes that we know already. +You can always use the built-in types instead of the collections module, +but sometimes the collections module makes everything a lot easier. + +## Sets + +Let's say we have two lists of strings + +```python + +``` + +## Named tuples + +It can be tempting to make a class that just contains a bunch of data +and that's it. + +```python +class Website: + + def __init__(self, url, founding_year, free_to_use): + self.url = url + self.founding_year = founding_year + self.free_to_use = free_to_use + + +github = Website('https://github.com/', 2008, True) +``` + +You should avoid making classes like this. This class has only one +method, so it doesn't really need to be a class. We could just use a +tuple instead: + +```python +github = ('https://github.com/', 2008, True) +``` + +The problem with this is that if someone reading our code sees something +like `website[1] > 2010` it's not going to make much sense, like +`website.founding_year > 2010` would. + +In cases like this, `collections.namedtuple` is handy: + +```python +>>> Website = collections.namedtuple('Website', 'url founding_year free_to_use') +>>> github = Website('https://github.com/', 2008, True) +>>> github[1] +2008 +>>> for thing in github: +... print(thing) +... +https://github.com/ +2008 +True +>>> github.founding_year +2008 +>>> github +Website(url='https://github.com/', founding_year=2008, free_to_use=True) +>>> print(github) +Website(url='https://github.com/', founding_year=2008, free_to_use=True) +>>> +``` + +As you can see, our `github` behaves like a tuple, but +`github.founding_year` also works and `github` looks nice when we have a +look at it on the `>>>` prompt or we print it. + +## Deques + +To understand deques, we need to first learn about a list method I +haven't talked about earlier. It's called `pop` and it works like this: + +```python +>>> names = ['wub_wub', 'theelous3', 'Nitori', 'RubyPinch', 'go|dfish'] +>>> names.pop() +'go|dfish' +>>> names +['wub_wub', 'theelous3', 'Nitori', 'RubyPinch'] +>>> names.pop() +'RubyPinch' +>>> names +['wub_wub', 'theelous3', 'Nitori'] +>>> names.pop() +'Nitori' +>>> names +['wub_wub', 'theelous3'] +``` + +As you can see, the list shortens by one from the end when we pop from +it, and we also get the removed value back. So now we know that we can +add an item to the end of a list using `append`, and we can remove an +item from the end using `pop`. + +It's also possible to do this in the beginning of a list, but lists were +not designed to be used that way and it would be slow if our list would +be big. + +The `collections.deque` class makes appending and popping from both ends +easy and fast. It works just like lists, but it also has `appendleft` +and `popleft` methods. + +```python +>>> names = collections.deque(['theelous3', 'Nitori', 'RubyPinch']) +>>> names +deque(['theelous3', 'Nitori', 'RubyPinch']) +>>> names.appendleft('wub_wub') +>>> names.append('go|dfish') +>>> names +deque(['wub_wub', 'theelous3', 'Nitori', 'RubyPinch', 'go|dfish']) +>>> names.popleft() +'wub_wub' +>>> names.pop() +'go|dfish' +>>> names +deque(['theelous3', 'Nitori', 'RubyPinch']) +>>> +``` + +Deques are often used as queues. It means that items are always added to +one end and popped from the other end. From ebae2aacef37dc611e874fe57ff3825c40d9b4f3 Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 2 Feb 2017 21:51:15 +0200 Subject: [PATCH 213/329] add todo stuff --- advanced/collections.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/advanced/collections.md b/advanced/collections.md index f5681b6..231305d 100644 --- a/advanced/collections.md +++ b/advanced/collections.md @@ -122,3 +122,6 @@ deque(['theelous3', 'Nitori', 'RubyPinch']) Deques are often used as queues. It means that items are always added to one end and popped from the other end. + + +**TODO:** add some of ChainMap, Counter, OrderedDict, defaultdict, deque, sets From 1704de5df7df2748b8a945f1a9aefcc6602bbfd8 Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 2 Feb 2017 21:58:46 +0200 Subject: [PATCH 214/329] fixing things based on memoryruins's suggestions --- basics/what-is-programming.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/basics/what-is-programming.md b/basics/what-is-programming.md index c4901fe..056ee16 100644 --- a/basics/what-is-programming.md +++ b/basics/what-is-programming.md @@ -16,7 +16,7 @@ the instructions using a **programming language**. Most programming languages consist of English words, digits and some characters that have special meanings. -Unlike people often think, programming is not complicated. Large +Unlike people often think, programming is usually not complicated. Large programs are always made of **small, simple pieces**, and those pieces are written one by one. Programming languages are made to be used by humans, so if there's an easy way to do something and a difficult way to @@ -33,10 +33,10 @@ You also don't need a powerful computer. I could do almost all of my programming on a 12-year-old computer if I needed to. Fast computers are nice to work with, but you don't need them. -Programming takes time like all hobbies do. Some people learn it -quickly, and some people don't. I don't expect you to read this tutorial -in a couple hours and then master everything it's talking about. Take -your time with things, and remember that I learned to program slowly. +Programming takes time like all hobbies do. Some people learn it +quickly, and some people don't. I don't expect you to read this tutorial +in a couple hours and then master everything it's talking about. Take +your time with things, and remember that I learned to program slowly. ## Getting started @@ -105,10 +105,10 @@ should you do if you have a problem with the tutorial? 2. Read the code and the explanation for it again. 3. If there's something you haven't seen before in the tutorial and it's not explained, try to find it from the previous chapters. -4. If you still have trouble understanding the tutorial or any other problems - with the tutorial, please [tell me about it](../contact-me.md). I want to - improve this tutorial so other readers won't have the same problem as you - have. +4. If you can't find what you're looking for or you still have trouble + understanding the tutorial or any other problems with the tutorial, + please [tell me about it](../contact-me.md). I want to improve this + tutorial so other readers won't have the same problem as you have. 5. See [Getting help](../getting-help.md) if you can't contact me for some reason. From 7b99fe6b6f58fde7784a03e8e355565fe2fea447 Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 3 Feb 2017 10:22:09 +0200 Subject: [PATCH 215/329] updating the README --- README.md | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 086ba45..9d99032 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,22 @@ # Python programming tutorial -Python is a high-level programming language. That means that it's easy -to learn and work with, so it's a great choice for a first programming -language. - -No tutorial is good for everyone. This one is aimed at people with no -programming experience at all or very little programming experience. If -you have programmed a lot in the past using some other language you -probably want to read [the official -tutorial](https://docs.python.org/3/tutorial/) instead. +**If you like this tutorial, please [give it a +star](#how-can-i-thank-you-for-writing-and-sharing-this-tutorial).** + +This is a Python 3 programming tutorial for beginners. If you have never +programmed before click [here](basics/what-is-programming.md) to find +out what programming is like and get started. -This tutorial was written in Python 3, and you need Python 3 or newer to -be able to run the example code yourself. Python 2 is getting outdated -all the time, and more and more projects are moving to Python 3. There -are a few popular libraries that don't support Python 3 that well at the -time of writing this, but you don't need to worry about that just yet. -They will probably support Python 3 by the time you've learned the -basics and you may actually need them. +This tutorial is aimed at people with no programming experience at all +or very little programming experience. If you have programmed a lot in +the past using some other language you may want to read [the official +tutorial](https://docs.python.org/3/tutorial/) instead. -I have tested most of the code in this tutorial on Python 3.4, but -everything should also work on Python 3.3, 3.2 and all newer Pythons. +You can use Python 3.2 or any newer Python with this tutorial. Don't use +Python 2. If you write a Python 2 program now someone will need to port +it to Python 3 later, so it's best to just write Python 3 to begin with. +Python 3 code will work just fine in Python 4, so you don't need to +worry about that. ## List of contents From d3db2c319659fe918cfb0a4774e4ccdbe0880c53 Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 4 Feb 2017 19:02:00 +0200 Subject: [PATCH 216/329] spam in a nicer place --- README.md | 6 +++--- TODO.md | 3 +++ advanced/answers.md | 3 +++ advanced/functions.md | 3 +++ advanced/iters.md | 3 +++ advanced/magicmethods.md | 3 +++ basics/answers.md | 3 +++ basics/classes.md | 3 +++ basics/defining-functions.md | 3 +++ basics/dicts.md | 3 +++ basics/exceptions.md | 3 +++ basics/files.md | 3 +++ basics/getting-started.md | 3 +++ basics/handy-stuff-strings.md | 3 +++ basics/if.md | 3 +++ basics/installing-python.md | 3 +++ basics/larger-program.md | 3 +++ basics/lists-and-tuples.md | 3 +++ basics/loops.md | 3 +++ basics/modules.md | 3 +++ basics/the-way-of-the-program.md | 3 +++ basics/trey-hunner-zip-and-enumerate.md | 3 +++ basics/using-functions.md | 3 +++ basics/variables.md | 3 +++ basics/what-is-programming.md | 3 +++ basics/what-is-true.md | 3 +++ contact-me.md | 3 +++ editor-setup.md | 3 +++ getting-help.md | 3 +++ update-ends.py | 3 +++ 30 files changed, 90 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9d99032..8f53775 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,5 @@ # Python programming tutorial -**If you like this tutorial, please [give it a -star](#how-can-i-thank-you-for-writing-and-sharing-this-tutorial).** - This is a Python 3 programming tutorial for beginners. If you have never programmed before click [here](basics/what-is-programming.md) to find out what programming is like and get started. @@ -113,6 +110,9 @@ have helped me with it: *** +If you like this tutorial, please [give it a +star](README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). diff --git a/TODO.md b/TODO.md index 3a8bfce..5407df1 100644 --- a/TODO.md +++ b/TODO.md @@ -30,6 +30,9 @@ This tutorial is not complete. It still needs: *** +If you like this tutorial, please [give it a +star](README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). diff --git a/advanced/answers.md b/advanced/answers.md index acf2603..94160c5 100644 --- a/advanced/answers.md +++ b/advanced/answers.md @@ -1,6 +1,9 @@ *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/advanced/functions.md b/advanced/functions.md index 4918f90..e36ca07 100644 --- a/advanced/functions.md +++ b/advanced/functions.md @@ -290,6 +290,9 @@ does, so using keyword-only arguments makes sense. *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/advanced/iters.md b/advanced/iters.md index 1c0796a..46b0e21 100644 --- a/advanced/iters.md +++ b/advanced/iters.md @@ -445,6 +445,9 @@ does the same thing as our `count()`. *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/advanced/magicmethods.md b/advanced/magicmethods.md index f974b5f..fe00277 100644 --- a/advanced/magicmethods.md +++ b/advanced/magicmethods.md @@ -235,6 +235,9 @@ are not meant to be imported. *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/basics/answers.md b/basics/answers.md index d6b3c9d..d99f157 100644 --- a/basics/answers.md +++ b/basics/answers.md @@ -411,6 +411,9 @@ isn't exactly like mine but it works just fine it's ok, and you can *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/basics/classes.md b/basics/classes.md index 95dd15d..8e58f36 100644 --- a/basics/classes.md +++ b/basics/classes.md @@ -416,6 +416,9 @@ print("You entered " + word + ".") *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/basics/defining-functions.md b/basics/defining-functions.md index be37002..aa8fd7a 100644 --- a/basics/defining-functions.md +++ b/basics/defining-functions.md @@ -528,6 +528,9 @@ Answers for the first, second and third exercise are *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/basics/dicts.md b/basics/dicts.md index 2020913..4dbce70 100644 --- a/basics/dicts.md +++ b/basics/dicts.md @@ -299,6 +299,9 @@ Running the program might look like this: *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/basics/exceptions.md b/basics/exceptions.md index a827d06..5048432 100644 --- a/basics/exceptions.md +++ b/basics/exceptions.md @@ -458,6 +458,9 @@ except OSError: *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/basics/files.md b/basics/files.md index ab7bfed..69b85a5 100644 --- a/basics/files.md +++ b/basics/files.md @@ -365,6 +365,9 @@ else: *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/basics/getting-started.md b/basics/getting-started.md index 217cf07..21ebb44 100644 --- a/basics/getting-started.md +++ b/basics/getting-started.md @@ -213,6 +213,9 @@ Powers are calculated before `*` and `/`, but after `()`. *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/basics/handy-stuff-strings.md b/basics/handy-stuff-strings.md index 647d287..55c7ebb 100644 --- a/basics/handy-stuff-strings.md +++ b/basics/handy-stuff-strings.md @@ -429,6 +429,9 @@ The answers are [here](answers.md#handy-stuff-strings). *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/basics/if.md b/basics/if.md index d72c211..8544a71 100644 --- a/basics/if.md +++ b/basics/if.md @@ -329,6 +329,9 @@ The answers are [here](answers.md#if-else-and-elif). *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/basics/installing-python.md b/basics/installing-python.md index 5c9dbfd..4714e8b 100644 --- a/basics/installing-python.md +++ b/basics/installing-python.md @@ -109,6 +109,9 @@ Now you should have Python installed, and you should be able run it. *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/basics/larger-program.md b/basics/larger-program.md index 0206683..fb419ab 100644 --- a/basics/larger-program.md +++ b/basics/larger-program.md @@ -212,6 +212,9 @@ something else when it's imported. *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/basics/lists-and-tuples.md b/basics/lists-and-tuples.md index 01db934..51a5b0f 100644 --- a/basics/lists-and-tuples.md +++ b/basics/lists-and-tuples.md @@ -347,6 +347,9 @@ The answers are [here](answers.md#lists-and-tuples). *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/basics/loops.md b/basics/loops.md index 9ddcc16..3d4cde2 100644 --- a/basics/loops.md +++ b/basics/loops.md @@ -463,6 +463,9 @@ The answers are [here](answers.md#loops) *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/basics/modules.md b/basics/modules.md index 808ba28..a8f5115 100644 --- a/basics/modules.md +++ b/basics/modules.md @@ -487,6 +487,9 @@ section at the bottom. *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/basics/the-way-of-the-program.md b/basics/the-way-of-the-program.md index abf9251..b576323 100644 --- a/basics/the-way-of-the-program.md +++ b/basics/the-way-of-the-program.md @@ -38,6 +38,9 @@ learned everything. *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/basics/trey-hunner-zip-and-enumerate.md b/basics/trey-hunner-zip-and-enumerate.md index 692841a..91d9d2e 100644 --- a/basics/trey-hunner-zip-and-enumerate.md +++ b/basics/trey-hunner-zip-and-enumerate.md @@ -135,6 +135,9 @@ The answers are [here](answers.md). *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/basics/using-functions.md b/basics/using-functions.md index 1fabd07..dad1403 100644 --- a/basics/using-functions.md +++ b/basics/using-functions.md @@ -228,6 +228,9 @@ should work normally. *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/basics/variables.md b/basics/variables.md index 9e0dcab..150aa74 100644 --- a/basics/variables.md +++ b/basics/variables.md @@ -272,6 +272,9 @@ what you are doing. We'll learn more about it later. *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/basics/what-is-programming.md b/basics/what-is-programming.md index 056ee16..f04578f 100644 --- a/basics/what-is-programming.md +++ b/basics/what-is-programming.md @@ -154,6 +154,9 @@ rest of this tutorial only if you don't understand the code. *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/basics/what-is-true.md b/basics/what-is-true.md index 77f64d3..4160a65 100644 --- a/basics/what-is-true.md +++ b/basics/what-is-true.md @@ -213,6 +213,9 @@ if value is None: ... # best *** +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). diff --git a/contact-me.md b/contact-me.md index 0d742b1..9f08067 100644 --- a/contact-me.md +++ b/contact-me.md @@ -18,6 +18,9 @@ it, there are a few ways to contact me: *** +If you like this tutorial, please [give it a +star](README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). diff --git a/editor-setup.md b/editor-setup.md index 678b17b..956abfa 100644 --- a/editor-setup.md +++ b/editor-setup.md @@ -139,6 +139,9 @@ about it here, [tell me](contact-me.md). *** +If you like this tutorial, please [give it a +star](README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). diff --git a/getting-help.md b/getting-help.md index 97c9555..45e9204 100644 --- a/getting-help.md +++ b/getting-help.md @@ -53,6 +53,9 @@ help on IRC is much faster. *** +If you like this tutorial, please [give it a +star](README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE](LICENSE). diff --git a/update-ends.py b/update-ends.py index 4ef559c..c6ea416 100755 --- a/update-ends.py +++ b/update-ends.py @@ -35,6 +35,9 @@ END_TEMPLATE = """\ +If you like this tutorial, please [give it a +star]({readme}#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + You may use this tutorial freely at your own risk. See [LICENSE]({license}). From 3e9b9b15c2d2d0d7f6798c64e44a355fc7e816a5 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 6 Feb 2017 14:26:16 +0200 Subject: [PATCH 217/329] i dont remember who confused these things on irc --- basics/defining-functions.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/basics/defining-functions.md b/basics/defining-functions.md index be37002..9fdc16d 100644 --- a/basics/defining-functions.md +++ b/basics/defining-functions.md @@ -190,6 +190,9 @@ UnboundLocalError: local variable 'foo' referenced before assignment ## Input +**Note:** This section has nothing to do with the `input` function that +is used like `word = input("enter something: ")`. + So far our functions seem to be really isolated from the rest of our code, and it sucks! But they really are not as isolated as you might think they are. From fec37a7482031200d4d466b286b146bd7262511e Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 6 Feb 2017 14:27:24 +0200 Subject: [PATCH 218/329] u cant break things --- basics/what-is-programming.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/basics/what-is-programming.md b/basics/what-is-programming.md index 056ee16..9d847b5 100644 --- a/basics/what-is-programming.md +++ b/basics/what-is-programming.md @@ -125,8 +125,9 @@ all the time, and there's nothing wrong with it. If you want to know what some piece of code in this tutorial does just **try it and see**. It's practically impossible to break anything -accidentally with code in this tutorial, so you are free to try out all -the examples however you want and change them to do whatever you want. +accidentally with the things you will learn by reading this tutorial, +so you are free to try out all the examples however you want and change +them to do whatever you want. Even though a good tutorial is an important part about learning to program, you also need to learn to make your own things. Use what you From f261f04087d6bff6896e1e8a8acf8875cee7f45d Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 6 Feb 2017 18:04:02 +0200 Subject: [PATCH 219/329] working on the handy data types stuff more --- README.md | 7 +- advanced/collections.md | 127 ------------- advanced/datatypes.md | 387 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 391 insertions(+), 130 deletions(-) delete mode 100644 advanced/collections.md create mode 100644 advanced/datatypes.md diff --git a/README.md b/README.md index 9d99032..784000d 100644 --- a/README.md +++ b/README.md @@ -59,9 +59,10 @@ techniques just because you know how to use them.** Prefer the simple techniques from the Basics part instead when possible. Simple is better than complex. -1. [Advanced stuff with functions](advanced/functions.md) -2. [Magic methods](advanced/magicmethods.md) -3. [Iterables, iterators and generators](advanced/iters.md) +1. [Handy data types](advanced/datatypes.md) +2. [Advanced stuff with functions](advanced/functions.md) +3. [Magic methods](advanced/magicmethods.md) +4. [Iterables, iterators and generators](advanced/iters.md) ### Other things this tutorial comes with diff --git a/advanced/collections.md b/advanced/collections.md deleted file mode 100644 index 231305d..0000000 --- a/advanced/collections.md +++ /dev/null @@ -1,127 +0,0 @@ -# Handy classes in the standard library - -So far we have learned to use lists, tuples and dictionaries. They are -commonly used data types in Python. The standard library contains more -handy types that behave a lot like the datatypes that we know already. -You can always use the built-in types instead of the collections module, -but sometimes the collections module makes everything a lot easier. - -## Sets - -Let's say we have two lists of strings - -```python - -``` - -## Named tuples - -It can be tempting to make a class that just contains a bunch of data -and that's it. - -```python -class Website: - - def __init__(self, url, founding_year, free_to_use): - self.url = url - self.founding_year = founding_year - self.free_to_use = free_to_use - - -github = Website('https://github.com/', 2008, True) -``` - -You should avoid making classes like this. This class has only one -method, so it doesn't really need to be a class. We could just use a -tuple instead: - -```python -github = ('https://github.com/', 2008, True) -``` - -The problem with this is that if someone reading our code sees something -like `website[1] > 2010` it's not going to make much sense, like -`website.founding_year > 2010` would. - -In cases like this, `collections.namedtuple` is handy: - -```python ->>> Website = collections.namedtuple('Website', 'url founding_year free_to_use') ->>> github = Website('https://github.com/', 2008, True) ->>> github[1] -2008 ->>> for thing in github: -... print(thing) -... -https://github.com/ -2008 -True ->>> github.founding_year -2008 ->>> github -Website(url='https://github.com/', founding_year=2008, free_to_use=True) ->>> print(github) -Website(url='https://github.com/', founding_year=2008, free_to_use=True) ->>> -``` - -As you can see, our `github` behaves like a tuple, but -`github.founding_year` also works and `github` looks nice when we have a -look at it on the `>>>` prompt or we print it. - -## Deques - -To understand deques, we need to first learn about a list method I -haven't talked about earlier. It's called `pop` and it works like this: - -```python ->>> names = ['wub_wub', 'theelous3', 'Nitori', 'RubyPinch', 'go|dfish'] ->>> names.pop() -'go|dfish' ->>> names -['wub_wub', 'theelous3', 'Nitori', 'RubyPinch'] ->>> names.pop() -'RubyPinch' ->>> names -['wub_wub', 'theelous3', 'Nitori'] ->>> names.pop() -'Nitori' ->>> names -['wub_wub', 'theelous3'] -``` - -As you can see, the list shortens by one from the end when we pop from -it, and we also get the removed value back. So now we know that we can -add an item to the end of a list using `append`, and we can remove an -item from the end using `pop`. - -It's also possible to do this in the beginning of a list, but lists were -not designed to be used that way and it would be slow if our list would -be big. - -The `collections.deque` class makes appending and popping from both ends -easy and fast. It works just like lists, but it also has `appendleft` -and `popleft` methods. - -```python ->>> names = collections.deque(['theelous3', 'Nitori', 'RubyPinch']) ->>> names -deque(['theelous3', 'Nitori', 'RubyPinch']) ->>> names.appendleft('wub_wub') ->>> names.append('go|dfish') ->>> names -deque(['wub_wub', 'theelous3', 'Nitori', 'RubyPinch', 'go|dfish']) ->>> names.popleft() -'wub_wub' ->>> names.pop() -'go|dfish' ->>> names -deque(['theelous3', 'Nitori', 'RubyPinch']) ->>> -``` - -Deques are often used as queues. It means that items are always added to -one end and popped from the other end. - - -**TODO:** add some of ChainMap, Counter, OrderedDict, defaultdict, deque, sets diff --git a/advanced/datatypes.md b/advanced/datatypes.md new file mode 100644 index 0000000..a7f83da --- /dev/null +++ b/advanced/datatypes.md @@ -0,0 +1,387 @@ +# Handy data types in the standard library + +[](this doesn't explain how dict.setdefault and collections.defaultdict + work because they're not as simple as the things that are here and i + don't actually use them that much) + +Now we know how to ues lists, tuples and dictionaries. They are commonly +used data types in Python, and there's nothing wrong with them. In this +chapter we'll learn more data types that make some things easier. You +can always do everything with lists and dictionaries, but these data +types can do a lot of the work for you. + +> If it looks like a duck and quacks like a duck, it must be a duck. + +Many things in this tutorial are not really something but they behave +like something. For example, we'll learn about many things that behave +like dictionaries. They are not dictionaries, but we can use them just +like if they were dictionaries. This programming style is known as +**duck-typing**. + +## Sets + +Let's say we have a program that keeps track of peoples' names. We can +store the names in [a list](../basics/lists.md), and adding a new name +is easy as appending to that list. Lists remember their order and it's +possible to add the same thing multiple times. + +```python +>>> names = ['wub_wub', 'theelous3', 'RubyPinch', 'go|dfish', 'Nitori'] +>>> names.append('Akuli') +>>> names.append('Akuli') +>>> names +['wub_wub', 'theelous3', 'RubyPinch', 'go|dfish', 'Nitori', 'Akuli', 'Akuli'] +>>> +``` + +This is usually what we need, but sometimes it's not. Sometimes we just +want to store a bunch of things. We don't need to have the same thing +twice and we don't care about the order. + +This is when sets come in. They are like lists without order or +duplicates, or keys of [dictionaries](../basics/dicts.md) without the +values. We can create a set just like a dictionary, but without `:`. + +```python +>>> names = {'wub_wub', 'theelous3', 'RubyPinch', 'go|dfish', 'Nitori'} +>>> names +{'RubyPinch', 'theelous3', 'go|dfish', 'wub_wub', 'Nitori'} +>>> type(names) + +>>> 'wub_wub' in names +True +>>> +``` + +We can also convert anything [iterable](../basics/loops.md#summary) to a +set [by calling the +class](../basics/classes.md#why-should-I-use-custom-classes-in-my-projects). + +```python +>>> set('hello') +{'o', 'e', 'h', 'l'} +>>> type(set('hello')) + +>>> +``` + +When we did `set('hello')` we lost one `h` and the set ended up in a +different order because sets don't contain duplicates or keep track of +their order. + +Note that `{}` is a dictionary because dictionaries are used more often +than sets, so we need `set()` if we want to create an empty set. + +```python +>>> type({'a', 'b'}) + +>>> type({'a'}) + +>>> type({}) + +>>> type(set()) # set() is an empty set + +>>> +``` + +Sets have a `remove` method just like lists have, but they have an `add` +method instead of `append`. + +```python +>>> names = {'theelous3', 'wub_wub'} +>>> names.add('Akuli') +>>> names +{'wub_wub', 'Akuli', 'theelous3'} +>>> names.remove('theelous3') +>>> names +{'wub_wub', 'Akuli'} +>>> +``` + +That's the boring part. Now let's have a look at some really handy +things we can do with sets: + +```python +>>> a = {'RubyPinch', 'theelous3', 'go|dfish'} +>>> b = {'theelous3', 'Nitori'} +>>> a & b # names in a and b +{'theelous3'} +>>> a | b # names in a, b or both +{'Nitori', 'theelous3', 'go|dfish', 'RubyPinch'} +>>> a ^ b # names in a or b, but not both +{'RubyPinch', 'Nitori', 'go|dfish'} +>>> +``` + +## Named tuples + +It can be tempting to make a class that just contains a bunch of data +and that's it. + +```python +class Website: + + def __init__(self, url, founding_year, free_to_use): + self.url = url + self.founding_year = founding_year + self.free_to_use = free_to_use + + +github = Website('https://github.com/', 2008, True) +``` + +You should avoid making classes like this. This class has only one +method, so it doesn't really need to be a class. We could just use a +tuple instead: + +```python +github = ('https://github.com/', 2008, True) +``` + +The problem with this is that if someone reading our code sees something +like `website[1] > 2010` it doesn't make much sense, like +`website.founding_year > 2010` would. + +In cases like this, `collections.namedtuple` is handy: + +```python +>>> Website = collections.namedtuple('Website', 'url founding_year free_to_use') +>>> github = Website('https://github.com/', 2008, True) +>>> github[1] +2008 +>>> for thing in github: +... print(thing) +... +https://github.com/ +2008 +True +>>> github.founding_year +2008 +>>> github +Website(url='https://github.com/', founding_year=2008, free_to_use=True) +>>> +``` + +As you can see, our `github` behaves like a tuple, but things like +`github.founding_year` also work and `github` looks nice when we have a +look at it on the `>>>` prompt. + +## Deques + +To understand deques, we need to first learn about a list method I +haven't talked about earlier. It's called `pop` and it works like this: + +```python +>>> names = ['wub_wub', 'theelous3', 'Nitori', 'RubyPinch', 'go|dfish'] +>>> names +['wub_wub', 'theelous3', 'Nitori', 'RubyPinch', 'go|dfish'] +>>> names.pop() +'go|dfish' +>>> names +['wub_wub', 'theelous3', 'Nitori', 'RubyPinch'] +>>> names.pop() +'RubyPinch' +>>> names +['wub_wub', 'theelous3', 'Nitori'] +>>> +``` + +The list shortens from the end by one when we pop from it, and we also +get the removed item back. So we can add an item to the end of a list +using `append`, and we can remove an item from the end using `pop`. + +It's also possible to do these things in the beginning of a list, but +lists were not designed to be used that way and it would be slow if our +list would be big. The `collections.deque` class makes appending and +popping from both ends easy and fast. It works just like lists, but it +also has `appendleft` and `popleft` methods. + +```python +>>> names = collections.deque(['theelous3', 'Nitori', 'RubyPinch']) +>>> names +deque(['theelous3', 'Nitori', 'RubyPinch']) +>>> names.appendleft('wub_wub') +>>> names.append('go|dfish') +>>> names +deque(['wub_wub', 'theelous3', 'Nitori', 'RubyPinch', 'go|dfish']) +>>> names.popleft() +'wub_wub' +>>> names.pop() +'go|dfish' +>>> names +deque(['theelous3', 'Nitori', 'RubyPinch']) +>>> +``` + +The deque behaves a lot like lists do, and we can do `list(names)` if we +need a list instead of a deque for some reason. + +Deques are often used as queues. It means that items are always added to +one end and popped from the other end. + +## Counting things + +Back in [the dictionary chapter](../basics/dicts.md#examples) we learned +to count the number of words in a sentence like this: + +```python +sentence = input("Enter a sentence: ") +counts = {} +for word in sentence.split(): + if word in counts: + counts[word] += 1 + else: + counts[word] = 1 +``` + +This code works just fine, but there are easier ways to do this. For +example, we could use the `get` method. It works so that +`the_dict.get('hi', 'hello')` tries to give us `the_dict['hi']` but +gives us `'hello'` instead if `'hi'` is not in the dictionary. + +```python +>>> the_dict = {'hi': 'this is working'} +>>> the_dict.get('hi', 'lol its not there') +'this is working' +>>> the_dict.get('hello', 'lol its not there') +'lol its not there' +>>> +``` + +So we could write code like this instead: + +```python +sentence = input("Enter a sentence: ") +counts = {} +for word in sentence.split(): + counts[word] = counts.get(word, 0) + 1 +``` + +Counting things like this is actually so common that there's [a +class](../basics/classes.md) just for that. It's called +`collections.Counter` and it works like this: + +```python +>>> import collections +>>> words = ['hello', 'there', 'this', 'test', 'is', 'a', 'hello', 'test'] +>>> counts = collections.Counter(words) +>>> counts +Counter({'test': 2, 'hello': 2, 'is': 1, 'this': 1, 'there': 1, 'a': 1}) +>>> +``` + +Now `counts` is a Counter object. It behaves a lot like a dictionary, +and everything that works with a dictionary should also work with a +counter. We can also convert the counter to a dictionary by doing +`dict(the_counter)` if something doesn't work with a counter. + +```python +>>> for word, count in counts.items(): +... print(word, count) +... +test 2 +is 1 +this 1 +there 1 +a 1 +hello 2 +>>> +``` + +## Combining dictionaries + +We can add together strings, lists, tuples and sets easily. + +```python +>>> "hello" + "world" +'helloworld' +>>> [1, 2, 3] + [4, 5] +[1, 2, 3, 4, 5] +>>> (1, 2, 3) + (4, 5) +(1, 2, 3, 4, 5) +>>> {1, 2, 3} | {4, 5} +{1, 2, 3, 4, 5} +>>> +``` + +But how about dictionaries? They can't be added together with `+`. + +```python +>>> {'a': 1, 'b': 2} + {'c': 3} +Traceback (most recent call last): + File "", line 1, in +TypeError: unsupported operand type(s) for +: 'dict' and 'dict' +>>> +``` + +Dictionaries have an `update` method that adds everything from another +dictionary into it. So we can merge dictionaries like this: + +```python +>>> merged = {} +>>> merged.update({'a': 1, 'b': 2}) +>>> merged.update({'c': 3}) +>>> merged +{'c': 3, 'b': 2, 'a': 1} +>>> +``` + +Or we can [write a function](../basics/defining-functions.md) like this: + +```python +>>> def merge_dicts(dictlist): +... result = {} +... for dictionary in dictlist: +... result.update(dictionary) +... return result +... +>>> merge_dicts([{'a': 1, 'b': 2}, {'c': 3}]) +{'c': 3, 'b': 2, 'a': 1} +>>> +``` + +Kind of like counting things, merging dictionaries is also a commonly +needed thing and there's a class just for it in the `collections` +module. It's called ChainMap: + +```python +>>> import collections +>>> merged = collections.ChainMap({'a': 1, 'b': 2}, {'c': 3}) +>>> merged +ChainMap({'b': 2, 'a': 1}, {'c': 3}) +>>> +``` + +Our `merged` is kind of like the Counter object we created earlier. It's +not a dictionary, but it behaves like a dictionary. + +```python +>>> for key, value in merged.items(): +... print(key, value) +... +c 3 +b 2 +a 1 +>>> dict(merged) +{'c': 3, 'b': 2, 'a': 1} +>>> +``` + +Starting with Python 3.5 it's possible to merge dictionaries like this. +**Don't do this unless you are sure that no-one will need to run your +code on Python versions older than 3.5.** + +```python +>>> first = {'a': 1, 'b': 2} +>>> second = {'c': 3, 'd': 4} +>>> {**first, **second} +{'d': 4, 'c': 3, 'a': 1, 'b': 2} +>>> +``` + +## Summary + +- Duck typing means requiring some behavior instead of some type. For + example, instead of making a function that takes a list we could make + a function that takes anything [iterable](../basics/loops.md#summary). +- Sets and the collections module are handy. Use them. From 67c75e8c6ad39d94394e4054f9ccb6441adbb935 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 6 Feb 2017 18:05:21 +0200 Subject: [PATCH 220/329] running update-ends.py and strip.py --- advanced/datatypes.md | 157 ++++++++++++++++++---------------- advanced/functions.md | 2 +- basics/classes.md | 2 +- basics/what-is-programming.md | 14 +-- 4 files changed, 93 insertions(+), 82 deletions(-) diff --git a/advanced/datatypes.md b/advanced/datatypes.md index a7f83da..42ac28b 100644 --- a/advanced/datatypes.md +++ b/advanced/datatypes.md @@ -1,28 +1,28 @@ # Handy data types in the standard library -[](this doesn't explain how dict.setdefault and collections.defaultdict - work because they're not as simple as the things that are here and i +[](this doesn't explain how dict.setdefault and collections.defaultdict + work because they're not as simple as the things that are here and i don't actually use them that much) -Now we know how to ues lists, tuples and dictionaries. They are commonly -used data types in Python, and there's nothing wrong with them. In this -chapter we'll learn more data types that make some things easier. You -can always do everything with lists and dictionaries, but these data +Now we know how to ues lists, tuples and dictionaries. They are commonly +used data types in Python, and there's nothing wrong with them. In this +chapter we'll learn more data types that make some things easier. You +can always do everything with lists and dictionaries, but these data types can do a lot of the work for you. > If it looks like a duck and quacks like a duck, it must be a duck. -Many things in this tutorial are not really something but they behave -like something. For example, we'll learn about many things that behave -like dictionaries. They are not dictionaries, but we can use them just -like if they were dictionaries. This programming style is known as +Many things in this tutorial are not really something but they behave +like something. For example, we'll learn about many things that behave +like dictionaries. They are not dictionaries, but we can use them just +like if they were dictionaries. This programming style is known as **duck-typing**. ## Sets -Let's say we have a program that keeps track of peoples' names. We can -store the names in [a list](../basics/lists.md), and adding a new name -is easy as appending to that list. Lists remember their order and it's +Let's say we have a program that keeps track of peoples' names. We can +store the names in [a list](../basics/lists.md), and adding a new name +is easy as appending to that list. Lists remember their order and it's possible to add the same thing multiple times. ```python @@ -31,15 +31,15 @@ possible to add the same thing multiple times. >>> names.append('Akuli') >>> names ['wub_wub', 'theelous3', 'RubyPinch', 'go|dfish', 'Nitori', 'Akuli', 'Akuli'] ->>> +>>> ``` -This is usually what we need, but sometimes it's not. Sometimes we just -want to store a bunch of things. We don't need to have the same thing +This is usually what we need, but sometimes it's not. Sometimes we just +want to store a bunch of things. We don't need to have the same thing twice and we don't care about the order. -This is when sets come in. They are like lists without order or -duplicates, or keys of [dictionaries](../basics/dicts.md) without the +This is when sets come in. They are like lists without order or +duplicates, or keys of [dictionaries](../basics/dicts.md) without the values. We can create a set just like a dictionary, but without `:`. ```python @@ -53,23 +53,23 @@ True >>> ``` -We can also convert anything [iterable](../basics/loops.md#summary) to a -set [by calling the -class](../basics/classes.md#why-should-I-use-custom-classes-in-my-projects). +We can also convert anything [iterable](../basics/loops.md#summary) to a +set [by calling the +class](../basics/classes.md#why-should-I-use-custom-classes-in-my-projects). ```python >>> set('hello') {'o', 'e', 'h', 'l'} >>> type(set('hello')) ->>> +>>> ``` -When we did `set('hello')` we lost one `h` and the set ended up in a -different order because sets don't contain duplicates or keep track of +When we did `set('hello')` we lost one `h` and the set ended up in a +different order because sets don't contain duplicates or keep track of their order. -Note that `{}` is a dictionary because dictionaries are used more often +Note that `{}` is a dictionary because dictionaries are used more often than sets, so we need `set()` if we want to create an empty set. ```python @@ -84,7 +84,7 @@ than sets, so we need `set()` if we want to create an empty set. >>> ``` -Sets have a `remove` method just like lists have, but they have an `add` +Sets have a `remove` method just like lists have, but they have an `add` method instead of `append`. ```python @@ -98,7 +98,7 @@ method instead of `append`. >>> ``` -That's the boring part. Now let's have a look at some really handy +That's the boring part. Now let's have a look at some really handy things we can do with sets: ```python @@ -106,16 +106,16 @@ things we can do with sets: >>> b = {'theelous3', 'Nitori'} >>> a & b # names in a and b {'theelous3'} ->>> a | b # names in a, b or both +>>> a | b # names in a, b or both {'Nitori', 'theelous3', 'go|dfish', 'RubyPinch'} >>> a ^ b # names in a or b, but not both {'RubyPinch', 'Nitori', 'go|dfish'} ->>> +>>> ``` ## Named tuples -It can be tempting to make a class that just contains a bunch of data +It can be tempting to make a class that just contains a bunch of data and that's it. ```python @@ -130,16 +130,16 @@ class Website: github = Website('https://github.com/', 2008, True) ``` -You should avoid making classes like this. This class has only one -method, so it doesn't really need to be a class. We could just use a +You should avoid making classes like this. This class has only one +method, so it doesn't really need to be a class. We could just use a tuple instead: ```python github = ('https://github.com/', 2008, True) ``` -The problem with this is that if someone reading our code sees something -like `website[1] > 2010` it doesn't make much sense, like +The problem with this is that if someone reading our code sees something +like `website[1] > 2010` it doesn't make much sense, like `website.founding_year > 2010` would. In cases like this, `collections.namedtuple` is handy: @@ -151,7 +151,7 @@ In cases like this, `collections.namedtuple` is handy: 2008 >>> for thing in github: ... print(thing) -... +... https://github.com/ 2008 True @@ -162,13 +162,13 @@ Website(url='https://github.com/', founding_year=2008, free_to_use=True) >>> ``` -As you can see, our `github` behaves like a tuple, but things like -`github.founding_year` also work and `github` looks nice when we have a +As you can see, our `github` behaves like a tuple, but things like +`github.founding_year` also work and `github` looks nice when we have a look at it on the `>>>` prompt. ## Deques -To understand deques, we need to first learn about a list method I +To understand deques, we need to first learn about a list method I haven't talked about earlier. It's called `pop` and it works like this: ```python @@ -186,14 +186,14 @@ haven't talked about earlier. It's called `pop` and it works like this: >>> ``` -The list shortens from the end by one when we pop from it, and we also -get the removed item back. So we can add an item to the end of a list +The list shortens from the end by one when we pop from it, and we also +get the removed item back. So we can add an item to the end of a list using `append`, and we can remove an item from the end using `pop`. -It's also possible to do these things in the beginning of a list, but -lists were not designed to be used that way and it would be slow if our -list would be big. The `collections.deque` class makes appending and -popping from both ends easy and fast. It works just like lists, but it +It's also possible to do these things in the beginning of a list, but +lists were not designed to be used that way and it would be slow if our +list would be big. The `collections.deque` class makes appending and +popping from both ends easy and fast. It works just like lists, but it also has `appendleft` and `popleft` methods. ```python @@ -210,18 +210,18 @@ deque(['wub_wub', 'theelous3', 'Nitori', 'RubyPinch', 'go|dfish']) 'go|dfish' >>> names deque(['theelous3', 'Nitori', 'RubyPinch']) ->>> +>>> ``` -The deque behaves a lot like lists do, and we can do `list(names)` if we +The deque behaves a lot like lists do, and we can do `list(names)` if we need a list instead of a deque for some reason. -Deques are often used as queues. It means that items are always added to +Deques are often used as queues. It means that items are always added to one end and popped from the other end. ## Counting things -Back in [the dictionary chapter](../basics/dicts.md#examples) we learned +Back in [the dictionary chapter](../basics/dicts.md#examples) we learned to count the number of words in a sentence like this: ```python @@ -234,9 +234,9 @@ for word in sentence.split(): counts[word] = 1 ``` -This code works just fine, but there are easier ways to do this. For -example, we could use the `get` method. It works so that -`the_dict.get('hi', 'hello')` tries to give us `the_dict['hi']` but +This code works just fine, but there are easier ways to do this. For +example, we could use the `get` method. It works so that +`the_dict.get('hi', 'hello')` tries to give us `the_dict['hi']` but gives us `'hello'` instead if `'hi'` is not in the dictionary. ```python @@ -257,8 +257,8 @@ for word in sentence.split(): counts[word] = counts.get(word, 0) + 1 ``` -Counting things like this is actually so common that there's [a -class](../basics/classes.md) just for that. It's called +Counting things like this is actually so common that there's [a +class](../basics/classes.md) just for that. It's called `collections.Counter` and it works like this: ```python @@ -267,25 +267,25 @@ class](../basics/classes.md) just for that. It's called >>> counts = collections.Counter(words) >>> counts Counter({'test': 2, 'hello': 2, 'is': 1, 'this': 1, 'there': 1, 'a': 1}) ->>> +>>> ``` -Now `counts` is a Counter object. It behaves a lot like a dictionary, -and everything that works with a dictionary should also work with a -counter. We can also convert the counter to a dictionary by doing +Now `counts` is a Counter object. It behaves a lot like a dictionary, +and everything that works with a dictionary should also work with a +counter. We can also convert the counter to a dictionary by doing `dict(the_counter)` if something doesn't work with a counter. ```python >>> for word, count in counts.items(): ... print(word, count) -... +... test 2 is 1 this 1 there 1 a 1 hello 2 ->>> +>>> ``` ## Combining dictionaries @@ -301,7 +301,7 @@ We can add together strings, lists, tuples and sets easily. (1, 2, 3, 4, 5) >>> {1, 2, 3} | {4, 5} {1, 2, 3, 4, 5} ->>> +>>> ``` But how about dictionaries? They can't be added together with `+`. @@ -311,10 +311,10 @@ But how about dictionaries? They can't be added together with `+`. Traceback (most recent call last): File "", line 1, in TypeError: unsupported operand type(s) for +: 'dict' and 'dict' ->>> +>>> ``` -Dictionaries have an `update` method that adds everything from another +Dictionaries have an `update` method that adds everything from another dictionary into it. So we can merge dictionaries like this: ```python @@ -323,7 +323,7 @@ dictionary into it. So we can merge dictionaries like this: >>> merged.update({'c': 3}) >>> merged {'c': 3, 'b': 2, 'a': 1} ->>> +>>> ``` Or we can [write a function](../basics/defining-functions.md) like this: @@ -340,8 +340,8 @@ Or we can [write a function](../basics/defining-functions.md) like this: >>> ``` -Kind of like counting things, merging dictionaries is also a commonly -needed thing and there's a class just for it in the `collections` +Kind of like counting things, merging dictionaries is also a commonly +needed thing and there's a class just for it in the `collections` module. It's called ChainMap: ```python @@ -352,23 +352,23 @@ ChainMap({'b': 2, 'a': 1}, {'c': 3}) >>> ``` -Our `merged` is kind of like the Counter object we created earlier. It's +Our `merged` is kind of like the Counter object we created earlier. It's not a dictionary, but it behaves like a dictionary. ```python >>> for key, value in merged.items(): ... print(key, value) -... +... c 3 b 2 a 1 >>> dict(merged) {'c': 3, 'b': 2, 'a': 1} ->>> +>>> ``` -Starting with Python 3.5 it's possible to merge dictionaries like this. -**Don't do this unless you are sure that no-one will need to run your +Starting with Python 3.5 it's possible to merge dictionaries like this. +**Don't do this unless you are sure that no-one will need to run your code on Python versions older than 3.5.** ```python @@ -376,12 +376,23 @@ code on Python versions older than 3.5.** >>> second = {'c': 3, 'd': 4} >>> {**first, **second} {'d': 4, 'c': 3, 'a': 1, 'b': 2} ->>> +>>> ``` ## Summary -- Duck typing means requiring some behavior instead of some type. For - example, instead of making a function that takes a list we could make +- Duck typing means requiring some behavior instead of some type. For + example, instead of making a function that takes a list we could make a function that takes anything [iterable](../basics/loops.md#summary). - Sets and the collections module are handy. Use them. + +*** + +If you like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + +You may use this tutorial freely at your own risk. See +[LICENSE](../LICENSE). + +[Previous](../basics/classes.md) | [Next](functions.md) | +[List of contents](../README.md#advanced) diff --git a/advanced/functions.md b/advanced/functions.md index e36ca07..fb2f849 100644 --- a/advanced/functions.md +++ b/advanced/functions.md @@ -296,5 +296,5 @@ star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). -[Previous](../basics/classes.md) | [Next](magicmethods.md) | +[Previous](datatypes.md) | [Next](magicmethods.md) | [List of contents](../README.md#advanced) diff --git a/basics/classes.md b/basics/classes.md index 8e58f36..f568af4 100644 --- a/basics/classes.md +++ b/basics/classes.md @@ -422,5 +422,5 @@ star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). -[Previous](modules.md) | [Next](../advanced/functions.md) | +[Previous](modules.md) | [Next](../advanced/datatypes.md) | [List of contents](../README.md#basics) diff --git a/basics/what-is-programming.md b/basics/what-is-programming.md index 9322745..a6b1fad 100644 --- a/basics/what-is-programming.md +++ b/basics/what-is-programming.md @@ -33,10 +33,10 @@ You also don't need a powerful computer. I could do almost all of my programming on a 12-year-old computer if I needed to. Fast computers are nice to work with, but you don't need them. -Programming takes time like all hobbies do. Some people learn it -quickly, and some people don't. I don't expect you to read this tutorial -in a couple hours and then master everything it's talking about. Take -your time with things, and remember that I learned to program slowly. +Programming takes time like all hobbies do. Some people learn it +quickly, and some people don't. I don't expect you to read this tutorial +in a couple hours and then master everything it's talking about. Take +your time with things, and remember that I learned to program slowly. ## Getting started @@ -105,9 +105,9 @@ should you do if you have a problem with the tutorial? 2. Read the code and the explanation for it again. 3. If there's something you haven't seen before in the tutorial and it's not explained, try to find it from the previous chapters. -4. If you can't find what you're looking for or you still have trouble - understanding the tutorial or any other problems with the tutorial, - please [tell me about it](../contact-me.md). I want to improve this +4. If you can't find what you're looking for or you still have trouble + understanding the tutorial or any other problems with the tutorial, + please [tell me about it](../contact-me.md). I want to improve this tutorial so other readers won't have the same problem as you have. 5. See [Getting help](../getting-help.md) if you can't contact me for some reason. From 0939225a29fd719c78a3c8d09b48a3cda6559a64 Mon Sep 17 00:00:00 2001 From: Akuli Date: Mon, 6 Feb 2017 20:15:23 +0200 Subject: [PATCH 221/329] better end --- README.md | 10 ++++++---- TODO.md | 10 ++++++---- advanced/answers.md | 4 +++- advanced/datatypes.md | 8 ++++++-- advanced/functions.md | 4 +++- advanced/iters.md | 4 +++- advanced/magicmethods.md | 4 +++- basics/answers.md | 4 +++- basics/classes.md | 4 +++- basics/defining-functions.md | 4 +++- basics/dicts.md | 4 +++- basics/exceptions.md | 4 +++- basics/files.md | 4 +++- basics/getting-started.md | 4 +++- basics/handy-stuff-strings.md | 4 +++- basics/if.md | 4 +++- basics/installing-python.md | 4 +++- basics/larger-program.md | 4 +++- basics/lists-and-tuples.md | 4 +++- basics/loops.md | 4 +++- basics/modules.md | 4 +++- basics/the-way-of-the-program.md | 4 +++- basics/trey-hunner-zip-and-enumerate.md | 4 +++- basics/using-functions.md | 4 +++- basics/variables.md | 4 +++- basics/what-is-programming.md | 4 +++- basics/what-is-true.md | 4 +++- contact-me.md | 10 ++++++---- editor-setup.md | 10 ++++++---- getting-help.md | 10 ++++++---- update-ends.py | 17 +++++++++-------- 31 files changed, 117 insertions(+), 54 deletions(-) diff --git a/README.md b/README.md index 6dd222a..89dad9f 100644 --- a/README.md +++ b/README.md @@ -111,10 +111,12 @@ have helped me with it: *** -If you like this tutorial, please [give it a -star](README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). +If you have trouble with this tutorial please [tell me about +it](./contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a +star](./README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](./LICENSE). -[List of contents](README.md#list-of-contents) +[List of contents](./README.md#list-of-contents) diff --git a/TODO.md b/TODO.md index 5407df1..2ed3c8c 100644 --- a/TODO.md +++ b/TODO.md @@ -30,10 +30,12 @@ This tutorial is not complete. It still needs: *** -If you like this tutorial, please [give it a -star](README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). +If you have trouble with this tutorial please [tell me about +it](./contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a +star](./README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](./LICENSE). -[List of contents](README.md#list-of-contents) +[List of contents](./README.md#list-of-contents) diff --git a/advanced/answers.md b/advanced/answers.md index 94160c5..d6a4371 100644 --- a/advanced/answers.md +++ b/advanced/answers.md @@ -1,7 +1,9 @@ *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/advanced/datatypes.md b/advanced/datatypes.md index 42ac28b..4695100 100644 --- a/advanced/datatypes.md +++ b/advanced/datatypes.md @@ -13,7 +13,7 @@ types can do a lot of the work for you. > If it looks like a duck and quacks like a duck, it must be a duck. Many things in this tutorial are not really something but they behave -like something. For example, we'll learn about many things that behave +like something. For example, we'll learn about many classes that behave like dictionaries. They are not dictionaries, but we can use them just like if they were dictionaries. This programming style is known as **duck-typing**. @@ -110,6 +110,8 @@ things we can do with sets: {'Nitori', 'theelous3', 'go|dfish', 'RubyPinch'} >>> a ^ b # names in a or b, but not both {'RubyPinch', 'Nitori', 'go|dfish'} +>>> a - b # names in a but not in b +{'go|dfish', 'RubyPinch'} >>> ``` @@ -388,7 +390,9 @@ code on Python versions older than 3.5.** *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/advanced/functions.md b/advanced/functions.md index fb2f849..ff097ae 100644 --- a/advanced/functions.md +++ b/advanced/functions.md @@ -290,7 +290,9 @@ does, so using keyword-only arguments makes sense. *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/advanced/iters.md b/advanced/iters.md index 46b0e21..58cebbc 100644 --- a/advanced/iters.md +++ b/advanced/iters.md @@ -445,7 +445,9 @@ does the same thing as our `count()`. *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/advanced/magicmethods.md b/advanced/magicmethods.md index fe00277..c7f6e28 100644 --- a/advanced/magicmethods.md +++ b/advanced/magicmethods.md @@ -235,7 +235,9 @@ are not meant to be imported. *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/basics/answers.md b/basics/answers.md index d99f157..447673b 100644 --- a/basics/answers.md +++ b/basics/answers.md @@ -411,7 +411,9 @@ isn't exactly like mine but it works just fine it's ok, and you can *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/basics/classes.md b/basics/classes.md index f568af4..a59b4d2 100644 --- a/basics/classes.md +++ b/basics/classes.md @@ -416,7 +416,9 @@ print("You entered " + word + ".") *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/basics/defining-functions.md b/basics/defining-functions.md index 383c4e1..b17b28b 100644 --- a/basics/defining-functions.md +++ b/basics/defining-functions.md @@ -531,7 +531,9 @@ Answers for the first, second and third exercise are *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/basics/dicts.md b/basics/dicts.md index 4dbce70..9f2d3a7 100644 --- a/basics/dicts.md +++ b/basics/dicts.md @@ -299,7 +299,9 @@ Running the program might look like this: *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/basics/exceptions.md b/basics/exceptions.md index 5048432..ad241ef 100644 --- a/basics/exceptions.md +++ b/basics/exceptions.md @@ -458,7 +458,9 @@ except OSError: *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/basics/files.md b/basics/files.md index 69b85a5..5f0e5c8 100644 --- a/basics/files.md +++ b/basics/files.md @@ -365,7 +365,9 @@ else: *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/basics/getting-started.md b/basics/getting-started.md index 21ebb44..c7946cf 100644 --- a/basics/getting-started.md +++ b/basics/getting-started.md @@ -213,7 +213,9 @@ Powers are calculated before `*` and `/`, but after `()`. *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/basics/handy-stuff-strings.md b/basics/handy-stuff-strings.md index 55c7ebb..be89c55 100644 --- a/basics/handy-stuff-strings.md +++ b/basics/handy-stuff-strings.md @@ -429,7 +429,9 @@ The answers are [here](answers.md#handy-stuff-strings). *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/basics/if.md b/basics/if.md index 8544a71..f1825c8 100644 --- a/basics/if.md +++ b/basics/if.md @@ -329,7 +329,9 @@ The answers are [here](answers.md#if-else-and-elif). *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/basics/installing-python.md b/basics/installing-python.md index 4714e8b..66b1ecb 100644 --- a/basics/installing-python.md +++ b/basics/installing-python.md @@ -109,7 +109,9 @@ Now you should have Python installed, and you should be able run it. *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/basics/larger-program.md b/basics/larger-program.md index fb419ab..4b88be1 100644 --- a/basics/larger-program.md +++ b/basics/larger-program.md @@ -212,7 +212,9 @@ something else when it's imported. *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/basics/lists-and-tuples.md b/basics/lists-and-tuples.md index 51a5b0f..6726a46 100644 --- a/basics/lists-and-tuples.md +++ b/basics/lists-and-tuples.md @@ -347,7 +347,9 @@ The answers are [here](answers.md#lists-and-tuples). *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/basics/loops.md b/basics/loops.md index 3d4cde2..2686372 100644 --- a/basics/loops.md +++ b/basics/loops.md @@ -463,7 +463,9 @@ The answers are [here](answers.md#loops) *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/basics/modules.md b/basics/modules.md index a8f5115..88342ad 100644 --- a/basics/modules.md +++ b/basics/modules.md @@ -487,7 +487,9 @@ section at the bottom. *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/basics/the-way-of-the-program.md b/basics/the-way-of-the-program.md index b576323..ebb44bc 100644 --- a/basics/the-way-of-the-program.md +++ b/basics/the-way-of-the-program.md @@ -38,7 +38,9 @@ learned everything. *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/basics/trey-hunner-zip-and-enumerate.md b/basics/trey-hunner-zip-and-enumerate.md index 91d9d2e..3a211de 100644 --- a/basics/trey-hunner-zip-and-enumerate.md +++ b/basics/trey-hunner-zip-and-enumerate.md @@ -135,7 +135,9 @@ The answers are [here](answers.md). *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/basics/using-functions.md b/basics/using-functions.md index dad1403..1470b39 100644 --- a/basics/using-functions.md +++ b/basics/using-functions.md @@ -228,7 +228,9 @@ should work normally. *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/basics/variables.md b/basics/variables.md index 150aa74..4d897c3 100644 --- a/basics/variables.md +++ b/basics/variables.md @@ -272,7 +272,9 @@ what you are doing. We'll learn more about it later. *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/basics/what-is-programming.md b/basics/what-is-programming.md index a6b1fad..305bce9 100644 --- a/basics/what-is-programming.md +++ b/basics/what-is-programming.md @@ -155,7 +155,9 @@ rest of this tutorial only if you don't understand the code. *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/basics/what-is-true.md b/basics/what-is-true.md index 4160a65..495aea6 100644 --- a/basics/what-is-true.md +++ b/basics/what-is-true.md @@ -213,7 +213,9 @@ if value is None: ... # best *** -If you like this tutorial, please [give it a +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See diff --git a/contact-me.md b/contact-me.md index 9f08067..0f5aeea 100644 --- a/contact-me.md +++ b/contact-me.md @@ -18,10 +18,12 @@ it, there are a few ways to contact me: *** -If you like this tutorial, please [give it a -star](README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). +If you have trouble with this tutorial please [tell me about +it](./contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a +star](./README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](./LICENSE). -[List of contents](README.md#list-of-contents) +[List of contents](./README.md#list-of-contents) diff --git a/editor-setup.md b/editor-setup.md index 956abfa..019f894 100644 --- a/editor-setup.md +++ b/editor-setup.md @@ -139,10 +139,12 @@ about it here, [tell me](contact-me.md). *** -If you like this tutorial, please [give it a -star](README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). +If you have trouble with this tutorial please [tell me about +it](./contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a +star](./README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](./LICENSE). -[List of contents](README.md#list-of-contents) +[List of contents](./README.md#list-of-contents) diff --git a/getting-help.md b/getting-help.md index 45e9204..11cd9dd 100644 --- a/getting-help.md +++ b/getting-help.md @@ -53,10 +53,12 @@ help on IRC is much faster. *** -If you like this tutorial, please [give it a -star](README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). +If you have trouble with this tutorial please [tell me about +it](./contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a +star](./README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See -[LICENSE](LICENSE). +[LICENSE](./LICENSE). -[List of contents](README.md#list-of-contents) +[List of contents](./README.md#list-of-contents) diff --git a/update-ends.py b/update-ends.py index c6ea416..820ef6a 100755 --- a/update-ends.py +++ b/update-ends.py @@ -35,13 +35,15 @@ END_TEMPLATE = """\ -If you like this tutorial, please [give it a -star]({readme}#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). +If you have trouble with this tutorial please [tell me about +it]({toplevel}/contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a +star]({toplevel}/README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See -[LICENSE]({license}). +[LICENSE]({toplevel}/LICENSE). -{extralinks}[List of contents]({readme}#{readmeheader}) +{extralinks}[List of contents]({toplevel}/README.md#{readmeheader}) """ CHAPTER_LINK_REGEX = r'^\d+\. \[.*\]\((.*\.md)\)$' @@ -112,13 +114,13 @@ def main(): print("Chapter files:") for prevpath, thispath, nextpath in zip(prevs, chapter_files, nexts): + # all paths should be like 'section/file.md' where = posixpath.dirname(thispath) prev = posixpath.relpath(prevpath, where) next_ = posixpath.relpath(nextpath, where) extralinks = "[Previous](%s) | [Next](%s) |\n" % (prev, next_) end = END_TEMPLATE.format( - license='../LICENSE', readme='../README.md', - extralinks=extralinks, readmeheader=where) + toplevel='..', extralinks=extralinks, readmeheader=where) update_end(thispath, end) print() @@ -127,8 +129,7 @@ def main(): for filename in other_files: where = posixpath.dirname(filename) end = END_TEMPLATE.format( - readme=posixpath.relpath('README.md', where), - license=posixpath.relpath('LICENSE', where), + toplevel=posixpath.relpath('.', where), extralinks="", readmeheader='list-of-contents') update_end(filename, end) From 87183fb7c4cdd346fe77831f338fc34e8187fdb1 Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 23 Feb 2017 16:27:56 +0200 Subject: [PATCH 222/329] little fixes thx horusr --- basics/loops.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/basics/loops.md b/basics/loops.md index 2686372..1949f40 100644 --- a/basics/loops.md +++ b/basics/loops.md @@ -192,7 +192,7 @@ how about you >>> ``` -But there's `len()` and an index variable we need to increment and a +But we have `len()` and an index variable we need to increment and a while loop and many other things to worry about. That's a lot of work just for printing each item. @@ -432,7 +432,8 @@ while True: print(thing) ``` -2. This code is supposed to print `[1, 2, 3, 4, 5, 6]`. Fix it. +2. This code is supposed to print `[1, 2, 3, 4, 5, 6]`. Fix it without + changing the `before` list. ```python before = [[1, 2], [3, 4], [5, 6]] From 3b443417c45df3f32a868b1f86343c8595fbb86f Mon Sep 17 00:00:00 2001 From: Akuli Date: Thu, 23 Feb 2017 19:52:12 +0200 Subject: [PATCH 223/329] way better examples --- basics/dicts.md | 189 +++++++++++++++++++++++++++--------------------- 1 file changed, 107 insertions(+), 82 deletions(-) diff --git a/basics/dicts.md b/basics/dicts.md index 9f2d3a7..ec4bf7e 100644 --- a/basics/dicts.md +++ b/basics/dicts.md @@ -2,78 +2,81 @@ Now we know how [lists and tuples](lists-and-tuples.md) work and how to [for loop](loops.md#for-loops) over them. If we make some kind of -program that needs to keep track of people's usernames and passwords, +program that needs to keep track of people's names and favorite pets, we can use a list for that: ```python -userlist = [ - ('me', 'my password'), - ('you', 'your password'), +names_and_pets = [ + ('horusr', 'cats'), + ('caisa64', 'cats and dogs'), + ('__Myst__', 'cats'), ] ``` -Then to check if a username and password are correct we can do -`(username, password) in userlist`. Or we can add a new user easily by -appending a new `(username, password)` tuple to the userlist. +Then to check if cats are horusr's favorite pets we can do +`('horusr', 'cats') in names_and_pets`. Or we can add new people's +favorite pets easily by appending new `(name, pets)` tuples to the list. -But what if we need to check if a username exists, but we don't know -the password? `username in userlist` is always False because the user -list consists of `(username, password)` pairs instead of just -usernames, so we need to for loop over the whole userlist: +But what if we need to check if we know anything about someone's +favorite pets? `'caisa64' in names_and_pets` is always False because the +pet list consists of `(name, pets)` pairs instead of just names, so we +need to for loop over the whole pet list: ```python -username_exists = False -for user in userlist: - if user[0] == username: - username_exists = True +found_caisa64 = False +for pair in names_and_pets: + if pair[0] == 'caisa64': + found_caisa64 = True break -if username_exists: +if found_caisa64: # do something ``` -Or how about getting a user's password if we know the username? This +Or what if we need to find out what caisa64's favorite pets are? That also requires going through the whole list. ```python -password = None -for user in userlist: - if user[0] == username: - password = user[1] +pets = None +for pair in names_and_pets: + if pair[0] == 'caisa64': + pets = pair[1] break -# make sure password is not None and do something with it +# make sure pets is not None and do something with it ``` -As you can see, a list of `(username, password)` pairs is not an ideal -way to store our usernames and passwords. +As you can see, a list of `(name, pets)` pairs is not an ideal +way to store names and favorite pets. ## What are dictionaries? -A better way to store user information might be a dictionary: +A better way to store information about favorite pets might be a +dictionary: ```python -passwords = { - 'me': 'my password', - 'you': 'your password', +favorite_pets = { + 'horusr': 'cats', + 'caisa64': 'cats and dogs', + '__Myst__': 'cats', } ``` -Here `'me'` and `'you'` are **keys** in the dictionary, and -`'my password'` and `'your password'` are their **values**. Dictionaries -are often named by their values. This dictionary has passwords as its -values so I named the variable `passwords`. +Here `'horusr'` and `'caisa64'` are **keys** in the dictionary, and +`'cats'` and `'cats and docs'` are their **values**. Dictionaries are +often named by their values. This dictionary has favorite pets as its +values so I named the variable `favorite_pets`. There are a few big differences between dictionaries and lists of pairs: - Dictionaries are not ordered. There are **no guarantees** about which - order the `username: password` pairs appear in when we do something + order the `name: pets` pairs appear in when we do something with the dictionary. - Checking if a key is in the dictionary is simple and fast. We don't need to for loop through the whole dictionary. - Getting the value of a key is also simple and fast. - We can't have the same key in the dictionary multiple times, but multiple different keys can have the same value. This means that - **multiple users can't have the same name, but they can have the - same passwords**. + **multiple people can't have the same name, but they can have the + same favorite pets**. But wait... this is a lot like variables are! Our variables are not ordered, getting a value of a variable is fast and easy and we can't @@ -85,18 +88,22 @@ variable names and values are what our variables point to. ```python >>> globals() -{'userlist': [('me', 'my password'), ('you', 'your password')], - 'passwords': {'me': 'my password', 'you': 'your password'}, +{'names_and_pets': [('horusr', 'cats'), + ('caisa64', 'cats and dogs'), + ('__Myst__', 'cats')], + 'favorite_pets': {'__Myst__': 'cats', + 'caisa64': 'cats and dogs', + 'horusr': 'cats'}, ...many other things we don't need to care about... } >>> ``` So if you have trouble remembering how dictionaries work just compare -them to variables. A dictionary is a perfect way to store our usernames -and passwords. We don't care about which order the users were added in, -it's impossible to add multiple users with the same username and -getting a user's password is easy. +them to variables. A dictionary is a perfect way to store these names +and favorite pets. We don't care about which order the names and pets +were added in, it's impossible to add the same name multiple times and +getting someone's favorite pets is easy. ## What can we do with dictionaries? @@ -104,9 +111,9 @@ Dictionaries have some similarities with lists. For example, both lists and dictionaries have a length. ```python ->>> len(userlist) # contains two elements +>>> len(names_and_pets) # contains two elements 2 ->>> len(passwords) # contains two key:value pairs +>>> len(favorite_pets) # contains two key:value pairs 2 >>> ``` @@ -115,26 +122,38 @@ We can get a value of a key with `the_dict[key]`. This is a lot easier and faster than for-looping over a list of pairs. ```python ->>> passwords['me'] -'my password' ->>> passwords['you'] -'your password' +>>> favorite_pets['caisa64'] +'cats and dogs' +>>> favorite_pets['__Myst__'] +'cats' >>> ``` -Trying to get the value of a non-existing key gives us an error, but we -can add new `key: value` pairs by doing `the_dict[key] = value`. +Trying to get the value of a non-existing key gives us an error. ```python ->>> passwords['lol'] +>>> favorite_pets['Akuli'] Traceback (most recent call last): File "", line 1, in -KeyError: 'lol' ->>> passwords["lol"] = "lol's password" ->>> passwords["lol"] -"lol's password" ->>> passwords -{'lol': "lol's password", 'you': 'your password', 'me': 'my password'} +KeyError: 'Akuli' +>>> +``` + +But we can add new `key: value` pairs or change the values of existing +keys by doing `the_dict[key] = value`. + +```python +>>> favorite_pets['Akuli'] = 'penguins' +>>> favorite_pets['Akuli'] +'penguins' +>>> favorite_pets['Akuli'] = 'dogs' +>>> favorite_pets['Akuli'] +'dogs' +>>> favorite_pets +{'__Myst__': 'cats', + 'Akuli': 'dogs', + 'horusr': 'cats', + 'caisa64': 'cats and dogs'} >>> ``` @@ -143,16 +162,17 @@ is in the dictionary checks if the dictionary has a key like that. This can be confusing at first but you'll get used to this. ```python ->>> 'me' in passwords +>>> 'Akuli' in favorite_pets True ->>> 'my password' in passwords +>>> 'dogs' in favorite_pets False ->>> for name in passwords: +>>> for name in favorite_pets: ... print(name) ... -lol -you -me +caisa64 +Akuli +__Myst__ +horusr >>> ``` @@ -160,8 +180,8 @@ Dictionaries have a values method that we can use if we want to do something with the values: ```python ->>> passwords.values() -dict_values(["lol's password", 'your password', 'my password']) +>>> favorite_pets.values() +dict_values(['dogs', 'cats', 'cats and dogs', 'cats']) >>> ``` @@ -170,17 +190,18 @@ behave a lot like lists and usually we don't need to convert them to lists. ```python ->>> for password in passwords.values(): -... print(password) +>>> for pets in favorite_pets.values(): +... print(pets) ... -lol's password -your password -my password +dogs +cats +cats and dogs +cats >>> ``` -We can do things like `list(passwords.values())` if we need a real list -for some reason, but doing that can slow down our program if the +We can do things like `list(favorite_pets.values())` if we need a real +list for some reason, but doing that can slow down our program if the dictionary is big. There's also a keys method, but usually we don't need it because the dictionary itself behaves a lot like a list of keys. @@ -188,16 +209,18 @@ If we need both keys and values we can use the items method with the `for first, second in thing` trick. ```python ->>> passwords.items() -dict_items([('lol', "lol's password"), - ('you', 'your password'), - ('me', 'my password')]) ->>> for name, password in passwords.items(): -... print(name + ": " + password) +>>> favorite_pets.items() +dict_items([('Akuli', 'dogs'), + ('__Myst__', 'cats'), + ('caisa64', 'cats and dogs'), + ('horusr', 'cats')]) +>>> for name, pets in favorite_pets.items(): +... print("{} are {}'s favorite pets".format(pets, name)) ... -lol: lol's password -you: your password -me: my password +dogs are Akuli's favorite pets +cats are __Myst__'s favorite pets +cats and dogs are caisa64's favorite pets +cats are horusr's favorite pets >>> ``` @@ -205,9 +228,9 @@ This is also useful for checking if the dictionary has a `key: value` pair. ```python ->>> ('me', 'my password') in passwords.items() # correct username and password +>>> ('horusr', 'cats') in favorite_pets.items() True ->>> ('me', 'whatever') in passwords.items() # wrong username or password +>>> ('horusr', 'dogs') in favorite_pets.items() False >>> ``` @@ -297,6 +320,8 @@ Running the program might look like this: and appears once in the sentence test appears 2 times in the sentence +**TODO:** Exercises. + *** If you have trouble with this tutorial please [tell me about From d26c2ea251bb8b730798530e87a7068dbb1c6ab3 Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 24 Feb 2017 12:34:57 +0200 Subject: [PATCH 224/329] good and *BAD* variables, other cleanups --- basics/variables.md | 82 ++++++++++++++++++++++++++++++--------------- 1 file changed, 55 insertions(+), 27 deletions(-) diff --git a/basics/variables.md b/basics/variables.md index 4d897c3..7df2496 100644 --- a/basics/variables.md +++ b/basics/variables.md @@ -54,33 +54,22 @@ NameError: name 'thingy' is not defined >>> ``` -Variables are simple to understand, but there's a few details that we +Variables are simple to understand, but there are a few details that we need to keep in mind: - Variables always point to a value, **they never point to other - variables**. That's why the arrows in our diagrams always go left - to right. + variables**. That's why the arrows in our diagrams always go left + to right. - Multiple variables can point to the same value, but one variable - cannot point to multiple values. + cannot point to multiple values. - The values that variables point to can point to other values also. - We'll learn more about that when we'll talk about - [lists](lists-and-tuples.md). + We'll learn more about that when we'll talk about + [lists](lists-and-tuples.md). Variables are an important part of most programming languages, and they allow programmers to write much larger programs than they could write without variables. -Variable names can be multiple characters long. They can contain -uppercase characters, numbers and some other characters, but most of the -time we should use simple, lowercase variable names. You can also use -underscores. - -```python ->>> magic_number = 123 ->>> greeting = "Hello World!" ->>> -``` - Variable names are case-sensitive, like many other things in Python. ```python @@ -96,7 +85,7 @@ Variable names are case-sensitive, like many other things in Python. >>> ``` -Python also has some words that cannot be used as variable names +There are also words that cannot be used as variable names because they have a special meaning. They are called **keywords**, and we can run `help('keywords')` to see the full list if we want to. We'll learn to use most of them later in this tutorial. Trying to use a @@ -158,6 +147,36 @@ variable called hello and then type hello: >>> ``` +## Good and bad variable names + +Variable names can be multiple characters long. They can contain +uppercase characters, numbers and some other characters, but most of the +time we should use simple, lowercase variable names. We can also use +underscores. For example, these variable names are good: + +```python +>>> magic_number = 123 +>>> greeting = "Hello World!" +>>> +``` + +Don't use variable names like this, **these variables are _bad_**: + +```python +>>> magicNumber = 3.14 +>>> Greeting = "Hello there!" +>>> x = "Hello again!" +>>> +``` + +All of these variables work just fine, but other Python programmers +don't want you to use them. Most Python code doesn't use variable names +that contain UpperCase letters like `magicNumber` and `Greeting`, so +other people reading your code will think it looks weird if you use +them. The problem with `x` is that it's too short, and people have no +idea what it is. Remember that mathematicians like figuring out what x +is, but programmers hate that. + ## Booleans There are two Boolean values, True and False. In Python, and in many @@ -224,7 +243,8 @@ None Another confusing thing is that if we do something weird to None we get error messages that talk about NoneType object. The NoneType object they -are talking about is always None. +are talking about is always None. We'll learn more about what attributes +and calling are later. ```python >>> None.hello # None has no attribute 'hello' @@ -240,16 +260,15 @@ TypeError: 'NoneType' object is not callable ## Other comparing operators -So far we've used `==`, but there are other operators also. At this -point, this list probably looks awfully long, but it's actually pretty -easy to learn. +So far we've used `==`, but there are other operators also. This list +probably looks awfully long, but it's actually quite easy to learn. | Usage | Description | True examples | |-----------|-----------------------------------|-----------------------| | `a == b` | a is equal to b | `1 == 1` | | `a != b` | a is not equal to b | `1 != 2` | -| `a > b` | a is greater than b | `2 > 1` | -| `a >= b` | a is greater than or equal to b | `2 >= 1`, `1 >= 1` | +| `a > b` | a is bigger than b | `2 > 1` | +| `a >= b` | a is bigger than or equal to b | `2 >= 1`, `1 >= 1` | | `a < b` | a is less than b | `1 < 2` | | `a <= b` | a is less than or equal to b | `1 <= 2`, `1 <= 1` | @@ -261,15 +280,24 @@ b are Booleans. | `a and b` | a is True and b is True | `1 == 1 and 2 == 2` | | `a or b` | a is True, b is True or they're both True | `False or 1 == 1`, `True or True` | -Another way to combine operations is chaining. For example, `a < b < c` -does the same thing as `a < b and b < c`. - `not` can be used for negations. If `value` is True, `not value` is False, and if `value` is False, `not value` is True. There's also `is`, but don't use it instead of `==` unless you know what you are doing. We'll learn more about it later. +## Summary + +- Variables have a name and a value. We can create or change variables + with `name = value`. +- `thing += stuff` does the same thing as `thing = thing + stuff`. +- Use lowercase variable names and remember that programmers hate + figuring out what x is. +- `=` means assigning and `==` means comparing. +- True and False are Booleans. Comparing values results in a Boolean. +- None is a value that we'll find useful later. When error messages say + `NoneType object` they mean None. + *** If you have trouble with this tutorial please [tell me about From 9124ba7732b0dd8b5396869e1c91660fe00122bc Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 24 Feb 2017 12:41:18 +0200 Subject: [PATCH 225/329] cleaning up modules.md, darkf/math style greater than --- basics/modules.md | 2 +- basics/variables.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/basics/modules.md b/basics/modules.md index 88342ad..76e0f61 100644 --- a/basics/modules.md +++ b/basics/modules.md @@ -49,7 +49,7 @@ that opens: ![My Python's modules.](../images/modules.png) All of these `.py` files can be imported like we just imported -`random.py`. In random.py, there's a like like `randint = something`, +`random.py`. In random.py, there's a line like `randint = something`, so we can use its randint variable with `random.randint` after importing it. diff --git a/basics/variables.md b/basics/variables.md index 7df2496..255942a 100644 --- a/basics/variables.md +++ b/basics/variables.md @@ -267,8 +267,8 @@ probably looks awfully long, but it's actually quite easy to learn. |-----------|-----------------------------------|-----------------------| | `a == b` | a is equal to b | `1 == 1` | | `a != b` | a is not equal to b | `1 != 2` | -| `a > b` | a is bigger than b | `2 > 1` | -| `a >= b` | a is bigger than or equal to b | `2 >= 1`, `1 >= 1` | +| `a > b` | a is greater than b | `2 > 1` | +| `a >= b` | a is greater than or equal to b | `2 >= 1`, `1 >= 1` | | `a < b` | a is less than b | `1 < 2` | | `a <= b` | a is less than or equal to b | `1 <= 2`, `1 <= 1` | From 7d5129fd320c16d9a12fa456a84a6cd08d65c2d4 Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 24 Feb 2017 22:19:31 +0200 Subject: [PATCH 226/329] comments --- basics/variables.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/basics/variables.md b/basics/variables.md index 255942a..4b9c25b 100644 --- a/basics/variables.md +++ b/basics/variables.md @@ -163,9 +163,9 @@ underscores. For example, these variable names are good: Don't use variable names like this, **these variables are _bad_**: ```python ->>> magicNumber = 3.14 ->>> Greeting = "Hello there!" ->>> x = "Hello again!" +>>> magicNumber = 3.14 # looks weird +>>> Greeting = "Hello there!" # also looks weird +>>> x = "Hello again!" # what the heck is x? >>> ``` From ab4a7a84f494c9822f06fd3653ff14c2e90e68bc Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 24 Feb 2017 23:01:53 +0200 Subject: [PATCH 227/329] exercise based on horusr's problem --- basics/answers.md | 17 +++++++++++++++++ basics/loops.md | 13 +++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/basics/answers.md b/basics/answers.md index 447673b..e4a313d 100644 --- a/basics/answers.md +++ b/basics/answers.md @@ -272,6 +272,23 @@ isn't exactly like mine but it works just fine it's ok, and you can The third part calculates `result + n` but throws away the value. It was probably supposed to do `result += n` instead. +4. If you run this program you'll notice that nothing happened to the + numbers list. The reason is that the `number` variable only works + one way. It gets its values from the `numbers` list, but changing it + doesn't change the `numbers` list. In general, `thing = stuff` + changes the `thing` variable, and that's it. It doesn't change + anything else. + + An easy solution is to just create a new list: + + ```python + numbers = ['1', '2', '3'] + converted_numbers = [] + for number in numbers: + converted_numbers.append(int(number)) + print(converted_numbers) + ``` + ## Trey Hunner: zip and enumerate 1. Read some lines with `input` into a list and then enumerate it. diff --git a/basics/loops.md b/basics/loops.md index 1949f40..3e3a1e5 100644 --- a/basics/loops.md +++ b/basics/loops.md @@ -432,7 +432,7 @@ while True: print(thing) ``` -2. This code is supposed to print `[1, 2, 3, 4, 5, 6]`. Fix it without +2. This code is supposed to print `[1, 2, 3, 4, 5, 6]`. Fix it without changing the `before` list. ```python @@ -460,7 +460,16 @@ while True: print("their sum is", result) ``` -The answers are [here](answers.md#loops) +4. This program is supposed to print `[1, 2, 3]`. Fix it. + + ```python + numbers = ['1', '2', '3'] + for number in number: + number = int(number) + print(numbers) + ``` + +The answers are [here](answers.md#loops). *** From e84f1866089a661adeecaaf42fd173111d38479a Mon Sep 17 00:00:00 2001 From: Akuli Date: Fri, 24 Feb 2017 23:03:38 +0200 Subject: [PATCH 228/329] oops --- basics/loops.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basics/loops.md b/basics/loops.md index 3e3a1e5..9a72b90 100644 --- a/basics/loops.md +++ b/basics/loops.md @@ -464,7 +464,7 @@ while True: ```python numbers = ['1', '2', '3'] - for number in number: + for number in numbers: number = int(number) print(numbers) ``` From 2c8892f5552525a5c23cc3cf6fb64453077bdbfd Mon Sep 17 00:00:00 2001 From: Akuli Date: Sat, 25 Feb 2017 14:50:13 +0200 Subject: [PATCH 229/329] better make-html.py script with dark default background --- common.py | 9 +++-- html-style.css | 10 +++++ make-html.py | 106 +++++++++++++++++++++++++++++++++++++------------ 3 files changed, 96 insertions(+), 29 deletions(-) create mode 100644 html-style.css diff --git a/common.py b/common.py index d207e27..7e4b59d 100644 --- a/common.py +++ b/common.py @@ -34,6 +34,7 @@ import contextlib import itertools import os +import posixpath import re import shutil @@ -73,9 +74,9 @@ def get_markdown_files(): yield 'README.md' with open('README.md', 'r') as f: for match, lineno in find_links(f): - target = match.group(2) - # Currently the README doesn't link to itself, but I don't - # want to break things if it will in the future. + target = posixpath.normpath(match.group(2)) + # Currently he README links to itself, but we don't want to + # break things if it will be modified not to link in the future. if target.endswith('.md') and target != 'README.md': yield target @@ -92,6 +93,7 @@ def askyesno(question, default=True): else: # no by default question += ' [y/N] ' + while True: result = input(question).upper().strip() if result == 'Y': @@ -100,6 +102,7 @@ def askyesno(question, default=True): return False if not result: return default + print("Please type y, n or nothing at all.") def slashfix(path): diff --git a/html-style.css b/html-style.css new file mode 100644 index 0000000..e2e9337 --- /dev/null +++ b/html-style.css @@ -0,0 +1,10 @@ +/* This file is used by the HTML files that make-html.py creates. + Customize this if you want to create HTML files with different + colors. See also make-html.py's --pygments-theme option. */ +body { + color: white; + background-color: #333333; +} +a { + color: orange; +} diff --git a/make-html.py b/make-html.py index 315177a..c78e16e 100755 --- a/make-html.py +++ b/make-html.py @@ -28,19 +28,20 @@ """Create HTML files of the tutorial.""" +import argparse import os import posixpath import shutil import string import sys +import textwrap import webbrowser -import common - try: import mistune except ImportError: - print("mistune isn't installed. You can install it like this:") + print("mistune isn't installed.", file=sys.stderr) + print("You can install it like this:") print() print(">>> import pip") print(">>> pip.main(['install', '--user', 'mistune'])") @@ -49,10 +50,13 @@ try: import pygments.formatters import pygments.lexers + import pygments.styles except ImportError: # we can work without pygments, but we won't get colors pygments = None +import common + HTML_TEMPLATE = """\ @@ -60,6 +64,7 @@ {title} + {body} @@ -77,19 +82,23 @@ def mkdir_slashfix_open(filename, mode): def fix_filename(filename): - if posixpath.basename(filename) == 'README.md': - # 'README.md' -> 'index.html' - # 'some/place/README.md' -> 'some/place/index.html' - return filename[:-9] + 'index.html' + renames = [('README.md', 'index.html'), + ('LICENSE', 'LICENSE.txt')] + for before, after in renames: + if posixpath.basename(filename) == before: + # BEFORE -> AFTER + # some/place/BEFORE -> some/place/AFTER + return filename[:-len(before)] + after if filename.endswith('.md'): - return filename[:-3] + '.html' + filename = filename[:-3] + '.html' return filename class TutorialRenderer(mistune.Renderer): - def __init__(self): + def __init__(self, pygments_style): super().__init__() + self.pygments_style = pygments_style self.title = None # will be set by header() self._headercounts = {} @@ -157,7 +166,7 @@ def block_code(self, code, lang=None): else: lexer = pygments.lexers.PythonLexer() formatter = pygments.formatters.HtmlFormatter( - style='tango', noclasses=True) + style=self.pygments_style, noclasses=True) return pygments.highlight(code, lexer, formatter) # we can't highlight it return super().block_code(code, lang) @@ -173,51 +182,96 @@ def table(self, header, body): return result.replace('

', '
', 1) +def wrap_text(text): + """Like textwrap.fill, but respects newlines.""" + result = [] + for part in text.split('\n'): + result.append(textwrap.fill(part)) + return '\n'.join(result) + + def main(): + desc = ("Create HTML files of the tutorial.\n\n" + "The files have light text on a dark background by " + "default, and you can edit html-style.css to change that.") + if pygments is not None: + desc += ( + " Editing the style file doesn't change the colors of the " + "code examples, but you can use the --pygments-style " + "option. Search for 'pygments style gallery' online or see " + "https://help.farbox.com/pygments.html to get an idea of " + "what different styles look like.") + + parser = argparse.ArgumentParser( + description=wrap_text(desc), + formatter_class=argparse.RawDescriptionHelpFormatter) + parser.add_argument( + '-o', '--outdir', default='html', + help="write the HTML files here, defaults to %(default)r") + if pygments is not None: + parser.add_argument( + '--pygments-style', metavar='STYLE', default='native', + choices=list(pygments.styles.get_all_styles()), + help=("the Pygments color style (see above), " + "%(default)r by default")) + args = parser.parse_args() + if pygments is None: print("Pygments isn't installed. You can install it like this:") print() print(">>> import pip") - print(">>> pip.main(['install', '--user', 'Pygments'])") + print(">>> pip.main(['install', '--user', 'pygments'])") print() print("You can also continue without Pygments, but the code examples") - print("will not be in color.") + print("will not be colored.") if not common.askyesno("Continue without pygments?"): print("Interrupt.") return - if os.path.exists('html'): - if not common.askyesno("html exists. Do you want to remove it?"): + if os.path.exists(args.outdir): + if not common.askyesno("%s exists. Do you want to remove it?" + % args.outdir): print("Interrupt.") return - if os.path.isdir('html'): - shutil.rmtree('html') + if os.path.isdir(args.outdir): + shutil.rmtree(args.outdir) else: - os.remove('html') + os.remove(args.outdir) print("Generating HTML files...") for markdownfile in common.get_markdown_files(): - htmlfile = posixpath.join('html', fix_filename(markdownfile)) - print(' ', markdownfile, '->', htmlfile) + fixed_markdownfile = fix_filename(markdownfile) + htmlfile = posixpath.join(args.outdir, fixed_markdownfile) + print(' %-30.30s --> %-30.30s' % (markdownfile, htmlfile), end='\r') + with common.slashfix_open(markdownfile, 'r') as f: markdown = f.read() - renderer = TutorialRenderer() + renderer = TutorialRenderer(args.pygments_style) body = mistune.markdown(markdown, renderer=renderer) - html = HTML_TEMPLATE.format(title=renderer.title, body=body) + stylefile = posixpath.relpath( + 'style.css', posixpath.dirname(fixed_markdownfile)) + + html = HTML_TEMPLATE.format( + title=renderer.title, + body=body, + stylefile=stylefile, + ) with mkdir_slashfix_open(htmlfile, 'w') as f: print(html, file=f) + print() print("Copying other files...") - shutil.copytree('images', os.path.join('html', 'images')) - shutil.copy('LICENSE', os.path.join('html', 'LICENSE')) + shutil.copytree('images', os.path.join(args.outdir, 'images')) + shutil.copy('LICENSE', os.path.join(args.outdir, 'LICENSE.txt')) + shutil.copy('html-style.css', os.path.join(args.outdir, 'style.css')) print("\n*********************\n") - print("Ready! The files are in the html directory.") - print("Go to html and double-click index.html to read the tutorial.") + print("Ready! The files are in %r." % args.outdir) + print("You can go there and double-click index.html to read the tutorial.") print() if common.askyesno("Do you want to view the tutorial now?", default=False): print("Opening the tutorial...") - webbrowser.open(os.path.join('html', 'index.html')) + webbrowser.open(os.path.join(args.outdir, 'index.html')) if __name__ == '__main__': From ae3333c631dd6cbbb19d96e34dd9bfabbdb05106 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 28 Feb 2017 19:22:11 +0200 Subject: [PATCH 230/329] way better editor setup section --- README.md | 27 ++--- basics/editor-setup.md | 231 +++++++++++++++++++++++++++++++++++++++++ images/geany.png | Bin 0 -> 24906 bytes 3 files changed, 245 insertions(+), 13 deletions(-) create mode 100644 basics/editor-setup.md create mode 100644 images/geany.png diff --git a/README.md b/README.md index 89dad9f..46af3e5 100644 --- a/README.md +++ b/README.md @@ -30,19 +30,20 @@ to learn more about whatever you want after studying it. 4. [ThinkPython: The way of the program](basics/the-way-of-the-program.md) 5. [Variables, Booleans and None](basics/variables.md) 6. [Using functions](basics/using-functions.md) -7. [If, else and elif](basics/if.md) -8. [Handy stuff with strings](basics/handy-stuff-strings.md) -9. [Lists and tuples](basics/lists-and-tuples.md) -10. [Loops](basics/loops.md) -11. [Trey Hunner: zip and enumerate](basics/trey-hunner-zip-and-enumerate.md) -12. [Dictionaries](basics/dicts.md) -13. [Defining functions](basics/defining-functions.md) -14. [Writing a larger program](basics/larger-program.md) -15. [What is true?](basics/what-is-true.md) -16. [Files](basics/files.md) -17. [Exceptions](basics/exceptions.md) -18. [Modules](basics/modules.md) -19. [Classes](basics/classes.md) +7. [Setting up an editor](basics/editor-setup.md) +8. [If, else and elif](basics/if.md) +9. [Handy stuff with strings](basics/handy-stuff-strings.md) +10. [Lists and tuples](basics/lists-and-tuples.md) +11. [Loops](basics/loops.md) +12. [Trey Hunner: zip and enumerate](basics/trey-hunner-zip-and-enumerate.md) +13. [Dictionaries](basics/dicts.md) +14. [Defining functions](basics/defining-functions.md) +15. [Writing a larger program](basics/larger-program.md) +16. [What is true?](basics/what-is-true.md) +17. [Files](basics/files.md) +18. [Exceptions](basics/exceptions.md) +19. [Modules](basics/modules.md) +20. [Classes](basics/classes.md) ### Advanced diff --git a/basics/editor-setup.md b/basics/editor-setup.md new file mode 100644 index 0000000..251a952 --- /dev/null +++ b/basics/editor-setup.md @@ -0,0 +1,231 @@ +# Setting up an editor for programming + +An editor is a program that lets us write longer programs than we can +write on the `>>>` prompt. Then we can save the programs to files and +run them as many times as we want without writing them again. + +When programmers say "editor" they don't mean programs like Microsoft +Word or LibreOffice/OpenOffice Writer. These programs are for writing +text documents, not for programming. **Programming editors don't support +things like bigger font sizes for titles or underlining bits of text**, +but instead they have features that are actually useful for programming, +like automatically displaying different things with different colors. + +If you are on Windows or Mac OSX you have probably noticed that your +Python came with an editor called IDLE. We are not going to use it +because it's lacking some important features, and most experienced +programmers (including me) don't use it or recommend it to anyone. + +In this chapter we'll download, install, set up and learn to use a +better editor. The setup part will take some time, but it's worth it and +correct settings will help you avoid many problems later. + +## Which editor should I use? + +These instructions are written for an editor called Geany. Its default +settings are actually not very good for writing Python code, but you +will learn to change the settings so you won't have trouble with +switching to another editor later if you need to. + +Different programmers have different favorite editors that they use, and +the choice of editor is a very personal thing. You can use almost any +editor you want if you make sure that you change its settings the same +way we change Geany's settings in this tutorial. + +## Bad editors + +**[Skip this part](#installing-your-new-editor) if you are going to use +Geany.** + +But some editors are not good enough for actually making something with +them. These editors cannot be set up using these instructions because +they don't have some of the features we need, so **don't use these +editors for writing Python**: + +- Gedit +- IDLE +- Nano +- Notepad +- Pluma +- Wingware + +On the other hand, some editors have too many features for getting +started with programming. They are not bad, but they are not meant for +beginners. So **I don't recommend using these editors yet**: + +- Emacs +- NetBeans +- PyCharm +- Spyder +- Vim + +These lists don't contain all bad editors, but these are editors that +people often try to use. If you know a bad editor and you think I should +mention it here, please [let me know](../contact-me.md). + +## Installing your new editor + +Installing Geany is easy. If you are using Windows or Mac OSX, go to +[the official Geany download +page](http://www.geany.org/Download/Releases) and click the correct +download link. If you are using Linux, just install Geany from the +package manager like any other program. For example, on Debian-based +distributions (e.g. Ubuntu) you can type `sudo apt install geany` on a +terminal. + +When you have Geany installed, you can launch it like any other program. +By default, it has a big sidebar and bottom area, but we don't need them +so you can start by dragging them away. Geany should look roughly like +this after that: + +![Geany without the sidebar and bottom area.](../images/geany.png) + +## Dark background + +Geany has a white background by default, but we'll tell Geany to use a +black background instead. Your eyes will thank you for doing this when +you have been programming for a few hours. + +1. Click *Edit* at top and click *Preferences*. +2. Click *Editor* at left. +3. Click *Display* at top right. +4. Check *Invert syntax highlighting colors*. +5. Click *OK*. + +If you don't like the colors, you can install more [color +schemes](https://github.com/geany/geany-themes/) and then go to *View* +at top and click *Change Color Scheme*. + +## Opening and saving files + +Now it's time to create our first file. Geany creates a new file when +you open it for the first time, but it doesn't know that it's going to +be a Python file. We need to tell that to Geany by saving the file +first. You can use the *File* menu at top or the buttons below the +menus, just like in most other programs. + +Save the empty file on your desktop as `test.py`. The `.py` at the end +of the name is important, it tells Geany and other programs that it's a +Python file. + +## Automatic tab expanding + +Open a Python file in your editor. Then press the tab key, and the +cursor should move right. Now press the left arrow key. See how the +cursor jumps over the empty space? The empty space is actually a tab +character, but Python's style guide recommends using four spaces instead +of tab characters so we'll need to change Geany's settings. + +1. Click *Edit* at top, then click Preferences. +2. Click *Editor* at left. +3. Click *Indentation* at top. +4. Select *Spaces* instead of *Tabs*. +5. Click *OK*. +6. Click *Project* at top and click *Apply Default Indentation*. + +Delete the whitespace, then press tab and press the arrow left again. +Now the cursor should move one space at a time. + +**TODO:** animated gifs that show what's going on. + +## Stripping spaces when pressing Enter + +Press Tab and then press Enter, and Geany should add spaces to the new +line automatically for you. If you are not using Geany, make sure that +your editor does this too. + +Now press the arrow up and then move left and right. You'll notice that +the previous line has spaces left over on it. Leaving useless spaces to +ends of lines like this is usually considered bad style, but it's easy +to tell Geany to get rid of them: + +1. Click *Edit* at top and click *Preferences* +2. Click *Editor* at left. +3. Click *Features* at top. +4. Check *Newline strips trailing spaces*. +5. Click *OK*. + +Press tab and Enter again. If you go back to the previous line now there +is no whitespace on it. + +**TODO:** again, animated gifs + +## Maximum line length + +You have probably noticed that Geany displays a thin, green-ish line at +right from where you type. The idea is that you should avoid writing +anything longer than where this line is. Your programs will work if they +contain lines that go past this marker, but it's not recommended because +shorter lines are nicer to work with in general. People with small +screens can work with your code, and people with large screens can have +multiple files opened at the same time. + +By default, there's room for 72 characters before the marker. Staying in +72 characters is not always easy, and that's why Python's style guide +recommends 79 instead of 72. Let's move Geany's marker to 79 characters: + +1. Click *Edit* at top and click *Preferences* +2. Click *Editor* at left. +3. Click *Display* at top. +4. Change 72 to 79. +5. Click *OK*. + +## Running things from the editor + +This setting up stuff is boring! Let's write some code. + +We'll use this program to check if our editor is set up correctly. +Create a new file and type this into it: + +```python +import sys +print(sys.version) +``` + +You don't need to understand this program yet, you'll learn what it does +later in this tutorial. You can type this program on the `>>>` prompt to +see what it does if you want to. + +Now save the program somewhere as `test.py`. It doesn't matter what the +name of the file is, but it needs to end with `.py`. This way Geany +knows that it's a Python file. + +Next we'll need to change Geany's settings so that it runs the program +correctly. You need to have a Python file opened to change these +settings. + +1. Click *Build* at top, then click *Set Build Commands*. +2. The *Execute* command is probably `python "%f"`. Change it to + `py "%f"` if you are using Windows and `python3 "%f"` if you are + using Linux or Mac OSX. +3. Click *OK*. + +Note that the first part of our *Execute* is the same thing [we type on +a PowerShell or terminal](installing-python.md#running-python). Actually +the whole command means "run this file using my Python". + +Now press the F5 key at the top of your keyboard to run the file we +wrote. It should open up in a terminal or command prompt and print the +same Python version as the `>>>` prompt prints when we open it. If the +version starts with 2 it's too old, and you can [ask +me](../contact-me.md) or some other experienced programmer for help. + +## Important notes + +Now your editor is ready to go. There are a couple important things that +you need to keep in mind when reading the rest of this tutorial: + +- When a code example starts with `>>>`, type it to the `>>>` prompt. If + it doesn't, create or open a `.py` file with your editor, type the + code into it and run the file. +- When we type some code to the `>>>` prompt it [echoes back the + result](getting-started.md) [when it's not None](variables.md#none), + but code in a file does nothing to the result. For example, typing + `1 + 2` to the `>>>` prompt makes it echo `3`, but we need to do + `print(1 + 2)` if we want to do the same thing in a file. + +## You're done! + +This probably felt like a lot of work, but don't worry, there will be no +more things like this in the future. Now we have installed and set up +all the tools we need and we can continue learning Python. diff --git a/images/geany.png b/images/geany.png new file mode 100644 index 0000000000000000000000000000000000000000..04896d12784f59c85c460cce37c416b1a2786cf0 GIT binary patch literal 24906 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 JpSW`8e*sG$&ZPhV literal 0 HcmV?d00001 From e49dfb221835e91643954ba8a685aebdc6ecf8bb Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 28 Feb 2017 21:21:28 +0200 Subject: [PATCH 231/329] updating the installing and running instructions --- basics/installing-python.md | 107 +++++++++++++----------------------- 1 file changed, 38 insertions(+), 69 deletions(-) diff --git a/basics/installing-python.md b/basics/installing-python.md index 66b1ecb..45cbd47 100644 --- a/basics/installing-python.md +++ b/basics/installing-python.md @@ -6,6 +6,12 @@ need to try out the code examples. You can use a website like installing Python. That way you don't need to open a web browser just to write code, and you can work without an Internet connection. +It doesn't matter which operating system you use because Python runs +great on Windows, Mac OSX, Linux and many other operating systems. +However, installing and launching Python are done differently on +different operating systems, so just follow your operating system's +instructions. + Let's get started! ## Downloading and installing Python @@ -16,92 +22,55 @@ Use the official Python installer, it will install Python and IDLE for you. 1. Go to [the official Python website](https://www.python.org/). -2. Move your mouse over the blue Downloads button, but don't click it, - Then click the button that downloads the latest version of Python. +2. Move your mouse over the blue Downloads button, but don't click it. + Then click the button that downloads the latest version of Python. 3. Run the installer. -4. Install Python like any other program. Make sure the py.exe - launcher gets installed. +4. Make sure that the launcher gets installed and click Install Now. -### Mac OSX + ![The py.exe launcher.](../images/py-exe.png) -I don't have an up-to-date copy of Mac OSX. If you would like to write -instructions for OSX, [tell me](../contact-me.md). +### Mac OSX -### GNU/Linux +At the time of writing this, Macs don't come with a Python 3 and you +need to install it yourself. It should be like installing any other +program, but unfortunately I don't have better instructions because I +don't have an up-to-date Mac and I have never installed Python on a Mac. +If you would like to write better instructions, [tell +me](../contact-me.md). -You already have Python, there's no need to download anything. +### Linux -If you want to use IDLE (see below), install it. The name of the -package is `idle3` on Debian-based distributions, like Ubuntu and Linux -Mint, and you can install it with a software manager like any other -program. On other distributions you can just search for idle using the -distribution's package manager. +You already have Python 3, **there's no need to install anything**. You +may also have Python 2, but don't try to remove it. Some of your +programs are probably written in Python 2, so removing Python 2 would +break them. ## Running Python -Now you have Python installed. There are several ways to run Python: - -1. Directly from PowerShell, command prompt or terminal. -2. Using IDLE. -3. Using something else. - -I'm not going to focus on the third option in this tutorial, but if you -know how to use Python with something else than PowerShell, command -prompt, a terminal or IDLE it's fine. Do whatever you want. - -### If you are not an advanced user and you have no idea what PowerShell, command prompt and terminal are +Next we'll learn to run Python on a PowerShell or terminal. There are +several other ways to run Python, but if you learn this way now it's +going to make things easier later. -Use IDLE. Experienced Python users will say that IDLE is garbage, but -don't listen to them. These people want you to use "better" -alternatives with more features, but that's exactly what you don't want -as a beginner. You should spend as little time as possible learning -your tools, and as much time as possible learning Python. Advanced -programming tools are not going to help you with this at all. - -Launch Python's IDLE like any other program. You should see something -like this: - -![IDLE](../images/idle.png) - -From now on, I'll instead show everything like this, so I don't have to -take more screenshots: - - Python 3.4.3 (default, Oct 14 2015, 20:28:29) - [GCC 4.8.4] on linux - Type "copyright", "credits" or "license()" for more information. - >>> - -The exact content of your Python's welcome message is probably different -than mine, it's ok. +### Windows -### If you like working with PowerShell, command prompt or terminal +1. Open a PowerShell from your start menu or start screen. +2. Type `py` and press Enter. You should see something like this: -On Windows. you should be able to run Python from a PowerShell window, -or a command prompt window if you don't have PowerShell. Open one of -these programs from the start menu or start screen, type there `py` and -press Enter. You should see something like this in it: + ![Python running in a PowerShell window.](../images/powershell.png) - C:\Users\You> py - Python 3.4.4 (v3.4.4:737efcadf5a6, Dec 20 2015, 19:28:18) - [MSC v.1600 32 bit (Intel)] on win32 - Type "help", "copyright", "credits" or "license" for more information. - >>> +### Other operating systems -On GNU/Linux or Mac OSX, you should have a terminal application installed -already. Run it and type `python3`: +1. Open a terminal. How exactly this is done depends on your operating + system, but most operating systems have some way to search for + programs. Search for a program called terminal and launch it. +2. Type `python3` and press Enter. You should see something like this: - you@YourComputer:~$ python3 - Python 3.4.3 (default, Oct 14 2015, 20:28:29) - [GCC 4.8.4] on linux - Type "help", "copyright", "credits" or "license" for more information. - >>> + ![Running Python on my terminal.](../images/terminal.png) -Now you can type `exit()` and press Enter to get out of Python. + Your terminal probably looks different than mine, it's OK. -You may also have an older version of Python installed, but don't remove -it. Your system may need it, so if you replace it with your own Python -some things might stop working. See -[this](https://docs.python.org/3/faq/installed.html) for more info. +Now you can type `exit()` and press Enter to get out of Python. Or you +can just close the PowerShell or Terminal window. ## Summary From 08885b2e912477fd7b96cf9cd9318a43b2554ec7 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 28 Feb 2017 21:55:59 +0200 Subject: [PATCH 232/329] getting rid of IDLE and other junk --- basics/editor-setup.md | 3 + basics/getting-started.md | 134 +++++++++--------------------------- basics/if.md | 110 ++++++----------------------- basics/installing-python.md | 3 +- basics/modules.md | 21 +++--- basics/using-functions.md | 10 +-- 6 files changed, 72 insertions(+), 209 deletions(-) diff --git a/basics/editor-setup.md b/basics/editor-setup.md index 251a952..625074c 100644 --- a/basics/editor-setup.md +++ b/basics/editor-setup.md @@ -223,6 +223,9 @@ you need to keep in mind when reading the rest of this tutorial: but code in a file does nothing to the result. For example, typing `1 + 2` to the `>>>` prompt makes it echo `3`, but we need to do `print(1 + 2)` if we want to do the same thing in a file. +- The editor doesn't replace the `>>>` prompt. The prompt is good for + trying things out quickly, and the editor is better when we want to + write longer programs. ## You're done! diff --git a/basics/getting-started.md b/basics/getting-started.md index c7946cf..152cd5e 100644 --- a/basics/getting-started.md +++ b/basics/getting-started.md @@ -58,39 +58,11 @@ We didn't get an error... but `(3, 14)` is not at all what we expected! So from now on, let's use a dot with decimal numbers, because `3.14` worked just fine. Later we'll learn what `(3, 14)` is. -What if we type a `#`? - -```python ->>> # ->>> -``` - -Nothing happened at all. Maybe we can type a `#` and then some text -after it? - -```python ->>> # hello there ->>> -``` - -Again, nothing happened. - -If you're not using IDLE, the prompt will change from `>>>` to -`...`. Just press Enter again to get it back to `>>>`. - -```python ->>> # hello again -... ->>> -``` - -In Python, these pieces of text starting with a `#` are known as -**comments**. They don't change how the code works in any way, but -we can use them to explain what our code does. - ## Using Python as a calculator -Maybe we could type mathematical statements? +**WARNING:** This part contains boring math. Be careful! + +Let's type some math stuff into Python and see what it does. ```python >>> 17 + 3 @@ -106,19 +78,22 @@ Maybe we could type mathematical statements? It's working, Python just calculates the result and echoes it back. -The spaces between numbers and operators don't affect anything, they -just make the code easier to read when they are used correctly. +I added a space on both sides of `+`, `-`, `*` and `/`. Everything would +work without those spaces too: ```python ->>> 14 + 2 + 1 -17 ->>> 14 +2+ 1 -17 +>>> 4 + 2 + 1 +7 +>>> 4+2+1 +7 >>> ``` -The evaluation order is similar to math. The parentheses `(` and `)` -also work the same way. +However, I recommend always adding the spaces because they make the code +easier to read. + +Things are calculated in the same order as in math. The parentheses `(` +and `)` also work the same way. ```python >>> 1 + 2 * 3 # 2 * 3 is calculated first @@ -128,78 +103,33 @@ also work the same way. >>> ``` -Square brackets `[]` and curly brackets `{}` cannot be used to change -the evaluation order. We'll learn more about what they do later. +Python also supports many other kinds of calculations, but most of the +time you don't need them. Actually you don't need even these +calculations most of the time, but these calculations are probably +enough when you need to calculate something. -```python ->>> [1 + 2] * 3 -[3, 3, 3] ->>> {1 + 2} * 3 -Traceback (most recent call last): - File "", line 1, in -TypeError: unsupported operand type(s) for *: 'set' and 'int' ->>> -``` - -## More advanced math - -I decided to include this in my tutorial because some people might be -interested in this. Feel free to [skip this](#summary) if you're not -interested. +## Comments -The `//` operator will divide and then throw away the dot and everything -after it. For example, `17 / 3` is `5.666666666666667`, and so `17 // 3` -is `5` because we throw away the `.666666666666667` part. +We can also type a `#` and then whatever we want after that. These bits +of text are known as **comments**, and we'll find uses for them later. ```python ->>> 17 / 3 -5.666666666666667 ->>> 17 // 3 -5 +>>> 1 + 2 # can you guess what the result is? +3 >>> ``` -The `%` operator gets the division remainder. +Again, I put a space after the `#` and multiple spaces before it just to +make things easier to read. -```python ->>> 17 % 3 -2 ->>> -``` - -For example, if there were 17 apples that should be given evenly to 3 -people, everyone would get 5 apples and there would be 2 apples left -over. +If we write comment on a line with no code on it, the prompt changes +from `>>>` to `...`. To be honest, I have no idea why it does that and I +think it would be better if it would just stay as `>>>`. The prompt goes +back to `>>>` when we press Enter again. ```python ->>> 17 // 3 -5 ->>> 17 % 3 -2 ->>> -``` - -This is also useful for converting time from minutes to seconds. 500 -seconds is 8 minutes and 20 seconds. - -```python ->>> 500 // 60 -8 ->>> 500 % 60 -20 ->>> -``` - -`**` can be used to raise to a power, so 3² in math is `3**2` in Python. -Powers are calculated before `*` and `/`, but after `()`. - -```python ->>> 2 ** 3 -8 ->>> 2 * 3 ** 2 # 3 ** 2 is calculated first -18 ->>> (2 * 3) ** 2 # 2 * 3 is calculated first -36 +>>> # hello there +... >>> ``` @@ -208,8 +138,8 @@ Powers are calculated before `*` and `/`, but after `()`. - Errors don't matter. - We can enter any Python commands to the interactive `>>>` prompt, and it will echo back the result. -- Pieces of text starting with a `#` are comments. - `+`, `-`, `*` and `/` work in Python just like in math. +- Pieces of text starting with a `#` are comments. *** diff --git a/basics/if.md b/basics/if.md index f1825c8..aa24fea 100644 --- a/basics/if.md +++ b/basics/if.md @@ -40,19 +40,6 @@ An important thing to notice is that the line with a print is **indented**. You can press the tab key, or if it doesn't work just press space a few times. -IDLE does this a bit differently, so if you use IDLE, running the -example code looks more like this: - -```python ->>> its_raining = True ->>> if its_raining: - print("It's raining!") - - -It's raining! ->>> -``` - But why is that `if its_raining` instead of `if(its_raining)`? Earlier we learned that `if` is a **keyword**. @@ -66,12 +53,12 @@ SyntaxError: invalid syntax >>> ``` -**Functions** like `print` need `()` after their name to work. But `if` is -a keyword, not a function, so it doesn't need `()`. Python has separate -functions and keywords because it's possible to create custom functions, -but it's not possible to create custom keywords. That's why keywords are -usually used for "magic" things that would be difficult to do with just -functions. +**Functions** like `print` need `()` after their name to work. But `if` +is **a keyword**, not a function, so it doesn't need `()`. Python has +separate functions and keywords because it's possible to create custom +functions, but it's not possible to create custom keywords. That's why +keywords are usually used for "magic" things that would be difficult to +do with just functions. Also note that if statements check the condition once only, so if we set it to false later the if statement won't notice it. @@ -86,62 +73,6 @@ It's not raining, but this runs anyway. >>> ``` -## Storing code in files - -At this point it's easier to put our code into a file and use it -there. If you use IDLE, go to File at top left and select New File, or -just press Ctrl+N. - -![New File in IDLE](../images/idle-new.png) - -If you don't use IDLE, please take the time to -[set up your editor correctly](../editor-setup.md). When you're done your -editor should give you four spaces every time you press tab. - -Create a file called `rain.py`, and type the following content into it: - -```python -its_raining = True -if its_raining: - print("It's raining!") -``` - -You can save the file anywhere you want, for example on your desktop. -Give it a name that ends with `.py`, for example `rain.py`. The `.py` -is short for Python. - -Now we can run the rain program. Most editors (including IDLE) will -run our code when we press F5. If your editor doesn't, run it from -PowerShell, command prompt or terminal. You probably need to first go -to wherever you saved your file with `cd`. For example, if the file is -on your desktop, type `cd Desktop` before running the file. - -Running from IDLE looks like this: - - >>> - ========================= RESTART: /some/place/rain.py ========================= - It's raining! - >>> - -And running from the Windows PowerShell or command prompt looks like -this: - - C:\Users\You> cd Desktop - C:\Users\You\Desktop> py rain.py - It's raining! - C:\Users\You\Desktop> - -Running from a terminal looks like this: - - you@YourComputer:~$ cd Desktop - you@YourComputer:~/Desktop$ python3 rain.py - It's raining! - you@YourComputer:~/Desktop$ - -From now on, **if a code example starts with `>>>` run it on the -interactive prompt, and if it doesn't, write it to a file and run the -file**. - ## Using else What if we want to print a different message if it's not raining? We @@ -157,6 +88,9 @@ if its_not_raining: print("It's not raining.") ``` +Note that this code example doesn't start with `>>>`, so you should +[save it to a file and run the file](editor-setup.md). + Now our program will print a different value depending on what the value of `its_raining` is. @@ -208,19 +142,19 @@ else: print("Access denied.") ``` -The program prints different things depending on what we enter. - - >>> ================================ RESTART ================================ - >>> - Hello! - Enter your password: secret - Welcome! - >>> ================================ RESTART ================================ - >>> - Hello! - Enter your password: lol - Access denied. - >>> +The program prints different things depending on what we enter: + +``` +Hello! +Enter your password: secret +Welcome! +``` + +``` +Hello! +Enter your password: lol +Access denied. +``` Using the input function for passwords doesn't work very well because we can't hide the password with asterisks. There are better ways to get diff --git a/basics/installing-python.md b/basics/installing-python.md index 45cbd47..cc693bf 100644 --- a/basics/installing-python.md +++ b/basics/installing-python.md @@ -18,8 +18,7 @@ Let's get started! ### Windows -Use the official Python installer, it will install Python and IDLE for -you. +Installing Python on Windows is a lot like installing any other program. 1. Go to [the official Python website](https://www.python.org/). 2. Move your mouse over the blue Downloads button, but don't click it. diff --git a/basics/modules.md b/basics/modules.md index 76e0f61..bb749fe 100644 --- a/basics/modules.md +++ b/basics/modules.md @@ -76,11 +76,13 @@ AttributeError: 'module' object has no attribute 'randint' But what was that? Why didn't it work? +**TODO:** update the `-i` instructions. + Let's go ahead and check what's wrong. If you don't use IDLE, you'll need to pass the `-i` option to Python, so if you would normally run -`python3 random.py` you should now do `python3 -i random.py`. This -will run the file and then give you a `>>>` prompt that we can use -to check what's wrong. If you use IDLE, just run the file normally. +`python3 random.py` you should now do `python3 -i random.py`. This will +run the file and then give you a `>>>` prompt that we can use to check +what's wrong. If you use IDLE, just run the file normally. We should end up with the same error message, and then a `>>>`. Like this: @@ -211,12 +213,11 @@ The module name "sys" is short for "system", and it contains things that are built into Python. The official documentation is [here](https://docs.python.org/3/library/sys.html). +`sys.stdin`, `sys.stdout` and `sys.stderr` are [file objects](files.md), +just like the file objects that `open()` gives us. + ```python >>> import sys ->>> # special files that the print and input functions use ->>> # stdin is short for standard input ->>> # stdout is short for standard output ->>> # stderr is short for standard errors >>> print("Hello!", file=sys.stdout) # this is where prints go by default Hello! >>> print("Hello!", file=sys.stderr) # use this for error messages @@ -235,8 +236,7 @@ sys.version_info(major=3, minor=4, micro=2, releaselevel='final', serial=0) >>> sys.exit() # exit out of Python ``` -If you use IDLE you'll notice that printing to `sys.stderr` makes -the message show up in red instead of the normal blue. +**TODO:** why stderr instead of stdout. `sys.exit()` does the same thing as `sys.exit(0)`. The zero means that the program succeeded, and everything's fine. If our program has an @@ -251,9 +251,6 @@ if something_went_wrong: sys.exit(1) ``` -`sys.exit` doesn't work for getting out of IDLE's `>>>` prompt. You can -just close the window to get out of IDLE. - ### Mathematics There's no math.py anywhere, math is a built-in module like diff --git a/basics/using-functions.md b/basics/using-functions.md index 1470b39..88899a6 100644 --- a/basics/using-functions.md +++ b/basics/using-functions.md @@ -205,11 +205,11 @@ TypeError: 'str' object is not callable >>> ``` -The error message complains that strings aren't callable because we -just set `print` to the string `'hello'` and now we're trying to call -it like a function. As you can see, **this is not a good idea** at all. -Most editors (including IDLE) display built-in functions with a special -color so you don't need to worry about doing this accidentally. +The error message complains that strings aren't callable because we just +set `print` to the string `'hello'` and now we're trying to call it like +a function. As you can see, **this is not a good idea** at all. Most +[editors](editor-setup.md) display built-in functions with a special +color, so you don't need to worry about doing this accidentally. Exit out of Python and start it again, and `print("Hello World!")` should work normally. From fd5d05ebc947d550bd12af259fd237010c54e313 Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 28 Feb 2017 21:58:41 +0200 Subject: [PATCH 233/329] quick fix thanks horusr --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 46af3e5..78a9213 100644 --- a/README.md +++ b/README.md @@ -41,8 +41,8 @@ to learn more about whatever you want after studying it. 15. [Writing a larger program](basics/larger-program.md) 16. [What is true?](basics/what-is-true.md) 17. [Files](basics/files.md) -18. [Exceptions](basics/exceptions.md) -19. [Modules](basics/modules.md) +18. [Modules](basics/modules.md) +19. [Exceptions](basics/exceptions.md) 20. [Classes](basics/classes.md) ### Advanced From 6e0f3da14811b0d968f6e4fd0f7dfb991f46f2cc Mon Sep 17 00:00:00 2001 From: Akuli Date: Tue, 28 Feb 2017 22:14:08 +0200 Subject: [PATCH 234/329] running scripts and cleaning up --- advanced/datatypes.md | 6 +++--- basics/classes.md | 2 +- basics/editor-setup.md | 13 +++++++++++++ basics/exceptions.md | 2 +- basics/files.md | 2 +- basics/if.md | 2 +- basics/modules.md | 6 +++--- basics/using-functions.md | 2 +- common.py | 2 +- images/powershell.png | Bin 0 -> 33125 bytes images/py-exe.png | Bin 0 -> 99440 bytes images/terminal.png | Bin 0 -> 778792 bytes 12 files changed, 25 insertions(+), 12 deletions(-) create mode 100644 images/powershell.png create mode 100644 images/py-exe.png create mode 100644 images/terminal.png diff --git a/advanced/datatypes.md b/advanced/datatypes.md index 4695100..12a670f 100644 --- a/advanced/datatypes.md +++ b/advanced/datatypes.md @@ -21,9 +21,9 @@ like if they were dictionaries. This programming style is known as ## Sets Let's say we have a program that keeps track of peoples' names. We can -store the names in [a list](../basics/lists.md), and adding a new name -is easy as appending to that list. Lists remember their order and it's -possible to add the same thing multiple times. +store the names in [a list](../basics/lists-and-tuples.md), and adding a +new name is easy as appending to that list. Lists remember their order +and it's possible to add the same thing multiple times. ```python >>> names = ['wub_wub', 'theelous3', 'RubyPinch', 'go|dfish', 'Nitori'] diff --git a/basics/classes.md b/basics/classes.md index a59b4d2..50649b1 100644 --- a/basics/classes.md +++ b/basics/classes.md @@ -424,5 +424,5 @@ star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). -[Previous](modules.md) | [Next](../advanced/datatypes.md) | +[Previous](exceptions.md) | [Next](../advanced/datatypes.md) | [List of contents](../README.md#basics) diff --git a/basics/editor-setup.md b/basics/editor-setup.md index 625074c..cf09f2f 100644 --- a/basics/editor-setup.md +++ b/basics/editor-setup.md @@ -232,3 +232,16 @@ you need to keep in mind when reading the rest of this tutorial: This probably felt like a lot of work, but don't worry, there will be no more things like this in the future. Now we have installed and set up all the tools we need and we can continue learning Python. + +*** + +If you have trouble with this tutorial please [tell me about +it](../contact-me.md) and I'll make this tutorial better. If you +like this tutorial, please [give it a +star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). + +You may use this tutorial freely at your own risk. See +[LICENSE](../LICENSE). + +[Previous](using-functions.md) | [Next](if.md) | +[List of contents](../README.md#basics) diff --git a/basics/exceptions.md b/basics/exceptions.md index ad241ef..946d4f1 100644 --- a/basics/exceptions.md +++ b/basics/exceptions.md @@ -466,5 +466,5 @@ star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). -[Previous](files.md) | [Next](modules.md) | +[Previous](modules.md) | [Next](classes.md) | [List of contents](../README.md#basics) diff --git a/basics/files.md b/basics/files.md index 5f0e5c8..82705d0 100644 --- a/basics/files.md +++ b/basics/files.md @@ -373,5 +373,5 @@ star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). -[Previous](what-is-true.md) | [Next](exceptions.md) | +[Previous](what-is-true.md) | [Next](modules.md) | [List of contents](../README.md#basics) diff --git a/basics/if.md b/basics/if.md index aa24fea..36ce425 100644 --- a/basics/if.md +++ b/basics/if.md @@ -271,5 +271,5 @@ star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). -[Previous](using-functions.md) | [Next](handy-stuff-strings.md) | +[Previous](editor-setup.md) | [Next](handy-stuff-strings.md) | [List of contents](../README.md#basics) diff --git a/basics/modules.md b/basics/modules.md index bb749fe..b9e3e00 100644 --- a/basics/modules.md +++ b/basics/modules.md @@ -1,7 +1,7 @@ # Modules -Let's say we want to generate a random number between 1 and -3. The random module is a really easy way to do this: +Let's say we want to generate a random number between 1 and 3. +The random module is a really easy way to do this: ```python >>> import random @@ -492,5 +492,5 @@ star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). -[Previous](exceptions.md) | [Next](classes.md) | +[Previous](files.md) | [Next](exceptions.md) | [List of contents](../README.md#basics) diff --git a/basics/using-functions.md b/basics/using-functions.md index 88899a6..123910a 100644 --- a/basics/using-functions.md +++ b/basics/using-functions.md @@ -236,5 +236,5 @@ star](../README.md#how-can-i-thank-you-for-writing-and-sharing-this-tutorial). You may use this tutorial freely at your own risk. See [LICENSE](../LICENSE). -[Previous](variables.md) | [Next](if.md) | +[Previous](variables.md) | [Next](editor-setup.md) | [List of contents](../README.md#basics) diff --git a/common.py b/common.py index 7e4b59d..a28cef7 100644 --- a/common.py +++ b/common.py @@ -39,7 +39,7 @@ import shutil -_LINK_REGEX = r'\[(.*?)\]\((.*?)\)' +_LINK_REGEX = r'!?\[(.*?)\]\((.*?)\)' def find_links(file): diff --git a/images/powershell.png b/images/powershell.png new file mode 100644 index 0000000000000000000000000000000000000000..72aaf6a532f2a57e47a56ba9f53072db71ef7af9 GIT binary patch literal 33125 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%0Af@5GS-Q52V9*mtfv>Kx^e!& jTWkIKy!62)k8jMEq)6VwRRgQTAdrNZtZ0R>p5OlfAj5<8 literal 0 HcmV?d00001 diff --git a/images/py-exe.png b/images/py-exe.png new file mode 100644 index 0000000000000000000000000000000000000000..bce75f25f4d95c32bf120d978fca9779126b7c08 GIT binary patch literal 99440 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Ɂ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%0DG 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 i}c==oP6MZ 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∓N61U(-G&hn=I7}N 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

|I@iqxk+(3KPlr#CgU~C1MYAt9ZAG|IyV3 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≪dj||DyQQQG@ zGKj_jl&u~j4v-8~9r&_8bh}V&jnK!kj7O=MI1SHn(^VE`6FJK(cFIA*&$ z4(0rPKmB}9N&T6`m!{p3%@m3D-_b+qHq$F||M?35LH~Zwy#zmwv9ZRSi0EoPsl6-4 zD(e}R3ty-g#=Eic{%c+F-JY@3AJ4pWFVUC0_ZO|OxoK@Ud7t8$-Y~1lEJRB*6rM6W zR(V6YmX@DN?s{MzE~z%pOxr+26!YdjIYCSN(%=M6w!km~XNnf$^i6K4ypdW$ZW)~) z%$tvg*j|mmqoQDGZ&&O^8D^fKV;wmS}$Kn-(-+vm3O*5Sa+K$ddw z(wFtjl)6)=9Sw~Jax!F;Wv+X_+K%NMKV4${L?-0@gVpg8$es#$|7Y9f^Z2V@!

^ zfzD4iKJi4+{mvdRJEg|iGVo7u^;XNz`zLNzmhaFvl$HNx|29JL-~QQG+76KZ{&MKqwX+sL9QnaY)xPc!8UU7d zk~4t4UpZK_u)XtR_wIOM=+BfVL5p-(x0aNS&VBy;xe4HjfX?7iAQFssL+1(~?oCg( zFX4~Ag?8*W&U)-aG2H)FOKPnAwGOBP0K*uKo}B$2$$Iu6`|&&WpEYXR5>9m02l;hE z(})k7H}v1@iz0|BxAa`dr|PPaarpS<$!rosYe(F`$uYBWzl6HqK#c=1K(vndI`u=4kQ;HZqHS$Yjnmdq$E<-%HA91` z$V6YJ(unz_4j!Y{GhV4XHo=5LnyD8YdtiXox#qm(%@_2kt6;5RFnzMo z-ONdQk2AuTO51MHeWOt^G3uB1pSMfCd6=Jj z+x?7&c=Dk<`nq<%$8Y7ie4>VE2;tKPf!{O&^h_P0=a$G+*P9O<8I%|Lg{C`rE&pzO z+o`strmk`Qx)vvOc(zZo5+j=Zm((oKckCp;^gUV3$72~IiyPh}npBmSpZ%QHG24Z- z2l)86=m{5LR$u<%`Rc{a_CKX1xHWq!!X)~?eTW>CW8bTO>C`jZ%fxxgYSR}?p1&j_ zdxZ8L5R;R=7*R-15I=J zW-)$Rl7b-46A`XA`Y6qM`zwlQkHxH^NZA^yY!s<1bfTe<4oHD;yTlU``V0Jg;w_P?d|j;p+Mp7p*iNMPB4S%SDoAD*BYjKp8RMRndUe z#?$Pqp>TpJYww*Y+ziZ4y84+ajM{5l2{?M8{sv3?#;PJMIlgShS%#Qq!t8)5+lWlX zVpPtZ)J#C7GK*p_`BdTSi>wE6oNlY}XaO~w!7dMsf_e}sZaA=mY3$_t#4I*$Lm#{VB#ZyncU-1m=;o`}E@ zq@+ejNJ&XajgW2xqy&i}Asx~+Nd}r(bxOpqVNS!HQALX9GbVJ)!SuN*k z?7Yy`$=V$zLo9}cIl=VXu^&r9c_eu2h`ZgN|f2jBs z&b>U*e5j0H*1jMKHGaxsIi9O>H4^noV1m>$u0}X7G?0i4Jrno6aF@MWK@Ue7_FPRU zWTOcm_9dpkq?lGqmsD^pzMvY7Fti?Y7ySTVD0jvzEp*;1Zxh2|2C=sZI(WOgv6f~V zNCzKSJb=R(ABPg+^!Clic-=p9)KBTPj^F)50VIHLMJitfq1oFQYV#DQw6;!z;)E4&a!|Vm+(;~ih95o+JPX1$bN+f28I?7)aFFJc|J7Yzk>_BDppUvNc z@l_l#3LF8f{oFbNFqsT69phx-3WdODX43rd)X7j}GBWNdIi%E&^t$+rH5B%$auvtz zR#zdIi7~(pi2DIv;byE*92cyPWb78dyYf+Fe5B$>ABn$sI3oak25TgF!#i74)R7YdK)p5Js7M z_d>JBvUOR5iKnNj?4=7drF+fYTBJbC-NYs%g|!a%N4vDYXitFBQCfOs7)*>a1fBbV zJuuRW2?kR-ed6_}Hl$q|rp(Wt6AmvVjVrHONqCcN4}GOt!B?vv5rqyXSYDyXMJC$X zhq|)I_lewFhk6XkeO(IcE|@PNJa!)YjAKLM;o7 z?l%)ueF-MG7E^DDqzAzYp;3W?m5jPw)YyN6P5z k?L9CURCRI+le#$HU${%mZZ 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Û=aCFKH_8>uY-=#P>KvaFGyHqr(AYdY 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

|I@iqxk+(3KPlr#CgU~C1MYAt9ZAG|IyV3 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≪dj||DyQQQG@ zGKj_jl&u~j4v-8~9r&_8bh}V&jnK!kj7O=MI1SHn(^VE`6FJK(cFIA*&$ z4(0rPKmB}9N&T6`m!{p3%@m3D-_b+qHq$F||M?35LH~Zwy#zmwv9ZRSi0EoPsl6-4 zD(e}R3ty-g#=Eic{%c+F-JY@3AJ4pWFVUC0_ZO|OxoK@Ud7t8$-Y~1lEJRB*6rM6W zR(V6YmX@DN?s{MzE~z%pOxr+26!YdjIYCSN(%=M6w!km~XNnf$^i6K4ypdW$ZW)~) z%$tvg*j|mmqoQDGZ&&O^8D^fKV;wmS}$Kn-(-+vm3O*5Sa+K$ddw z(wFtjl)6)=9Sw~Jax!F;Wv+X_+K%NMKV4${L?-0@gVpg8$es#$|7Y9f^Z2V@!

^ zfzD4iKJi4+{mvdRJEg|iGVo7u^;XNz`zLNzmhaFvl$HNx|29JL-~QQG+76KZ{&MKqwX+sL9QnaY)xPc!8UU7d zk~4t4UpZK_u)XtR_wIOM=+BfVL5p-(x0aNS&VBy;xe4HjfX?7iAQFssL+1(~?oCg( zFX4~Ag?8*W&U)-aG2H)FOKPnAwGOBP0K*uKo}B$2$$Iu6`|&&WpEYXR5>9m02l;hE z(})k7H}v1@iz0|BxAa`dr|PPaarpS<$!rosYe(F`$uYBWzl6HqK#c=1K(vndI`u=4kQ;HZqHS$Yjnmdq$E<-%HA91` z$V6YJ(unz_4j!Y{GhV4XHo=5LnyD8YdtiXox#qm(%@_2kt6;5RFnzMo z-ONdQk2AuTO51MHeWOt^G3uB1pSMfCd6=Jj z+x?7&c=Dk<`nq<%$8Y7ie4>VE2;tKPf!{O&^h_P0=a$G+*P9O<8I%|Lg{C`rE&pzO z+o`strmk`Qx)vvOc(zZo5+j=Zm((oKckCp;^gUV3$72~IiyPh}npBmSpZ%QHG24Z- z2l)86=m{5LR$u<%`Rc{a_CKX1xHWq!!X)~?eTW>CW8bTO>C`jZ%fxxgYSR}?p1&j_ zdxZ8L5R;R=7*R-15I=J zW-)$Rl7b-46A`XA`Y6qM`zwlQkHxH^NZA^yY!s<1bfTe<4oHD;yTlU``V0Jg;w_P?d|j;p+Mp7p*iNMPB4S%SDoAD*BYjKp8RMRndUe z#?$Pqp>TpJYww*Y+ziZ4y84+ajM{5l2{?M8{sv3?#;PJMIlgShS%#Qq!t8)5+lWlX zVpPtZ)J#C7GK*p_`BdTSi>wE6oNlY}XaO~w!7dMsf_e}sZaA=mY3$_t#4I*$Lm#{VB#ZyncU-1m=;o`}E@ zq@+ejNJ&XajgW2xqy&i}Asx~+Nd}r(bxOpqVNS!HQALX9GbVJ)!SuN*k z?7Yy`$=V$zLo9}cIl=VXu^&r9c_eu2h`ZgN|f2jBs z&b>U*e5j0H*1jMKHGaxsIi9O>H4^noV1m>$u0}X7G?0i4Jrno6aF@MWK@Ue7_FPRU zWTOcm_9dpkq?lGqmsD^pzMvY7Fti?Y7ySTVD0jvzEp*;1Zxh2|2C=sZI(WOgv6f~V zNCzKSJb=R(ABPg+^!Clic-=p9)KBTPj^F)50VIHLMJitfq1oFQYV#DQw6;!z;)E4&a!|Vm+(;~ih95o+JPX1$bN+f28I?7)aFFJc|J7Yzk>_BDppUvNc z@l_l#3LF8f{oFbNFqsT69phx-3WdODX43rd)X7j}GBWNdIi%E&^t$+rH5B%$auvtz zR#zdIi7~(pi2DIv;byE*92cyPWb78dyYf+Fe5B$>ABn$sI3oak25TgF!#i74)R7YdK)p5Js7M z_d>JBvUOR5iKnNj?4=7drF+fYTBJbC-NYs%g|!a%N4vDYXitFBQCfOs7)*>a1fBbV zJuuRW2?kR-ed6_}Hl$q|rp(Wt6AmvVjVrHONqCcN4}GOt!B?vv5rqyXSYDyXMJC$X zhq|)I_lewFhk6XkeO(IcE|@PNJa!)YjAKLM;o7 z?l%)ueF-MG7E^DDqzAzYp;3W?m5jPw)YyN6P5z k?L9CURCRI+le#$HU${%mZZ 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Û=aCFKH_8>uY-=#P>KvaFGyHqr(AYdY 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