我正在用Python创建一个简单的Alexa技能,在其中生成一个随机数列表并告知用户。我不知道为什么使用for
或while
循环时,该功能不起作用。如果我改用用户说的数字,则该技能正确起作用。如何在我的意图范围内生成随机数列表?这是我的代码:
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:我已经尝试过列表理解,并将生成直接放在意图之内,但这是行不通的。
我们非常感谢您的帮助!
答案 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
的操作。