Files
42_EXT_04_piscine_python/d00/ex05/building.py
2025-10-28 21:33:13 +01:00

56 lines
1.8 KiB
Python

def get_message(argv: list[str]) -> str:
"""check arguments and return string"""
# https://docs.python.org/3.10/reference/simple_stmts.html?highlight=assert#the-assert-statement
assert len(argv) < 3, "too much arguments"
if len(argv) == 2:
return argv[1]
# stdin https://docs.python.org/3/library/sys.html#sys.stdin
print("What is the text to count?")
msg = sys.stdin.readline(424242)
return msg
def main(argv: list[str]):
"""displays stats on string"""
try:
msg = get_message(argv)
except AssertionError as err:
print("AssertionError:", err)
return
char_count = len(msg)
print("The text contains", char_count, "characters:")
# filter() https://docs.python.org/3.10/library/functions.html#filter
upper_count = len(list(filter(str.isupper, msg)))
print(upper_count, "upper letters")
# generator expressions
# https://docs.python.org/3.10/reference/expressions.html#generator-expressions
lower_count = sum(1 for char in msg if char.islower())
print(lower_count, "lower letters")
# in https://docs.python.org/3/reference/expressions.html#in
punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
punctuation_count = sum(1 for char in msg if char in punctuation)
print(punctuation_count, "punctuation marks")
# array.count()
# https://docs.python.org/3.10/library/array.html?highlight=count#array.array.count
space_count = msg.count(" ") + msg.count("\n")
print(space_count, "spaces")
# list comprehension
# https://docs.python.org/3.10/tutorial/datastructures.html#list-comprehensions
digits_count = len([char for char in msg if char.isdigit()])
print(digits_count, "digits")
if __name__ == "__main__":
import sys
main(sys.argv)