1 #!/usr/bin/python3
2 ######### Variables #########
3 # Each variable in python has a "type". The variable type is not pre-defined, it is "DYNAMICALLY" resolved at run-time
4 answer = 42 # "answer" contained an integer because we gave it
5 print(answer) # as an integer!
6 # 42
7 is_it_thursday = True # These both are 'booleans' or true/false
8 is_it_wednesday = False # values
9 pi_approx = 3.1415 # This will be a floating point number
10 my_string = "Value of pi number" # This is a string datatype
11 print(pi_approx, my_string)
12 # 3.1415 Value of pi number
13 print ("my_string[0]: ", my_string[0]) # Access substrings use []
14 # my_string[0]: V
15 print ("my_string[1:5]: ", my_string[1:5]) # or indices
16 # my_string[1:5]: alue
17 # print(pi_approx + my_string)
18 ## TypeError: unsupported operand type(s) for +: 'float' and 'str'
19 print(my_string + " in four digits after .")
20 # Value of pi number in four digits after .
21 print(type(pi_approx)) # You can get the data type of any object
22 # <class 'float'>
23 # Addition, subtraction, multiplication, division are as you expect
24 float1 = 5.75; float2 = 2.25
25 print(float1 + float2); print(float1 - float2); print(float1 * float2); print(float1 / float2)
26 print(5 % 2) # Modulus
|
1 ## More Complicated Data Types
2 # LIST. What if we want to store many integers? We need a list.
3 prices = [10, 20, 30, 40, 50] # A way to define a list in place
4 colors = [] # We can also make an empty list and add to it
5 colors.append("Green")
6 colors.append("Blue")
7 colors.append("Red")
8 print(colors)
9 prices.append("Sixty") # We can also add unlike data to a list
10 print(prices) # Items in a list can be of different type
11 print(colors[0]) # Single list elements can be accessed
12 print(colors[2]) # with the operator [ ]
13 ourlist = [1, 2, 3, 4, 5] # Basic List Operations
14 print(ourlist+ourlist) # Concatenation
15 print(3*ourlist) # Repetition
16 multiplied_ourlist = [value * 3 for value in ourlist] # Membership
17 print(multiplied_ourlist) # Iteration
18 #
19 # TUPLE. A tuple is a sequence ordered data enclosed between ().
20 tuple1 = "a", "b", "c", "d"
21 tuple2 = ('physics', 'chemistry', 2022, 2023) # Data heterogeneous
22 tuple3 = (1, 2, 3, 4, 5 )
23 ikc_muh_55_info = ("IKC-MH", "55", 2023, "February", 28)
24 print("tuple1[0]: ", tuple1[0]) # access to single element
25 print("tuple2[1:5]: ", tuple2[1:5]) # access to slice
26 print(ikc_muh_55_info[0] + "." + ikc_muh_55_info[1])
27 print(tuple3)
|
1 # DICTIONARY. An unordered collection of items
2 person = {"name": "Mehmet", "age": 19}
3 print(f"{person['name']} is {person['age']} years old.")
4 print(person["name"])
5 squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
6 for i in squares:
7 print(squares[i])
8 #
9 ######### Loops in Python #########
10 # Repeat code until a conditional statement ends the loop
11 # WHILE.
12 list = [1, 1, 2, 3, 5, 8]
13 print(list)
14 print("i", "list[i]")
15 i = 0
16 while (i < len(list)): # While loops are the basic type
17 print(i, list[i])
18 i = i + 1
19 #
20 # FOR. The 'for' loop is the way to write it faster.
21 for i in range(0, len(list)):
22 print(i, list[i])
23 # Or you can do so even neater
24 for e in list:
25 print(e)
|
1 ######### Conditionals in Python #########
2 # Sometimes you want to execute code only in certain circumstances
3 answer = 42 # Change answer and see what code is executed
4 if answer == 42:
5 print('This is the answer to the ultimate question')
6 elif answer < 42:
7 print('This is less than the answer to the ultimate question')
8 else:
9 print('This is more than the answer to the ultimate question')
10 print('This print statement is run no matter what because it is not indented!')
11 # Using boolean operations. Question: How long does it take me to get to work?
12 snowy = True
13 day = "Monday"
14 rainy = True
15 if (snowy == False) and (day != "Monday"): # "and" is boolean and. True only if both are true. False otherwise
16 time = 7
17 elif (snowy == True) and (day == "Monday"):
18 time = 11
19 elif (rainy == True) or (day == "Monday"):
20 time = 9
21 print("It takes me %d minutes" % (time))
|
1 # while & if statements example
2 number = 23
3 running = True
4 while running:
5 guess = int(input('Enter an integer : '))
6 if guess == number:
7 print('Congratulations, you guessed it.')
8 running = False # this causes the while loop to stop
9 elif guess < number:
10 print('No, it is a little higher than that.')
11 else:
12 print('No, it is a little lower than that.')
13 else:
14 print('The while loop is over.')
15 print('Done') # Do anything else you want to do here
16 #
17 ######### Functions in Python #########
18 # A function is a block of code which only runs when it is called and can be run repetitively.
19 # use the def keyword, and indent because this creates a new block
20 def print_me(string): # Function definition is here
21 "This prints a passed string into this function" # The first statement of a function can be an optional statement
22 print(string)
23 return # End with the "return" keyword
24 print_me("I'm first call to user defined function!") # Function call
25 print_me("Again second call to the same function") # Function call
|
1 def changelist( mylist ):
2 """This changes a passed list into this function"""
3 mylist = [1,20,3,4] # Call by Value in Python. This assigns new reference in mylist
4 # Call by Reference when commenting this line
5 print("Address inside the function: ", id(mylist))
6 mylist.append(9)
7 mylist[0]=7
8 mylist.remove(20)
9 print("Values inside the function: ", mylist)
10 mylist = [10,20,30] # Function call
11 print("Initial values outside the function: ", mylist)
12 print("Address outside the function: ", id(mylist))
13 changelist( mylist )
14 print("Values outside the function: ", mylist)
15 # Initial values outside the function: [10, 20, 30]
16 # Address outside the function: 140390909223488 # Call by Value
17 # Address inside the function: 140390919434048 # Call by Value
18 # Values inside the function: [7, 3, 4, 9] # Call by Value
19 # Values outside the function: [10, 20, 30] # Call by Value
20 #
21 # Initial values outside the function: [10, 20, 30]
22 # Address outside the function: 140390919434048 # Call by Ref.
23 # Address inside the function: 140390919434048 # Call by Ref.
24 # Values inside the function: [7, 30, 9] # Call by Reference
25 # Values outside the function: [7, 30, 9] # Call by Reference
|
1 def step(x): # Your functions can return data if you so choose
2 if (x < 0):
3 return -1
4 elif (x > 0):
5 return 1
6 print(step(-1)) # call functions by repeating their name, and putting your variable in the parenthesis
7 print(step(1)) # Your variable need not be named the same thing, but it should be the right type
8 # what happens for x = 0?
9 print(step(0)) # Python automatically adds in a "return none" statement if you are missing one.
10 #
11 # Fix the return none issue
12 def step_v2(x):
13 if (x < 0):
14 return -1
15 elif (x >= 0):
16 return 1
17 print(step_v2(0))
|
1 ######### Importing in Python #########
2 # Just about every standard math function on a calculator has a python equivalent pre-made.
3 import math
4 float1 = 5.75
5 float2 = 2.25
6 print(math.log(float1)); print(math.exp(float2)); print(math.pow(2,5))
7 print(2.0**5.0) # There is a quicker way to write exponents
8 #
9 ######### Numpy - "The Fundamental Package for Scientific Computing with Python" #########
10 # numpy has arrays, which function similarly to Python lists.
11 #
12 # Generally, it is used a convention on names used to import packages (such as numpy, scipy, and matplotlib)
13 # import [package] as [alias]
14 import numpy as np
15 import matplotlib as mpl
16 import matplotlib.pyplot as plt
17 #
18 # Generally scipy is not imported as module because interesting functions in scipy are actually located in the submodules, so submodules or single functions are imported
19 # from [package] import [module] as [alias]
20 from scipy import fftpack
21 from scipy import integrate
|
1 import numpy as np # Here, we grab all of the functions and tools from the numpy package and store them in a local variable called np.
2 l = [1,2,3,4] # python list
3 print(l)
4 l_np = np.array(l)
5 print(l_np)
6 print(l*5) # multiplying a python list replicates it
7 print(l_np*5) # numpy applies operation elementwise
8 #
9 ## 1D array
10 a1 = np.array([1,2,3,4]) # initialized with a numpy list. Be careful with syntax. The parentheses and brackets are both required
11 print(a1)
12 print(a1.shape) # shape indicates the rank of the array
13 #
14 ## Rank 2 array
15 # row vector
16 a2 = np.array([[1,2,3,4]])
17 print(a2)
18 print(a2.shape) # shape indicates the rank of the array. this looks more like a row vector
19 # column vector
20 a3 = np.array([[1],
21 [2],
22 [3],
23 [4]])
24 print(a3)
25 print(a3.shape) # this looks more like a column vector
|
1 import numpy as np
2 a = np.array([0, 10, 20, 30, 40])
3 print(a)
4 print(a[:])
5 print(a[1:3])
6 a[1] = 15
7 print(a)
8 b = np.arange(-5, 5, 0.5)
9 print(b)
10 print(b**2)
11 1/b
12 # <input>:1: divide by zero encountered in true_divide
13 1/b[10]
14 # <input>:1: divide by zero encountered in double_scalars
15 #
16 ## Element-wise operations
17 a = np.array([1, 2, 3])
18 b = np.array([9, 8, 7])
19 print(a)
20 print(a.shape); print(b.shape)
21 print(a[0]) # Access elements from them just like a list
22 #
23 # Element-wise operations. This is different from MATLAB where you add a dot to get element wise operators.
24 c = a + b
25 d = a - b
26 e = a * b
27 f = a / b
28 print(c); print(d); print(e); print(f)
|
1 import numpy as np
2 # What about multi-dimensional arrays? Matrices! You just nest lists within lists
3 A = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]]); print(A)
4 # [[1 2 3]
5 # [4 5 6]
6 # [7 8 9]]
7 print(A.shape)
8 # (3, 3)
9 B = np.array([[1, 1, 1],[2, 2, 2],[3, 3, 3]]); print(B)
10 C = np.matmul(A, B); print(C) # Then matrix multiplication
11 print(np.linalg.det(A)) # Or determinants
12 #
13 import numpy as np
14 p = np.poly1d([3,4,5])
15 print(p)
16 # 2
17 # 3 x + 4 x + 5
18 print(p*p)
19 # 4 3 2
20 # 9 x + 24 x + 46 x + 40 x + 25
21 print(p.integ(k=6))
22 # 3 2
23 # 1 x + 2 x + 5 x + 6
24 print(p.deriv())
25 # 6 x + 4
26 p([4, 5])
27 # array([ 69, 100])
|
1 ##### SciPy is a scientific computation library in Python #####
2 # A collection of functions to perform basic scientific programming and data analysis
3 # Integrate a list of numbers using scipy you might use a function called trapz from the integrate package
4 import scipy.integrate as integ
5 # from scipy import integrate as integ
6 result = integ.trapz([0, 1, 2, 3, 4, 5])
7 print(result)
8 # Integrate sin(x) from 0 to Pi you could use the quad function
9 import numpy as np
10 import scipy.integrate as integ
11 result = integ.quad(np.sin, 0, np.pi)
12 print(result)
13 #
14 ######### Matplotlib #########
15 # Matplotlib, like many Python packages, is organized into a number of "modules" (essentially subsets of functions).
16 import matplotlib.pyplot as plt # import packages with alias
17 # from matplotlib import pyplot as plt
18 x_vals = [-2, -1, 0, 1, 2]
19 y_vals = [-4, -2, 0, 2, 4]
20 print(x_vals,y_vals)
21 plt.xlabel('abscissa') # add a label to the x axis
22 plt.ylabel('ordinate') # add a label to the y axis
23 plt.title('A practice plot') # add a title
24 plt.plot(x_vals, y_vals, marker="o")
25 plt.savefig('plot_0.png') # save the figure to the current diretory as a png file
26 plt.show()
|
1 import matplotlib.pyplot as plt
2 import numpy as np
3 t = np.arange(0.0, 2.0, 0.01)
4 print(t)
5 print(t.shape)
6 print(len(t))
7 s = 1 + np.sin(2*np.pi*t) # Degree to Radian conversion
8 print(s)
9 plt.plot(t, s)
10 plt.xlabel('Time (s)'); plt.ylabel('Voltage (mV)')
11 plt.title('Voltage vs Time')
12 plt.grid(True)
13 plt.savefig("test.png")
14 plt.show()
15 #
16 # Multiplotting
17 import numpy as np
18 import matplotlib.pyplot as plt
19 x1 = np.linspace(0.0, 5.0); x2 = np.linspace(0.0, 2.0)
20 y1 = np.cos(2*np.pi*x1)*np.exp(-x1); y2 = np.cos(2*np.pi*x2)
21 plt.subplot(2, 1, 1) # use the subplot function to generate multiple panels within the same plotting window
22 plt.plot(x1, y1, 'o-')
23 plt.title(' 2 subplots')
24 plt.ylabel('Damped oscillation')
25 plt.subplot(2, 1, 2)
26 plt.plot(x2, y2, '.-')
27 plt.xlabel('time (s)'); plt.ylabel('Undamped')
28 plt.show()
|
1 # importing all functions from pylab module
2 from pylab import * # Not the preferred methodology. Means to bring everything in to the top level name space
3 x = arange(1, 10, 0.5); print(x)
4 xsquare = x**2; print(xsquare)
5 xcube = x**3; print(xcube)
6 xsquareroot = x**0.5; print(xsquareroot)
7 figure(1) # open figure 1
8 plot(x, xsquare) # basic plot
9 xlabel('abscissa') # add a label to the x axis
10 ylabel('ordinate') # add a label to the y axis
11 title('A practice plot') # add a title
12 savefig('plot_1.png') # save the figure to the current diretory
13 figure(2) # open a second figure
14 plot(x, xsquare,'ro',x,xcube,'g+--') # Two plots. Red circles with no line. Green plus signs joined by a dashed curve
15 xlabel('abscissa') # x and y labels, title
16 ylabel('ordinate') # x and y labels, title
17 title('More practice') # x and y labels, title
18 legend(('squared', 'cubed')) # add a legend
19 savefig('plot_2.png') # save the figure
20 figure(3) # open a third figure
21 subplot(3,1,1); plot(x,xsquareroot,'k*:')# Black stars+dotted line
22 title('square roots') # add a title
23 subplot(3,1,2); plot(x, xsquare,'r>-') # Red triangles+dashed line
24 title('squares') # add a title
25 subplot(3,1,3); plot(x, xcube,'mh-') # Magenta hexagons+solid line
26 title('cubes') # add a title
27 savefig('plot_3.png') # save the figure
28 show()
|
1 ######### How to find documentation #########
2 # The dir(module) function can be used to look at the namespace of a module or package, i.e. to find out names that are defined inside the module
3 # The help(function) function is available for each module/object and allows to know the documentation for each module or function
4 #
5 import math
6 dir()
7 dir(math.acos)
8 help(math.acos)
9 import matplotlib.pyplot
10 dir(matplotlib.pyplot)
|