180 likes | 314 Vues
This lecture from COMPSCI 101 covers advanced string processing techniques within programming. Students will learn to employ complex boolean operators, manipulate strings effectively, and implement various programming exercises. Key activities include developing functions like `who_wins()` for Rock-Paper-Scissors, `remove_punctuation()` to clean input strings, and functions for checking isograms and semordnilaps. Understanding these concepts will enhance problem-solving skills and programming capabilities in real-world applications.
E N D
COMPSCI 101Principles of Programming Lecture 21 – Complex String Processing
Learning outcomes • At the end of this lecture, students should be able to: • Write code using more complex boolean operators • Write code transforming strings COMPSCI 101 - Principles of Programming
Review • Strings and Lists are Sequences • Test Cases are Important • Boolean Operators:and, or and not COMPSCI 101 - Principles of Programming
Exercise • Write a function named who_wins() that accepts the guesses for person1 and person2 as parameters and determines who wins “Rock Paper Scissors” and returns “person1”, “person2” or “tie” >>> who_wins("rock","scissors") 'person1' >>> who_wins("rock","paper") 'person2' >>> who_wins("paper","paper") 'tie' COMPSCI 101 - Principles of Programming
Answer defwho_wins(person1_choice,person2_choice): if (person1_choice == "rock" and person2_choice == "scissors") or (person1_choice == "scissors" and person2_choice == "paper") or (person1_choice == "paper" and person2_choice == "rock"): return "person1" if person1_choice == person2_choice: return "tie" return "person2” COMPSCI 101 - Principles of Programming
Exercise • Write a program that calls a function named poetry()that returns random poetry of the form Noun Verb Noun >>> poetry() 'friend loves friend' >>> poetry() 'dog hates cat' COMPSCI 101 - Principles of Programming
Answer import random def poetry(): noun1 = random.randint(0,5) verb = random.randint(0,3) noun2 = random.randint(0,5) nouns = ["friend", "dog", "cat", "rabbit", "girl", "boy"] verbs=["loves","hates","likes","is afraid of"] return nouns[noun1] + " " + verbs[verb] + " " + nouns[noun2] poetry() COMPSCI 101 - Principles of Programming
Exercise • Write a function named remove_punctuation() that accepts a string containing a written fragment and returns the fragment with all the punctuation removed. >>> remove_punctuation("'I know the answer! The answer lies within the heart of all mankind! The answer is 12? I think I'm in the wrong building.' (Charles Schulz, 'Peanuts')") 'I know the answer The answer lies within the heart of all mankind The answer is 12 I think Im in the wrong building Charles Schulz Peanuts' COMPSCI 101 - Principles of Programming
Answer defremove_punctuation(sentences): new_sentences= "" punctuation = ["'", "!", ".", "(", ")", ",", "?", ":", '"'] for character in sentences: if character not in punctuation: new_sentences += character return new_sentences COMPSCI 101 - Principles of Programming
Exercise • Write a function namedisogram() that accepts a word as a parameter and returns True if it is an isogram and False otherwise. • An isogram, sometimes known as a nonpattern word, is a word or phrase in which every letter occurs the same number of times. >>> isogram("subdermatoglyphic") True >>> isogram("deed") True >>> isogram("sara") False COMPSCI 101 - Principles of Programming
Answer def isogram(word): letter = word[0] num = count(letter,word) for i in range(1,len(word)): if num != count(word[i],word): return False return True def count(letter,word): count = 0 for letter2 in word: if letter == letter2: count = count + 1 return count COMPSCI 101 - Principles of Programming
Exercise • Write a function named semordinlap() that accepts a word as a parameter and returns True if it is a semordinlap and False otherwise. • A semordnilapis a word which when reversed is another valid word >>> semordnilap("dog") True >>> semordnilap("dan") False COMPSCI 101 - Principles of Programming
Answer defsemordnilap(word): dictionary_file= open("unixdict.txt", "r") dictionary = dictionary_file.read() dictionary_list = dictionary.split() if word in dictionary_list and reverse(word) in dictionary_list: return True return False def reverse(word): new_word = "" for i in range(len(word)-1,-1,-1): new_word += word[i] return new_word COMPSCI 101 - Principles of Programming
Exercise • Write a function named change_case() that accepts a sentence and returns the same sentence in all uppercase or all lowercase, without using the methods upper() or lower(). >>> change_case("pApEr","upper") 'PAPER' >>> change_case("PapeR","lower") 'paper' >>> change_case("Can we dO a WHoleSentence","upper") 'CAN WE DO A WHOLE SENTENCE' COMPSCI 101 - Principles of Programming
Answer defchange_case(sentence,my_type): uppercase = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] lowercase = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] new_sentence = "" for i in range(0,len(sentence)): if ((my_type == "upper" and sentence[i] in lowercase) or (my_type == "lower" and sentence[i] in uppercase)): new_sentence += get_new_letter(sentence[i],my_type) else: new_sentence += sentence[i] return new_sentence COMPSCI 101 - Principles of Programming
Helper Functions defget_new_letter(letter, my_type): uppercase = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] lowercase = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y” ,"z"] if my_type == "upper": for i in range(0,len(lowercase)): if lowercase[i] == letter: return uppercase[i] else: for i in range(0,len(uppercase)): if uppercase[i] == letter: return lowercase[i] COMPSCI 101 - Principles of Programming
Summary • Boolean Operators can make code easier to understand • Sequences are easy to manipulate • Both lists and strings are sequences COMPSCI 101 - Principles of Programming
Next Tuesday • Slices of Sequences COMPSCI 101 - Principles of Programming