Python 3.x while循环的目的

Python 3.x while循环的目的,python-3.x,while-loop,Python 3.x,While Loop,这是作业 有人能解释一下为什么没有While循环,下面的代码不能正常运行吗? 我认为仅仅使用For循环就可以遍历列表 8-9。消息:制作一个包含一系列短文本消息的列表。过关 将列表添加到名为show_messages()的函数,该函数将打印每条文本消息 8-10。发送消息:从练习8-9中的程序副本开始。 编写一个名为send_messages()的函数,用于打印每条文本消息并 打印时将每条消息移动到名为sent_messages的新列表中。之后 调用该函数,打印两个列表,以确保消息正确无误 移动

这是作业

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

8-9。消息:制作一个包含一系列短文本消息的列表。过关 将列表添加到名为show_messages()的函数,该函数将打印每条文本消息

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

`

如果我们在For循环下插入While循环,则For循环代码运行良好。
messages=['Kralju!'、'Gofe!'、'Klošaru!']
sent_messages=[]

发送消息(消息,已发送消息)

正确的输出为“已发送消息”,包含三条消息,而“消息”为空

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

可能是因为这行:

current_message = messages.pop()
您不能从for循环中迭代的iterable中删除项,因为它期望列表具有一定的长度。我看不到作为while循环运行的代码,但是使用
while
循环,当您从
消息列表中删除项目时,您没有在该列表上进行迭代

我知道问题是从您的第一个函数开始,但我确信如果您将它从
for
循环更改为
,而
循环:

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)

您能否显示一个有效的代码块和一个无效的代码块,因为您显示的代码不正确,并且无论如何都不会运行。那么,你能提供在while循环中为你工作的代码吗?太棒了!我现在明白了。非常感谢。没问题。如果它能帮助你,请考虑接受答案。
current_message = messages.pop()
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)