这就是作业。
有人能解释一下为什么下面的代码没有While循环就不能正常运行吗?我认为只要使用For循环就可以遍历列表。
8-9。消息:创建一个包含一系列短文本消息的列表。将列表传递给一个名为show_messages()的函数,该函数打印每条文本消息。
8-10。发送消息:从练习8-9中的程序副本开始。编写一个名为send_messages()的函数,该函数打印每条文本消息,并在打印时将每条消息移动到名为sent_messages的新列表中。调用该函数后,打印两个列表,以确保消息被正确移动。
`
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)
print(messages)
print(sent_messages)[Output][1]
正确的输出应该是带有三条消息的'sent_messages‘,而' messages’应该是空的。
所以基本上,当你不使用While循环时,它会弹出除“messages”中的第一条消息之外的所有消息。不太确定这里的逻辑。
发布于 2021-04-27 20:35:00
可能是因为这一行:
current_message = messages.pop()
不能从for循环中遍历的iterable中删除项,因为它需要列表有一定的长度。我没有看到您作为while循环运行的代码,但是使用while
循环,您在删除messages
列表中的项时不会遍历该列表。
我知道问题是从你的第一个函数开始,但是我确信如果你把它从一个for
循环改成一个while
循环也没问题:
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)
https://stackoverflow.com/questions/67282823
复制相似问题