首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >while循环的用途

while循环的用途
EN

Stack Overflow用户
提问于 2021-04-27 20:12:51
回答 1查看 29关注 0票数 0

这就是作业。

有人能解释一下为什么下面的代码没有While循环就不能正常运行吗?我认为只要使用For循环就可以遍历列表。

8-9。消息:创建一个包含一系列短文本消息的列表。将列表传递给一个名为show_messages()的函数,该函数打印每条文本消息。

8-10。发送消息:从练习8-9中的程序副本开始。编写一个名为send_messages()的函数,该函数打印每条文本消息,并在打印时将每条消息移动到名为sent_messages的新列表中。调用该函数后,打印两个列表,以确保消息被正确移动。

`

代码语言:javascript
运行
复制
 def show_messages(messages):
    for message in messages:
        print(message)


def send_messages(messages,sent_messages):
for message in messages:

    current_message = messages.pop()
    print(current_message)
    sent_messages.append(current_message)

如果我们在For循环下插入While循环,那么代码运行得很好。

messages=['Kralju!','Gofe!','Klošaru!'] sent_messages=[]

send_messages(messages,sent_messages)

代码语言:javascript
运行
复制
print(messages)
print(sent_messages)[Output][1]

正确的输出应该是带有三条消息的'sent_messages‘,而' messages’应该是空的。

所以基本上,当你不使用While循环时,它会弹出除“messages”中的第一条消息之外的所有消息。不太确定这里的逻辑。

EN

回答 1

Stack Overflow用户

发布于 2021-04-27 20:35:00

可能是因为这一行:

代码语言:javascript
运行
复制
current_message = messages.pop()

不能从for循环中遍历的iterable中删除项,因为它需要列表有一定的长度。我没有看到您作为while循环运行的代码,但是使用while循环,您在删除messages列表中的项时不会遍历该列表。

我知道问题是从你的第一个函数开始,但是我确信如果你把它从一个for循环改成一个while循环也没问题:

代码语言:javascript
运行
复制
def send_messages(messages, sent_messages):
    while messages:
        # .pop(0) so the messages are printed in the same order
        # as your first function
        current_message = messages.pop(0)
        print(current_message)

        sent_messages.append(current_message)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67282823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档