Student's Name: PLEASE INSERT YOUR NAME HERE (DOUBLE CLICK THIS BOX TO EDIT.)
Directions: Add work to this notebook to solve the problems below.
Check your work. I give some tests that should be passed if you get it correct.
Problem Sources:
Below, a program has been written for the task of adding all integers $i =1, 2,\ldots ,10$ and printing the final result. Fix the program.
(This is Exercise 3.1 from LL.)
for i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
sum = Sum + x
print ’sum: ’, sum
Write a slightly different version of the program above. Now, the range
function should be used in the for loop header, and only the even numbers from
[2, 10] should be added. Also, the (only) statement within the loop should read
sum = sum + i.
(This is Exercise 3.2 from LL)
Consider one circle and one rectangle. The circle has a radius $r = 10.6$. The rectangle has sides $a$ and $b$, but only $a$ is known from the outset. Let $a = 1.3$ and write a program that uses a while loop to find the largest possible integer $b$ that gives a rectangle area smaller than, but as close as possible to, the area of the circle. Run the program and confirm that it gives the right answer (which is $b = 271$).
(This is Exercise 3.6 from LL.)
Write a function named dice
that takes a positive integer $N$ as input and then draws $N$ random
integers from the interval $[1, 6]$. In the function, count how many of the numbers,
$M$, that equal $6$ and print out the fraction $M/N$. Also, print all the random numbers
to the screen so that you can check for yourself that the counting is correct. Run the
program with a small value for $N$ (e.g., $N = 10$) to confirm that it works as intended.
Hint: After running import random
a random integer $x$ in $[1, 6]$ can be generated by x = random.randint(1,6)
.
(This is Exercise 3.7 from LL)
Write a computer program to “sum” the series $$\sum_{k=1}^\infty \frac{1}{2^k-1} = \frac{1}{2-1} + \frac{1}{4-1} + \frac{1}{8-1} + \ldots$$ stopping when
series_sum
.(Hints: Use Python floats. The number $x$ is zero to four decimal places if $x < 0.5 \cdot 10^{-4}$. The numbers $x$ and $y$ are equal to five decimal places if $|x-y|<0.5 \cdot 10^{-5}$.)
This problem is based on problem 4 from chapter 2 of TAK.
The following test should be satisfied by your answer. You will know if the test is passed if no error is printed.
assert type(series_sum) == float, "Error: 'series_sum' should be a float."
Write a function named ternary_to_int
which takes as input a string consisting only of elements of $\{0,1,2\}$ giving the ternary expansion of a positive number and produces the integer.
Hints:
s
with the command len(s)
. s[k]
. A trick to get the $j$-th character from the end is to type s[-j]
. In particular the first character is always s[0]
and the last character is always s[-1]
. s
to an integer using int(s)
. This works for single characters for instance.s
not including the first character using s[1:]
and the substring not including the last character using s[:-1]
. These are examples of string slices, which are covered in the Python tutorial and in LL § 2.3.5. (The notion of slices works for strings, numpy arrays, lists and tuples.)
Testing:
To test that your program works as expected, I copyied in the ternary
function from the Number Representations
notebook. This function converts an integer $n$ into a ternary string. Your function should satisfy
ternary_to_int(ternary(n))==n
for every positive integer n.
The following loop carries this test out for the first $n=1$ to $100$.
def ternary(n):
# Below we peform sanity checks on the input.
assert type(n) == int, 'n must be an integer'
assert n>0, 'n must be a positive integer.'
rep = '' # This will store the ternary representation.
while n != 0:
trit = n % 3
rep = str(trit) + rep # add the new trit on the left.
n = n // 3 # Update the value of n.
return rep
for n in range(1,101):
tern = ternary(n)
out = ternary_to_int(tern)
assert out == n, ("Error: Output of `ternary_to_int('{}')` " + \
"should be {}, but was {}.").format(tern, n, out)
Let $r=\sqrt[5]{2}$ be the $5$-th root of $2$. Write a function compare_to_fraction(p,q)
which returns True
if $r < \frac{p}{q}$ and returns False
if $r > \frac{p}{q}$.
You should use the interval arithmetic package in mpmath
, and repeatedly increase the precision.
The following assertion tests will be passed by a correct answer (Nothing happening is good!)
assert compare_to_fraction(309, 269), "Error, 'compare_to_fraction(309, 269)' should return True."
assert not compare_to_fraction(7810, 6799), "Error, 'compare_to_fraction(7810, 6799)' should return False."
Compute the $20$ most significant digits of $\pi^3$. Store the answer as a string in the variable pi_cubed
. The last digit should be rounded (and so may not really be the $20$th digit). (Rounding is done automatically by the nstr
function.)
Include code that carries out this calculation.
The following tests should be passed:
assert type(pi_cubed) == str, "Error: pi_cubed should be a string."
assert len(pi_cubed) == 21, "Error: pi_cubed should have 20 significant digits."
# Note that the decimal point means that there will be one more character than