#! /usr/bin/env python3 # def problem0 ( ): #*****************************************************************************80 # ## problem0(): Examine file 'five_letters.txt'. # print ( '' ) print ( 'problem0():' ) print ( ' How many words are in the list?' ) print ( ' Does the list contain "osier"?' ) print ( ' What is the 100th word in the list?' ) print ( '' ) filename = 'five_letters.txt' words = [] input = open ( filename, 'r' ) for line in input: words.append ( line.strip() ) print ( ' The file ' + filename + ' contains ', len ( words ), ' words.' ) print ( ' Is "osier" in the file:', ( 'osier' in words ) ) print ( ' Word 100 = "' + words[99] + '" or "' + words[100] + '"' ) return def problem1 ( ): #*****************************************************************************80 # ## problem1(): Find words containing 'rat' # print ( '' ) print ( 'problem1():' ) print ( ' Which words contain "rat"?' ) print ( '' ) filename = 'five_letters.txt' words = [] input = open ( filename, 'r' ) for line in input: words.append ( line.strip() ) for word in words: if ( 'rat' in word ): print ( word ) return def problem2 ( ): #*****************************************************************************80 # ## problem2(): Matrix-vector multiplication. # from magic_matrix import magic_list print ( '' ) print ( 'problem2():' ) print ( ' Compute A*x for magic matrix.' ) print ( '' ) n = 5 A = magic_list ( n ) x = [ 1, 1, 1, 1, 1 ] rowsum = [ 0, 0, 0, 0, 0 ] for i in range ( 0, n ): for j in range ( 0, n ): rowsum[i] = rowsum[i] + A[i][j] * x[j] print ( ' rowsums:', rowsum ) return def problem3 ( ): #*****************************************************************************80 # ## problem3(): Matrix diagonal and antidiagonal sums. # from magic_matrix import magic_list print ( '' ) print ( 'problem2():' ) print ( ' Compute A*x for magic matrix.' ) print ( '' ) n = 7 A = magic_list ( n ) dsum = 0 for i in range ( 0, n ): dsum = dsum + A[i][i] print ( ' diagonal sum:', dsum ) asum = 0 for i in range ( 0, n ): asum = asum + A[i][n-1-i] print ( ' antidiagonal sum:', asum ) return def problem4 ( ): #*****************************************************************************80 # ## problem4(): Find palindromes # print ( '' ) print ( 'problem4():' ) print ( ' Find palindromes.' ) print ( '' ) filename = 'five_letters.txt' words = [] input = open ( filename, 'r' ) for line in input: words.append ( line.strip() ) for word in words: if ( word[::-1] in words ): print ( word ) return def problem5 ( ): #*****************************************************************************80 # ## problem5(): Monte Carlo estimate of pi. # from random import random from math import pi print ( '' ) print ( 'problem5():' ) print ( ' Estimate pi using the Monte Carlo method' ) print ( '' ) n = 100 k = 0 for i in range ( 0, n ): x = random ( ) y = random ( ) if ( x**2 + y**2 <= 1.0 ): k = k + 1 pi_est = 4 * k / n pi_err = abs ( pi - pi_est ) print ( ' Number of samples n = ', n ) print ( ' Estimate for pi is ', pi_est ) print ( ' Exact value is ', pi ) print ( ' Error is ', pi_err ) return def problem6 ( ): #*****************************************************************************80 # ## problem6(): Convert DNA string to list of codons. # print ( '' ) print ( 'problem6():' ) print ( ' Convert DNA string to codon list.' ) dna = 'AGTCTTATATCT' print ( ' The DNA string: ' + dna ) for frame in [ 0, 1, 2 ]: codon_list = dna_to_codon_list ( dna, frame ) print ( codon_list ) return def dna_to_codon_list ( dna, frame ): codon_list = [] n = len ( dna ) pos = frame while ( pos + 3 <= n ): codon_list.append ( dna[pos:pos+3] ) pos = pos + 3 return codon_list def problem7 ( ): #*****************************************************************************80 # ## problem7(): find anagrams. # print ( '' ) print ( 'problem7():' ) print ( ' Find anagrams of a five letter word' ) print ( '' ) filename = 'five_letters.txt' words = [] input = open ( filename, 'r' ) for line in input: words.append ( line.strip() ) target = 'parts' print ( ' Looking for anagrams of "' + target + '"' ) print ( '' ) for word in words: if ( sorted ( word ) == sorted ( target ) ): print ( word ) return def problem8 ( ): #*****************************************************************************80 # ## problem8(): scalar product and cross product. # print ( '' ) print ( 'problem8():' ) print ( ' Given 3-dimensional vectors v1 and v2.' ) print ( ' compute v1 dot v2 (a number) and v1 cross v2 (a vector).' ) print ( ' Use lists to represent vectors.' ) print ( '' ) n = 3 a = [ 1, 2, 3 ] b = [ 4, 5, 6 ] dot = 0 for i in range ( 0, n ): dot = dot + a[i] * b[i] print ( ' dot product = ', dot ) cross = [ 0, 0, 0 ] cross[0] = a[1] * b[2] - a[2] - b[1] cross[1] = a[2] * b[0] - a[0] - b[2] cross[2] = a[0] * b[1] - a[1] - b[0] print ( ' cross product = ', cross ) return def problem9 ( ): #*****************************************************************************80 # ## problem9(): p[i] is product of all a[] except i-th entry. # print ( '' ) print ( 'problem9():' ) print ( ' p[i] = product of all but i-th entry of a.' ) print ( '' ) a = [ 1, 2, 3 ] print ( ' a:', a ) n = len ( a ) p = [] for i in range ( 0, n ): p.append ( 1 ) for i in range ( 0, n ): for j in range ( 0, n ): if ( j != i ): p[i] = p[i] * a[j] print ( ' p:', p ) return if ( __name__ == "__main__" ): problem0 ( ) problem1 ( ) problem2 ( ) problem3 ( ) problem4 ( ) problem5 ( ) problem6 ( ) problem7 ( ) problem8 ( ) problem9 ( )