For 循环语句不读取 if 语句以继续下一次迭代

Posted

技术标签:

【中文标题】For 循环语句不读取 if 语句以继续下一次迭代【英文标题】:For loop statement not reading if statement to continue to next iteration 【发布时间】:2018-12-18 08:09:16 【问题描述】:

我的代码如下所示:

for item in items:

    if item.data["position"] == '5':
        item.delete() 
        continue
    elif item.data["lang"] == 'SPA':
        message_body = my_message_spa[item.data["position"]]
    else:
        message_body = my_message_eng[item.data["position"]] # English (default)

    message = client.messages.create(
        item.data["phone_number"],                    
        body=message_body,
        from_="xxxx"                           
    )
    # increment the position for this user
    item.data["position"]+=1

此代码用于向用户发送消息。 项目是包含用户电话号码、日期、语言和位置的字典列表。 位置是指它们在消息序列中的位置。 我想检查一个用户的位置,如果他们已经收到5 消息,那么它应该从列表中删除并继续到下一个用户。如果用户的位置是<5,那么它应该进入else if语句并根据满足的条件发送消息。

字典列表的结构如下:

'phone_number': '+1234567890', 'position': 5, 'lang': 'ENG', 'Date': '2018-08-17 00:03:46'
'phone_number': '+0987654321', 'position': 2, 'lang': 'ENG', 'Date': '2018-12-18 07:10:47'

代码之前运行良好,我添加/测试的新部分是 if 语句检查位置,但似乎 if 语句根本没有被调用并直接转到下面的 elif 检查 @987654327 @ 并发送消息并为用户增加位置。在我的例子中,用户的位置增加到6

【问题讨论】:

尝试从 '5' 中删除 '',5 是整数所以只检查 5 如果去掉 5 左右的引号会怎样? 另外,你在一个dict对象上调用delete()。您可能想改用items.remove(item) 【参考方案1】:

您似乎错误地比较了该值。您正在尝试将字符串“5”与整数 5 进行比较。

if item.data["position"] == '5':

注意 5 左右的引号。

例如:

print(1 == "1")
print(1 == 1)

第一个返回 False,第二个返回 True。

您也不应该在迭代列表时从列表中删除项目。而是尝试创建副本或使用列表推导。

【讨论】:

对不起,我对 python 还很陌生,并得到了这个项目。感谢您的帮助。您能否详细说明为什么我不应该从列表中删除项目的最后一句话?或者你复制或使用列表理解是什么意思?我在网上找到的示例显示了用于迭代字符串的列表理解。 我的意思是你不能修改你正在迭代的事物的索引。 for 循环会认为列表中有 x 个项目,如果你删除一个,它仍然会尝试访问那么多项目。您可以make a copy of the list 并仅编辑原始列表,这不会弄乱 for 循环。或list comprehension,例如somelist = [x for x in somelist if not x["position"] == 5]

以上是关于For 循环语句不读取 if 语句以继续下一次迭代的主要内容,如果未能解决你的问题,请参考以下文章

控制语句

在 Python 的嵌套 for 循环中使用 Continue 语句

python中的if循环怎么样?

if/while/for 解决数学难题 Python实例

continue语句的作用

vb6.0 循环语句 退出循环