Python для цикла в диапазоне, не обеспечивающем желаемого результата

#python #python-3.x #loops #for-loop

Вопрос:

У меня есть следующий python для цикла, который должен циклически RANGE повторяться несколько раз. Я указываю RANGE в начале кода, поэтому, например, представьте, что диапазон равен 5.

Затем существует uuid_list, содержащий 2 uuid. Для каждого должно быть создано сообщение.

 for i in range(RANGE):
                data = MESSAGE[i]
                message = data
                mqtt_connection.publish(topic=TOPIC, payload=json.dumps(message), 
                qos=mqtt.QoS.AT_LEAST_ONCE)
                print("Published: '"   json.dumps(message)   "' to the topic: "   TOPIC)
                t.sleep(20)
 

Поскольку я указал RANGE как 5, я ожидаю результата в виде 5 сгенерированных сообщений для КАЖДОГО uuid. Однако с помощью приведенного выше кода я получаю только 5 сообщений для первого uuid.

Чтобы попытаться исправить это, я тоже пытался …

 for i in range(RANGE):
                data = MESSAGE[i 1]
                message = data
                mqtt_connection.publish(topic=TOPIC, payload=json.dumps(message), 
                qos=mqtt.QoS.AT_LEAST_ONCE)
                print("Published: '"   json.dumps(message)   "' to the topic: "   TOPIC)
                t.sleep(20)
 

Это RANGE все еще 5. Но теперь я получаю 8 сообщений для первого uuid и 2 для второго uuid.

Может ли кто-нибудь, пожалуйста, посоветовать, как data = MESSAGE[i] следует указывать мою строку, чтобы достичь желаемого RANGE для каждого uuid?

Комментарии:

1. Ваш вопрос не ясен. Что такое MESSAGE ? Каковы его ценности? Где вы используете uuid_list , я не вижу этого в коде, который вы опубликовали.

2. @Шива, теперь я включил весь код, чтобы ты мог его увидеть

Ответ №1:

Когда вы это сделаете for i in range(RANGE) , i значение будет варьироваться от 0 до 4, и это позволит получить доступ только к первым 5 элементам MESSAGE

Для RANGE = 5 и двух uuid MESSAGE имеет 5 * 2 = 10 элементов. Чтобы получить все десять сообщений, вы можете либо сделать

 for i in range(RANGE * len(uuid_list):
    message = MESSAGE[i]
    # rest of the code
 

или

 for message in MESSAGE:
    # rest of the code