1. Design a function contract The first two return 2000 and 0. Zero or negative quantity and boolean quantity fail. A zero price is allowed by this teaching contract; a missing or noninteger price is not. 2. Read files with explicit context and encoding DictReader returns dictionaries with text values, so parsing remains explicit. The hash identifies the exact bytes used. Importing should define functions without creating output; the main guard owns the local CLI entry. 3. Handle expected errors without hiding defects Invalid quantity raises ValueError; missing files raise FileNotFoundError. Neither should silently become zero value. A test should verify the intended exception as well as valid results. An unexpected coding error remains visible for correction.