【问题标题】:Python for-loop in range not providing desired result范围内的 Python for 循环未提供所需结果
【发布时间】:2021-07-25 13:08:19
【问题描述】:

我有以下 python for-loop,它应该循环 RANGE 次数。我在代码开头指定RANGE,例如,假设范围是5。

然后有一个包含 2 个 uuid 的 uuid_list。应该为每个创建一条消息。

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,因此我期望为每个 uuid 生成 5 条消息的结果。但是,使用上面的代码,我只收到第一个 uuid 的 5 条消息。

为了尝试纠正这个问题,我也尝试过......

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。但是现在我收到了第一个 uuid 的 8 条消息和第二个 uuid 的 2 条消息。

谁能告诉我应该如何指定我的行 data = MESSAGE[i] 以便为每个 uuid 实现所需的 RANGE

【问题讨论】:

  • 您的问题不清楚。 MESSAGE 是什么?它的价值是什么?你在哪里使用uuid_list,我在你发布的代码中没有看到。
  • @Shiva 我已经包含了整个代码供您查看

标签: python python-3.x loops for-loop


【解决方案1】:

当您执行for i in range(RANGE) 时,i 的值范围从 0 到 4,并且只会访问 MESSAGE 的前 5 个元素

对于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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-16
    • 1970-01-01
    • 2018-12-20
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多