学习内容:《python编程:从入门到实践》第二版
知识点:
函数、列表、pop()移除、列表副本(复制、切片list[:])、列表元素的移动
两个函数套用、调用函数、for和while遍历
练习内容:
练习8-9:消息
创建一个列表,其中包含一系列简短的文本消息。将该列表传递给一个名为show_messages()的函数,这个函数会打印列表中的每条文本消息。
练习8-10:发送消息
在你为完成练习8-9而编写的程序中,编写一个名为send_messages()的函数,将每条消息都打印出来并移到一个名为sent_messages的列表中。调用函数send_messages(),再将两个列表都打印出来,确认正确地移动了消息。
练习8-11:消息归档
修改你为完成练习8-10而编写的程序,在调用函数send_messages()时,向它传递消息列表的副本。调用函数send_messages()后,将两个列表都打印出来,确认保留了原始列表中的消息。
我的代码&运行结果:
练习8-9
创建一个列表,其中包含一系列简短的文本消息。将该列表传递给一个名为show_messages()的函数,这个函数会打印列表中的每条文本消息。
def show_messages(lists):
for list in lists:
print(list)
lists =['Hello','Byebye','Nice to meet you']
show_messages(lists)
注意点:
1.print(list)是一条条打印,print(lists)打印出来是一整个列表
2.我感觉,list_new 是主程序,def是定义的操作
3.题干中,打印每条文本消息,不用给消息再加东西。
练习8-10:发送消息
在你为完成练习8-9而编写的程序中,编写一个名为send_messages()的函数,将每条消息都打印出来并移到一个名为sent_messages的列表中。调用函数send_messages(),再将两个列表都打印出来,确认正确地移动了消息。
def show_messages(lists):
for list in lists:
print(list)
def send_messages(lists,sent_messages):
print(f"目前的消息是:")
msg = show_messages(lists)
print(msg)
while lists:
send_message = lists.pop()
print(f"{send_message}正在发送")
sent_messages.append(send_message)
print(f"已发送信息有:")
for send_message in sent_messages:
print(send_message)
lists =['Hello','Byebye','Nice to meet you']
sent_messages =[]
send_messages(lists,sent_messages)
注意点:
1.纠结打印出列表怎么打
——不用,用for in打印出单个,前面加个print解释的内容即可,又清晰,又方便
一开始想要把列表打出来,无语了一直打印不对!!!
2.两个函数怎么衔接
——msg= show_messages(lists)直接调用前面加个=,再print出来即可
这个部分会比较纠结到底列表和集合放在哪个位置合适,在两个def中间还是什么,最后觉得主程序就是要清晰的数据库和函数调用过程,所以放在最后主程序里,其他的放在每个函数里,就像书里所说,每个函数一个功能,函数外主程序看起来也更加简洁。
3.while +列表,表示的是遍历列表中每一个元素,根据结果来看,如果没有的话,会自动显示none
4.def和def都放在前面,这个框架是
def1遍历lists,并打印每条消息
def2打印现有,遍历现有lists,移除lists中的元素到新表里,打印列表
5.重要重要!!!不要试图把每一步都在前端呈现,用户不需要很多信息,只需要呈现他们需要的内容即可,函数里面的一些操作就像是这个步骤。
练习8-11:消息归档
修改你为完成练习8-10而编写的程序,在调用函数send_messages()时,向它传递消息列表的副本。调用函数send_messages()后,将两个列表都打印出来,确认保留了原始列表中的消息。
def show_messages(lists):
for list in lists:
print(list)
def send_messages(lists,sent_messages):
print(f"目前的消息是:")
msg = show_messages(lists)
print(msg)
while lists:
send_message = lists.pop()
print(f"{send_message}正在发送")
sent_messages.append(send_message)
print(f"已发送信息有:")
for send_message in sent_messages:
print(send_message)
m_lists =['Hello','Byebye','Nice to meet you']
sent_messages =[]
send_messages(m_lists[:],sent_messages)
print(m_lists)
print(m_lists[:])
print(sent_messages)
注意点:
1.有个问题:就是为啥print(m_list[:])不是显示[]空或者none呢?是因为pop只是暂时移除的原因么? 我把书上的练习用程序运行试了一下 ,结果和我的一样,所以如果练习遇到这个情况,可以不用担心了 你没错。
def print_models(unprinted_designs,completed_models):
while unprinted_designs:
current_design = unprinted_designs.pop()
print(f"Printing model:{current_design}")
completed_models.append(current_design)
def show_completed_model(completed_models):
print(f"\n The following models have been printed:")
for completed_model in completed_models:
print(completed_model)
unprinted_designs = ['phone case','robot pendant','dodecahedron']
completed_models= []
print_models(unprinted_designs[:],completed_models)
show_completed_model(completed_models)
print(unprinted_designs)
print(unprinted_designs[:])
print(completed_models)
pop在书中介绍时,有提到,pop是移除后还可以使用👇有的就是一句话,真正到用的时候,才突然想起!!!
方法pop()删除列表末尾的元素,并让你能够接着使用它。
——《python编程:从入门到实践》第三章
总结&问题:
1.不同列表的命名要清晰,注意实参和形参的命名尽量要不同,否则特别容易混淆,不仅会错,最后还会晕😵
2.副本的使用是对前序内容的复习,调用函数中使用[:],注意def函数中不需要修改,我愚蠢的全部改一遍,最后发现不对,副本是数据库而已,def函数的模板不用改变,自己对其中的每一个板块的定位要很清楚。
3.要像书里说的一样,有意识的数理一些让程序清晰有层次的理念
4.在练习过程中发现问题,最后回归基础,会发现书上没有一句废话orz,以前以为理解的知识点,可能没有理解,但因为发现问题会深入理解。
不要小看基础知识,自学虽然很慢,但也在前进。