Python 如何将有理数或无理数输入argparse?

Python 如何将有理数或无理数输入argparse?,python,terminal,argparse,rational-number,Python,Terminal,Argparse,Rational Number,如何使用argparse将3/2这样的有理数通过终端输入python脚本? 当我想使用argparse输入pi或任何其他无理数(如sqrt(2))时,我也会遇到同样的问题 问候,, 哈迪 import argparse import sys print(sys.argv) parser = argparse.ArgumentParser() parser.add_argument('aNumber') args = parser.parse_args() print(args) 运行示例: 1

如何使用argparse将3/2这样的有理数通过终端输入python脚本? 当我想使用argparse输入pi或任何其他无理数(如sqrt(2))时,我也会遇到同样的问题

问候,, 哈迪

import argparse
import sys
print(sys.argv)
parser = argparse.ArgumentParser()
parser.add_argument('aNumber')
args = parser.parse_args()
print(args)
运行示例:

1414:~/mypy$ python3 stack53964076.py -h
['stack53964076.py', '-h']
usage: stack53964076.py [-h] aNumber

positional arguments:
  aNumber

optional arguments:
  -h, --help  show this help message and exit
1417:~/mypy$ python3 stack53964076.py 3/2
['stack53964076.py', '3/2']
Namespace(aNumber='3/2')
1417:~/mypy$ python3 stack53964076.py pi
['stack53964076.py', 'pi']
Namespace(aNumber='pi')
1417:~/mypy$ python3 stack53964076.py sqrt(2)
bash: syntax error near unexpected token `('
1417:~/mypy$ python3 stack53964076.py 'sqrt(2)'
['stack53964076.py', 'sqrt(2)']
Namespace(aNumber='sqrt(2)')
在所有这些情况下,
args.aNumber
将是一个字符串。在最后一个例子中,我必须包含引号,以防止shell尝试解析“(”本身


处理这些字符串是您自己的代码的责任,而不是
argparse

到目前为止您尝试了什么?对于有理数,您可以传入两个参数,一个分子和一个分母。对于无理数,您运气不佳,因为您只能传入最接近的表示形式作为浮点值-例如3.151592654等。除非您要创建一个参数(例如,irlot),该参数具有一组特定的枚举定义,如“pi”和“root2”或其他。但是,在内部转换这些定义时,您仍然会得到浮点表示。