# 每周专业学习周记-5

Posted xxxxxxxxxx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了# 每周专业学习周记-5相关的知识,希望对你有一定的参考价值。

每周专业学习周记-5

标签(空格分隔): 周记


数据结构篇

接下来的数据结构课程将会围绕着期末复习来进行,所以不会有代码。

数据结构小结

马上就要期末考了,到了补缺补漏的时候了。打算先把mooc上的题目测试之类的全部复习一次。

Python篇

# 8.1 定义函数
def greet_user():
	"""显示简单的问候语"""
	#上面是被称为文档字符串(docstirng)的注释,描述了函数是做什么的
	print("Hello world!")

greet_user()

# 8.1.1 向函数传递信息
def greet_user(username):
	print("Hello,"+username+"!")

greet_user(‘Lili‘)

# 8.1.2 实参和形参
# greet_user(‘Lili‘)中的Lili是实参,而函数定义上面的变量username是一个形参

# 8-1 消息
def display_message():
	print("这章学的是函数,在前面学习了函数的定义还有函数调用。")

display_message()

# 8-2 喜欢的图书
def favorite_book(book):
	print("One of my favorite books is "+book+".")

favorite_book(‘Alice in Wonderland‘)

# 8.2.1 位置实参
def describe_pet(animal_type,pet_name):
	"""显示宠物的信息"""
	print("I have a "+animal_type+".")
	print("My "+animal_type+"’s name is "+pet_name+".")

describe_pet(‘dog‘,‘harry‘)

# 1.调用函数多次
def describe_pet(animal_type,pet_name):
	print("I have a "+animal_type+".")
	print("My "+animal_type+"‘s name is "+pet_name+".")

describe_pet(‘dog‘,‘harry‘)
describe_pet(‘cat‘,‘emmm‘)

# 2.位置实参的顺序很重要
def describe_pet(animal_type,pet_name):
	print("I have a "+animal_type+".")
	print("My "+animal_type+"‘s name is "+pet_name+".")

describe_pet(‘harry‘,‘cat‘)

# 8.2.2 关键字实参
print()
def describe_pet(animal_type,pet_name):
	print("I have a "+animal_type+".")
	print("My "+animal_type+"‘s name is "+pet_name+".")

describe_pet(animal_type = ‘dog‘,pet_name = ‘harry‘)
# 使用关键字实参时,无比准确的指定函数定义中的参数名。
print("----------------------")
# 8.2.3 默认值
def describe_pet(pet_name,animal_type = ‘dog‘):
	print("I have a "+animal_type+".")
	print("My "+animal_type+"‘s name is "+pet_name+".")

describe_pet(‘harry‘)
# 注意 使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的形参。
# 这让Python依然能正确的解读位置实参。

# 8.2.4 等效的函数调用
print("-------------8.2.4 等效的函数调用--------------")
def describe_pet(pet_name,animal_type = ‘dog‘):
	print("I have a "+animal_type+".")
	print("My "+animal_type+"‘s name is "+pet_name.title()+".")

# 一条名为Willie的小狗
describe_pet(‘willie‘)
describe_pet(pet_name = ‘willie‘)

# 一只名为Harry的仓鼠
describe_pet(‘harry‘,‘hamster‘)
describe_pet(pet_name = ‘harry‘,animal_type = ‘hamster‘)
describe_pet(animal_type = ‘hamster‘,pet_name = ‘harry‘)
# 注意 使用哪种调用方式无关紧要,只要函数调用能生成你希望的输出就行。使用对于你来说最容易理解的调用方式就好了。

# 8.2.5 避免参数错误
# def describe_pet(pet_name,animal_type):
# 	print("I have a "+animal_type+".")
# 	print("My "+animal_type+"‘s name is "+pet_name+".")
# describe_pet()

# 这上面8.2.5的报错信息
 #   Traceback (most recent call last):
 # 1  File "pets.py",line 6,in <module>
 # 2  describe_pet()
 # 3 TypeError:describe_pet() missing 2 required positional arguments:
 # ‘ animal_type‘ and ‘pet_name‘
 # 在1处,traceback 指出问题出在什么地方,让我们能够回过头去找出函数调用中的错误。
 # 在2处,指出了导致问题的函数调用。在3处traceback指出该函数调用少两个实参,并指出了
 # 相应形参的名称。如果这个函数存储在一个独立文件中,我们也许无需打开这个文件并查看函数的代码,
 # 就能重新正确的编写函数调用。

 # 8-2 T恤
def make_shirt(size,style):
 	print("The size of this T-shirt is a "+size+".")
 	print("The pattern on this T-shirt is "+style+".")

make_shirt(‘s‘,‘abc‘)

# 8-3 大号T恤
print("---------------大号T恤-----------------")
def make_shirt(size = ‘L‘,style = ‘I love Python‘):
	print("The size of this T-shirt is a "+size+".")
	print("The pattern on this T-shirt is "+style+".
")

make_shirt()
make_shirt(‘M‘)
make_shirt(‘S‘,"I don‘t like Python")

# 8-5 城市
def describe_city(country = ‘China‘,city = ‘Beijing‘):
	print(city.title() + "is in " + country + "." )

describe_city()

describe_city(city = ‘shanghai‘)

describe_city(‘iceland‘,‘reykjavik‘)

# 8.3.1 返回简单值
print("---------------返回简单值-----------------")
def get_formatted_name(first_name,last_name):
	"""返回整洁的姓名"""
	full_name = first_name + " " + last_name
	return full_name.title()

musician = get_formatted_name(‘jimi‘,‘hendrix‘)
print(musician)

# 8.3.2 让实参变成可选的
def get_formatted_name(first_name,middle_name,last_name):
	full_name = first_name + " " + middle_name + " " + last_name
	return full_name.title()

musician = get_formatted_name(‘john‘,‘lee‘,‘hooker‘)
print(musician)

def get_formatted_name(first_name,last_name,middle_name = ‘‘):
	if middle_name:
		full_name = first_name + " " + middle_name + " " + last_name
	else:
		full_name = first_name + " " + last_name
	return full_name.title()

musician = get_formatted_name(‘john‘,‘hooker‘,‘lee‘)
print(musician)

musician = get_formatted_name(‘john‘,‘hooker‘)
print(musician)

# 8.3.3 返回字典
def build_person(first_name,last_name):
	"""返回一个字典,其中包含有关一个人的信息。"""
	person = {‘first‘:first_name,‘last‘:last_name}
	return person

musician = build_person(‘jimi‘,‘hendrix‘)
print(musician)

def build_person(first_name,last_name,age = ‘‘):
	person = {‘first‘:first_name,‘last‘:last_name}
	if age:
		person[‘age‘] = age
	return person
musician = build_person(‘jimi‘,‘hendrix‘,‘11‘)
print(musician)

# 8.3.4 结合使用函数和while循环
# def get_formatted_name(first_name,last_name):
# 	full_name = first_name + " " +last_name
# 	return full_name.title()

# while True:
# 	print("
Please tell me your name:")
# 	f_name = input("First_name: ")
# 	l_name = input("Last_name: ")

# 	formatted_name = get_formatted_name(f_name,l_name)
# 	print("Hello,"+formatted_name+"!")

# def get_formatted_name(first_name,last_name):
# 	"""返回整洁的姓名"""
# 	full_name = first_name + ‘ ‘ +last_name
# 	return full_name.title()

# while True:
# 	print("
Please tell me your name: ")
# 	print("(Enter ‘q‘ at any time to quit)")
# 	first_name = input("First_name: ")
# 	if first_name == ‘q‘:
# 		break
# 	last_name = input("Last_name: ")
# 	if last_name == ‘q‘:
# 		break
# 	full_name = get_formatted_name(first_name,last_name)
# 	print("Hello," + full_name + ‘.‘)

# 8-6 城市名
print("---------------城市名-----------------")

def city_country(city,country):
	print(‘"‘ + city.title() + "," + country.title() + ‘"‘)

city_country(‘beijing‘,‘china‘)
city_country(‘shanghai‘,‘china‘)

# 8-7 专辑
# def make_album(singer_name,album_name,number_of_songs = ‘‘):
# 	if number_of_songs:
# 		album = {‘singer‘:singer_name.title(),‘album‘:album_name.title(),‘number of songs‘:number_of_songs}
# 	else:
# 		album = {‘singer‘:singer_name.title(),‘album‘:album_name.title()}
# 	return album


# print(make_album(‘jay chou‘,‘《jay》‘))
# print(make_album(‘eason chan‘,‘《the key》‘,3))

# 8-8 用户的专辑
# def make_album(singer_name,album_name):
# 	album = {‘singer‘:singer_name.title(),‘album‘:album_name.title()}

# 	return album

# while True:
# 	print("
输入‘q’可以随时停止输入")
# 	singer = input("请输入歌手名: ")
# 	if singer == ‘q‘:
# 		break
# 	album = input("请输入专辑名: ")
# 	if album == ‘q‘:
# 		break
# 	print(make_album(singer,album))

# 8.4 传递列表
def greet_name(names):
	"""向列表中的每一位用户都发出简单的问候"""
	for name in names:
		print(‘Hello,‘+name.title()+"!")

username = [‘hannah‘,‘try‘,‘margot‘]
greet_name(username)

# 8.4.1 在函数中修改列表
print("---------------在函数中修改列表-----------------")
unprinted_designs = [‘iphone case‘,‘robot pendant‘,‘dodecahedron‘]
completed_models = []

while unprinted_designs:
	current_design = unprinted_designs.pop()

	print("Printing model:"+current_design)
	completed_models.append(current_design)

print("
the following models have been printed:")
for completed_model in completed_models:
	print(completed_model)

def print_models(unprinted_designs,completed_models):
	"""
	模拟打印每个设计,直到没有未打印的设计为止
	打印每个设计后,都将其移到列表completed_models中
	"""
	while unprinted_designs:
		current_design = unprinted_designs.pop()

		# 模拟根据设计制作3D打印模型的过程
		print("Printing model: "+current_design)
		completed_models.append(current_design)

def show_completed_models(completed_models):
	"""显示打印好的模型"""
	print("
The following models have been printed: ") 

	for completed_model in completed_models:
		print(completed_model)

unprinted_designs = [‘iphone case‘,‘robot pendant‘,‘dedecahedron‘]
completed_models = []

print_models(unprinted_designs,completed_models)
show_completed_models(completed_models)


# 8.4.2 禁止函数修改列表
# 有时候可能会有一个这样的需求,即使打印完所有的设计,也想要保留原来的未打印的设计列表,
# 由于前面的示例中运用了pop()方法将unprinted_design数组中的元素变没了,为了解决这个
# 问题可以向函数传递副本而不是原件。这样之后的所有操作都不会影响到原件了。
#function_name(list_name[:])
# 用切片表示法创建列表的副本
print()
def print_models(unprinted_designs,completed_models):
	for unprinted_design in unprinted_designs:

		print("Printing models: "+unprinted_design)
		completed_models.append(unprinted_design)

def show_completed_models(completed_models):
	print("The following models have been printed: ")
	for completed_model in completed_models:
		print(completed_model)

unprinted_designs = [‘iphone case‘,‘robot pendant‘,‘dedecahedron‘]
completed_models = []

print_models(unprinted_designs[:],completed_models)
show_completed_models(completed_models)

# 8-9 魔术师
print("---------------魔术师-----------------")
def show_magicians(magicians_name):
	print("Magicians: ",end = ‘‘)
	for name in magicians_name:
		print(name,end = ‘ ‘) 

magicians_name = [‘near‘,‘lili‘,‘jack‘]
show_magicians(magicians_name)

# 8-10 了不起的魔术师
print("
")
def show_magicians(the_great):
	print("Magicians: ")
	for name in the_great:
		print(name.title()) 

def make_great(magicians_name,the_great):
	"""
	for name in magicians_name:
		name = "The Great " + name.title()
		the_great.append(name)
	"""
	while magicians_name:
		magicians = magicians_name.pop()
		the_great.append("The Great "+magicians)
	# print(the_great,magicians_name)
	#print(len(magicians_name))

the_great = []
magicians_name = [‘near‘,‘lili‘,‘jack‘]

make_great(magicians_name,the_great)
show_magicians(the_great)

# 8-11 不变的魔术师
def show_magicians(magicians):
	print("Magicians: ")
	for name in magicians:
		print(name)

def make_great(the_great,magicians_name):
	while magicians_name:
		name = magicians_name.pop()
		the_great.append("The Great "+name)


the_great = []
magicians_name = [‘near‘,‘lili‘,‘jack‘]

make_great(the_great,magicians_name[:])
show_magicians(the_great)
show_magicians(magicians_name)

# 8.5 传递任意数量的实参
def make_pizza(*toppings):
	"""打印客户点的所有配料"""
	print(toppings)

make_pizza(‘pepperoni‘)
make_pizza(‘mushrooms‘,‘green peppers‘,‘extra cheese‘)

def make_pizza(*toppings):
	print("
Making a pizza with the following toppings: ")
	for topping in toppings:
		print(‘-‘+topping)

make_pizza(‘pepperoni‘)
make_pizza(‘mushrooms‘,‘green peppers‘,‘extra cheese‘)

# 8.5.1 结合使用位置实参和任意数量实参
def make_pizza(size,*toppings):
	"""概述要制作的披萨"""
	print("
Making a "+str(size)+" inch pizza with the following toppings:")
	for topping in toppings:
		print("-"+topping)

make_pizza(16,‘pepperoni‘)
make_pizza(12,‘mushrooms‘,‘green pappers‘,‘extra cheese‘)

# 8.5.2 使用任意数量的关键字实参
def build_profile(first,last,**user_info):
	"""创建一个字典,其中包含我们知道的有关用户的一切"""
	profile = {}
	profile[‘first_name‘] = first
	profile[‘last_name‘] = last

	for key,value in user_info.items():
		profile[key] = value

	return profile

user_profile = build_profile(‘albert‘,‘einstein‘,
							location = ‘princeton‘,
							field = ‘physics‘)
print(user_profile)

# 8-12 三明治
def make_sandwich(*materials):
	print(‘
We will add the following materials to the sandwich.‘)
	for material in materials:
		print("-"+material)

make_sandwich(‘pappers‘,‘mushrooms‘)
make_sandwich(‘meat‘)
make_sandwich(‘beef‘)

# 8-13 用户简介
def build_porfile(first,last,**user_info):
	message = {}
	massage[‘first_name‘] = first
	message[‘last_name‘] = last

	for key,value in user_info.items():
		message[key] = value

	return message

accept_message = build_profile(‘wang‘,‘li‘,
							location = ‘fuzhou‘,
							field = ‘computer‘)
print(accept_message)

# 8-14 汽车
def make_car(automobile_brand,region,**essential_information):
	car_infomation = {}
	car_infomation[‘automobile brand‘] = automobile_brand
	car_infomation[‘region‘] = region

	for key,value in essential_information.items():
		car_infomation[key] = value
	return car_infomation

car = make_car(‘subaru‘,‘outback‘,color = ‘blue‘,tow_package = True)
print(car)

# 8.6.1导入整个模块
import pizza

pizza.make_pizza(16,‘pepperoni‘)
pizza.make_pizza(12,‘mushrooms‘,‘green peppers‘,‘extra cheese‘)
"""
	python读取这个文件时,代码行import pizza让python打开文件pizza.py,
	将其中的所有函数都复制到这个程序中。你看不到复制的代码,因为这个程序运行
	时,python在幕后复制这些代码。只需知道,在本代码块中,可以使用pizza.py
	中的所有函数。
"""
# 8.6.2 导入特定的函数
"""
	可以导入模块中的特定函数,这钟导入方法的语法如下:
	from module_name import function_name

	通过用逗号分隔函数名,可根据需要从模块中导入任意数量的函数
	from module_name import function_0,function_1,function_2

	对于前面making_pizza.py示例,如果只想导入要使用的函数,代码类似于下面这样
"""
from pizza import make_pizza

make_pizza(16,‘pepperoni‘)
make_pizza(12,‘mushrooms‘,‘green peppers‘,‘extra cheese‘)

# 8.6.3 使用as给函数指定别名
from pizza import make_pizza as mp

mp(16,‘pepperoni‘)
mp(12,‘mushrooms‘,‘green peppers‘,‘extra cheese‘)

# from module_name import function_name as fn

# 8.6.4 使用as给模块指定别名
print("--------------------使用as给模块指定别名-------------------")
import pizza as p

p.make_pizza(16,‘pepperoni‘)
p.make_pizza(12,‘mushrooms‘,‘green peppers‘,‘extra cheese‘)
"""
------------------------------------------------
	import module as mn
------------------------------------------------
"""
# 8.6.5 导入模块中的所有函数
# 使用星号(*)运算符可让Python导入模块中的所有函数

from pizza import*

make_pizza(16,‘peppernoi‘)
make_pizza(12,‘mushrooms‘,‘green peppers‘,‘extra cheese‘)

"""
	import语句中的星号让python将模块pizza中的每个函数都复制到这个程序中。由于导入了
每个函数,可通过名称来调用每个函数,而无需使用句点表示法。然而,使用并非自己边写的
大型模块时,最好不要采用这种导入方法:如果模块中有函数的名称与你的项目中使用的名称
相同,可能导致意想不到的结果:python可能遇到多个名称相同的函数或变量,进而覆盖函数,
而不是分别导入所有函数。
	最佳的做法是,要么只导入你需要用到的函数,要么导入整个模块并使用句点表示法。这能让
代码更清晰,更容易阅读和理解。在这里之所以介绍这种方法,只是想在你阅读别人编写的代码时,
如果遇到类似下面的import语句,能够理解它们:
------------------------------------------------
	from module_name import*
------------------------------------------------
"""

# 8.7 函数编写指南
"""
每个函数都应该包涵简要地阐述其功能的注释,该注释应紧跟在函数定义后面,并采用文档字符串格式
给形参指定默认值时,等号两边不要有空格:
-------------------------------------------------------------------
	def function_name(parameter_0,parameter_1=‘defualt value‘)
-------------------------------------------------------------------

对于函数调用中的关键字实参,也应遵循这种规定:
-------------------------------------------------------------------
	function_name(value_o,paremeter_1=‘value‘)
-------------------------------------------------------------------
	PEP9建议代码行的长度不要超过79个字符,这样只要在编辑器窗口适中,就能看到整行代码。
如果形参很多,导致超过79个字符,可在函数定义中输入左括号后按回车键,并在下一行按
两次Tab键,从而将形参列表和只缩进一层和函数体区分开来。
	大部分编辑器都会自动对齐后续参数列表行,使其缩进程度与你给第一个参数列表行指定的
缩进程度相同:
-------------------------------------------------------------------
	def function_name(
			parameter_0,parameter_1,parameter_2,
			parameter_3,parameter_4,parameter_5):
		function body...
-------------------------------------------------------------------
	如果程序或模块包含多个函数,可使用两个控函将相邻的函数分开,这样将更容易知道
前一个函数在什么地方结束,下一个函数从什么地方开始。所有的import语句都应放在文件
开头,唯一例外的情形是在文件开头使用了注释来描述整个程序。
"""
# 8-15 打印模型
import printing_functions

unprinted_designs = [‘iphone case‘,‘robot pendant‘,‘dedecahedron‘]
completed_models = []
printing_functions.print_models(unprinted_designs[:],completed_models)
printing_functions.show_completed_models(completed_models)

# 8-16 导入
import printing
printing.print_message("第八章终于要结束了!!!!")

from printing import print_message
print_message("这个第八章真的好长啊!!!!!")

from printing import print_message as msg
msg("差点就受不了了啊啊啊啊!!!!!!")

import printing as pri 
pri.print_message("最后还有一个小题了!!!!!!!")

from printing import*
print_message("加油!!!")

# 8-17 函数编写指南

Python小结

在本章中学习了如何编写函数以及如何传递时常在函数能够访问完成其工作所需的信息如何使用,位置实惨和关键质实惨,以及如何接受任意数量的时差,显示输出的函数和返回值的函数,如何将函数同列表、字典、if语句和while循环结合起来使用。还知道了如何将函数存储在被称为模块的独立文件中,让程序文件更简单更易于理解,最后,学习了函数编写指南,遵循这些指南可以让程序始终结构良好,并对你和其他人来说易于阅读。
程序员的目标之一是编写简单的代码来完成任务,而函数有助于你实现这样的目标,他们让你编写好代码块并确定其能够正常运行后就可置之不理,确定函数能够正确地完成其工作后,你就可以接着投身于下一个编码任务。
函数让你编写代码一次后,想重用他们多少次就重用多少次,需要运行函数中的代码时,只需要编写一行函数调用代码,就可以让函数完成其工作,需要修改函数的行为时,只需修改一个代码块,而所做的修改,将影响调用这个函数的每个地方。
使用函数让程序更容易阅读,更好的函数名概述了程序各个部分的作用。相对于阅读一系列的代码块,阅读一系列的函数调用让你能够更快的明白程序的作用。
函数还让代码更容易测试和调试,如果程序使用一系列的函数完成其任务,而其中的每个函数都完成一项具体的工作,测试和维护起来将容易得多,你可编写分别调用每个函数的程序,并测试每个
函数是否在它可能遇到的各种情形下都能正确的运行,经过这样的测试后你就能信心满满,相信你每次调用这些函数时,他们都能正确的运行。
在第9章中将会学习编写类,类将函数和数据简洁的封装起来,让你能够灵活而高效的使用它们。

说明:这次的第八章的内容相比之前的章节来说内容很多很多,我花费了将尽两倍的时间完成它,接下来是打算进入复习阶段,Python如果我学有余力的话还是会继续学习。







以上是关于# 每周专业学习周记-5的主要内容,如果未能解决你的问题,请参考以下文章

每周专业学习周记-1

每周专业学习周记-1

周记5

第五周周记

第六次周记

第五周周记