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 语句以继续下一次迭代的主要内容,如果未能解决你的问题,请参考以下文章