New terms from chapter 2 (Think Python: Think Like a Computer Scientist)
- Value: Is what a program needs to work. So far, I know two type of values: numbers and letters.
- Value types:
– The type of value of the number 2 is an integer (‘int’)– The type of value of the letters ‘Hello World!’ is a a string (‘str’). We can view it as a string/chain of letters
– Numbers with a decimal point belong to a value type called float (‘float’) because these numbers are represented in a format called floating-point.
NOTE: If I want to know what type of value it is, we can ask the interpreter. For instance:
Example no1:
I ASK: >>> type (‘Hello, World!’)
The interpreter answers: <type ‘str’>
Example no2:
I ASK: >>> type (17)
The interpreter answers: <type ‘int’>
Example no3:
I ASK: >>> type (2.5)
The interpreter answers: <type ‘float’>
- Variables: It is a name that refers to a value
I also read in Chapter 2:
One of the most powerful features of a programming language is the ability to manipulate variables […] An assignment statement creates new variables and gives them values […]
For the notion of variable, algebra comes to mind!
x = Variable x corresponds to the the value that will solve a given equation. For instance:
Equation: 3 + x = 8
Find variable x
Variable x = 5 ( x = 8 – 3)
Also, it is useful to note that the type of a variable is the type of the value it refers too.
More variable names can contain both letters and numbers. However, they must begin with a letter.
Lowercase and uppercase are legal. However, it is highly recommended to begin variable names with a lowercase letter. Apparently, we will understand all this later on.
Finally, the underscore character can be used in variable names.N.B. If we give a variable an illegal name, we will get a syntax error.
- Assignment statement: The book “Think Python” defines this term as “An assignment statement creates new variables and gives them values”. However, I had to dig more to link this concept into my mind.
I found a definition that works better for me:
Assignment statements carry out assignment operations, which consist of taking the value on the right side of the assignment operator (=) and storing it in the element on the left, as in the following example: v = 42
- Source: Microsoft Developer Network: http://msdn.microsoft.com/en-us/library/z2wkh0tk%28v=vs.90%29.aspx
- Therefore, I understand it as follows:
- An assignment statement is the relationship of the two parties on each side of the assignment operator (=)
- N.B.2 If I err, you are welcomed to share your logic.
- A state diagram is a graphic/more visual way to write an assignment statement.
For instance, consider this assignment statement:
Variable = Value
The statement diagram will look as follow:
my_project_name ——> ‘Python Project’
- Keywords: are word that are used by the interpreter. Therefore, we cannot used them in our variable names.
- Operators: What do you use your calculator for? For computations such as:
Add: +
Substract: –
Multiply: *
Divide: /
Exponentiation (“to the power of”): ** (For instance 3 to the power of 1 is written: 2**3)
- Floor division: Try to divide: 3/60 or 6/8 or any two numbers which you know the answer will include decimals,
The reason for the discrepancy is that Python is performing floor division. When both of the operands are integers, the result is also an integer; floor division chops off the fraction part, so in this example it rounds down to zero.
In Python 3, the result of this division is a float. The new operator // performs floor division.
If either of the operands is a floating-point number, Python performs floating-point division, and the result is a float
- An expression is a combination of values, variables, and operators.
A statement is a unit of code that the Python interpreter can execute. We have seen two kinds of statement: print and assignment.
[…]The important difference [between an expression and a statement]is that an expression has a value; a statement does not
The main difference is that: an expression has a value; a statement does not.
For instance:
>>> miles = 26.2 (This is an assignment since it assigns a value to the word “miles” without any other consequence.)
>>> miles * 1.61 (This is an expression. It has a consequence since the interpreter evaluates it and displays the result 42.182)
42.182
2.6) INTERACTIVE MODE versus SCRIPT MODE
NOTE: Advantage of working with an interpreted language: you can test bits of code in interactive mode before you put them in a script
Interactive mode: You will have values and expressions. In turn, the interpreter evaluates it and displays the result.
In script mode: You can have an expression as well. Nonetheless, the expression will not have and effect (or consequence or output) if you do not ask Python to evaluate it and display a result. A script usually contains a sequence of statements.
2.7) ORDER OF OPERATIONS
If a script has more than one statement, Python will display the results one at a time as the statements execute.
Exercise 2.2. Type the following statements in the Python interpreter to see what they do:
5
x=5
x+1
Here is the script:
>>> print 5
>>> x = 5
>>> print x+1
Here is the output of the script:
5
6
Now put the same statements into a script and run it. What is the output?
>>> 5
5
>>> x = 5
>>> x + 1
6
Modify the script by transforming each expression into a print statement and then run it again.
>>> print 5
5
>>> x = 5
>>> print x+1
6
To recap, a script usually contains a sequence of statements.
When more than one operator appears in an expression, the order of evaluation depends on the rules of precedence. For mathematical operators, Python follows mathematical convention.
- Parentheses
- Exponentiation
- Multiplication and Division
- Addition and Subtraction
Operators with the same precedence are evaluated from left to right (except exponentiation)
2.8) STRING OPERATIONS
RECALL: The type of value of the number 2 is an integer (‘int’)– The type of value of the letters ‘Hello World!’ is a a string (‘stg’). We can view it as a string/chain of letters
- The + operator it performs string concatenation, which means joining the strings by linking them end-to-end.
For instance:
>>> first = ‘grand’
>>> second = ‘pa’
>>> print first + second
grandpa
- The * operator also works on strings; it performs string repetition.
For example:
>>> ‘spam’*3
‘spamspamspam’
I played around with this concept and got this:
>>> First = ‘Yaba’
>>> Second = ‘dabad’
>>> Third = ‘o’
>>> First + Second + (Third*8)
‘Yabadabadoooooooo’
Silly, perhaps. However, I will not forget it!
Can you think of a property that addition has that string concatenation does not?
Here is my answer (if you disagree, a respectful comment is always welcomed):
I found a possible answer on: http://www.acrobatfaq.com/atbref5/index/ActionsRules/Concatenationversusaddit.html
the plus symbol (+) is used both to concatenate (join) strings of text and to sum figures
2.9) COMMENTS
As programs get bigger and more complicated, they get more difficult to read […] it is a good idea to add notes to your programs to explain in natural language what the program is doing. These notes are called comments, and they start with the # symbol
The comment can be on a line by itself or at the end of a code line.
It is reasonable to assume that the reader can figure out what the code does; it is much more useful to explain why
2.10) DEBUGGING
At this point, the most common syntax errors are:
- Illegal variable names such as: class and yield, which are keywords, or odd~job and US$, which contain illegal characters.
- Also, the temptation to use a space in a variable name, in which case Python will think it is two operands without an operator
>>> bad name = 5
SyntaxError: invalid syntax
At this point, the most common runtime errors are:
- “use before def;” which is trying to use a variable before you have assigned a value. This can happen if you spell a variable name wrong. RECALL that variable names are case sensitive.
>>> principal = 327.68 >>> interest = principle * rate
NameError: name ‘principle’ is not defined
At this point the most likely cause of a semantic error is the order of operations.
For example, to evaluate 1/2∏ , you might be tempted to write
>>> 1.0 / 2.0 * pi
- The division of 1.0/2.0 will happen first
- Then the result will be multiplied by pi
In fact the right answer would be: 1.0 / (2.0 * pi)
2.12 EXERCISES
(Here is my answer. If you disagree with it, a respectful comment is welcomed)
Exercise 2.3) Assume that we execute the following assignment statements:
width = 17
height = 12.0
delimiter = ‘.’
For each of the following expressions, write the value of the expression and the type (of the value of the expression).
1. width/2
2. width/2.0
3. height/3
4. 1 + 2 * 5
5. delimiter * 5
ANSWERS:
>>> width = 17
>>> height = 12.0
>>> delimiter = ‘.’
>>> width/2
8
>>> type (8)
<type ‘int’>
>>> width/2.0
8.5
>>> type (8.5)
<type ‘float’>
>>> height/3
4.0
>>> type (4.0)
<type ‘float’>
>>> 1 + 2 * 5
11
>>> type (11)
<type ‘int’>
>>> delimiter * 5
‘…..’
>>> type (‘…..’)
<type ‘str’>
Exercise 2.4) Practice using the Python interpreter as a calculator:
1. The volume of a sphere with radius r is 4/3∏r**3. What is the volume of a sphere with radius 5?
Hint: 392.7 is wrong!
>>> pi = 3.1415926535897932
>>> (4/3) * pi * (r**3)
392.6990816987241
I doubt of the validity because it is actually very close of the wrong answer. To be verified.
***
I found the error!
Here is the correct answer :
>>> pi = 3.1415926535897932
>>> r = 5
>>> (4.0/3) * pi * (r**3)
523.5987755982989
The error I made is not to include a “4.0” or a “3.0” to the first part of the equation. With that omission, the answer of the first part would be just “1”.
NOTE: Apparently in Python 3, the division of two integers may give a fraction number without specifying a “.0”.
2. Suppose the cover price of a book is $24.95, but bookstores get a 40% discount. Shipping costs $3 for the first copy and 75 cents for each additional copy. What is the total wholesale cost for 60 copies?
>>> resale_price = 24.95
>>> wholesale_price = resale_price * 0.60
>>> print wholesale_price
14.97
>>> first_copy = wholesale_price + 3
>>> print first_copy
17.97
>>> additional_copies = wholesale_price + 0.75
>>> print additional_copies
15.72
>>> total_cost = first_copy + (additional_copies)*59
>>> print total_cost
945.45
3. If I leave my house at 6:52 am and run 1 mile at an easy pace (8:15 per mile), then 3 miles at tempo (7:12 per mile) and 1 mile at easy pace again, what time do I get home for breakfast?
>>> easy_pace = 8 + (15/60.0) #time in minutes per mile
>>> tempo_pace = 7 + (12/60.0) #time in minues per mile at a fast pace
>>> running_time = easy_pace + (3 * tempo_pace) + easy_pace #total running time in min
>>> print running_time
38.1
>>> start_time = 6 + (52/60.0) # start time in terms of hours
>>> print start_time
6.86666666667
>>> running_time_hr = running_time/60.0 #running time in terms of hours
>>> print running_time_hr
0.635
Breakfast hour:
>>> breakfast_time = start_time + running_time_hr #breakfast time in terms of hour
>>> print breakfast_time
7.50166666667
>>> int(breakfast_time) #this will give me the hour of the breakfast time
7
Breakfast minutes:
>>> hour = 60 # 1 hour equals 60 minutes
>>> breakfast_time_min = (breakfast_time – int(breakfast_time))*60.0 #this will give the minutes of the breakfast time
>>> print breakfast_time_min
30.1
>>> int(breakfast_time_min)
30
Breakfast seconds:
>>> minute = 60 # 1 minutes equals 60 seconds
>>> breakfast_time_sec = (breakfast_time_min – int(breakfast_time_min))*60 #this will give the seconds of the breakfast time
>>> print breakfast_time_sec
6.0
Breakfast time: 7:30:06 am
Binary Tree – Python Project
***
Acknowledgments :
These notes represent my understanding from the book Think Python: How to Think Like a Computer Scientist written by Allen B. Downey.
Part of the chapter is transcribed and all the quotes unless specified otherwise come directly from his book.
Thank you Professor Downey for making this knowledge available.
Also, I would like to thank the open source community for their valuable contribution in making resources on programming available.
Thank you