0

我正在尝试为 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

当用户单击标题为“下一步”或类似内容的提交按钮时,我希望输出显示在结果文本框中。踢球者是我希望输出仅在 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 数据存储吗?如果您需要查看我的更多代码,请告诉我。

谢谢!

4

2 回答 2

1

我建议先弄清楚如何在 App Engine 之外执行此操作。这是一个非常简单的编程问题,但如果你无法弄清楚,尝试在 Web 应用程序中进行操作只是一种折磨。对解决方案感到满意后,您可以将其应用到 App Engine。

于 2012-06-02T17:56:21.900 回答
0

f()没有返回值,因此返回None. 你需要改变

print text.replace('@', i) 

return text.replace('@', i)
于 2012-06-02T02:32:30.960 回答