CompSciHW2

From Predictive Chemistry
Revision as of 18:15, 25 January 2016 by David M. Rogers (talk | contribs) (Created page with "Homework 2 -- types, functions, and substitution Use the following code as reference for problem 1: <source lang="python"> from numpy.random import uniform from math import c...")

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Homework 2 -- types, functions, and substitution

Use the following code as reference for problem 1: <source lang="python"> from numpy.random import uniform from math import cos, sin, acos, pi

def atom_str(x, y, z, at, res, type=" C ", resname="UNK "):

       return "ATOM  %5d  %3s %4s%5s    %8.3f%8.3f%8.3f  1.00"%(at,type, \
                       resname,res,x,y,z)

def polar2cart(r, th, phi):

       z = r*cos(phi) # z-axis part
       x = r*sin(phi) # x/y plane part
       y = x*sin(th)
       x = x*cos(th)
       return x, y, z

def gen_sph_surfpt():

       th = uniform(0.0, 2.0*pi)
       z = uniform(-1.0, 1.0)
       phi = acos(phi)
       return th, phi

R = 1000 out = open("test.pdb", 'w') for i in range(1000):

   u, v = gen_sph_surfpt()
   x, y, z = polar2cart(R, u, v)
   out.write(atom_str(x, y, z, i+1, 1)+'\n')

out.close() </source>

  1. In this code, name the type of each of the following:
    • u
    • gen_sph_surfpt
    • polar2cart
      • Make sure you use one of the following types:
      • basic type: int / string / ()
      • derived type: [a], (a, b, c, ...) / a -> ... -> b -> c
  2. Write code that computes each of the following patterns, but replaces the variable part with 'x' (and 'y', 'z', etc.).
    • Be sure to write this as a function with "def f(x, y, etc.):" and use "return" to return the pattern as output.
    • Also, write the type of the function you have produced.

a. A list of all positive integers smaller than n

 ex: [0, 1, 2, 3, 4]
        [0, 1]
        [0, 1, 2, 3, 4, 5, 6, 7]

b. The following sentence template:

    "The quick brown dog jumped over 5 foxes."
    "The terrible brown dog attacked 0 foxes."
    "The leaning brown dog replaced 99 foxes."
    "The absent brown dog confused 4 foxes."

c. The following very similar lists:

    [8, 7, 4, 2, 2, 4, 7, 8]
    [8, 7, 9, 0, 0, 9, 7, 8]
    [8, 7, 6, 5, 5, 6, 7, 8]
    [8, 7, 2, 3, 3, 2, 7, 8]
    [8, 7, 6, 1, 1, 6, 7, 8]

d. The outputs (total work and finished flag) of the following flow-chart:

     (> 4 days left) ---> (procrastinate)
                              ^
                             /
     (work >= 10)  ---> (work is done)
     (<= 4 days left) ---> (add "5 - (#days left)" to work)

Your function should produce the following output for these (work,left) inputs ((6,0), (5,0), (4,0), (3,1), (2, 3), (1, 6)):

       0, False
       0, False
       1, False
       3, False
       7, True
       10, True

3. Write for-loop to do each of the following tasks:

a. Build a list of 4 lines input by the user. Hint: use raw_input

b. Count the number of times the letter "e" appears in a string named 'x'.

c. Return the rot13 cipher of a lowercase string, "x.lower()"

  • Explanation: rot13 changes each letter to the letter that appears 13 characters later alphabetically, for example
abc

becomes

nop

while

and ketchup

becomes

naq xrgpuhc
  • Hint: use (ord, chr, and the mod function), dont forget to subtract ord('a')