36
DM536 / DM550 Part 1 Introduction to Programming Peter Schneider-Kamp [email protected] http://imada.sdu.dk/~petersk/DM536/

DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

DM536 / DM550 Part 1 Introduction to Programming

Peter Schneider-Kamp [email protected]!

http://imada.sdu.dk/~petersk/DM536/!

Page 2: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

PROJECT PART 1

June 2009 2

Page 3: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Organizational Details

§  2 possible projects

§  projects must be done individually, so no co-operation §  you may talk about the problem and ideas how to solve them

§  deliverables: §  Written 6 page report as specified in project description §  handed in electronically as a PDF + source code files §  pre-delivery deadline: October 02, 23:59 §  FINAL deadline: October 23, 23:59

§  ENOUGH - now for the FUN part …

June 2009 3

Page 4: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Fractals and the Beauty of Nature

§  geometric objects similar to themselves at different scales §  many structures in nature are fractals:

§  snowflakes §  lightning §  ferns

§  Goal: generate fractals using Swampy

§  Challenges: Recursion, Tuning, Library Use

June 2009 4

Page 5: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Fractals and the Beauty of Nature §  Task 0: Preparation

§  understand implementation of Koch snowflake

§  Task 1: Sierpinski Triangle §  draw fractal triangle of

fixed depth

§  Task 2: Binary Tree §  draw binary trees of fixed

depth

§  Task 3 (optional): Fern Time §  draw beautiful fern leaves

with fixed detail June 2009 5

Page 6: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

From DNA to Proteins

§  proteins encoded by DNA base sequence using A, C, G, and T

§  Background: §  proteins are sequences of amino acids §  amino acids encoded using three bases §  chromosomes given as base sequences

§  Goal: assemble and analyze sequences from files

§  Challenges: File Handling, String and List Methods, Iteration

June 2009 6

Page 7: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

From DNA to Proteins

§  Task 0: Preparation §  download human DNA sequence and take a look at it

§  Task 1: Assembling the Sequence §  clean up the sequence and assemble it into one string

§  Task 2: Finding Starting Points §  find positions in string where ATG closely follows TATAAA

§  Task 3: Finding End Points §  find one of the potential end markers (TAG, TAA, TGA)

§  Task 4 (optional): Potential Proteins without TATA Boxes §  analysis of overlaps in encoded proteins

June 2009 7

Page 8: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

STRINGS

June 2009 8

Page 9: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Strings as Sequences

§  strings can be viewed as 0-indexed sequences

§  Examples: "Slartibartfast"[0] == "S" "Slartibartfast"[1] == "l" "Slartibartfast"[2] == "Slartibartfast"[7] "Phartiphukborlz"[-1] == "z"

§  grammar rule for expressions: <expr> => … | <expr1>[<expr2>]

§  <expr1> = expression with value of type string §  index <expr2> = expression with value of type integer §  negative index counting from the back

June 2009 9

Page 10: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Length of Strings

§  length of a string computed by built-in function len(object)

§  Example: name = "Slartibartfast" length = len(name) print name[length-4]

§  Note: name[length] gives runtime error

§  identical to write name[len(name)-1] and name[-1] §  more general, name[len(name)-a] identical to name[-a]

June 2009 10

Page 11: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Traversing with While Loop

§  many operations go through string one character at a time §  this can be accomplished using

§  a while loop, §  an integer variable, and §  index access to the string

§  Example: index = 0 while index < len(name): letter = name[index] print letter index = index + 1

June 2009 11

Page 12: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Traversing with For Loop

§  many operations go through string one character at a time §  this can be accomplished easier using

§  a for loop and §  a string variable

§  Example: for letter in name: print letter

June 2009 12

Page 13: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Generating Duck Names

§  What does the following code do?

prefix = "R" infixes = "iau" suffix = "p" for infix in infixes: print prefix + infix + suffix

§  … and greetings from Andebyen!

June 2009 13

Page 14: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

String Slices

§  slice = part of a string §  Example 1:

name = "Phartiphukborlz" print name[6:10]

§  one can use negative indices: name[6:-5] == name[6:len(name)-5]

§  view string with indices before letters:

June 2009 14

P h a r t i p h u k b o r l z 0 1 2 3 4 1

5 13

9 5 6 7 8 10

11

12

14

Page 15: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

String Slices

§  slice = part of a string §  Example 2:

name = "Phartiphukborlz" print name[6:6] # empty string has length 0 print name[:6] # no left index = 0 print name[6:] # no right index = len(name) print name[:] # guess ;)

§  view string with indices before letters:

June 2009 15

P h a r t i p h u k b o r l z 0 1 2 3 4 1

5 13

9 5 6 7 8 10

11

12

14

Page 16: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Changing Strings

§  indices and slices are read-only (immutable) §  you cannot assign to an index or a slice:

name = "Slartibartfast" name[0] = "s"

§  change strings by building new ones §  Example 1:

name = "Slartibartfast" name = "s" + name[1:]

§  Example 2: name = "Anders And" name2 = name[:6] + "ine" + name[6:]

June 2009 16

Page 17: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Searching in Strings

§  indexing goes from index to letter §  reverse operation is called find (search) §  Implementation:

def find(word, letter): index = 0 while index < len(word): if word[index] == letter: return index index = index + 1 return -1

§  Why not use a for loop?

June 2009 17

Page 18: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Looping and Counting

§  want to count number of a certain letter in a word §  for this, we use a counter variable

§  Implementation: def count(word, letter): count = 0 for x in word: if x == letter: count = count + 1 return count

§  Can we use a while loop here?

June 2009 18

Page 19: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

String Methods

§  methods = functions associated to a data structure §  calling a method is called method invocation §  dir(object): get list of all methods of a data structure §  Example:

name = "Slartibartfast" print name.lower() print name.upper() print name.find("a") print name.count("a") for method in dir(name): print method help(name.upper)

June 2009 19

Page 20: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Using the Inclusion Operator

§  how to find out if string contained in another string?

§  Idea: use a while loop and slices def contained_in(word1, word2): index = 0 while index+len(word1) <= len(word2): if word2[index:index+len(word1)] == word1: return True index = index+1 return False

§  Python has pre-defined operator in: print "phuk" in "Phartiphukborlz"

June 2009 20

Page 21: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Comparing Strings

§  string comparison is from left-to-right (lexicographic)

§  Example 1: "slartibartfast" > "phartiphukborlz"

§  Example 2: "Slartibartfast" < "phartiphukborlz"

§  Note: string comparison is case-sensitive §  to avoid problems with case, use lower() or upper()

§  Example 3: "Slartibartfast".upper() > "phartiphukborlz".upper()

June 2009 21

Page 22: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Debugging String Algorithms

§  beginning and end critical, when iterating through sequences §  number of iterations often off by one (obi-wan error) §  Example:

def is_reverse(word1, word2): if len(word1) != len(word2): return False i = 0 j = len(word2) while j > 0: if word1[i] != word2[j]: return False i = i + 1; j = j - 1 return True

June 2009 22

Page 23: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Debugging String Algorithms

§  beginning and end critical, when iterating through sequences §  number of iterations often off by one (obi-wan error) §  Example:

def is_reverse(word1, word2): if len(word1) != len(word2): return False i = 0 j = len(word2) - 1 while j > 0: if word1[i] != word2[j]: return False i = i + 1; j = j - 1 return True

June 2009 23

Page 24: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Debugging String Algorithms

§  beginning and end critical, when iterating through sequences §  number of iterations often off by one (obi-wan error) §  Example:

def is_reverse(word1, word2): if len(word1) != len(word2): return False i = 0 j = len(word2) - 1 while j >= 0: if word1[i] != word2[j]: return False i = i + 1; j = j - 1 return True

June 2009 24

Page 25: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Debugging String Algorithms

§  beginning and end critical, when iterating through sequences §  number of iterations often off by one (obi-wan error) §  Example:

def is_reverse(word1, word2): if len(word1) != len(word2): return False i = 0 j = len(word2) while j > 0: if word1[i] != word2[j-1]: return False i = i + 1; j = j - 1 return True

June 2009 25

Page 26: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

HANDLING TEXT FILES

June 2009 26

Page 27: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Reading Files

§  open files for reading using the open(name) built-in function §  Example: f = open("anna_karenina.txt")

§  return value is file object in reading mode (mode 'r')

§  we can read all content into string using the read() method §  Example: content = f.read()

print content[:60] print content[3000:3137]

§  contains line endings (here “\r\n”)

June 2009 27

Page 28: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Reading Lines from a File

§  instead of reading all content, we can use method readline() §  Example: print f.readline()

next = f.readline().strip() print next

§  the method strip() removes all leading and trailing whitespace §  whitespace = \n, \r, or \t (new line, carriage return, tab)

§  we can also iterate through all lines using a for loop §  Example: for line in f:

line = line.strip() print line

June 2009 28

Page 29: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Reading Words from a File

§  often a line consists of many words §  no direct support to read words

§  string method split() can be used with for loop §  Example:

def print_all_words(f): for line in f: for word in line.split(): print word

§  variant split(sep) using sep instead of whitespace §  Example: for part in "Slartibartfast".split("a"):

print part

June 2009 29

Page 30: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Analyzing Words

§  Example 1: words beginning with capital letter ending in “a” def cap_end_a(word): return word[0].upper() == word[0]

June 2009 30

Page 31: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Analyzing Words

§  Example 1: words beginning with capital letter ending in “a” def cap_end_a(word): return word[0].upper() == word[0] and word[-1] == "a"

June 2009 31

Page 32: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Analyzing Words

§  Example 1: words beginning with capital letter ending in “a” def cap_end_a(word): return word[0].isupper() and word[-1] == "a"

§  Example 2: words that contain a double letter def contains_double_letter(word): last = word[0] for letter in word[1:] if last == letter: return True last = letter return False

June 2009 32

Page 33: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Analyzing Words

§  Example 1: words beginning with capital letter ending in “a” def cap_end_a(word): return word[0].isupper() and word[-1] == "a"

§  Example 2: words that contain a double letter def contains_double_letter(word): for i in range(len(word)-1): if word[i] == word[i+1]: return True return False

June 2009 33

Page 34: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Adding Statistics

§  Example: let’s count our special words def count_words(f): count = count_cap_end_a = count_double_letter = 0 for line in f: for word in line.split(): count = count + 1 if cap_end_a(word): count_cap_end_a = count_cap_end_a + 1 if contains_double_letter(word): count_double_letter = count_double_letter + 1 print count, count_cap_end_a, count_double_letter print count_double_letter * 100 / count, "%"

June 2009 34

Page 35: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Adding Statistics

§  Example: let’s count our special words def count_words(f): count = count_cap_end_a = count_double_letter = 0 for line in f: for word in line.split(): count += 1 if cap_end_a(word): count_cap_end_a += 1 if contains_double_letter(word): count_double_letter += 1 print count, count_cap_end_a, count_double_letter print count_double_letter * 100 / count, "%"

June 2009 35

Page 36: DM536 / DM550 Part 1 Introduction to Programmingpetersk/DM536/E14/slides/... · 2015. 8. 28. · Organizational Details ! 2 possible projects ! projects must be done individually,

Debugging by Testing Functions

§  correct selection of tests important §  check obviously different cases for correct return value §  check corner cases (here: first letter, last letter etc.) §  Example: def contains_double_letter(word): for i in range(len(word)-1): if word[i] == word[i+1]: return True return False §  test "mallorca" and "ibiza" §  test "llamada" and "bell"

June 2009 36