Files
CSC110/practice/practice2.py
T
2021-09-24 20:42:56 -04:00

94 lines
3.4 KiB
Python
Executable File

"""CSC110 Extra MarkUs Practice Solutions - Week 2
Instructions (READ THIS FIRST!)
===============================
Complete the function(s) in this module according to their docstring.
We have marked each place you need to write code with the word "TODO".
As you complete your work in this file, delete each TO-DO comment---this is a
good habit to get into early! To check your work, you should run this file in
the Python console and then call each function manually.
Copyright and Usage Information
===============================
This file is provided solely for the personal and private use of students
taking CSC110 at the University of Toronto St. George campus. All forms of
distribution of this code, whether as given or with any changes, are
expressly prohibited. For more information on copyright for CSC110 materials,
please consult our Course Syllabus.
"""
def generate_sequence(lst: list[int]) -> list[int]:
"""Return a new list that contains the sequence of integers between the minimum and maximum of
lst, inclusive.
When the minimum and maximum of lst are the same, the list should only contain one element.
Assume that len(lst) >= 1.
>>> generate_sequence([2])
[2]
>>> generate_sequence([15, 19, 18])
[15, 16, 17, 18, 19]
"""
return list(range(min(lst), max(lst) + 1))
def max_occurrences(string_set: set[str], substring: str) -> int:
"""Return the maximum number of times substring appears in any of the strings in string_set.
>>> max_occurrences({'Montreal', 'Toronto', 'Halifax', 'Ottawa'}, 'a')
2
>>> max_occurrences({'Montreal', 'Toronto', 'Halifax', 'Ottawa'}, 'tt')
1
"""
return max([s.count(substring) for s in string_set])
def longest_string_starts_with(string_set: set[str], prefix: str) -> str:
"""Return the longest string in string_set that starts with prefix.
Assume that:
- no two strings in string_set that start with prefix have the same length.
- at least one string in string_set starts with prefix.
Consider using the following algorithm:
1. Create a list1 of the strings in string_set that begin with prefix. See the notes on
filtering comprehensions and str.startswith.
2. Create a list2 that corresponds with list1, except the elements are the length of each
string. Order matters!
3. Find the index of the maximum length in list2. See built-ins list.index and max.
4. list1 and list2 should have the same number of elements and the same order. So the index
from list2 in step 3 can be used as an index for list1.
Can you think of different ways to solve the problem? See what you can do when you restrict
yourself to concepts from specific chapters. Remember you can re-submit and re-test practice
exercises on MarkUs.
>>> longest_string_starts_with({'David', 'Doe', 'Disturbance'}, 'D')
'Disturbance'
>>> longest_string_starts_with({'David', 'Disturbance', 'Money', 'Monday', 'Mothers'}, 'Mon')
'Monday'
"""
strings = [s for s in string_set if s.startswith(prefix)]
lengths = [len(s) for s in strings]
index = lengths.index(max(lengths))
return strings[index]
if __name__ == '__main__':
import python_ta
python_ta.check_all(config={
'max-line-length': 100,
'max-nested-blocks': 4
})
import python_ta.contracts
python_ta.contracts.check_all_contracts()
import doctest
doctest.testmod()