当我只调用一个时,为什么我的所有方法都在python中执行

时间:2017-12-31 22:30:57

标签: python python-3.x algorithm methods

我正在使用python中的程序之类的命令提示符,用户在其中键入命令,字典找到关联方法,然后使用其中的所有方法访问另一个文件,然后运行一个用户问。

然而,当我尝试运行它们中的任何一个时,它首先打印出除了返回'之外的任何内容。声明,从所有方法中执行所请求的方法。

这是我运行的主要文件。 (rcmd.py)

from commands import *

def get_input():

    user = input("Guppy\RACHEAL> ")
    return user

def command_line():

    # LOOP DETERMINATION VARIABLE
    exit = False

    while exit == False:

        user_input = get_input()

        if user_input == "exit":
            exit = True
            break
        elif user_input == "":
            get_input()
        else:
            e = commands.execute(user_input)
            print("FINISHED --> " + str(e))

# PROGRAM START LOOP
#
#
command_line()

这是使用字典执行方法(commands.py)

的文件
from modules import *

class commands(object):

    def execute(user_input):

        # DICTIONARY OF COMMANDS
        COMMANDS = {

            # || GENERAL || #
            "help"            : modules.help(),

            # || FIND || #
            "find- time"      : modules.find_time(user),
            "find- date"      : modules.find_date(),

            # || INPUT || #
            "input- log: new" : modules.input_new_log()

        }

        try:

            execution = COMMANDS[user_input]
            return execution

        except KeyError:

            return "ERROR --> No such command"

这是包含所有方法的文件 导入日期时间

class modules(object):

# -- || GENERAL MODULES || --- #
    def help():
        return "Action terms:\n'find'\n'input'" + "\n__________\n"

# --- || 'FIND' MODULES || --- #
    def find_time():

        print("Nothing")
        return datetime.datetime.now().time()

    def find_date():
        return datetime.datetime.now().date()

# --- || 'INPUT' MODULES || --- #
    def input_new_log():
        new_user_log = input("> ")
        path = 'C:\\Users\\Guppy\\Projects\\RACHEAL\\RACHEALs Databases\\user_log.txt'
        with open(path, 'w') as log:
            log.write(new_user_log)
            input_new_log_exit_code = 1
        return "EXIT CODE = " + str(input_new_log_exit_code)

这是我得到的输出

Guppy\RACHEAL> find- date
Guppy\RACHEAL> Nothing
>
FINISHED --> 2017-31-12

我应该去哪里

Guppy\RACHEAL> find- date
FINISHED --> 2017-31-12

如果有人知道为什么这不正常,或者我做错了什么,那将非常感激。

2 个答案:

答案 0 :(得分:1)

问题在于您在COMMANDS中定义commands.py

# DICTIONARY OF COMMANDS
    COMMANDS = {

        # || GENERAL || #
        "help"            : modules.help(),

        # || FIND || #
        "find- time"      : modules.find_time(user),
        "find- date"      : modules.find_date(),

        # || INPUT || #
        "input- log: new" : modules.input_new_log()

    }

在这里,您要将每个值设置为函数的输出,而不是函数本身。看起来应该更像这样:

# DICTIONARY OF COMMANDS
    COMMANDS = {

        # || GENERAL || #
        "help"            : modules.help,

        # || FIND || #
        "find- time"      : modules.find_time,
        "find- date"      : modules.find_date,

        # || INPUT || #
        "input- log: new" : modules.input_new_log

    }

您还必须将行execution = COMMANDS[user_input]更改为execution = COMMANDS[user_input]()。这将为您提供您正在寻找的输出。

答案 1 :(得分:1)

问题在于构建要调用的函数字典的方式。

    COMMANDS = {

        # || GENERAL || #
        "help"            : modules.help(),

        # || FIND || #
        "find- time"      : modules.find_time(user),
        "find- date"      : modules.find_date(),

        # || INPUT || #
        "input- log: new" : modules.input_new_log()

    }

对于字典中的每个条目,您调用该函数,并将调用该函数的结果分配给该条目。您需要做的是分配对该函数的引用。注意没有括号。

    COMMANDS = {

        # || GENERAL || #
        "help"            : modules.help,

        # || FIND || #
        "find- time"      : modules.find_time,
        "find- date"      : modules.find_date,

        # || INPUT || #
        "input- log: new" : modules.input_new_log

    }

然后,您需要在字典中查找后调用该函数:

        function= COMMANDS[user_input]
        return function()

请注意导致在此处调用函数的额外括号。

此外,您与find_time()不一致。在字典构造函数中,您传递了一个patameter,但该函数似乎并不期望这样。