Python分支结构与流程控制
分支结构if 语句 分支结构在任何编程语言中都是至关重要的一环,它最主要的目的是让计算机拥有像人一样的思想,能在不同的情况下做出不同的应对方案,所以 # ==== if 的使用 ==== ''' if 条件判断: 逻辑代码... if 条件判断: 逻辑代码... if 条件判断: 逻辑代码... ''' tag = 1 if tag == 1: print("判断为真,tag = 1") if tag == 2判断为真,tag = 2if tag: '判断为真,tag为True'if not判断为真,tag为False) 执行完毕... ==== 执行结果 ==== """ 判断为真,tag = 1 判断为真,tag为True 执行完毕... """ 可以看到,上面一共有4条 这里只执行了2个逻辑子代码,说明 ==== if 实例分析 ==== 二狗子要找女朋友, 年龄不能大于25岁,这个是前提!!, 身高不能超过170或者体重不能超过60公斤。 请问下面那个符合二狗子的需求? xiaoli = {age':30,height':158,1)">weight':90} xiaohua = {':22,1)">':190,1)">':50} 从上一章中过来的读者注意,age改为22了。 xiaocui = {':164,1)">':58} 使用括号,改变优先级。不然会出现bug if xiaoli[']<25 and (xiaoli[']<170 or xiaoli[']<60): 小丽符合二狗子的要求..小丽和二狗子约会了if xiaohua[and (xiaohua[or xiaohua[小花符合二狗子的要求..小花和二狗子约会了if xiaocui[and (xiaocui[or xiaocui[小翠符合二狗子的要求..小翠和二狗子约会了 小花符合二狗子的要求..小花和二狗子约会了 小翠符合二狗子的要求..小翠和二狗子约会了 执行完毕... """ 二狗子的做法令二狗子的父母很不满意,他们认为如果和一个姑娘约了会就不该再和其他姑娘继续约会。这是道德问题,如果让女孩子知道了这些事儿,二狗子就会落下一个不好的名声,所以二狗子的父母希望二狗子不要这么做。那么该如何解决呢? if 与 else 上面遗留问题的我们先来分析一下,只有当二狗子和某一个女孩约会那个女孩不符合二狗子的要求时二狗子才能继续和下一个女孩进行约会,这其中有一个 如果怎么,否则怎样的关系在里面。那么就可以用到 ==== if 与 else 的使用 ==== if 条件判断: 逻辑代码... else: 逻辑代码... tag = 2 注意tag改成了2 else判断为假,tag != 1判断为假,tag为False 判断为假,tag != 1 判断为真,tag为True 执行完毕... """ 好了,简单的学习了 ==== if 与 else 实例分析 ==== 由于小丽不符合二狗子的要求,二狗子决定和小花约会试试..) ): : 由于小花不符合二狗子的要求,二狗子决定和小翠约会试试..) ): : 所有的女孩子都不符合二狗子的要求,二狗子决定单身一辈子 由于小丽不符合二狗子的要求,二狗子决定和小花约会试试.. 小花符合二狗子的要求..小花和二狗子约会了 执行完毕... """ 可以看到二狗子在约会成功后就没有继续再做约会了,完成了二狗子爸妈的需求。但是这段代码看起来实在是太糟糕了,如果有100个女孩和二狗子约会这样一直写 if 与 elif 以及 else 为了解决单纯的 ==== if 与 elif 的使用 ==== if 条件判断: 逻辑代码... elif 条件判断: #如果条件成立,剩下同级别下的elif与else都不将再继续执行。 逻辑代码... elif 条件判断: 逻辑代码... else: 逻辑代码 注意 tag 改成了2 elif tag == 2判断为真,tag == 2elif tag == 3判断为真,tag == 3判断为假,tag既不等于1也不等于2或者3 判断为真,tag == 2 执行完毕... """ 二狗子找女朋友改进版: ==== if 与 elif 以及else 实例分析 ==== 使用括号,改变优先级。不然会出现bug ']<60): if 和 elif 中不能夹杂 print()。所以没办法及时告诉二狗子的父母二狗子本次的情况,只有全部结束后else中才会告诉二狗子的父母。 elif xiaohua[elif xiaocui[ 小花符合二狗子的要求..小花和二狗子约会了 执行完毕... """
流程控制之条件循环条件循环 while结构分支让计算机像人一样能够应对不同的情况而做出不同的对应方案,那么循环就是让计算机具有重复做一件事的能力。 ==== while循环的使用 ==== tag = 10 while tag > 5tag的数值目前是:{num}".format(num=tag)) tag -= 1 while循环执行完毕print(tag) tag的数值目前是:10 tag的数值目前是:9 tag的数值目前是:8 tag的数值目前是:7 tag的数值目前是:6 while循环执行完毕 5 """ 做一个小案例,来更加清晰的了解while循环的使用: ==== while循环 实例分析 ==== ? 小王和小张在打架,小王很愤怒,一旦怒气值达到了100小王就会化身斯巴达... ? import random 生成随机数的一个模块。 anger = 10 小张骂了小王2句,小王目前怒气值为10... while anger != 100: mode = random.randrange(0,3) 有 0,1,2三个随机数 if mode == 0: 小张对小王破口大骂,小王怒气值加5) anger += 5 elif mode == 1小张使劲打了小王一拳!小王怒气值加10) anger += 10 小张用尽浑身力气踹了小王一脚,小王怒气值加20) anger += 20="*30小王目前怒气值:{}.format(anger)) 小王化身斯巴达,一屁股坐死了小张...) ? ==== 执行结果 ==== 小张使劲打了小王一拳!小王怒气值加10 小张对小王破口大骂,小王怒气值加5 小张对小王破口大骂,小王怒气值加5 小张用尽浑身力气踹了小王一脚,小王怒气值加20 小张用尽浑身力气踹了小王一脚,小王怒气值加20 小张用尽浑身力气踹了小王一脚,小王怒气值加20 小张使劲打了小王一拳!小王怒气值加10 ============================== 小王目前怒气值:100 小王化身斯巴达,一屁股坐死了小张... ============================== ''' 可以看到while在某些情况下应用是非常有效的,比如银行取钱,游戏开箱等等。
我们来模仿一下银行取钱的程序: ==== 银行取钱 ==== ? money = 100" 用str类型,可以不用再做input输入后的转换。 count = 5 username = yunya passwd = 12345" 用str类型,可以不用再做input输入后的转换。 while count: 您总共可输入{0}次密码,当前还剩余{1}次输入机会".format(5,count)) username_input = input(请输入用户名n>>>) passwd_input = input(请输入密码n>>>if username == username_input and passwd == passwd_input: select = input(您好,{0}!n您当前账户余额为:{1},请选择您的操作方式:n1.取款n2.退出n>>>.format(username,money)) if select == 1: num = input(请输入取款金额:) if num > money: 您的余额不足,取款失败) count = 0 : 取款成功 0 ? 正在退出...请稍候) count = 0 : count -= 1期待您的下次光临") 基于条件的退出 面已经介绍过 ==== 基于条件的退出 ==== count = 5 while count != 10: count = 10 修改条件后。不会立刻退出 当前count的数值为:----> 执行中执行完毕.. 当前count的数值为: 10 ----> 执行中 执行完毕.. """ while 与 break
==== while 与 break ==== break 立刻退出 执行完毕.. """ while 与 continue
==== while 与 continue ==== if count == 8: count += 1 必须放在前面。不然会产生死循环 continue print(count) 不会执行countinue后的代码。 (count) count += 1 5 6 7 9 执行完毕.. """ while 与 else
==== while 与 else ==== 正常退出while循环。紧接着执行else子代码块 tag = 1 while tag < 5(tag) tag += 1 else代码块:n tag --> 1 2 3 4 else代码块: tag --> 5 执行完毕.. """ while 循环嵌套
==== 多层while循环基于条件退出注意事项 ==== 错误示范 tag1 = 1 tag2 = 2 while tag1 == 1一层..while tag2 == 2 二层.. 三层..) tag2 = 3 由于条件不同。只退出 第二层和第三层。 一层.. 二层.. 三层.. 一层.. 一层.. 一层.. (无限打印) """ ==============================================手动分割线============================================== 正确示范 tag3 = 3 tag3: tag3: tag3: ) tag3 = False 可以看到全部退出了。 一层.. 二层.. 三层.. """ ==== 多层while循环基于break退出注意事项 ==== break 跳出三层。回到二层。执行三层。跳出三层。回到二层。执行三层。 一层.. 二层.. 三层.. 二层.. 三层.. 二层.. 三层.. (无限打印) 跳出三层 跳出二层 跳出一层 """ 那么现在的 ==== 银行取钱程序终极版 ==== 银行取钱改进需求: 1.当输入密码正确后取款完成后不会再次要求输入密码 2.当输入密码正确后取款失败后也不会再次要求输入密码 3.针对使用 输入 2 退出的正常操作流程和输入密码错误超过上限被迫退出的流程做不同的回应 4.取款后总额扣除取款的相应金额 解决方案: 对于 1,2 来说都可以增加一层while循环。 对于 3 来说。正常退出不走else提示(基于break提示提出),被迫退出则走else(基于条件退出) 对于 4 来说。只需要做一次四则运算即可 money = 100 有了真正的取钱,就用int类型。因为str没办法做减法 count = 5 用str类型,可以不用再做input输入后的转换。 select = None 选择记录。 count: if select: 如果是没有成功登陆过。这里就是None,通过break退出不会执行else。 break ) passwd_input: True: select = input( : num = int(input(')) 这里也接收为int类型 money: ) : ) money = money - num elif select == 2: count -= 1 如果是条件退出。则会执行else 您的密码输入次数过多,系统已强制退出") 死循环带来的性能损耗死循环既永远跳不出的循环。 因为在计算机硬件基础中讲到, ==== 死循环带来的性能损耗 ==== x = 2 while 1: 使用while 1 比while True 会带来微乎其微的性能提升(计算机内部都是二进制。如果用字符True会经历转换过程) x **= 12 SB行为,CPU不断的运算只会让它肾虚 =============================================== while 1====") 这种死循环没事。因为CPU要调用显示器来显示,所以CPU会有休息时间 流程控制之取值循环取值循环 for Python中提供了 应用场景:取值,如 ==== for 循环的使用 ==== for 迭代变量 in 迭代器(或者认为可迭代对象,不深究) 逻辑操作... li1 = [1,2,3,4,5,6,7] for i in li1: (i) 1 2 3 4 5 6 7 """ 可以看到。i这个迭代变量拿到的正是列表中的具体元素(这点尤其重要,和其他的编程语言有点不一样,如JavaScript)。还记得集合吗?在介绍集合的时候没有详细说集合中的元素该怎么拿出来。是因为那时候没学 如果对字典进行 ==== 对字典的 for 循环 ==== d1 = {k1": v1",1)">k2v2k3v3} for k d1: (k) print(d1[k]) 可以使用该方法取出字典的 value k1 v1 k2 v2 k3 v3 """ 如果对 ==== 对 str 的 for 循环 ==== s1 = - - - - - -" s1: (i) - - - - - - """ for 循环的退出 for 与 break ==== for 与 break ==== ABCDEFGHIJKLMNif i==Jbreak (i) A B C D E F G H I """ for 与 continue ==== for 与 continue ==== continue ==== 执行结果 ==== Ps:没有 J C D E F G H I K L M N """ for 与 else 同 ==== for 与 else ==== if i == (i) 没有break走else如果break结束for循环就不走else A B C D E F G H I 如果break结束for循环就不走else """ len()方法 上面已经说过, >>> li1 = [1,1)">]
>>> (len(li1))
7
>>>
for 与 range()方法 下面再介绍一个新的方法: ==== for 与 range() 组合使用 ==== 打印 十次 hello,world in range(10hello,world hello,world hello,world """ 可以通过与 ==== for range() len() 的组合使用 ==== li1 = [abcin range(len(li1)): len返回的是一个数字。长度为3,rang则恰恰是 0,2 不取3. (i) (li1[i]) 0 a 1 b 2 c """ for 循环嵌套 ==== for 循环嵌套 ==== ] li2 = range(2) 0,1 ============外层循环for j li2: 内层循环" ============ 外层循环 a 内层循环 0 内层循环 1 ============ 外层循环 b 内层循环 0 内层循环 1 """ range() 方法详解Python2中的range()与xrange() Python2中有
>>> type(xrange(10000000)) xrange()的参数和使用都与range()相同。不同的是生成值的 <type xrange'> >>> type(range(10)) <type list'> >>> Python3的 通过: >>> === 如何转换一个经过优化的可迭代对象为列表 ==== >>> >>> type(range(10)) <class range'> >>> range(10) range(0,10) >>> list(range(10)) [0,1,1)">] >>> 测试:使用 ==== 9 * 9 乘法表 ==== in range(1,10{0}*{1}={2}".format(i,j,(i*j)),end= | 内层的循环每一次不换行而作为一排。 " 占行使用。多层循环特性。外层循环一层内层全部循环完 1*1=1 | 2*1=2 | 2*2=4 | 3*1=3 | 3*2=6 | 3*3=9 | 4*1=4 | 4*2=8 | 4*3=12 | 4*4=16 | 5*1=5 | 5*2=10 | 5*3=15 | 5*4=20 | 5*5=25 | 6*1=6 | 6*2=12 | 6*3=18 | 6*4=24 | 6*5=30 | 6*6=36 | 7*1=7 | 7*2=14 | 7*3=21 | 7*4=28 | 7*5=35 | 7*6=42 | 7*7=49 | 8*1=8 | 8*2=16 | 8*3=24 | 8*4=32 | 8*5=40 | 8*6=48 | 8*7=56 | 8*8=64 | 9*1=9 | 9*2=18 | 9*3=27 | 9*4=36 | 9*5=45 | 9*6=54 | 9*7=63 | 9*8=72 | 9*9=81 | """ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |