六、字典
6.1 构成
字典由一系列阐述属性的键值对构成。
例如,当我们设计一个包含外星人的游戏,现在给外星人设置属性,就可用到字典。
#一个外星人
alien_0={'color':'green','point':5}
print(alien_0['color'])
根据以上形式,我们可以索引字典中我们想要的属性。
6.2 添加,修改和删除
字典作为一个动态的存储结构,可随时对其中键值对进行添加,修改,或删除的操作。
例如,现在我们要定位外星人的位置,为其属性加上二维坐标。
alien_0['x_position']=0
alien_0['y_position']=0
print(alien_0)
同样的添加方式可以用于创建空字典后。
当我们想修改字典中已存在的属性,重新赋值即可。
删除该属性的键值对,则调用del函数即可。
alien_0['color']='yellow'
del alien_0['point']
print(alien_0)
6.3 访问和遍历
6.3.1 访问get
前文已讲述过利用【】访问字典中的键值对。但当字典中不存在该键值对的时候,p会发生错误(Keyerror),阻碍整个程序的运行。
要避免这样的错误,可调用get函数进行访问。当访问的键值对不存在时,get会自动返回一个特定值,避免traceback。
point_value=alien_0.get('point','No found.')
print(point_value)
由于上文我们已经删除了point属性,此时get返回第二个参数。
6.3.2 遍历键值对
遍历字典有三种方式,遍历键值对,遍历键,遍历值。语法都较为固定。
下面是遍历键值对:
for key,value in alien_0.items():
print(key)
print(value)
两个变量,并调用函数items()。print会自动分行打印结果。
6.3.3 分别遍历键和对
for key in alien_0.keys():
print(key)
for value in alien_0.values():
print(value)
6.4 集合
集合通常用大括号标识,不具备索引的功能,只是单纯用来储存数据。
Fruits={'apples','oranges'}
6.5 嵌套
6.5.1 字典列表
字典可以存储在列表中。比如我们有多个alien,此时我们把他们存储在一个列表中。
aliens=[alien_0,alien_1,alien_2]
同样,按照列表操作可以遍历该列表,按字典操作可以遍历各个字典,这里不再赘述。
6.5.2 在字典中存储列表
列表可在键或值的位置,这样也构成了字典和列表的嵌套。
七、while循环
7.1 input函数
input用于用户和程序的交互,让程序读取用户输入的文本,再将某些文本经过一系列操作后返还给顾客。
name=input("Please tell me your name.\n")
print(f"Hello,{name.title()}")
input括号内是提示语,可帮助我们编写清晰的程序,反应明确的信息。
当input获取的是数字时,需要多一步转化:
weight=input("Please tell me your weight.\n")
weight=float(weight)
if weight>60:
print("ok.")
float是浮点数转化。
7.2 while循环
例如,我们想要用while循环进行数数。
current_number=0
while current_number<=5:
print(current_number)
current_number+=1
while后面是进入循环的条件。条件成立,则继续循环。条件不成立,终止循环。
当我们想设计程序自动选择是否退出循环,也可用while进行设置。
7.3 break和continue
while循环有多种结束方式,其中break和continue是其中非常重要的两种。
break指立即退出循环,不再执行之后的循环命令。
while True:
city=input()
if city=='quit':
break
else:
print(f"The {city} is good.")
此时输入quit 则循环终止;反之,可以一直输入城市进行打印。
而continue,则是跳过本轮循环,直接进入到下一轮。
例如,当我们想利用while循环来打印奇数。
current_number=0
while current_number<10:
current_number+=1
if current_number%2==0:
continue
print(current_number)
可利用continue排除偶数的数数循环轮次,所打印的就只有奇数。
每个循环都应该有终止条件,而不是让他无限循环。如果一不小心陷入无限循环,可按Ctrl+c终止循环窗口。
八、函数
8.1 定义函数
定义一个新函数,函数头包含要传递的参数,函数体是一系列指令,调动函数,传递参数。
def great_user(user_name):
print(f"Hello,{user_name}")
great_user('Cherry')
此时运行如下:
8.2 参数类型及传递方式
参数分为形参和实参。
函数头括号内一个或多个参数为形参,调用时传递的参数为实参。
传递实参有两种方式,位置实参(推荐),关键字实参。
def describe_fruit(name,color):
print(f"The {name} is {color}.")
describe_fruit('pear','yellow')
describe_fruit(name='pear',color='yellow')
两种调用方式输出一样,但前者明显比后者简洁。
同样,参数在初始可设置默认值,当一次调用也许不需要用到所有参数时候,设置的默认值可为空。
传递的参数类型上,python没有做太限制的规定,无论是字典还是列表,都可以作为参数。
8.3 返回值
函数并非总是直接显示输出,它还可以处理一些数据,并返回一个值。这个值可以是参数,可以是列表,也可以是字典。
函数返回这个值,后续可再对这个值进行包括打印之外的一切操作。
下面是一个返回字典的简单函数例子。
def build_person(name,age):
person={'name1':name,'age1':age}
return person
Jerry=build_person('Jerry',18)
8.4 传递任意数量的实参
有时候,我们并不知道要向一个函数传递多少菜单。例如,当我们要定义一个函数去打印采购订单,我们事先并不知道要采购多少东西,可使用下面这种方法实现:
def make_pizza(*toppings):
print(toppings)
这时我们可以在传输参数的时候传递任意数量的参数,都会被打印出来。
8.5 导入模块参数
如果要从一个模块导入函数,可以调用import。
from pizza import make_pizza as p
同时调用as函数,可以简化函数名。
如果导入模块所有函数,则如下:
from pizza import *
同样,模块名也可以简化
import pizza as p