Closure#

Syllabus Week 2: Variables and Types#

  • Concept of statement illustrated by the print statement and assignment statement

  • Assignments and assignment operator = (formal definition)

  • The concept of expressions

  • Variables and types (formal definition)

  • Valid variable names and naming conventions

  • The type() function

  • Concept of namespace (an informal definition)

  • Reassignments

  • Numeric data types: int, float

  • String data type, str with single or double quote

  • String operators + (concatenation) and * (repetition)

  • The len() function for strings

  • Type casting with int(), float(), str()

  • Numeric operators: % (modulus) and // (floor division)

  • Built-in-functions with multiple arguments: max(), min(), and print()

  • The math module

  • Via example keyword import and the import statement

  • Functions from the math module: math.sin(), math.cos(), math.sqrt(), math.exp(), math.log(), math.ceil(), math.floor().

  • Constant math.pi

  • Boolean data type and bool()

  • Comparison operators: ==, !=, <, >, <=, >=

  • Logical operators: and, or, not

  • Good practice, e.g. avoid print = 6

  • Understanding error messages

Advanced#

A reminder about the material in Advanced section. The advanced material contains some additional topics related to the weeks’s content. You are not required to read this material, and none of the exercises or exam questions will rely on this material.

Advanced 2.1:Floating point representation#

Run cells

print(0.1 + 0.2)
print(0.7 - 0.4)
print(0.1 + 0.2 - 0.3)

Is this surprising?

Decimal numbers cannot be exactly represented in a computer, and are therefore approximated. For example

   0.1 is represented as 0.1000000000000000055511151231257827021181583404541015625,
   0.2 is represented as 0.200000000000000011102230246251565404236316680908203125,
   0.3 is represented as 0.29999999999999998889776975374843459576368331909179688,
   0.4 is represented as 0.40000000000000002220446049250313080847263336181640625.

This is because computers use a binary system (zeros and ones), which is good for storing fractions of the type \(\frac{1}{2^n}\), like \(\frac{1}{2}, \frac{1}{4}, \frac{1}{8}, \frac{1}{16},...\), but not good for storing \(\frac{1}{3}\) or \(\frac{1}{10}\).

There are two situations, where you need to remember this. The first situation is when you print floating-point numbers, as they might be printed with a lot of digits, as you just saw.

The second situation is when you compare two floating-point numbers, as they might not be equal, even if you think they are. Run the code below for an example. Which comparison works as you would expect? In the example, the number 1e-10 is written using a scientific notation, which we explain in the next section. You can replace it with 0.00000000001.

a = 0.1 + 0.2
b = 3/10
print(a == b)
print(abs(a - b) < 1e-10)

Advanced 2.2: Scientific notation#

Scientific notation allows for compact representation of very small or very large numbers. For instance, the scientific notation for the number \(6720000000\) is \(6.72 \times 10^9\)

In Python, scientific notation uses the letter e or E to indicate the part of the number that is multiplied by a power of 10. For example, 1e4 represents \(1 \times 10^4\) which is equal to 10000.0 and 3.1e-4 represents \(3.1 \times 10^{-4}\) which is equal to 0.00031.

To try scientific notation in Python, run the code below, and observe the printed outputs.

sn1 = 23e2 
sn2 = 1e-4 
sn3 = 3.14e2  
sn4 = 5.67e-4 

print(sn1)
print(sn2)
print(sn3)
print(sn4)

Can you use e4 to represent 10000.0?

Advanced 2.3: Practice scientific notation with Planck’s equation#

According to Planck’s Equation, the energy \(E\) of a photon in joules can be calculated from its frequency \(f\) as

\[E = h f\]

where \(h = 6.626 \times 10^{−34} \text{ J⋅Hz}^{-1}\) is Planck’s constant. The frequency \(f\) of a photon is related to its wavelength \(\lambda\) by the formula

\[f = \frac{c}{\lambda}\]

where \(c = 3 \times 10^{8} \text{ms}^{-1}\) is the speed of light.

Suppose you have a light source emitting photons with a wavelength of \(\lambda = 440 \times 10^{-9} \text{ m}\) (or 440 nanometers). Using Planck’s equation, calculate the energy of these photons. Use scientific notation in your calculations.

Note: You might want to use lambda as a variable name for \(\lambda\). In Python, lambda is a reserved word, and you cannot use it as a variable name.

Advanced 2.4: When Were You Born?#

The code below computes the year when you were born from some information. Try it out an see if it works correctly. How does the code handle the difference between those that already had their birthday this year and those that have not?

age = input("How old are you? ")
year = input("What year is it? ")
had_birthday = input("Did you have your birthday this year? Enter 1 if yes, 0 if no: ")
birth_year = int(year) - int(age) - (1 - int(had_birthday))
print("You were born in", birth_year)

Advanced 2.5: Practice Boolean variables#

Boolean variables sound simple (either True or False), but can be quite powerful. Here are two problems to help you practice, and the challenge is to solve the problems using only assignments (that is no if statements, which we introduce next week).

Imagine you have four numerical variables: l, w, X and Y. The variables l and w represent the length and the width of a bed, while X and Y represent the side lengths of a rectangular available space. Define a Boolean variable bed_fits which should be True if the bed fits in the available space, and False otherwise. You should make no assumptions about the orientation of the bed.

Imagine you have a numerical variables age, full_price and discount_price. A person is eligible for a discount if they are older than 65 years, or if they are younger than 18 years. Define a variable price which should be either full_price or discount_price, depending on whether the person is eligible for a discount.

Advanced 2.6: Variable swapping brain teaser#

If you for some reason need to swap the values of two variables, one solution is to use a third (temporary) variable. However, if the values are numeric, the code below will swap values without a third variable. Try it out and figure out how it works.

a = a + b
b = a - b
a = a - b

In Week 8, you will learn a elegant syntax for swapping two variables in Python.

Advanced 2.7: Other Numeric Types#

Python assumes that you write numbers in decimal format. However, you can also use other numeric formats, such as hexadecimal (base 16), octal (base 8) and binary (base 2). You can use specific prefixes to indicate these formats. For example, try the following code.

test = 0b101010
print(test)

In a binary representation, as shown above, each digit after 0b represents a power of 2. The rightmost digit represents \(2^0=1\), the next digit represents \(2^1=2\), and so on. The digit values (0 or 1) determine whether the corresponding contribution is included in the final value. Confirm this on the example above.