P17 5.2-5.3 条件测试与if语句
“if [条件]:” 用于判断,比较运算符也可作为条件:
条件语句如下:
条件为真执行if下的语句,条件为假,执行else下的语句。
P18 5.3更多if语句--嵌套条件语句
实例:
"""练习5-3:外星人颜色
假设在游戏中刚射杀了一个外星人,请创建一个名为alien_color的变量并将其赋值为'green'、'yellow'或'red'
-编写一条if语句,检查外星人是否是绿色的。如果是,就打印一条消息指出玩家获得了5分。
-编写这个程序的两个版本,在一个版本中上述测试通过了,而在另一个版本中未通过(未通过测试时没有输出)。"""
alien_color = 'green'#,'yellow','red']
if alien_color == "green":
print("你获得了5分")
"""练习5-4:外星人颜色2
像练习5-3那样设置外星人的颜色,并编写一个if-else结构。
如果外星人是绿色的,就打印一条消息,指出玩家因射杀该外星人获得了5分。
如果外星人不是绿色的,就打印一条消息,指出玩家获得了10分。
编写这个程序的两个版本,在一个版本中执行if代码块,在另一个版本中自执行else代码块。"""
alien_color = 'yellow'#,'yellow','red']
if alien_color == "green":
print("你获得了5分")
else:
print("你获得了10分!")
"""练习5-5:外星人颜色3
将练习5-4中的if-else结构改为if-elif-else结构。
如果外星人是绿色的,就打印一条消息,指出玩家获得了5分。
如果外星人是黄色的,就打印一条消息,指出玩家获得了10分,
如果外星人是红色的,就打印一条消息,指出玩家获得了15分。
编写这个程序的三个版本,分别在外星人为绿色、黄色和红色时打印一条消息,"""
alien_color = 'yellow'#,'yellow','red']
if alien_color == "green":
print("你获得了5分")
elif alien_color == "yellow":
print("你获得了10分!")
else:
print("你获得了15分!")
运行结果:
你获得了5分
你获得了10分!
你获得了10分!
P19 5番外篇:逻辑运算
如果涉及到的条件太多,只用if语句就会让代码很冗余,此时引入逻辑运算符:and or not。
and(多个): 所有都满足才能返回True,否则都是False;
or(多个): 有一个满足就为True,全错才能返回False;
not(单个):满足返回Flase,否则返回True。
优先级:not > and > or,否则需要用括号改变优先级:
开头的冗余代码加上逻辑运算符后:
P20 6.2 使用字典
以通讯录为例,要想在众多的电话号码和备注中通过电话号码找到对应的人或者通过名字查电话号码都做不到,这时候可以利用数据结构将备注和号码进行绑定,"字典"这个数据结构就可以帮我们达到目的,“字典”用于存储键值对,“键”是用来查找“值”的。
空的字典:contacts = {};
有值的字典:contacts = {"aa": "11", "bb": "22"};搜索:contacts["aa"]
注意:"键"只能为不可变数据类型(即列表就不行)。
如果遇到相同的"键",但是几个键又各有特征该怎么办?这时候可以用到一个特别的数据结构“tuple”(元组),元组里面可以放多个元素,和列表的区别是(1.列表用[],元组用();2.由于元组不可变,添加、删除元素等不可操作),虽然不灵活,但是可以利用元组往字典里面存储多个看似相同是既有区别的“键”,元组可以作为“键”。
元组作为“键”举例如下:
字典和列表相似,也可以添加、删除键值对;
字典添加:contacts["键"] = "值",这个指令也是更新键值对的指令;
查询某个“键”是否存在:“键” in contacts;会返回布尔值判断:
查询键值对命令:len(contacs)
实例:
"""练习6-1:人
使用一个字典来存储一个熟人的信息,包括 名、姓、年龄和居住的城市。
该字典应包含键first_name、last_name、age和city。
将存储在该字典中的每项信息都打印出来。"""
friends = {"first_name":"小圆", "last_name":"袁", "age":"10",
"city":"北京"}
print("姓名:" + friends["last_name"] + friends["first_name"])
print("年龄:" + str(friends["age"]))#为什么要转换成字符串啊?不转换也能正常出来啊
print("年龄:" + friends["age"])
print("姓名:" + friends["city"])
运行结果:
姓名:袁小圆
年龄:10
年龄:10
姓名:北京
P21 6.3 遍历字典
假如需要在上万人的体温自测数据中找到哪些人的体温高于38°,如何用python解决这个问题?
如果只用for循环判断体温是否高于38°并不能知道具体是谁,这时候就可以结合字典和for循环。
实践:
"""练习6-5:河流
创建一个字典,在其中存储三条重要河流及其流经的国家。
例如,一个键值对可能是'nile’:'egypt'。
使用循环为每条河流打印一条消息,下面是一个例子。
The Nile runs through Egypt.
使用循环将该字典中每条河流的名字打印出来。使用循环将该字典包含的每个国家的名字打印出来。"""
river_country = {"长江":"中国","莱茵河":"德国","密西西比河":"美国"}
for river, country in river_country.items():
print("The" + river + "runs through" + country + ".")
for river, country in river_country.items():
print(river)
for river in river_country.keys():
print(river)
for river, country in river_country.items():
print(country)
for country in river_country.values():
print(country)
结果
The长江runs through中国.
The莱茵河runs through德国.
The密西西比河runs through美国.
长江
莱茵河
密西西比河
长江
莱茵河
密西西比河
中国
德国
美国
中国
德国
美国
Process finished with exit code 0
P22 6番外篇:格式化字符串
群发指定信件?如何用python实现?下面是替换名字的祝福:
要实现生肖也替换呢?
最没有效率的方法:
而我们可以格式化字符串来进行修改,让代码更简洁:其中{}表示format中的第几个字符串,例如这里0为format的第一个参数year,1为第二个参数name。
format还可以根据关键词而不是位置来指定进行替换的对象,如下(这个时候,关键词位置无所谓,只要关键词相对应就会输出对应的关键词):
下面这种方法直接将变量名=字符串,前提是要分得请等号前面的是关键字,=后面是参数值,{}中的是关键字。
f-字符串,在字符串前加前缀f,{}里的内容会被直接求值,添加到字符串内。
例子:
#告知每个同学的gpa,打印内容要包含人名和gpa
gpa_dict ={"小明":3.251, "小花":3.869, "小李":2.683, "小张":3.685}
for name, gpa in gpa_dict.items():
print(f"{name}你好,你当前的绩点为:{gpa}")
注:将{gpa}修改为{gpa:.2f}得到的绩点将为2位小数,1f则为1位小数。
结果:
小明你好,你当前的绩点为:3.251
小花你好,你当前的绩点为:3.869
小李你好,你当前的绩点为:2.683
小张你好,你当前的绩点为:3.685
P23 7.1函数input()的工作原理
input()函数可以从用户处获取输入,例如: input("请输入您的年龄:")。注:input一律返回字符串,即使输入的是数字也会当作字符串来看待。这时候可以用int()函数将字符串的20转换为整数20。
同理,float()函数可以将其他类型转换成浮点数,str()可以把其他类型转换成字符串。
实践:
number = int(input("请输入一个数字:")) # % 为取余操作,比如 number为13,那么 number %10为3
if number % 10 == 0:
print("您输入的数字是10的倍数")
结果:
请输入一个数字:100
您输入的数字是10的倍数
Process finished with exit code 0
P24 7.2 函数while()的工作原理
假如想设定一个程序让相机一直拍照,当亮度小于500时停止,如何用python实现?如果用if判断亮度,但此时只能判断一次,只能进行一次拍照;如果for+if,此时只能根据for设定的值进行重复拍照,不能确定到亮度小于500时需要多少次拍照;此时可以用到while()循环,它通过判断条件来判断是否继续,一直循环知道条件未假才会暂停:
代码:
for和while都可以用的情景:
(看起来for循环更加简单直接,行数更少,而且while更加危险,while代码中如果不写i = i+1,while循环将一直进行下去)
总结:for循环在有明确的循环对象或次数时更方便,while更加通用,特别是在不知道循环次数的时候。
实例:
"""练习7-4:比萨配料
编写一个循环,提示用户输入一系列比萨配料,
并在用户输入'quit'时结束循环
每当用户输入一种配料后,都打印一条消息,指出我们会在比萨中添加这种配料。"""
answer = input("您想要什么配料?")
while answer != "quit": # != 为不等于
print("我们会在比萨中添加" + answer)
answer = input("您想要什么配料?")
结果:
您想要什么配料?latiao
我们会在比萨中添加latiao
您想要什么配料?la
我们会在比萨中添加la
您想要什么配料?quit
Process finished with exit code 0
学习视频: 8.1 定义函数_哔哩哔哩_bilibili