当前位置:首页>python>零基础自学Python量化第1周(中):while循环的坑,我替你踩过了(附代码)

零基础自学Python量化第1周(中):while循环的坑,我替你踩过了(附代码)

  • 2026-10-11 07:40:17
零基础自学Python量化第1周(中):while循环的坑,我替你踩过了(附代码)

接上篇的《Python编程从入门到实践》第三版 学习笔记上(1~4章节)的笔记,今天更新 中 (5~7章节),主要是if语句、字典、用户的输入以及while循环等。

第5章  if 语句

  • 重点:

1.条件测试:

== 等于     !=   不等于        >  大于    

<   小于      >=  大于等于    <=  小于等于

2.多条件组合:

  • and——两个条件都为 True 才返回 True

  • or——任意一个条件为 True 就返回 True

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整除')
正确解析:存在复合条件则应将更苛刻的条件放在前面进行判断
第6章  字典
  • 重点
1.什么是字典:字典(dictionary)用于存储键值对的集合,用花括号{}表示,与键相关联的值可以是数字、字符串、列表,甚至另一个字典
2.操作:添加/修改/删除/访问
    添加:append()    修改:dict[key] = new_value  
   删除:del()    安全访问: get(key,0)  (获取key对应的值,若不存在,返回0)
3.字典的遍历:

# 遍历所有键值对

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')
  • 常见陷阱:忘记更新循环条件(如忘记 i += 1),会导致无限循环!按 Ctrl+C 可强制终止。

✍️ 动手实践题s

创建一个名为 travel_survey.py 的程序:

  1. 创建一个空列表 dream_destinations

  2. 创建一个标志变量 active = True,使用 while 循环:

    • 提示用户输入一个梦想旅游目的地(或输入 'quit' 退出)

    • 如果用户输入 'quit',将标志设为 False

    • 否则将目的地添加到列表中

  3. 循环结束后,打印用户输入了多少个目的地(使用 len())

  4. 打印"你的梦想旅游目的地是:",遍历列表打印每个目的地

  5. 创建一个字典 destinations_dict,键为目的地名称,值为用户对该目的地的评分

  6. 再次使用 while 循环,遍历刚创建的列表,为每个目的地让用户输入评分(1-10 的数字),并存储到字典中

  7. 最后遍历字典打印所有目的地及其评分

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)相关知识,是重中之重,会涉及到面向对象编程。

谢谢看完,晚安~

最新文章

随机文章