接上篇的《Python编程从入门到实践》第三版 学习笔记上(1~4章节)的笔记,今天更新 中 (5~7章节),主要是if语句、字典、用户的输入以及while循环等。
第5章 if 语句
1.条件测试:
== 等于 != 不等于 > 大于
< 小于 >= 大于等于 <= 小于等于
2.多条件组合:
3.检查值是否在列表中: in / not in
users = ['alice', 'bob', 'charlie']print('alice' in users) # Trueprint('david' not in users) # True
4.if 语句的3种形式:
if—else 两个条件的判断
if—elif—elif 多条件分支判断(前面条件一旦满足,后面不会执行)
if—if—if 多条件顺序判断(前面条件满足,后面也会执行)
创建一个包含数字 1 到 15 的列表,遍历该列表:
如果数字能被 3 整除,打印"xxx 能被3整除"
如果数字能被 5 整除,打印"xxx 能被5整除"
如果同时能被 3 和 5 整除,打印"xxx 既能被3整除也能被5整除"
错误代码:
for num in list(range(1,16)):a = 0b = 0if num%3 == 0:a = 1print(f'{num}能被3整除')elif num%5 == 0:b = 1print(f'{num}能被5整除')elif a and b:print(f'{num}能被3和5整除')
错误解析:if——elif——else 语句中,一旦其中一个条件被满足,则下面的判断语句都不会被执行,只有 if——if 语句会按顺序进行分支判断。
正确代码:
for num in list(range(1,16)):if num % 3 == 0 and num % 5 == 0:print(f'{num}可被3和5同时整除')elif num % 3 == 0:print(f'{num}可被3整除')elif num % 5 == 0:print(f'{num}可被5整除')
正确解析:存在复合条件则应将更苛刻的条件放在前面进行判断1.什么是字典:字典(dictionary)用于存储键值对的集合,用花括号{}表示,与键相关联的值可以是数字、字符串、列表,甚至另一个字典 添加:append() 修改:dict[key] = new_value 删除:del() 安全访问: get(key,0) (获取key对应的值,若不存在,返回0)# 遍历所有键值对
for key, value in user.items():
# 遍历所有键
for key in user.keys():
# 遍历所有值
for value in user.values():
# 去重遍历值
for value in set(user.values()):
4.字典嵌套:
①字典的值是列表 ②字典的值是字典 ③列表的元素是字典
题1:创建三个字典,每个字典代表一只宠物,包含以下信息:名字(name)、类型(type)、年龄(age)、主人(owner) 并将这三个字典存入一个名为 pets 的列表中
pet1 = {'名字':'小黑','类型':'小猫','年龄':8,'主人':'大哥'}pet2 = {'名字':'大黄','类型':'小猫','年龄':13,'主人':'CC'}pet3 = {'名字':'佩奇','类型':'猪猪','年龄':3,'主人':'一一'}pet4 = {'名字':'旺财','类型':'小狗','年龄':3,'主人':'CC'}pets = [pet1,pet2,pet3]
题2:遍历 pets 列表,打印每只宠物的完整信息(使用 items() 方法)
for pet in pets: #外层for循环遍历每一只宠物(字典) print('\n宠物信息:') for key,value in pet.items(): #内层使用items()取出该字典的所有键值对 print(f'{key}:{value}')
题3:创建一个空字典 pet_count,遍历 pets,用字典的get()方法安全地增加计数。
这题重点是 dict.get(key,b)方法的用法,也就是获取dict(字典)的键“key”对应的值,如果该值不存在也不会报错,而是返回一个设定值b
pet_count = {} #新建一个空字典for pet in pets: #for 循环遍历pets列表获取每个宠物字典 pet_type = pet["类型"] # 获取每个字典对应的宠物类型 #获取字典pet_count内pet_type对应的值,如果不存在的话返回0,随后+1则为更新值 pet_count[pet_type] = pet_count.get(pet_type, 0) + 1 print(f'\n 宠物类型统计:{pet_count}')
题4:创建一个字典 owner_pets,键是主人的名字,值是该主人的宠物列表然后遍历打印每位主人拥有哪些宠物
这题是综合训练题,考察字典的循环,not in 用法,字典的赋值,以及利用items()方法遍历键值对。
owner_pets = {}for pet in pets: owner = pet['主人'] if owner not in owner_pets: owner_pets[owner] = pet['名字'] #如果要存多只宠物,需要把值设成列表,用 append() 添加。 for owner,pet in owner_pets.items(): print(f'{owner} 有宠物叫 {pet}')
第7章 用户输入和while 循环
1.input() 函数:让程序暂停运行,等待用户输入文本,用户输入的内容始终是字符串类型若要转换则需添加int或float等 例如:age=int(input('请输入年龄:'))
2.while 循环:在while后面条件为True时,循环执行,有三种跳出方式:
3.continue:跳出当前循环的剩余代码,立即开始下一轮循环
current_number = 0while current_number < 10: current_number += 1 if current_number % 2 == 0: continue print(current_number)
4.while 循环与列表和字典结合:
# 用 while 处理列表(逐个移除元素)while todolist: donelist.append(todolist.pop())# 用 while 移除列表中所有特定值while 'evil' in gods: gods.remove('evil')
✍️ 动手实践题s
创建一个名为 travel_survey.py 的程序:
创建一个空列表 dream_destinations
创建一个标志变量 active = True,使用 while 循环:
循环结束后,打印用户输入了多少个目的地(使用 len())
打印"你的梦想旅游目的地是:",遍历列表打印每个目的地
创建一个字典 destinations_dict,键为目的地名称,值为用户对该目的地的评分
再次使用 while 循环,遍历刚创建的列表,为每个目的地让用户输入评分(1-10 的数字),并存储到字典中
最后遍历字典打印所有目的地及其评分
1~4题 答题:
dream_destinations = []active = Truewhile active: dream_place = input('请输入一个梦想的旅游目的地:') if dream_place == 'quit': active = False else: dream_destinations.append(dream_place)print("你的梦想旅游地有",len(dream_destinations),'个')print('你的梦想旅游地是:')for place in dream_destinations:print(place)
5~7题 答题:
#接上面的代码 destinations_dict = {}for place in dream_destinations: point = int(input(f'请输入{place}地点评分:')) if 1<=point<=10: destinations_dict[place] = point else:print('请输入1~10分数')for key,value in destinations_dict.items():print(f'{key}评分是:{value}分')
输出:
D:\Jupyter\Python Study>travel_survey.py请输入一个梦想的旅游目的地:大理请输入一个梦想的旅游目的地:丽江请输入一个梦想的旅游目的地:quit你的梦想旅游地有 2 个你的梦想旅游地是:大理丽江请输入大理地点评分:9请输入丽江地点评分:11 #输入分数不满足区间,但for循环遍历不会停下 请输入1~10分数大理评分是:9分 #最终导致丽江的评分没有写入
错误解析:这里使用for循环遍历列表 在if语句判断中输入分数不满足设定区间的时候,for 循环不会停下,会继续往下读取列表中的元素,不符合条件的输入被跳过后没有机会重新输入,导致该项评分没有被写入字典
#接上面的代码 destinations_dict = {}i = 0 #索引符while i<len(dream_destinations): place = dream_destinations[i] point = int(input(f"请输入{place}评分(1~10分):")) if 1<=point<=10: #Python 特有的链式比较语法 destinations_dict[place] = point i+=1 else: print('评分输入错误,请按规定范围内给分')for place,point in destinations_dict.items():print(f'{place}获得{point}分')
正确解析:使用索引符递增的方式进行键值对赋值,在输入不满if后的条件时,未执行其中的i+=1这个递增索引符的操作,从而此项可以重新输入
输出:
D:\Jupyter\Python Study>travel_survey.py #运行程序请输入一个梦想的旅游目的地:苏州请输入一个梦想的旅游目的地:厦门请输入一个梦想的旅游目的地:陕西请输入一个梦想的旅游目的地:quit你的梦想旅游地有 3 个你的梦想旅游地是:苏州厦门陕西请输入苏州评分(1~10分):9请输入厦门评分(1~10分):10请输入陕西评分(1~10分):11 #在不满足区间的情况下下面提示重新输入评分输入错误,请按规定范围内给分请输入陕西评分(1~10分):9 #重新输入后正常写入 苏州获得9分厦门获得10分陕西获得9分 #将满足的分数写入了进去
本次小结:这三章主要是几种循环及条件语句的用法,字典的用法,学习需要实践,需要不断试错,错误的代码需要一步一步去分析,确认错误的位置。下期更新第八章往后 函数和类(Class)相关知识,是重中之重,会涉及到面向对象编程。
谢谢看完,晚安~