我正在尝试为Web应用程序(通过GAE)创建一个“迭代器”,它将“模板”字符串,两个整数(创建范围)和一个单词列表作为输入。用户将在字符串中插入一个“#”,他们希望迭代数字,并在字符串中用“@”表示他们希望迭代这些单词。
输入:
template string: "Person#Likes@"
starting integer: 1
ending integer: 3
list of words: "Apples, Bananas, Oranges"
输出:
Person1LikesApples
Person1LikesBananas
Person1LikesOranges
Person2LikesApples
Person2LikesBananas
Person2LikesOranges
Person3LikesApples
Person3LikesBananas
Person3LikesOranges
当用户点击标题为“next”或类似内容的提交按钮时,我希望输出显示在结果文本框中。踢球者是我希望输出只在第一次点击按钮时显示Person1的项目。然后,第二次单击它时,只显示Person2的项目,依此类推。
我用一个生成器编写了一个简单的小Python程序,但是我将它整合到我的Google App Engine应用程序中时遇到了麻烦。
以下是我的功能:
def g(f, text, lower, upper, list):
for num in range(int(lower),int(upper)+1):
yield f(text.replace('#', str(num)), list)
def f(text, list):
for i in list:
print text.replace('@', i)
和其他代码:
if text and lower and upper and words:
result = g(f, words, lower, upper, list)
self.render_iterator(result=next(result))
(^当我填写其他值时,此代码在我的结果文本框中返回“None”,但在我稍微摆弄时将其识别为生成器表达式)
还有另一种方法可以解决这个问题吗?我应该使用GQL和Google数据存储区吗?如果您需要查看我的更多代码,请告诉我。
谢谢!
答案 0 :(得分:1)
我建议先了解如何在App Engine之外执行此操作。这是一个非常简单的编程问题,但如果你无法搞清楚,尝试在网络应用程序内部进行只是折磨。一旦您对解决方案感到满意,就可以将其应用到App Engine。
答案 1 :(得分:0)
f()
没有返回值,因此返回None
。你需要改变
print text.replace('@', i)
到
return text.replace('@', i)