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}$

  • 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 03 - vectorlib - functions for working with vectors and submit it via Upload system in time! Check the deadline in Upload system.
courses/be5b33prg/labs/week_06.txt · Last modified: 2025/10/30 15:18 by sindlpa1