====== Computer Lab 06, modules, namespaces, conventions ====== Prepare for the midterm test! Its content may be based on all the topics covered so far. Different **namespaces** in Python: * built-in namespace * global namespace * local namespace **Python variable scope**: A scope is the portion of a program from where a name can be accessed directly without any prefix. At any given moment, there are at least three nested scopes. * Scope of the current function which has local names * Scope of the module which has global names * Outermost scope which has built-in names When a reference is made inside a function, the name is searched in the local namespace, then in the global namespace and finally in the built-in namespace. # Python program processing # global vs local variable count = 5 def some_method(): count = 10 print(count) return some_method() print(count) # local function shadowing a built-in one. # REALLY BAD PRACTICE # You should NEVER shadow a built-in function. def abs(val): print("My abs() function") if val >= 0: return val else: return -val print(abs(-5)) PREFERRED SOLUTION: USE/WRITE YOUR OWN MODULE INSTEAD OF SHADOWING BUILT-IN FUNCTIONS! //main.py// import mymath print(abs(-4)) print(mymath.abs(-4)) //mymath.py// def abs(val): print("My abs() function") if val >= 0: return val else: return -val ==== Built-in Modules ==== === random === import random # create random number generator object rng = random.Random() # integer in range [1,6] dice_throw = rng.randrange(1, 7) # odd integer in range [1, 199] odd_number = rng.randrange(1, 200, 2) # float drawn uniformly from a range [0, 1) float_0_1 = rng.random() # randomly shuffle list cards = [0, 1, 2, 3, 4, 5, 6] rng.shuffle(cards) print(f"{dice_throw}; {odd_number}; {float_0_1}; {cards}") === math === import math # constants math.pi math.e # square root of 9 math.sqrt(9) # degrees <-> radians conversion math.radians(90) math.degrees(3.14) # sin, cos, tan, ... math.sin(math.radians(90)) # inverse trigonometric functions math.asin(1.0) # natural logarithm math.log(math.e) # base-10 logarithm math.log10(1000) ===== Exercises ===== * **task 1:** Simulate throwing a dice 6000 times. Produce a list (of length 6) with frequency of each outcome (1-6). * **task 2:** Evaluate $f(x)= \sin(2x) \cos(2x) - \tan(x/2)$ for $x=45$ degrees. * **task 3:** Evaluate $\sqrt{x^2+y^2}$ for $x=2$, $y=100$. * **task 4:** The radioisotope strontium-90 has a half-life of 38.1 years. A sample contains 100 mg of Sr-90. Calculate the remaining milligrams of Sr-90 after 100 years. $m(t)=m_o e^{- \ln(2)*t/T_{1/2}}$ ===== Weekly Homework 06 - Trigonometric Functions ===== * Write a module ''mymath'' (file ''mymath.py'') with 2 functions: def cos(x): """Returns an approximate value of cos(x). :param x: float, input value for which the cosine function is computed :return: float, approximate value of cos(x) """ def sin(x): """Returns an approximate value of sin(x). :param x: float, input value for which the sine function is computed :return: float, approximate value of sin(x) """ * Use the following approximation of the sine and cosine function: $\cos(x)=1-\frac{x^2}{2}+\frac{x^4}{24}$ $\sin(x)=x-\frac{x^3}{6}+\frac{x^5}{120}$ {{:courses:be5b33prg:labs:aproximations.png?nolink&600|}} * Create a file/module ''main.py'' and a function called ''get_trig_series(lst)'' inside it. Implement this function so that it receives a list of floats and outputs 2 lists - a list of approximate cosines of the values in the input list and a list of approximate sines of the values in the input list. Make use of the functions in the ''mymath'' module. def get_trig_series(lst): """Return lists of cosines and sines of the values in the input list :param lst: list of floats, input values for this cos and sin functions are to be computed :return: list of floats, approximate cosines :return: list of floats, approximate sines Example: >>> cs, sn = get_trig_series([0, 0.1]) >>> print(cs, sn) [1.0, 0.9950041666666667] [0.0, 0.09983341666666667] """ * Pack both 'mymath.py' and 'main.py' in a single **zip file** and upload it to the BRUTE system. Place both files in the root directory of the zip file, that is, do NOT zip a folder containing the .py files. Zip them directly. ===== Graded Homework 03 ===== Solve homework [[courses:be5b33prg:homework:regular:03_vector_library|03 - vectorlib - functions for working with vectors]] and submit it via Upload system in time! Check the deadline in Upload system.