我正在用Python开发一种迷你语言(实际上不是针对个人项目的一些命令)。

这是代码:

class FlashCard:
    def __init__(self):
        self.commands = {'addQuestion':self.addQuestion}
        self.stack = []
        self.questions = {}


    def addQuestion(self):
        question = self.stack.pop()
        answer = input(question)


    def interpret(self,expression):
        for token in expression.split():
            if token in self.commands:
                operator = self.commands[token]
                operator()
            else:
                self.stack.append(token)

i = FlashCard()
i.interpret('testing this addQuestion')

解释功能将仅从字符串中提取最后一个单词(this)。 有没有办法让它拉满整个生产线?

谢谢!

===============>>#1 票数:2 已采纳

由于堆栈是一个列表,并且您正在调用不带参数的pop方法,因此您将获得列表中的最后一个元素。 您可能想用空格分隔的字符串来转换列表,而不是:

def addQuestion(self):
    question = ' '.join(self.stack)
    answer = input(question)

观察到popjoin的副作用是不同的。 pop会修改原始列表:

>>> stack = ['testing', 'this']
>>> stack.pop()
'this'
>>> stack
['testing']

join不会:

>>> stack = ['testing', 'this']
>>> ' '.join(stack)
'testing this'
>>> stack
['testing', 'this']

编辑(请参阅下面的OP的注释):要解析同一输入中的多行/命令,您可以做不同的事情。 我想到的最简单的方法是:在调用operator()之后刷新堆栈:

if token in self.commands:
    operator = self.commands[token]
    operator()
    self.stack = []

编辑2(请参阅下面的注释):这是使用字符串列表的完整示例:

class FlashCard:
    def __init__(self):
        self.commands = {'addQuestion':self.addQuestion}

    def addQuestion(self, phrase):
        answer = raw_input(phrase)

    def interpret(self, expressions):
        for expression in expressions.split('\n'):
            phrase, command = expression.rsplit(' ', 1)
            if command in self.commands:
                operator = self.commands[command]
                operator(phrase)
            else:
                raise RuntimeError('Invalid command')

expressions = '''testing this addQuestion
testing that addQuestion
testing error removeQuestion'''
i = FlashCard()
i.interpret(expressions)

HTH!

===============>>#2 票数:1

您可以更改addQuestion以使用整个堆栈。

def addQuestion(self):
    question = ' '.join(self.stack) + '?'
    self.stack = []
    answer = raw_input(question)

我在input时遇到错误,因此将其更改为raw_input 我想这就是你想要的。

  ask by Zack Tanner translate from so

未解决问题?本站智能推荐:

4回复

将带空格的字符串添加到字典Python(2.7)+ sort的值

我正在从一个名为“ id2”的输入文件中读取,该文件以这种格式设置 我正在尝试编写一个脚本,将每行添加到自己的字典中(数字是键,后面的任何单词都是值)。 目前,我的代码仅适用于不包含空格的字符串(即,仅适用于第一行“ 9 This”)。 我收到的错误是“ ValueError:太多值
2回复

将带有反斜杠字符的变量添加到URL字符串时出现Python错误

我试图从一个分配会话cookie的网站上抓取一些数据,并生成包含我需要附加到URL以获取数据的crumb代码的HTML。 当crumb变量包含反斜杠时,我遇到了问题(HTTP 401 Unauthorized)...由于crumb是一个变量,我无法弄清楚如何将r'添加到开头。 我尝试将.en
2回复

如何将包含空格的字符串添加到Tkinter Treeview列

我使用tree.insert方法将数据插入treeview小部件。 在值选项下,我指定从何处获取数据的字符串变量。 如果字符串包含空格,则该字符串将分解为较小的字符串,并放入列表中。 如何在不将其截断到第一个空格的情况下将数据添加到treeview列中? 谢谢。
1回复

在python中将空格添加到某个字符串中

我的数据看起来像这样: 我需要让它看起来像这样: 注意前两个名字上逗号后面的额外空格。 我想我需要使用正则表达式来实现这一点,但它似乎不起作用。 我试过了: 但它并没有发生在我身上。 我错过了什么? 我只需要改变名称,其中有一个文本字符,一个逗号和一个文本字符
1回复

将字符串添加到列表

我想得到一个清单: 命令range(10)返回一个从0到9的数字列表,但是如何将字符串'abc'添加到列表中的每个元素?
6回复

将字符串添加到整数

我需要在计算后有百分号,如何更改此代码,以便出现错误: 不显示。 要删除小数点,计算为“ int”。
2回复

将尾随空格添加到字符串列表中

我有一个像这样的字符串列表: 我想基本上将这些项组合成一个可读的字符串。 我的逻辑如下: 我能够通过几种不同的方式实现这一目标。 使用列表理解: 拼写出来(我认为这有点可读): 我的问题是,是否有更简单,“更理智”的方式来实现这一目标?
3回复

将字符串添加到字符串

我在将字符串添加到另一个字符串时遇到问题。 我是Python的新手。 字符串不能记住我添加的先前值。 谁可以帮助我? 以下是Python中的代码片段。 我的问题是在encrypt()的while循环中。 提前致谢。
2回复

将字符串添加到列表中的字符串

我有一个包含各种字符串的列表,我希望能够在列表中选择一个特定的元素,并将其与新字符串连接。 我认为这可以做到: 但这是行不通的。 有什么建议么?
2回复

通过将双引号添加到带空格的字符串中,将值写入python中的文件

我正在尝试以特定方式在txt文件中写入以下列表的值 sample.txt 在这里,如果您看到valList是一个异构列表,我的唯一意图是编写其中带有空格的值用双引号引起来的值,其余所有值都应照原样编写。 到目前为止,我已经尝试过: 使用file.write('\\ n'