200 likes | 369 Vues
This lecture covers key concepts in Python programming, focusing on control flow using `if` and `for` statements, as well as function definitions and calls. It begins with a review of basic data types and arithmetic operations, then delves into string manipulation techniques. Homework guidelines are provided, emphasizing the importance of submission format. Exercises demonstrate practical applications of conditional execution and iteration through DNA sequences. Learn effective programming practices and enhance your coding skills in this engaging lecture.
E N D
Introduction to Python BCHB5242013Lecture 4 BCHB524 - 2013 - Edwards
Outline • Review • Homework #1 Notes • Control flow: if statement • Control flow: for statement • Exercises BCHB524 - 2013 - Edwards
Review • Printing and execution • Variables and basic data-types: • integers, floats, strings • Arithmetic with, conversion between • String characters and chunks, string methods • Functions, using/calling and defining: • Use in any expression • Parameters as input, return for output • Functions calling other functions (oh my!) • If statements – conditional execution BCHB524 - 2013 - Edwards
Homework #1 Notes • Python programs: • Upload .py files • Don't paste into comment box • Don't paste into your writeup • Writeup: • Upload, don't paste into comment box • Text document preferred • Don't submit Rosalind solutions • Rosalind grades recorded separately. BCHB524 - 2013 - Edwards
Homework #1 Notes • Multiple submissions: • OK, but… • …I'll ignore all except the last one • Make each (re-)submission complete • Grading: • Random grading order • Comments • Grading "curve" BCHB524 - 2013 - Edwards
Homework #1 Notes • Exercise 1: • Use -1,-2,-3 instead of 0,1,2 • Lots of people used [::-1] • Serial vs parallel • Exercise 2: • Translation frame (some got it!) • Human positions start at 1. BCHB524 - 2013 - Edwards
Control Flow: if statement • Execution path depends on string in seq. • Make sure you change seq to different values. # The input DNA sequence seq = 'atggcatgacgttattacgactctgtgtggcgtctgctggg' # Remove the initial Met codon if it is there if seq.startswith('atg'): print"Sequence without initial Met:",seq[3:] else: print"Sequence (no initial Met):",seq BCHB524 - 2013 - Edwards
Control Flow: if statement # The input DNA sequence seq = 'atggcatgacgttattacgactctgtgtggcgtctgctggg' # Remove the initial Met codon if it is there if seq.startswith('atg'): initMet = True newseq = seq[3:] else: initMet = False newseq = seq # Output the results print"Original sequence:",seq print"Sequence starts with Met:",initMet print"Sequence without initial Met:",newseq BCHB524 - 2013 - Edwards
Control Flow: if statement # The input DNA sequence seq = 'atggcatgacgttattacgactctgtgtggcgtctgctggg' # Remove the initial Met codon if it is there initMet = seq.startswith('atg'): if initMet: newseq = seq[3:] else: newseq = seq # Output the results print"Original sequence:",seq print"Sequence starts with Met:",initMet print"Sequence without initial Met:",newseq BCHB524 - 2013 - Edwards
Control Flow: if statement # The input DNA sequence seq = 'atggcatgacgttattacgactctgtgtggcgtctgctggg' # Remove the initial Met codon if it is there initMet = seq.startswith('atg') if initMet: seq = seq[3:] # Output the results print"Sequence starts with Met:",initMet print"Sequence without initial Met:",seq BCHB524 - 2013 - Edwards
Serial if statement # Determine the complementary nucleotide defcomplement(nuc): if nuc == 'A': comp = 'T' if nuc == 'T': comp = 'A' if nuc == 'C': comp = 'G' if nuc == 'G': comp = 'C' return comp # Use the complement function print"The complement of A is",complement('A') print"The complement of T is",complement('T') print"The complement of C is",complement('C') print"The complement of G is",complement('G') BCHB524 - 2013 - Edwards
Compound if statement # Determine the complementary nucleotidedefcomplement(nuc):if nuc == 'A': comp = 'T'elif nuc == 'T': comp = 'A'elif nuc == 'C': comp = 'G'elif nuc == 'G': comp = 'C'else: comp = nucreturn comp# Use the complement functionprint"The complement of A is",complement('A')print"The complement of T is",complement('T')print "The complement of C is",complement('C')print"The complement of G is",complement('G') BCHB524 - 2013 - Edwards
If statement conditions • Any expression (variable, arithmetic, function call, etc.) that evaluates to True or False • Any expression tested against another expression using: • == (equality), != (inequality) • < (less than), <= (less than or equal) • > (greater than), >= (greater than or equal) • in (an element of) • Conditions can be combined using: • and, or, not, and parentheses BCHB524 - 2013 - Edwards
For (each) statements • Sequential/Iterative execution • Note use of indentation to define a block! # Print the numbers 0 through 4 for i inrange(0,5): print i # Print the nucleotides in seq seq = 'ATGGCAT' for nuc in seq: print nuc BCHB524 - 2013 - Edwards
For (each) statements # Input to program seq = 'AGTAGTTCGCGTAGCTAGCTAGCTATGCG' # Examine each symbol in seq and count the A's count = 0 for nuc in seq: if nuc == 'A': count = count + 1 # Output the result print"Sequence",seq,"contains",count,"A symbols" BCHB524 - 2013 - Edwards
For (each) statements # Examine each symbol in seq and count the A's defcountAs(seq): count = 0 for nuc in seq: if nuc == 'A': count = count + 1 return count # Input to program inseq = 'AGTAGTTCGCGTAGCTAGCTAGCTATGCG' # Compute count aCount = countAs(inseq) # Output the result print"Sequence",inseq,"contains",aCount,"A symbols" BCHB524 - 2013 - Edwards
For (each) statements # Examine each symbol in seq and count those that match sym defcountSym(seq,sym): count = 0 for nuc in seq: if nuc == sym: count = count + 1 return count # Input to program inseq = 'AGTAGTTCGCGTAGCTAGCTAGCTATGCG' # Compute count aCount = countSym(inseq,'A') # Output the result print"Sequence",inseq,"contains",aCount,"A symbols" BCHB524 - 2013 - Edwards
Exercise 1 • Write a Python program to compute the reverse complement of a codon • Use my solution to Homework #1 Exercise #1 as a starting point • Add the “complement” function of this lecture(slide 12) as provided. • Modularize! Place the reverse complement code in a new function. • Call the new function with a variety of codons • Change the complement function to handle upper and lower-case nucleotide symbols. • Test your code with upper and lower-case codons. BCHB524 - 2013 - Edwards
Exercise 2 • Write a Python program to determine whether or not a DNA sequence consists of a (integer) number of (perfect) "tandem" repeats. • Test it on sequences: • AAAAAAAAAAAAAAAA • CACACACACACACAC • ATTCGATTCGATTCG • GTAGTAGTAGTAGTA • TCAGTCACTCACTCAG • Hint: Is the sequence the same as many repetitions of its first character? • Hint: Is the first half of the sequence the same as the second half of the sequence? BCHB524 - 2013 - Edwards