所以,我想要一个简单的小应用程序,用户可以输入命令及其参数,然后Python会将其转换为已定义的函数及其参数。例如:
define foo(x,y) bar = x ** y print bar
然后,在命令行界面中,如果用户输入foo 2 3
,我希望程序识别并打印结果,8。
另外值得注意的是,它应该能够检测整数参数,字符串参数和浮点参数,而无需指定用户hav9ng。如果他们输入foo red 1 2.2
,它可以将所有red
,1
和2.2
识别为字符串arg,整数arg和float arg of {责备地{1}}。
研究返回foo
命令,但我无法绕过它。
基本上,我试图在语言中开发一种语言。帮助
答案 0 :(得分:0)
执行功能部分的常用方法是使用查找表:
def double(a):
return a * 2
def halve(b):
return b / 2
functions = {
'double': double,
'halve': halve,
...
}
然后假设您在f
中有用户输入函数名称:
if f in functions:
func_to_call = functions[f]
else:
print 'unknown function %s' % f
要确定arg是float,int还是string,请使用一系列try / excepts:
try:
float_value = float(user_input)
except ValueError:
# nope, it wasn't a float...
float_value = None
try:
int_value = int(user_input)
except ValueError:
# nope, it wasn't an int...
int_value = None
if float_value is None and int_value is None:
# must be a string...
答案 1 :(得分:0)
通过 string 名称访问函数的方法很少。
我推荐这种方式。文件commands.py - 命令模块:
def foo(x,y)
bar = x ** y
print bar
def fuu(x,y)
bar = x << y
print bar
文件main.py - 从这里开始:
import commands
def nocmd(*a):
print('where is no such command')
cmd,a,b = input('>>').split()
a,b = float(a),float(b) #in this moment need to check user input
getattr(commands,cmd,nocmd)(a,b)
运行python3 main.py
对象也可以通过locals()[name]
或globals()[name]