我强烈建议为此使用argparse 的ArgumentParser。它提供了很多开箱即用的灵活性,例如add_arguments() 的nargs 参数,它允许自动将传递给程序的参数收集到一个列表中。
我会这样做:
from argparse import ArgumentParser
SALES = {
"January": 15000,
"February": 22000,
"March": 12000,
"April": 17000,
"May": 81000,
"June": 13000,
"July": 21000,
"August": 41200,
"September": 25000,
"October": 21500,
"November": 91000,
"December": 21000,
}
parser = ArgumentParser()
parser.add_argument(
"sales_numbers",
# Used in help messages.
metavar="SALES_NUMBER",
# Convert the input to integer,
# print an error if non-integer value is passed in.
type=int,
# Gather all arguments in a list,
# print an error if no arguments have been passed in.
nargs="+",
)
args = parser.parse_args()
# Make the list a set, in case of duplicate input.
sales_numbers = set(args.sales_numbers)
for month, value in SALES.items():
if value in args.sales_numbers:
print(month)
# Get a set of numbers that were input but not there.
not_found = sales_numbers - set(SALES.values())
for num in not_found:
print(f"{num} not found")
您现在可以运行它并传入参数,例如:
$ my_script.py 123
123 not found
$ my_script.py 15000
January
$ my_script.py 21000
July
December
$ my_script.py 21000 15000
January
July
December
$ my_script.py 21000 15000 123 9999
January
July
December
123 not found
9999 not found
如果您忘记传入参数:
$ my_script.py
usage: my_script.py [-h] SALES_NUMBER [SALES_NUMBER ...]
my_script.py: error: the following arguments are required: SALES_NUMBERS
当你传入无法转换为整数的东西时:
$ my_script.py abc
usage: my_script.py [-h] SALES_NUMBER [SALES_NUMBER ...]
my_script.py: error: argument SALES_NUMBER: invalid int value: 'abc'
带有方便的--help 参数:
$ my_script.py --help
usage: sf_args.py [-h] SALES_NUMBER [SALES_NUMBER ...]
positional arguments:
SALES_NUMBER
optional arguments:
-h, --help show this help message and exit