Reading 06: Code
This commit is contained in:
parent
6cfb927838
commit
48e82fb0f6
2 changed files with 89 additions and 0 deletions
15
reading06/Makefile
Normal file
15
reading06/Makefile
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
test:
|
||||||
|
@$(MAKE) -sk test-all
|
||||||
|
|
||||||
|
test-all: test-odds
|
||||||
|
|
||||||
|
test-scripts:
|
||||||
|
@curl -sLO https://www3.nd.edu/~pbui/teaching/cse.20289.sp25/static/txt/reading06/odds.test
|
||||||
|
@chmod +x ./*.test
|
||||||
|
|
||||||
|
test-odds: test-scripts odds.py
|
||||||
|
@echo Testing Odds ...
|
||||||
|
@./odds.test -v
|
||||||
|
@echo
|
||||||
|
clean:
|
||||||
|
@rm -f *.test
|
||||||
74
reading06/odds.py
Normal file
74
reading06/odds.py
Normal file
|
|
@ -0,0 +1,74 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from typing import Iterator
|
||||||
|
import io
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# Functions
|
||||||
|
|
||||||
|
def odds(stream=sys.stdin) -> list[int]:
|
||||||
|
''' Return a list of all the odd numbers in stream.
|
||||||
|
|
||||||
|
>>> odds(io.StringIO('\\n'.join('1 2 3 4 5'.split())))
|
||||||
|
[1, 3, 5]
|
||||||
|
'''
|
||||||
|
results = []
|
||||||
|
for line in stream:
|
||||||
|
number = int(line)
|
||||||
|
if number % 2:
|
||||||
|
results.append(number)
|
||||||
|
return results
|
||||||
|
|
||||||
|
def odds_fp(stream=sys.stdin) -> Iterator[int]:
|
||||||
|
''' Return a sequence of odd numbers from stream using map and filter.
|
||||||
|
|
||||||
|
>>> odds_fp(io.StringIO('\\n'.join('1 2 3 4 5'.split()))) # doctest: +ELLIPSIS
|
||||||
|
<filter object at ...>
|
||||||
|
'''
|
||||||
|
numbers = map(int, stream)
|
||||||
|
return filter(lambda x: x % 2, numbers)
|
||||||
|
|
||||||
|
def odds_lc(stream=sys.stdin) -> list[int]:
|
||||||
|
''' Return a list of all the odd numbers in stream using a list
|
||||||
|
comprehension.
|
||||||
|
|
||||||
|
>>> odds_lc(io.StringIO('\\n'.join('1 2 3 4 5'.split())))
|
||||||
|
[1, 3, 5]
|
||||||
|
'''
|
||||||
|
numbers = []
|
||||||
|
for line in stream:
|
||||||
|
number = int(line)
|
||||||
|
if number % 2:
|
||||||
|
numbers.append(number)
|
||||||
|
return numbers
|
||||||
|
|
||||||
|
def odds_gr(stream=sys.stdin) -> Iterator[int]:
|
||||||
|
''' Return a sequence of odd numbers from stream using yield.
|
||||||
|
|
||||||
|
>>> odds_gr(io.StringIO('\\n'.join('1 2 3 4 5'.split()))) # doctest: +ELLIPSIS
|
||||||
|
<generator object odds_gr at ...>
|
||||||
|
'''
|
||||||
|
for line in stream:
|
||||||
|
number = int(line)
|
||||||
|
if number % 2:
|
||||||
|
yield number
|
||||||
|
|
||||||
|
# Main Execution
|
||||||
|
|
||||||
|
def main(arguments=sys.argv[1:], stream=sys.stdin) -> None:
|
||||||
|
odds_functions = {
|
||||||
|
'-f': odds_fp,
|
||||||
|
'-l': odds_lc,
|
||||||
|
'-g': odds_gr,
|
||||||
|
}
|
||||||
|
|
||||||
|
if not arguments:
|
||||||
|
print('Usage: odds.py [-f -l -g]', file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
odds_function = odds_functions.get(arguments[0], odds)
|
||||||
|
for odd in odds_function(stream):
|
||||||
|
print(odd)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
Loading…
Reference in a new issue