我有一个参数,如果设置它必须取 1 到 100 之间的值。如果未设置或用户输入了不正确的值(例如,109 或 - 12),则应将该值设置为默认值。真正的问题是:如何实现这一目标?
这是完整的代码:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--barbie", type=int, nargs='?', choices=range(0, 100), default=50)
parser.add_argument("--cars", type=int, nargs='?', choices=range(0, 100), default=50)
parser.add_argument("--movie", type=str, nargs='?', choices=['melodrama', 'football', 'other'], default='other')
args = parser.parse_args()
ch = ['melodrama', 'other', 'football']
print(f'boy: {int((100 - args.barbie + args.cars + (ch.index(args.movie) * 50)) / 3)}')
print(f'girl: {int(100 - (100 - args.barbie + args.cars + (ch.index(args.movie) * 50)) / 3)}')
思想退却(答案如下)
你可以猜到这是一个根据玩偶、汽车和喜欢的电影类型的个人评分来确定性别的程序。为什么,如果用户没有为汽车设置评分,那么这个值是 50%?也许最好让他决定,通过提高最终结果的准确性来激励这个?
如果用户输入了不正确的内容,则有必要对他进行吹嘘。有必要说明他做错了什么以及如何解决它。不要为用户做决定。如果用户喜欢洋娃娃 109%,讨厌汽车 12%,那么您可以告诉他,测试方法还不知道如何考虑这些意见!:)
虽然你会写
choices=range(0, 100)
,但看起来很奇怪。此参数不是为此而设计的。你看看这个:选项
movie
- 一切都很好,没有抱怨。在其余部分,您会同意,这很麻烦。无论如何,你如何得到你想要的?
只需挂起您自己的验证并使用argparse.ArgumentParser.get_default,该库没有用于此类高级验证的内置工具,此外,还没有自动更改用户输入: