Python intro notes

This commit is contained in:
Torstein Nordgård-Hansen 2019-09-27 00:06:03 +02:00
parent ea7fd79d11
commit c9cc068203
17 changed files with 471 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
.idea
.vscode
__pycache__

View File

@ -0,0 +1,4 @@
# Notes for introductory to Python
The cource was held by Torstein N-H 27.09.2019.
These notes were used loosely and are included for future reference.

View File

@ -0,0 +1,44 @@
# Tools needed to work efficiently with python
## Python
The interpreter, needed to run any python program.
### MacOS / Linux / BSD
Install the newest python available from your package manager.
At the moment 3.6 or 3.7.
### Windows / MacOS
Install the newest version from [the python foundation](https://www.python.org/downloads/).
## PIP
A package manager for python libraries (and more). Maybe the best part of python.
It comes with most new installations of python, if not try the following:
### MacOS / Linux / BSD
Install the newest python available from your package manager.
Note that, if python 2 is installed pip will install packages for python2 and pip3 packages for python3.
### Windows
It might come with the python installation.
Try
```
python3 -m pip install <package name>
```
If not, try installing it from wsl.
If all else fails, it probably includes running random binary scripts as administrator, good luck.
## A good editor
Learning python is mostly useless if you cant write something in it, find a good editor.
Recommendations:
- PyCharm
- Spyder
- Thonny
- VSCode (or VSCodium)
- Atom
- Emacs
- Vim
- Notepad++

View File

@ -0,0 +1,34 @@
"""
This is a multiline string
It is customary to use start the file with a multiline string for documentation.
"""
"And this a single line string"
'Both types of string can be written with single quotes as well'
"This string contains a \" escaped with a \\ "
"If i want a newline\nI can get it along with a\t\tdouble tab in the middle of a line."
r"This is a literal string, i can write \n without a newline."
# Comments are nicer for documentation as they are harder to mistake for code.
# This is an integer
4
# This is a float
3.14
# And this an integer bound to a variable
a = 4
# Most data can be printed with the print function
print("Hello world")
# Arithmetic works as expected
print(4 * 4 + 1 * 3)
# Note that exponentials and rounding are weird
print(3 ** 2)
print(int(2.9))

View File

@ -0,0 +1,69 @@
"""
Examples of conditionals and loops in python
"""
# This is an if statement
if True:
print("This is true")
print("Noe mer her...")
# And this another one
if False:
print("This will never be printed")
# Conditions can be more complex
if 1 in [3, 2, 1, 0] and "a" != "B":
print("This should happen even though it is needlessly complex")
# And have multiple terms
if False:
pass
elif 2 + 2 == 5:
five = 2 + 2
else:
pass
# Loops also exist, the most normal is for
for x in range(1, 11):
for y in range(1, 11):
print(x * y, end=" \t\t")
print()
for x in ["a", "b", "c"]:
print(x)
# Another example
for y in ["Det", "var", "en", "gang", "en", "liste"]:
print(y, end=" ")
print()
# Loops can have unknown length
i = 0
while i <= 10:
print("i is <= 10")
i += 1
# The can also be made infinite
while True:
if i < 5:
break
print("i > 5")
if False:
continue
i -= 1
# Loops can have an else clause
while True:
break
else:
print("This wont happens because of the break.")
for i in range(2):
if i < -1000:
break
else:
print("This will be printed because the loop exits from its condition, not a break.")

View File

@ -0,0 +1,47 @@
"""
About functions in python
"""
# Users may define their own custom functions
def temp():
return 3
# And they may be called after they are defined
print(temp())
# They take arguments
def temp2(x, y):
return x * y
temp2(1, 4)
# And be used lazily
def foo(y):
return bar(y) - 1
# foo may not be called here because bar does not yet exist
# print(foo(5))
def bar(x):
return x + 1
print(foo(5))
# Type hinting is supported (but not enforced)
def strong_typed(text: str, n: int) -> str:
nstr = str()
for _ in range(n):
nstr += text
return nstr
print(strong_typed("Hello world ", 4))
# Functions can take any number of arguments, optional arguments and and keyword arguments
def fancy_func(a, b="Hello", c: int = 8) -> None:
d = a + c
print(b, d)
fancy_func(1, c=6)
# They don't even need names
print((lambda x, y : x * y)(2, 3))
# Though lambdas are cool, they are rarely used in python
# Decorators are often cleaner

View File

@ -0,0 +1,17 @@
"""
In python, all things are object.
This means that all functionality associated with a piece of data is stored with the data.
"""
# Making a new integer with the int constructor:
a = int(5)
b = int(4)
# Adding them together
print(a + b)
# Or without the read macro and function call:
print(a.__add__(b).__repr__())
# The most useful method ever
print("Hello {}\nI am {}".format("people who are still here", "the master of the .format method on strings"))

View File

@ -0,0 +1,32 @@
"""
Skippable if out of time, hot to define ones own objects.
"""
from __future__ import annotations
class MyVector(list):
a = 0
def __init__(self, dim: int, data: list):
if dim != len(data):
raise ValueError("Wrong dimensions in the vector!!!")
self.dim = dim
self.data = data
def __add__(self, other: MyVector):
if self.dim != other.dim:
return None
else:
return MyVector(self.dim, [a + b for a, b in zip(self.data, other.data)])
def __repr__(self):
return "A vector of dimension {} with data:\n{}".format(self.dim, self.data)
a = MyVector(3, [1, 2, 3])
b = MyVector(3, [-1, -4, 8])
print(a)
print(b)
print(a + b)

View File

@ -0,0 +1,79 @@
"""
Good built in data structures is among the most important things in a good language.
Python has several.
"""
# The list
a = list()
a = []
a = [1, 3, 4, 5 ,6]
# They act like expected
for item in a:
print(item)
print("\n\n")
# They can contain different types
b = [1, "Hello", a, 3.14, lambda a : a + 1]
for item in b:
print(item)
# And be mutated
a.append(8)
a.extend(["Hello", "World"])
a[1] = 100
print(a)
print(a[:5])
print("\n\n\n")
# They are objects and can be inherited as such
print(dir(a))
class MyList(list):
def __repr__(self):
return "This is a useless representation"
#pass
b = MyList(a)
print(b)
# The dictionary
# A mutable fast type agnostic hashed map
a = dict()
a = {}
a = {2: "Hello world", 3: b, 8: 6.12345}
# Note that all keys must be hashable
# a[["Not working"]] = 3
a[3] = ["This might work", "I think"]
print(a)
# They can be mutated
a[2] = 5
del a[3]
print(a)
# The keys and values can be easily red
print(a.keys())
print(a.values())
# The set
# They act like keys in dictionaries, assuming this makes using them easy
a = set()
a = {'apple', 'orange', 'apple', 'banana', 3, 3, 3, 3, 3}
print(a)
# Lists and set can be made from each other
a = [1, 2, 3, 2, 1, 2, 3, 2, 1]
b = set(a)
c = list(b)
print(a)
print(b)
print(c)

View File

@ -0,0 +1,32 @@
"""
Some useful functions that should be mentioned
Most are used on lists
"""
# zip
for a, b in zip([1, 2, 3, 4], [3, 2, 1]):
print("Found {} and {}, added it is {}.".format(a, b, a+b))
# map
print()
mapped = map(lambda x: 2 * x, [1, 2, 0])
print(mapped)
print(list(mapped))
print()
mapped = map(lambda a, b: a - b, [5, 3, 0], [2, 3, -5, 8])
print(mapped)
print(list(mapped))
# filter
print()
filtered = filter(lambda x: x == 3 or x is not None and x % 3 == 1, [3, 4, None, 11, 12, 13])
print(filtered)
print(list(filtered))
# div. normal utils
print()
print(len([1, 2, 3]))
print(max([1, 2, 3]))
print(min([1, 2, 3]))
print(sorted([1, 3, 2]))

View File

@ -0,0 +1,32 @@
"""
IO is boring but useful, here is how.
"""
# Input and output from the user is easy.
a = input("Some prompt here: ")
print(a)
# Input from files are a bit more tricky
# The way taught in ITGK
f = open("file.txt")
f.close()
# The correct way
with open("file.txt", "r") as f:
lines = f.readlines()
for line in lines:
print(line)
# Or even better
with open("file.txt", "r") as f:
for line in f:
print(line)
# Even better
with open("newFile.txt", 'w') as f:
f.write("This is a new file\nI like it.\n")
# There are four modes of reading, r, w, a and r+

View File

@ -0,0 +1,21 @@
"""
It is easier to reuse code and structure projects in multiple files.
"""
# We can import our own code
funcs = __import__("03_functions")
print("\n\n")
funcs.fancy_func(3)
print("\n\n")
import pandas
import numpy as np
print(np.pi)
from numpy import e
print(e)
# Libraries makes life easier, use pip for everything always

View File

@ -0,0 +1,45 @@
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ornare suspendisse sed nisi lacus sed viverra tellus. Faucibus scelerisque eleifend donec pretium vulputate sapien. Mollis
nunc sed id semper. Quisque id diam vel quam elementum pulvinar etiam. Nibh sit amet commodo nulla facilisi nullam vehicula.
Porta lorem mollis aliquam ut porttitor. Senectus et netus et malesuada. Feugiat nibh sed pulvinar proin gravida hendrerit.
Sollicitudin aliquam ultrices sagittis orci a scelerisque purus semper eget. Arcu ac tortor dignissim convallis aenean et
tortor. Dictum non consectetur a erat nam at. Sagittis purus sit amet volutpat consequat mauris nunc. Nullam non nisi est
sit amet facilisis. Mi eget mauris pharetra et. Id consectetur purus ut faucibus pulvinar elementum integer enim. Enim
facilisis gravida neque convallis a cras semper auctor neque. Nunc vel risus commodo viverra maecenas accumsan lacus vel.
Consequat id porta nibh venenatis cras sed felis eget.
Mauris cursus mattis molestie a iaculis at. Enim nunc faucibus a pellentesque sit amet porttitor. Et ligula ullamcorper
malesuada proin libero nunc consequat. Pretium vulputate sapien nec sagittis aliquam malesuada bibendum arcu. Quam
viverra orci sagittis eu volutpat. Tellus in hac habitasse platea dictumst vestibulum rhoncus. Commodo ullamcorper a
lacus vestibulum. Mi eget mauris pharetra et ultrices. Quisque non tellus orci ac. Adipiscing bibendum est ultricies
integer quis auctor elit. Malesuada fames ac turpis egestas sed tempus urna et. Iaculis nunc sed augue lacus viverra
vitae congue eu consequat.
Sit amet nisl purus in mollis nunc sed id. Viverra nibh cras pulvinar mattis nunc sed blandit libero volutpat. Elit
pellentesque habitant morbi tristique senectus et netus. Nec feugiat nisl pretium fusce id velit ut tortor. Et netus et
malesuada fames ac turpis egestas sed tempus. Sapien nec sagittis aliquam malesuada. Malesuada proin libero nunc
onsequat interdum varius sit amet. Sit amet porttitor eget dolor morbi non arcu risus. Id diam vel quam elementum.
Massa id neque aliquam vestibulum morbi blandit cursus risus at. Morbi leo urna molestie at elementum eu facilisis sed.
Odio euismod lacinia at quis. Et tortor consequat id porta nibh. Laoreet suspendisse interdum consectetur libero id
faucibus nisl tincidunt eget. Lacus suspendisse faucibus interdum posuere lorem ipsum dolor sit. Id nibh tortor id
aliquet lectus proin. Pretium nibh ipsum consequat nisl vel pretium lectus quam id. Vitae congue eu consequat ac felis
donec et odio. Mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus et.
Vel eros donec ac odio tempor orci dapibus. Euismod lacinia at quis risus sed vulputate odio ut enim. Vel pharetra vel
turpis nunc eget. Justo nec ultrices dui sapien. Donec enim diam vulputate ut pharetra sit amet. Consectetur adipiscing
elit duis tristique. Ipsum nunc aliquet bibendum enim facilisis gravida neque convallis. Lorem mollis aliquam ut
porttitor leo a diam sollicitudin tempor. Integer vitae justo eget magna fermentum iaculis eu. Id faucibus nisl tincidunt
eget nullam non nisi. Tempus iaculis urna id volutpat lacus. Diam sit amet nisl suscipit adipiscing bibendum est.
Tellus orci ac auctor augue mauris. Accumsan sit amet nulla facilisi morbi tempus iaculis urna id. Fermentum iaculis eu
non diam phasellus vestibulum lorem sed. Iaculis urna id volutpat lacus laoreet non curabitur gravida. Id faucibus nisl
tincidunt eget.
Massa vitae tortor condimentum lacinia quis vel eros. Pulvinar pellentesque habitant morbi tristique senectus et netus.
Tincidunt dui ut ornare lectus sit amet est placerat in. Pellentesque elit eget gravida cum sociis. Malesuada fames ac
turpis egestas sed. Et odio pellentesque diam volutpat commodo sed egestas egestas fringilla. Augue lacus viverra vitae
congue eu consequat ac felis. Tempor orci dapibus ultrices in iaculis nunc sed augue. Odio ut enim blandit volutpat
maecenas volutpat blandit aliquam. Accumsan sit amet nulla facilisi morbi tempus. Habitant morbi tristique senectus
et netus et malesuada fames. Elementum facilisis leo vel fringilla est ullamcorper eget nulla facilisi. Mi tempus
imperdiet nulla malesuada pellentesque elit eget. Tristique sollicitudin nibh sit amet. Porttitor massa id neque aliquam
vestibulum morbi blandit cursus. Proin sed libero enim sed. Neque gravida in fermentum et sollicitudin ac orci.
Neque volutpat ac tincidunt vitae semper quis lectus nulla. A diam maecenas sed enim ut sem viverra.

View File

@ -0,0 +1,6 @@
Kurstekst for introkurs i Python
Har du lyst til å lære å programmere i Python? Synes du ITGK-forelesningene går for sent, eller ønsker du å pusse opp glemte kunnskaper?
Da er dekke kurset for deg.
Kurset går gjennom språkets oppbygging fra kommentarer til overlagring av operatorer, ingen forkunnskaper kreves.

View File

@ -0,0 +1,2 @@
This is a new file
I like it.

View File

@ -0,0 +1,3 @@
asn1crypto<=0.24.0
astroid>=2.2.5
attrs

View File

@ -0,0 +1 @@
pi