在要打印的句子中插入一个函数,并带有占位符



我刚刚开始使用Python。我有一个问题,我认为很简单,有一个功能。

我的目标是打印一个字符串变量Template_1带有变量子字符串(由字符串变量example1example2定义的子字符串)。我只想根据用户输入选择一个子字符串选项。我没有发布主文件,以免延长问题;即便如此,它也非常简单。

此代码正常工作,用户输入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错误是当您真的想返回ab之一时,试图返回一些未定义的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_datemplate定义中的参数名称,而text定义中的参数名称并不意味着viene_da在传递给template时传递给text

编辑:为了响应来自OP的评论,当主程序中没有提供用户输入时,会引发以下错误:TypeError: can only concatenate str (not "NoneType") to str

这是因为主程序正在调用函数template并提供一个空字符串作为参数,该参数使用空字符串参数调用函数texttext返回空值None,这会导致template字符串串联出错。

为了避免这种情况,我看到了两个主要选项:

  1. 重写主程序以避免调用template除非用户提供预期的输入之一

  2. 重写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

最新更新