python使用什么函数接收用户输入的数据_python 3.x:调用和执行函数的用户输入...

博主在尝试使用用户输入来调用处理大型数据集的函数。他们定义了多个函数,如function_one、function_two和function_three,用于检查数据的不同条件。然而,当尝试根据用户输入执行这些函数时,遇到了问题。输入函数名后,脚本返回'Function Does Not Exist'。博主已经尝试了使用locals()和dict来解决这个问题,但未成功。评论中给出了建议,包括将函数定义移出循环,使用while循环获取有效输入,然后调用用户选择的函数处理文件中的每一行数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有许多类似的问题,但没有一个答案解决了我的问题。

我定义了几个解析大型数据集的函数。首先,我调用数据,然后将数据(在.txt中表示为行和列)组织到列表中,我将为各个数据条目编制索引。在此之后,我建立了我的函数,这些函数将一次一个地遍历列表。代码如下:

f = open(fn)

for line in iter(f):

entries = [i for i in line.split() if i]

def function_one():

if entries[0] == 150:

# do something

def function_two():

if entries[1] == 120:

# do something else

def function_three():

if len(entries) > 10:

# do something else

等。

我试图提示用户,当每个函数返回关于数据集的不同内容时,他们希望执行什么函数。我的尝试如下:

f_call = input('Enter Function Name: ')

if f_call in locals().keys() and callable(locals()['f_call']):

locals()['f_call']()

else:

print('Function Does Not Exist')

运行脚本时,会提示我输入'Enter Function Name:',如果输入'function_one'并返回,则返回prints'Function Does Not Exist'。我希望看到,如果输入正确,脚本将只执行用户输入的函数。如果用户输入正确,函数应该运行,并且print解析的数据。

我还尝试使用dict来存储函数,但没有成功。

任何帮助都将不胜感激。

如何使用用户输入调用Python中的函数的可能副本?

删除"in EDOCX1"〔0〕。

@Tinysandy如前所述,我没有成功地应用建议副本中提供的字典解决方案。

为什么你要在一个循环中重新定义你的函数?让我们从那个开始……

@zwer我的理解是,为了逐行(15000多行,可变列长度)处理数据集,必须使用for iter来单独分析所有行。如果不是这样的话,我完全愿意接受其他的建议。我对python和整体编码是全新的。

@drauch-这不是关于读取文件,而是关于在每个循环中重新定义函数。在循环外部创建函数,并将循环中的当前项传递给它们(例如,定义一个类似于def function_one(param): ...的函数,然后在需要时在循环中调用它,称为function_one(entries)(或另一个动态分配的名称,但我们将讨论这个…)

好的。我理解你说的大部分。也许我需要更新将项传递到函数的过程。您是否建议我将函数移出for循环,然后将用户输入放在for循环内选择函数?

根据你的评论,我认为你正在努力实现这样的目标:

def function_one(data):

if data[0] == 150:

pass  # do something

def function_two(data):

if data[1] == 120:

pass  # do something else

def function_three(data):

if len(data) > 10:

pass # do something entirely different

这定义了接受参数的函数,以便以后可以重用它们。然后,您要询问用户在处理数据时要使用哪个函数,因此:

while True:  # loop while we don't get a valid input

user_function = input('Enter a function name to use: ')  # ask the user for input

if user_function in locals() and callable(locals()[user_function]):  # if it exists...

user_function = locals()[user_function]  # store a pointer to the function

break  # break out of the while loop since we have our valid input

else:

print('Invalid function name, try again...')

最后,您可以加载您的文件,逐行读取它,将其拆分并按用户决定的函数进行处理:

with open(file_name,"r") as f:

for line in f:

entries = line.split()  # no need to check for empty elements

user_function(entries)  # call the user selected function and pass `entries` to it

当然,之后您可以做进一步的处理。

更新-这里是对上述代码的一个简单测试,给定文件test_file.txt包含:

tokenized line 1

tokenized line 2

tokenized line 3

文件中定义的file_name ="test_file.txt",函数定义为:

def function_one(data):

print("function_one called: {}".format(data))

def function_two(data):

print("function_two called: {}".format(data))

def function_three(data):

print("function_three called: {}".format(data))

如果执行代码,这是输出/跟踪:

Enter a function name to use: bad_name_on_purpose

Invalid function name, try again...

Enter a function name to use: function_two

function_two called: ['tokenized', 'line', '1']

function_two called: ['tokenized', 'line', '2']

function_two called: ['tokenized', 'line', '3']

从逻辑上讲,这对我更有意义。我已经根据您的建议更新了我的代码,但是在运行代码时,没有打印任何内容。我的描述可能有误导性,因为它没有指定我希望在每行之后打印数据分析(假设条件满足),尽管这是我在函数中所做的,所以我不确定为什么它不能工作。我觉得我对函数中的参数做了一些不正确的事情。

@drauch-我在上面添加了一些测试代码,演示了它是如何工作的。将它与您的设置进行比较,看看是否缺少某个组件。如果要比较单个值,请记住,str.split()返回字符串列表,因此如果要将它们与整数进行比较,必须首先将它们转换为整数(即if int(data[0]) == 150...)。

我的IDE中显示的错误是"来自外部作用域的阴影名称‘列’"。我认为原始for循环的更改方式改变了数据的存储方式。为了简单起见,我的完整代码将一些entries存储为新列表column。因此,我尝试使用column作为所有函数的参数,但在运行脚本时仍然一无所获。我觉得我的问题比上面的问题大得多。

要使代码正常工作,只需在调用时保持变量f_call不带''。

f_call = input('Enter Function Name: ')

if f_call in locals().keys() and callable(locals()[f_call]):

locals()[f_call]()

else:

print('Function Does Not Exist')

仍然导致"函数不存在"

它可能不是最有效的修复方法,但您可以使用类似的方法:

f_call = raw_input('Enter Function Name: ')

if f_call =="function_one":

function_one()

if f_call =="function_two":

function_two()

if f_call =="function_three":

function_three()

else:

print('Function Does Not Exist')

我也试过了。在运行脚本时,会反复提示用户'Enter Function Name:',而不是实际运行已输入的函数。

这可能是因为你把它放在了循环中。您将希望在创建函数后而不是在循环中放置我的脚本。

正确,但是如果我把它移出循环,当我输入函数名时不会发生任何事情。

可能先定义循环外部的函数

我使用for循环作为一种方法,一行一行地对每一行进行分析,以便所选函数将分析一行,然后分析下一行,等等…我相信这是迭代每一行的正确方法。如果不正确,请告诉我。我还是一个初学者,所以任何建议都非常感谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值