Использование пользовательского ввода для ссылки на функцию в другом файле в python

#python #python-import #user-input

#python #python-импорт #пользовательский ввод

Вопрос:

В текстовой приключенческой игре (python) я получаю пользовательский ввод для следующего действия и использую регулярное выражение для разбора входных данных на две переменные. Две переменные — это глагол и существительное команды, все еще в строковой форме. Например, пользовательский ввод приводит к…

final_noun = ‘blow’ final_verb = ‘bubbles’

Регулярное выражение работает правильно.

В другом файле, называемом actions, у меня есть список функций для глаголов / действий, включая функцию blow . Я хочу вызвать эту функцию, просто используя final_noun и final_verb из регулярного выражения. Кроме того, у меня есть фактические пузырьки объекта final verb в файле GameFiles.

я попробовал: actions.final_verb(Gamefiles.final_noun)

который не работает, потому что входные данные по-прежнему являются строкой. затем я попытался использовать eval многими различными способами, такими как: actions.eval(final_verb(GameFiles.eval(remaining_noun)))

(Это также не сработало)

Спасибо за ваше время

Комментарии:

1. final_noun = 'blow' final_verb = 'bubbles' Разве это не наоборот?

2. @johnGordon да, вы правы, хороший улов, я по ошибке отменил их, но только когда я опубликовал этот вопрос, а не в моем исходном коде.

Ответ №1:

Я думаю, вы можете сделать это, написав:

 eval('actions.'   final_verb)(eval('GameFiles.'   remaining_noun))
  

импортируются заданные действия и игровые файлы, что означает, что вы можете запускать:

 actions.blow(Gamefiles.bubbles)
  

Однако вам следует пересмотреть сохранение ваших функций и данных, сохраненных таким образом. Простым и немного лучшим способом сделать это было бы создание словаря со всеми вашими функциями и объектами, а затем доступ к ним через get_item:

 verbs = {'blow' : actions.blow}
nouns = {'bubbles' : Gamefiles.bubbles}

verbs[final_verb](nouns[final_noun])