11 KiB
What we'll learn
You'll learn three things at the same time so don't get discouraged if it feels a bit much at the start. Everybody's issues will be in these three different domains and at the beginning it can be difficult to differentiate between them. Keep this in mind, everybody has to go through this stage and the click comes at different times for different people but everybody clicks at some point! The three new things you'll learn:
- the concepts of programming, most notably Object Orientated Programming (OOP)
- the syntax of one particular language, in our case Python3
- the tools needed to start programming in our language of choice
Within each of these topics there are subtopics but there are not bottomless! Below is a small overview of how I would subdivide them.
Concepts
The subtopics behind the concept of programming can be sliced (in no particular order) as follows:
- objects or OOP (Object Orientated Programming)
- abstraction
- encapsulation
- inheritance
- polymorphism
- variables (which are not boxes in python3)
- conditional logic
- functions
- loops
The concept behind these topics are the same in most languages, it's just how you write them that is different. This how is part of the syntax of the language.
Syntax
In computer science, the syntax of a computer language is the set of rules that defines the combinations of symbols that are considered to be correctly structured statements or expressions in that language. This applies both to programming languages, where the document represents source code, and to markup languages, where the document represents data. The syntax of a language defines its surface form.[1] Text-based computer languages are based on sequences of characters,
The quote above is taken shamelessly from wikipedia.
Tools
Writing code
Scripts are text files, plain and simple. So in order to write a Python3 script all we need is a text editor. Nano, vim, notepad++ all do a good job of editing plain text files but some make it easier than others. You've noticed that vim colors the code of a shell script no? One of the many features of an IDE is syntax highlighting. It colors things such as keywords which makes our life so much nicer when writing code. We'll come back to these features in a bit.
Running code
In order to run Python3 code you need the Python3 interpreter. This is because when you execute your script, the interpreter will read and execute each line of the text file line by line.
Most people who want to write and run Python3 code, or any language for that matter, will install an Integrated Development Environment to do so. There are no rules as to what has to be included for a program to qualify as an IDE but in my opinion they should include:
- syntax highlighting
- autocomplete
- goto commands such as goto definition, goto declaration, goto references
- automatic pair opening and closing
- builtin help navigation
There is a plethora of IDE's available and you can't really make a wrong choice here, but to make the overall learning curve a bit less steep we'll start out with a user friendly IDE, pycharm.
The python3 shell
TODO animated overview of the shell and the world of OOP
Installing pycharm
TODO
Your first project
In almost any language you'll find a helloworld program. It serves to illustrate a very basic working script or program to showcase the syntax. In python a helloworld is done as such.
print("Hello World!")
Just for reference below are a few helloworld programs in different languages.
First c#
then c
and last but not least javascript
.
Console.WriteLine("Hello World!");
#include <stdio.h>
int main() {
printf("Hello World!");
return 0;
}
alert( 'Hello, world!' );
How to execute
- within pycharm
- from the command line
Simple printing
The most basic printing can be done by calling the print
function.
In python a call is symbolized by the ()
.
In practice this becomes as follows.
print("hello world")
print("my name is Wouter")
print("I'm", 35, "years old")
🏃 Try it
Try printing different lines and with combinations of different object types such as int
, float
and str
.
What happens if you add (+
) values to one another?
We can also print the objects referenced by variables. A simple example:
name = "Wouter"
age = "35"
print("Hello, my name is", name, "and I'm", age, "years old.")
While it works perfectly well it's not super readable. We can improve the readability by using either string replacement or string formatting. My personal preference is string formatting.
🏃 Try it
Have a look at both ways illustrated below and try them out.
String replacement
name = "Wouter"
age = "35"
print(f"Hello, my name is {name} and I'm {age} years old.")
String formatting
name = "Wouter"
age = "35"
print("Hello, my name is {} and I'm {} years old.".format(name, age))
Some links to read up
Taking input
The first builtin function we saw is print
which can be used to signal messages to the user.
But how can we get some information from the user?
This is done with the input
function.
If we open up a python shell we can observe it's behaviour.
>>> input()
hello world
'hello world'
>>>
It seems to echo back what we type on the empty line.
If we take this idea and add it to a script the behaviour changes slightly.
The prompt appears but when we hit enter
the text is not printed.
This is one of the slight nuances between running scripts and using the shell.
The shell is more verbose and will explicitly tell you what a function returns, unless it doesn't return anything.
Functions can return something
So, functions can return something but how can we use the returned objects?
This is where variables come in handy.
The input
function will always return an object of type str
.
If we want to use this object later in our code we need to add a post-it to it so we can reference it later.
Remember that the object is created by the function call, and we add the reference after the object's creation.
print("What is your name? ")
answer = input()
print("Well hello", answer, "!")
When looking at the code block above did you notice the empty space I added after my question? Can you tell me why I did that?
🏃 Try it
Try playing around with the input
function and incorporate the different ways to print with it.
Ask multiple questions and combine the answers to print on one line.
Functions can take arguments
Some, if not most, functions will take one or more arguments when calling them.
This might sound complicated but you've already done this!
The print
function takes a-message-to-print as an argument, or even multiple ones as you probably noticed when playing around.
The input
function can take arguments but as we've seen does not require an argument.
When looking at the documentation we can discover what the function does, how to call the function and what it returns.
⛑ CTRL-q opens the documentation in pycharm
Help on built-in function input in module builtins:
input(prompt=None, /)
Read a string from standard input. The trailing newline is stripped.
The prompt string, if given, is printed to standard output without a
trailing newline before reading input.
If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
On *nix systems, readline is used if available.
We can add one argument inside the input
call which serves as a prompt.
Now which type
should the object we pass to input
be?
The most logical type would be a str
that represents the question to ask the user no?
Let's try it out.
Taking input and evaluation
TODO say hello plus ask for age
- slightly insist on blocking nature of
input()
Conditional logic
- introduction to
if
,elif
andelse
Class string methods
Coding challenge - Celsius to Fahrenheit converter
A text based adventure game
TODO mini text based adventure game to point out the complexity of conditional logic and flow control
Creating your own functions
Functions that do something
TODO recipe with variable flavor (chocolate, vanilla, ...) TODO pretty_print
Variable scope
Functions that return something
TODO basic math functions
Using the standard library
TODO import random exercise (digital dice) TODO import datetime exercise (will it be Sunday) TODO simple ROT13 cryptography with multiple libs
Coding challenge - Memento Mori calculator
Writing your first library
TODO import pretty print and digital dice
What are libraries?
How do we write libraries?
What is __name__ == "__main__"
?
Anatomy of a program
TODO imports, functions, execution
While loop
TODO guess the number exercise
Lists
Creating lists
Picking elements
Slicing lists
For loop
TODO say hello to my friends exercise
Coding challenge - Cheerleader chant
TODO nested for loop exercise
Handling files
Reading from a file
Writing to a file
csv, JSON and yaml
pickle
Coding challenge - Login generator
TODO write a login generator as a library with a cli as program BONUS argparse, save to file, read from file
Dictionaries as data containers
TODO adapt the login generator to output a dict
Creating our own classes
Class examples
TODO simple animal or vehicle exercise TODO task manager
Class inheritance
TODO shapes and surfaces TODO superhero game
Improve the login generator
TODO convert the login generator to a class
Infinite programs
- insist on the nature of scripts we did up until now
Logic breakdown of a simple game
TODO hangman exercise
Trivial pursuit multiple choice game
TODO db
Introduction to the requests
library
Threading
TODO add a countdown timer to the multiple choice game