我刚刚开始使用Python。我有一个问题,我认为很简单,有一个功能。
我的目标是打印一个字符串变量Template_1
带有变量子字符串(由字符串变量example1
或example2
定义的子字符串)。我只想根据用户输入选择一个子字符串选项。我没有发布主文件,以免延长问题;即便如此,它也非常简单。
此代码正常工作,用户输入viene_da
函数template
:
example1 = "Text 1"
example2 = "Text 2"
#viene_da is chosen with the selection of the combobox items in the main file
def template(viene_da):
Template_1 = "{date}." +
(example1 if viene_da == "a" else "") +
(example2 if viene_da == "b" else "") +
"{sujbect}, {verb}"
return Template_1
现在我想创建一个函数来选择正确的子字符串并在Template_1中调用它。
我是这样写的,但有错误:
example1 = "Text 1"
example2 = "Text 2"
#viene_da is chosen with the selection of the combobox items in the main file
def text(viene_da):
a = (example1 if viene_da == "a" else "")
b = (example2 if viene_da == "b" else "")
return x
def template(viene_da):
Template_1 = "{date}." +
text() + #LOOK HERE!!!
"{sujbect}, {verb}"
return Template_1
此代码的变体会产生错误:
TypeError: text() missing 1 required positional argument: viene_da
NameError: name 'x' is not defined
我该如何解决这个问题?我知道我还没有分享完整的代码,但对于那些在 Python 方面有经验的人,帮助我非常容易,因为我只想在打印的句子中插入一个函数。谢谢。
由于您是 Python 新手,对于您正在创建的代码复杂程度,我强烈建议您熟悉条件语句。它们是逻辑结构,用于处理您尝试实现的"如果这个,那么那个"逻辑。
您的NameError
错误是当您真的想返回a
或b
之一时,试图返回一些未定义的x
。您可以使用条件语句来确定所需的语句,然后让text
直接返回它。
我认为这里修改后的text
函数将完成您要实现的目标:
example1 = "Text 1"
example2 = "Text 2"
def text(viene_da):
if viene_da == "a":
return example1
elif viene_da == "b":
return example2
def template(viene_da):
Template_1 = "{date}." +
text(viene_da) +
"{sujbect}, {verb}"
return Template_1
此外,当您调用text
时,您没有将任何参数传递给函数。text
的定义中有一个参数,但为函数定义参数与将参数传递给函数不同。仅仅因为viene_da
是template
定义中的参数名称,而text
定义中的参数名称并不意味着viene_da
在传递给template
时传递给text
。
编辑:为了响应来自OP的评论,当主程序中没有提供用户输入时,会引发以下错误:TypeError: can only concatenate str (not "NoneType") to str
这是因为主程序正在调用函数template
并提供一个空字符串作为参数,该参数使用空字符串参数调用函数text
。text
返回空值None
,这会导致template
字符串串联出错。
为了避免这种情况,我看到了两个主要选项:
重写主程序以避免调用
template
除非用户提供预期的输入之一重写
text
以在调用template
而没有预期输入的情况下返回占位符。
哪个选项是"正确的"取决于主程序的所需行为。我不知道所需的主程序行为是什么,所以我只能为选项 2 提供指导:
example1 = "Text 1"
example2 = "Text 2"
def text(viene_da):
if viene_da == "a":
return example1
elif viene_da == "b":
return example2
else:
return ""
def template(viene_da):
Template_1 = "{date}." +
text(viene_da) +
"{sujbect}, {verb}"
return Template_1