我们说我有拦截功能,Bobby,Jimmy和Tom。我希望用户键入"运行拦截"
名称是个人资料
我是python的新手,所以我接近这个的方式只是
<rule enabled="true" match-type="regex">
<name>Enabling CORS Headers</name>
<from>^/path/someMorePath.*$</from>
<condition name="origin" operator="equal">([a-z]+)</condition>
<set type="response-header" name="Access-Control-Allow-Origin">%1</set>
<set type="response-header" name="Access-Control-Allow-Credentials">true</set>
问题是如果用户键入&#34;运行拦截&#34;它不会运行拦截功能,因为用户输入是一个字符串。
我也不能使用if语句
input()
因为如果用户写了#34;运行jimmy&#34;我需要它来运行。我可以使用elif语句
userInput = input()
if userInput == "intercept":
intercept()
但重点是,如果没有任何名称的个人资料,他们将创建一个新的个人资料并自动添加另一个功能。这不会起作用,因为每次添加新的个人资料时我都必须手动添加一个elif语句
我需要一种让程序理解输入正在寻找函数,搜索函数列表并运行正确函数的方法。
Idk由于缺乏经验而听起来有多原始或白痴,但如果有人能帮助我,我将非常感激
答案 0 :(得分:1)
直接调用未知用户输入是非常危险的。 允许的函数名称可以作为键放在指向实际函数的字典中:
def intercept():
print("Function intercept.")
user_functions = dict(
intercept=intercept,
# ...
)
user_input = input("Input function name: ") # Python 3, raw_input for Python 2
if user_input in user_functions:
user_functions[user_input]()
else:
print("Error: Unknown function.")
结果:
$ python3 test.py
Input function name: intercept
Function intercept.
$ python3 test.py
Input function name: foobar
Error: Unknown function.
也可以动态创建函数,例如:
def intercept():
print("Function intercept.")
def jimmy():
print("Function Jimmy.")
user_functions = {
'intercept': intercept,
# ...
}
def create_new_profile(name):
print("Creating profile for " + name)
def profile_function():
print("Profile " + name)
user_functions[name] = profile_function
while 1:
user_input = input("Input function name: ")
if user_input in user_functions:
user_functions[user_input]()
else:
create_new_profile(user_input)
print()
结果:
$ python3 test.py
Input function name: intercept
Function intercept.
Input function name: Jimmy
Creating profile for Jimmy
Input function name: Alice
Creating profile for Alice
Input function name: Alice
Profile Alice
Input function name: Bob
Creating profile for Bob
Input function name: Bob
Profile Bob
Input function name: Alice
Profile Alice
我不知道,“个人资料功能”应该做什么。也许,数据驱动的方法可能会更好。字典将用户名映射到用户数据。如果用户输入名称不在配置文件字典中,则调用函数create_new_profile
以添加新用户。以下示例将用户数据实现为类,包括运行的函数。
class UserProfile:
def __init__(self, name):
self.name = name
def run(self):
print("User: " + self.name)
def intercept():
print("Function intercept.")
user_profiles = {
'Jimmy' : UserProfile('Jimmy'),
}
def create_new_profile(name):
print("Creating new profile for " + name)
user_profiles[name] = UserProfile(name)
user_functions = {
'intercept': intercept,
# ...
}
while 1:
user_input = input("Input function name: ")
if user_input in user_functions:
user_functions[user_input]()
elif user_input in user_profiles:
user_profiles[user_input].run()
else:
create_new_profile(user_input)
print()
$ python3 test.py
Input function name: intercept
Function intercept.
Input function name: Jimmy
User: Jimmy
Input function name: Alice
Creating new profile for Alice
Input function name: Alice
User: Alice
答案 1 :(得分:0)
我对此提出建议......但您可以使用eval
。这是使用python2.7
,python3.x
您可以使用input
而不是raw_input
:
def apple():
print('Mmm apples.')
def banana():
print('Oh, a banana.')
user_input = raw_input()
eval(user_input + '()')
结果:
python run_options.py
banana
Oh, a banana.
python run_options.py
apple
Mmm apples.