Простой цикл в Alexa Skill - PullRequest
       8

Простой цикл в Alexa Skill

0 голосов
/ 04 ноября 2019

Я создаю простой навык Alexa в Python, в котором создается список случайных чисел и сообщается пользователю. Я не знаю, почему, если я использую петли 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: я уже пробовал составлять списки и помещать генерацию непосредственно в намерение, но это не работает.

Любая помощь действительно приветствуется!

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

С предложением rivamarco я проверил логи на Амазоне. Я обнаружил, что проблема заключалась в том, что все значения, извлеченные из слотов alexa, считаются строками, поэтому мне пришлось выполнить приведение к int, чтобы правильно их использовать.

0 голосов
/ 04 ноября 2019

Я думаю, что ваша проблема в этой строке

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

Вы не можете присоединиться к списку целых чисел таким образом.

Попробуйте

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

Этоis:

  • отображение каждого целого числа results в строку
  • присоединение к списку с ', ' в качестве разделителя

ОБНОВЛЕНИЕ:

Была еще одна проблема: значения слотов извлекаются в виде строки (хотя слоты были `AMAZON.Number), поэтому они должны быть преобразованы в int.

...