Tags:
create new tag
view all tags

Course on Internet of Things

# Exercises Session 1:

## Introductory remarks:

The scripts we are going to develop during this exercise session do not depend on any system issues: We do not use command line arguments not available in MicroPython nor do we use any hardware specific features which are not available on a PC. The exercises can therefore be developed and run on the ESP32 but also on any standard PC with Python3 installed.

## Exercise 1: Use of REPL

Connect to your ESP32 with minicom or thonny. You may try the same thing running Python3 on your PC.

Using REPL:

• print Hello World!

• read in a text using input() and print it

• Calculate

• Calculate sin(30°)
If you see errors, how do you correct them? Are the results correct?

• Finally make the "print Hello World!" command a script and execute it.

## Exercise 2: A simple calculator

Write a script that assigns the values 5 and 3 to the variables a and b respectively

Print the results of 4 basic arithmetic operations:

• a+b

• a-b

• a*b

• a/b

If you use integer format when printing the result, you will see the result truncated to an integer. Can you correct changing the format?

Improve this program asking the user to enter 2 real numbers (floats) separated by a space. This is how it should look like:

If this happens:

when the user mistypes and enters something that is not a real number, can you capture the error and simply ask the user to repeat his input, until you get 2 correct floating point numbers?

Bonus points: Writing a parser for user input is rather easy if the numbers and operator are separated by spaces (have a look at the split method of strings). It is quite a bit more tricky if you allow entering calculations without spaces between the operands and the operator. Can you write a parser accomplishing this?

Hint: A very elegant solution to this is the use of regular expressions and Python provides a module helping you with this:

A float is defined as follows:

• zero or more spaces

• followed by one '+' or one '-'
• followed by
• a . followed by at least one digit
• or
• at least one digit followed by zero or one . followed by zero or more digits
• followed be zero of more spaces

Try your parser on this input:
Input ok or not ok
5.3+4.7 ok
5.3++4.7 not ok
5..3 + 4.7 not ok
.3+.7 ok
5.3+4b7 not ok
empty string not ok
5.3+. not ok
5.3+ not ok
-1--1 ok
--1--1 not ok
Try also several spaces in between operands and operator.

## Exercise 3: Conditions

Like in exercise2, start with 2 numbers a,b with values 5 and 7. In your program check which of the 2 numbers is bigger and print the result.

Then improve the program asking the user for 2 integer numbers. Make sure he enters 2 correct numbers and capture possible errors. This is a typical output:

## Exercise 4: The Fibonacci series

The Fibonacci number series is defined as:

F(0) = 0; F(1) = 1

F(n) = F(n-1) + F(n-2)

• Calculate and print out the Fibonacci numbers up to F(n). Get n from the user where n >= 0
Try your program for n=0, n=1, n=2, n=3, n=20

• Ask the user up to which is the maximum number up to which you should calculate.

## Exercise 5: A bit of Mathematics: Calculate the sine function

Write a script that asks the user for an angle in degrees. Calculate the sine of this angle.

## Exercise 6: Classes

Write a Python class with methods calculating mathematical number series. These series should be calculated:

• The Fibonacci numbers up to F(n). n is passed as parameter to the method
• The Fibonacci numbers smaller than max. max is passed as parameter to the method
• The prime numbers up to max
• Factorial:
• The geometric number series:
• The harmonic number series:

Can you tell what the following series calculate?

Add these series to your class and try. Write a test script exercising the different methods.

In order to make this exercise run on the ESP32 you must first upload your mathSeries.py module implementing the MathSeries class into the file system of the ESP32. Create a directory called lib on the ESP32 file system and put your module there:

ampy mkdir /lib

ampy put mathSeries.py /lib/mathSeries.py

Once this is done, go to the REPL window of thonny and

import mathSeries

You can now create an instance of the MathSeries class:

series = mathSeries.MathSeries()

When running on a PC you may want to plot the series as well. If you don't know how to plot data in Python, you will find all the information needed here:
https://matplotlib.org/3.2.1/index.html

Here is the exercise sheet in odt format:

--

Topic attachments
I Attachment History Action Size Date Who Comment
png calcOk.png r1 manage 21.7 K 2020-05-03 - 19:52 UliRaich
txt calculatorV1.py.txt r1 manage 0.4 K 2020-05-28 - 09:34 UliRaich
txt calculatorV2.py.txt r1 manage 1.3 K 2020-05-28 - 09:34 UliRaich
txt calculatorV3.py.txt r1 manage 3.2 K 2020-05-28 - 09:34 UliRaich
png conditions.png r1 manage 28.8 K 2020-05-03 - 20:25 UliRaich
png conversionError.png r1 manage 19.3 K 2020-05-03 - 19:42 UliRaich
png e.png r2 r1 manage 1.5 K 2022-02-08 - 16:45 UliRaich
png euler.png r1 manage 1.5 K 2022-02-08 - 16:50 UliRaich
odt exercise_1.odt r2 r1 manage 126.6 K 2022-02-08 - 17:45 UliRaich
png factorial.png r1 manage 2.8 K 2020-05-04 - 12:48 UliRaich
png geometric.png r1 manage 3.9 K 2020-05-04 - 12:48 UliRaich
png harmonic.png r1 manage 1.6 K 2020-05-04 - 12:53 UliRaich
png invalidFloat.png r1 manage 32.0 K 2020-05-08 - 13:38 UliRaich
png ln2.png r1 manage 2.0 K 2020-05-04 - 12:48 UliRaich
png mathSeries.png r3 r2 r1 manage 9.7 K 2022-02-08 - 17:36 UliRaich
png pi.png r1 manage 2.7 K 2020-05-04 - 12:48 UliRaich
png wallis.png r1 manage 6.1 K 2020-05-05 - 14:31 UliRaich
png wallis1.png r1 manage 14.8 K 2020-05-05 - 14:35 UliRaich
png wallis_prod.png r4 r3 r2 r1 manage 4.2 K 2022-01-27 - 09:46 UliRaich
Topic revision: r17 - 2022-02-08 - UliRaich

 Home IoT_Course_English Web P View Edit Account
Copyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback