Alexa技能中的简单for循环

时间:2019-11-04 15:54:35

标签: python for-loop alexa

我正在用Python创建一个简单的Alexa技能,在其中生成一个随机数列表并告知用户。我不知道为什么使用forwhile循环时,该功能不起作用。如果我改用用户说的数字,则该技能正确起作用。如何在我的意图范围内生成随机数列表?这是我的代码:

class RandomNumberIntentHandler(AbstractRequestHandler):
    """Handler for Hello World Intent."""
    def can_handle(self, handler_input):
        # type: (HandlerInput) -> bool
        return ask_utils.is_intent_name("RandomNumberIntent")(handler_input)

    def handle(self, handler_input):
        # type: (HandlerInput) -> Response
        slots = handler_input.request_envelope.request.intent.slots
        size = slots["size"].value
        n = slots["n"].value

        results = get_random_values(size,n)

        speak_output = "You got " + results.join(', ')


        return (
            handler_input.response_builder
                .speak(speak_output)
                # .ask("add a reprompt if you want to keep the session open for the user to respond")
                .response
        )

    def get_random_values(size,n):
        result = []
        for i in range(n):
            result.append(randint(1, size))
        return result

PS:我已经尝试过列表理解,并将生成直接放在意图之内,但这是行不通的。

我们非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我认为您的问题出在这行

speak_output = "Hai ottenuto " + results.join(', ')

您不能以这种方式连接整数列表。

尝试

speak_output = "Hai ottenuto " + ', '.join(map(str, results))

也就是说:

  • results的每个整数映射为一个字符串
  • 使用', '作为分隔符加入列表

更新:

还有另一个问题:广告位值以字符串形式检索( 尽管广告位是“ AMAZON.Number”,所以必须将其转换为整数。

答案 1 :(得分:0)

在rivamarco的建议下,我检查了Amazon上的日志。我发现问题在于从alexa插槽提取的所有值都被视为字符串,因此为了正确使用它们,我必须执行强制转换为int的操作。