什么是分支+循环?
--不同条件进行不同逻辑处理 -- 分支
--满足条件进行反复相同逻辑处理 -- 循环
分支的形式?
-- if 条件:
执行体
else:
执行体
--if 条件1:
执行体1
#!/usr/bin/python3 def select_go(weather): # 分析:假定天气为下雨,后面的都是假设,如果,就,else:后面不符合逻辑,嗯哼 if weather == 'rainy': print('高兴的出去堆雪人,然后太冷了,又回来') else: print('天气和我有关系么') if __name__ == '__main__': weather = 'rainy' select_go(weather)
elif 条件n:
执行体n
else:
执行体
#!/usr/bin/python3 def select_go(weather): # 分析:假定天气为下雨,后面的都是假设,如果,就,else:后面不符合逻辑,嗯哼 if weather == 'snowy': print('高兴的出去堆雪人,各种浪') elif weather == 'sunny': print('可以去公园玩,散步') elif weather == 'windy': print('只得呆着家里了') else: print('嗯哼,我就是要出去,我不管,我不管') if __name__ == '__main__': weather = 'rainy' select_go(weather)
什么是三元运符?
--result = 值1 if 条件 esle 值2
-- 满足条件 result =值1 不满足条件 result =值2
#!/usr/bin/python3 result = '2b' if 2 == 2 else '4b' print(result) result = '2b' if 2 == 4 else '4b' print(result)
循环的形式?
--while条件:
循环体
#!/usr/bin/python3 def sum_go(sum_to): count = 0 sum_all = 0 while True: sum_all += count # 进行累加 if count == sum_to: # 判断是否满足边界条件 break count += 1 # 计数累加 print(sum_to, count) return sum_all if __name__ == '__main__': sum_to = 100 # 累加到100 result = sum_go(sum_to) print(result)
--for i in可迭代对象 -- range()\list\dict\str\
循环体
#!/usr/bin/python3 def sum_go(sum_to): sum_all = 0 for i in range(sum_to+1): sum_all += i return sum_all def bian_li(list_1, dict_1): # 遍历列表 for l in list_1: print(l) # 遍历字典 for d in dict_1: print(d) # 遍历字典key print(dict_1[d], '\n') # 通过key遍历字典value if __name__ == '__main__': sum_all = sum_go(sum_to=100) print(sum_all) list_1 = [1, 2, 3, 4, 5, [6, 7], 8] dict_1 = {'name': '北门吹雪', 'age': 18, 'work': 'student'} bian_li(list_1, dict_1)
--循环中有两个跳出方法
-continue --当前一次循环
-break --当前整个循环
思考?能跳出循环么?
#!/usr/bin/python3 def learn(now_time, star_time, end_time): if star_time == now_time: while True: print('学习ing........................',star_time) star_time += 0.1 if star_time == end_time: break print('还在学习ing........................') if __name__ == '__main__': now_time = 9 star_time = 9 end_time = 11 learn(now_time, star_time, end_time)
结果很奇怪?
学习ing........................ 9
还在学习ing........................
学习ing........................ 9.1
还在学习ing........................
学习ing........................ 9.2
还在学习ing........................
学习ing........................ 9.299999999999999
............
并没有跳出循环
-- 注意小数带来的坑?
-- 小数带来的坑,小数并不精准,默认在某个范围内是正确的,
所以计算计算的时候,最好最优用整数(可以换算成整数),或者进行多次精确值比较,不然会出现莫名其妙的bug
解决方法:
2个小数的学习,需要循环1200次,所以以1200次为限制,递加为整数1(递加是每次循环都在上一次的基础上加1)
-- 如下:
#!/usr/bin/python3 import time def learn(now_time, star_time, end_time): intervals = (end_time - star_time)*60*60 count = 0 if star_time == now_time: while True: print('学习ing........................', star_time) print('已经学习了 %s 分钟' % (count//60)) time.sleep(1) count += 1 if count == intervals: print('可以结束学习了,吃饭了') break elif count % 3600 == 0: star_time += 1 if __name__ == '__main__': now_time = 9 star_time = 9 end_time = 11 learn(now_time, star_time, end_time)
什么是逻辑运算符?
--进行真假判断,真为True 1 ,假为 False 0,联合 分支+循环 使用
-- > < == <= >= != --大于、小于、等于、小于等于、大于等于、不等于
-- “and” “or” “not“ ”is” “is not” ”in” “not in” --与、或、非、是、不是、在、不在
#登录验证小程序 user_ku = [['name1', 'psw1'], ['name2', 'psw2']] # 用户验证密码库 lock_list = [] # 锁定用户库,3次登录失败进入的小黑屋 canzhao = [] # 登录失败的录入,如果用count数出3次,进入锁定 while True: name = input('输入你的用户名:') psw = input('请输入你的密码:') if name in lock_list: # 判断用户是否进入小黑屋 print('此账号锁定,不能再用此账号登陆') continue if [name,psw] in user_ku: # 判断用户输入的合法性 print('登录成功') print('欢迎') break else: canzhao.append(name) # 用户名录入 print('账号或者密码输入错误,请重新输入') if canzhao.count(name) == 3: # 同用户3次登录失败进入的小黑屋 lock_list.append(name) # 进入小黑屋
-- “in”“ not in” 是判断元素是否在列表和字典中的有效方法
如何实现一个多级菜单,可以退出和返回上一级?
# 多级菜单循环以及返回和退出 dic1 = {'湖南': {'衡阳': {'珠晖区':'湖南工学院'}, '湘潭': {'晖晖':'啦啦'}}, '北京': {'朝阳': {"德玛:北京大学"}}} print('按q返回上一层') print('按e退出') ec = 'q' # 返回上一级 ex = 'e' ex_while = True # 退出程序 for i in dic1: # 打印一级菜单 print(i) while True: # 进入一级菜单选择 choice1 = input('请输入1>>>:') if choice1 in dic1: # 判断是否在字典中 for i1 in dic1[choice1]: print(i1) # 打印值 while True: choice2 = input('请输入2>>>:') # 进入二级菜单选择 if choice2 in dic1[choice1]: for i2 in dic1[choice1][choice2]: print(i2) while True: choice3 = input('请输入3>>>:') # 进入三级菜单选择 if choice3 in dic1[choice1][choice2]: for i3 in dic1[choice1][choice2][choice3]: print(i3) elif choice3 == ec: # 返回判断 for i2 in dic1[choice1][choice2]: print(i2) # 打印上一级菜单 break elif choice3 == ex: # 退出判断 exit('退出中……ing') # 退出整个程序 else: print('输入错误,请重新输入,么么哒') elif choice2 == ec: # 返回判断,并打印上一级菜单 for i1 in dic1[choice1]: print(i1) break elif choice2 == ex: # 退出判断 exit('退出中……ing') else: print('输入错误,请重新输入,么么哒') elif choice1 == ec: # 返回判断 print('已经最*菜单,完全退出请输入 e ') continue elif choice1 == ex: # 退出判断 exit('退出中……ing') else: print('输入错误,请重新输入,么么哒')