Difference between revisions of "Learn Python from Khan Academy"

From Ittichai Chammavanijakul's Wiki
Jump to navigation Jump to search
 
Line 15: Line 15:
 
c = b[:]  #[5, 13, 15]
 
c = b[:]  #[5, 13, 15]
 
print (c)
 
print (c)
d = b[0:2] #[5, 13]  m=start from, n=up to but not included
+
d = b[0:2] #[5, 13]  [m:n] m=start from, n=up to but not included
 
print (d)
 
print (d)
  
Line 42: Line 42:
 
     i = i + 1
 
     i = i + 1
  
 +
# ==========================================================
 
# String
 
# String
 
a = "This is a string"
 
a = "This is a string"
Line 63: Line 64:
  
 
# Sample of Factorial Program
 
# Sample of Factorial Program
 +
 +
# Window pop for an input
 
#number = input("Enter a non-negative integer to take the factorial of:")
 
#number = input("Enter a non-negative integer to take the factorial of:")
 
#number = eval(input("Enter a non-negative integer to take the factorial of:")) #python 3
 
#number = eval(input("Enter a non-negative integer to take the factorial of:")) #python 3
Line 76: Line 79:
 
# ==========================================================
 
# ==========================================================
 
# Define a function
 
# Define a function
def factorial(number):
+
# Interactive
 +
def factorial1(number):
 
     product = 1
 
     product = 1
 
     for i in range(number):
 
     for i in range(number):
Line 84: Line 88:
 
# Use of function
 
# Use of function
 
user_input = 5
 
user_input = 5
factorial_of_user_input = factorial(user_input)
+
factorial_of_user_input = factorial1(user_input)
 
print (factorial_of_user_input)
 
print (factorial_of_user_input)
print (factorial(4))
+
print (factorial1(4))
  
# Above is just interative
+
# Now we are doing the "Recursive" Factorial function
# Now we are showing "Recursive" Factorial function
 
 
# Is it faster?
 
# Is it faster?
def factorial (number):
+
def factorial2 (number):
 
     if number <= 1: #base case
 
     if number <= 1: #base case
 
         return 1
 
         return 1
 
     else:
 
     else:
         return number * factorial(nummber - 1)
+
         return number * factorial2(nummber - 1)
  
# Comparing Iterative vs Recursive Functions
+
# Comparing Iterative vs Recursive Functions?
  
 
# Fibonacci numbers
 
# Fibonacci numbers
Line 104: Line 107:
 
# Golden Ratio = two numbers next to each other
 
# Golden Ratio = two numbers next to each other
 
#              having the later divided by the former
 
#              having the later divided by the former
#  21/13 ~ Golden number or Golden ratio
+
#  21/13 ~ Golden ratio
#  55/34 ~ even closer to Golden number or Golden ratio
+
#  55/34 ~ even closer to Golden ratio
#  When a > b,  (a+b)/a = a/6
+
 
 +
#  When a > b,  (a+b)/a = a/b = GOlden ratio
  
 
# Assignment
 
# Assignment
Line 138: Line 142:
 
         return (fibonacci_recursive2(n-1)+fibonacci_recursive2(n-2))
 
         return (fibonacci_recursive2(n-1)+fibonacci_recursive2(n-2))
 
#?? NameError: global name 'fibonacci_recursive' is not defined
 
#?? NameError: global name 'fibonacci_recursive' is not defined
 +
 
n = 5
 
n = 5
 
print ("Fibonacci of " + str(n) + " is " + str(fibonacci_recursive2(n)))
 
print ("Fibonacci of " + str(n) + " is " + str(fibonacci_recursive2(n)))
Line 176: Line 181:
 
print (b)
 
print (b)
  
 +
# Do a bit improvement
 
def sort_insertion2(list):
 
def sort_insertion2(list):
 
     for index in range(1,len(list)):
 
     for index in range(1,len(list)):
Line 187: Line 193:
 
sort_insertion2(b)
 
sort_insertion2(b)
 
print (b)
 
print (b)
 
 
</pre>
 
</pre>
 
[[Category:Python]]
 
[[Category:Python]]

Latest revision as of 13:39, 20 October 2013

# Khan Academy
# https://www.khanacademy.org/science/computer-science > Python Programming
print (3+7)
print (type(3+7))  #<class 'int'>
print ("Hello")
print (type("Hello")) #<class 'str'>

# List
a = [7,13,15]
a[0] = 5
b = a
print (b)

c = b[:]  #[5, 13, 15]
print (c)
d = b[0:2] #[5, 13]  [m:n] m=start from, n=up to but not included
print (d)

d.append(10) #[5, 13, 10]
print (d)

# Range
range(3) #[0, 1, 2]
range(1,6)  #[1, 2, 3, 4, 5]  up to but not including the upper
range(0,8,2) #[0, 2, 4, 6]

# ==========================================================
# For loop
sum = 0
for i in range(10):
    sum = sum + i
    print (sum)

# ==========================================================
# While loop
sum = 0
i = 0
while i < 10:
    sum = sum + i
    print (sum)
    i = i + 1

# ==========================================================
# String
a = "This is a string"
len(a)
b = "This is another string"
a+b #Concatenate

b.split(' ') #['This', 'is', 'another', 'string']
b.find('no') #9
b.find('is') #2

b.replace('is','as') #'Thas as another string'  Did not replace b

match_string = "3+4*2"
print (match_string)
eval(match_string) #11
eval(match_string +'1') #87

expression_string = "a + b"
eval(expression_string)

# Sample of Factorial Program

# Window pop for an input
#number = input("Enter a non-negative integer to take the factorial of:")
#number = eval(input("Enter a non-negative integer to take the factorial of:")) #python 3
# python 3 = the result of input is string as is
# python 2 = the result will be evaluated automatically
number = 2
product = 1
for i in range(number):
    product = product * (i+1)

print (product)

# ==========================================================
# Define a function
# Interactive
def factorial1(number):
    product = 1
    for i in range(number):
        product = product * (i+1)
    return product

# Use of function
user_input = 5
factorial_of_user_input = factorial1(user_input)
print (factorial_of_user_input)
print (factorial1(4))

# Now we are doing the "Recursive" Factorial function
# Is it faster?
def factorial2 (number):
    if number <= 1: #base case
        return 1
    else:
        return number * factorial2(nummber - 1)

# Comparing Iterative vs Recursive Functions?

# Fibonacci numbers
# 0,1,1,2,3,5,8,13,21,34,55
# Add previous two numbers to be new number
# Golden Ratio = two numbers next to each other
#               having the later divided by the former
#  21/13 ~ Golden ratio
#  55/34 ~ even closer to Golden ratio

#  When a > b,  (a+b)/a = a/b = GOlden ratio

# Assignment
#   fibonacci(1) = 1
#   fibonacci(3) = 2
#   fibonacci(0) = 0

# Iterative Fibonacci Function
def fibonacci_interative(n):
    print ("Fibonacci: " + str(n))
    terms = [0,1]
    i = 2
    while i <=n:
        terms.append(terms[i-1]+terms[i-2])
        i = i+1
    return terms[n]

# Recursive Fibonacci Function
def fibonacci_recursive1(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return (fibonacci_recursive1(n-1)+fibonnaci_recursive1(n-2))

def fibonacci_recursive2(n):
    if n<2:
        return n
    else:
        return (fibonacci_recursive2(n-1)+fibonacci_recursive2(n-2))
#?? NameError: global name 'fibonacci_recursive' is not defined

n = 5
print ("Fibonacci of " + str(n) + " is " + str(fibonacci_recursive2(n)))

# Sort
a = [7,1,3,5,2,8]
a.sort()

# Insertion Sort
# Starting with the 2nd position and compare with what's before it
# 2nd position: [7,"3",1,2,4,6] > ["3",7,1,2,4,6]
# 3rd position: [3,7,"1",2,4,6] > [3,"1",7,2,4,6] > ["1",3,7,2,4,6]
# 4th position: [1,3,7,"2",4,6] > [1,3,"2",7,4,6] > [1,"2",3,7,4,6]
# 5th position: [1,2,3,7,"4",6] > [1,2,3,"4",7,6]
# 6th position: [1,2,3,4,7,"6"] > [1,2,3,4,"6",7]
# STOP

def sort_insertion(list):
    for index in range(1,len(list)):
        value = list[index]
        i = index - 1
        while i >= 0:
            if value < list[i]:     # since the right number is less than the left
                list[i+1] = list[i] # swap position - right number gets left number
                list[i] = value     # left nymber gets right number
                i = i - 1
            else:
                break

a = [7,1,3,5,9,2,3]
print (a)
sort_insertion(a)
print (a)

b = [56,11,32,511,19,21,23]
print (b)
sort_insertion(b)
print (b)

# Do a bit improvement
def sort_insertion2(list):
    for index in range(1,len(list)):
        value = list[index]
        i = index - 1  # i is the previous value
        while i >= 0 and value < list[i]: # since the right number is less than the left
            list[i+1] = list[i] # swap position - right number gets left number
            list[i] = value     # left nymber gets right number
            i = i - 1

sort_insertion2(b)
print (b)