「码动四季·开源同行」python语言:流程控制

张开发
2026/4/15 22:53:32 15 分钟阅读

分享文章

「码动四季·开源同行」python语言:流程控制
一、运算方式1.数学运算既然我们编程的目的是为了控制计算机能够像人脑一样工作那么人脑能做什么就需要程序中有相应的机制去模拟。人脑无非是数学运算和逻辑运算对于数学运算就是加减乘除很简单我们先来看一下。计算机的核心部件就是CPUCUP有两个功能控制和运算接下来就看一下计算机是如何进行运算的。a 10 b 20 print (a b) #加在python中#可用来添加注释即#后面的内容计算机时不会管你的 可用来给代码添加注释即解释该代码 print (a - b) #减 print (a * b) #乘 print (a / b) #除 print (a % b) #取模 print (a ** b) #幂 print (a // b) #取整除2.比较运算a 10 b 20 print (a b) print (a ! b) #不等于 # print (a b) #弃用 print (a b) print (a b) print (a b) print (a b)3.赋值运算a 10 b 20 a b # 将b赋值给a print (a) a b #效果等同于a a b即将ab的值赋给a下同 print (a) a * b print (a) a % b print (a) a ** b print (a) a // b print (a)4.逻辑运算print (True and False #与运算True和False进行与运算结果应该为False print (True or False #或运算True和Fale进行或运算结果应该为True print (not (True and False)) #非运算将结果置非即тrue变FalseFalse变True5.身份运算#is比较的是id在python中id为变量的内存地址id相同意味着在内存中保存的地址也相同即为同一个变量#而比较的是值二、分支语句1.if else对于逻辑运算即人根据外部条件的变化而做出不同的反映比如如果一切都是天意那么谁也逃不离if everything is Gods will: print(everyone can not flee)或许这个例子太抽象了我们再举一个简单的例子身高体重和视力都合格才可以做飞行员。height 183 weight 75 vision 5.0 # 只有同时满足三个条件才可以开飞机 if height 183 and weight 70 and vision 5.0: print可以做飞行员 else: print不可以)2.if循环嵌套使用height 183 weight 75 vision 5.0 # 1、只要视力低于5.0就不能飞 if not vision 5.0: #为了试一下not的使用当然也可以写成vison 5.0 print(视力太差上天无望) else: # 2、身高是硬伤如果不达标就放弃吧孩子 user_height input(请输入身高) user_height int (user_height) if user_height l83: # 3、再来判断用户体重 user_weight input(请输入体重) user_weight int (userweight ) if user_weight 75 print(恭喜你你可以上天了) else: print(体重不合适建议增重或减重后再来尝试) else: print(身高无望)3.ifelifelse 使用如果成绩90那么优秀如果成绩80且90,那么良好如果成绩70且80,那么普通其他情况很差scoreinput() # 当运行到input时程序会暂停运行并需要你在命令行中输入信息并将输入的信息以str的方式给到该函数的返回值如果你输入50 那么score就等于50”注意引号哦表示str类型 scoreint(score) # 转化为int类型 if score 90: print(优秀) elif score 80 print(良好) elif score 70 print(普通) else: print(很差)使用模板if 条件1:缩进的代码块elif 条件2缩进的代码块elif 条件3:缩进的代码块else:缩进的代码块三、循环语句1.while 循环(1while循环(条件循环)为什么要使用循环先来看下面一段代码albert age 18 guess int(input(:)) if guess albert age : print(猜的太大了往小里试试...) elif guess albert age : print(猜的太小了往大里试试...) else: print(恭喜你猜对了...) #第2次 guess int(input(:)) if guess albert age : print(猜的太大了往小里试试...) elif guess albert_age : print(猜的太小了往大里试试...) else: print(恭喜你猜对了...) #第3次 guess int(input(:)) if guess albert age : print(猜的太大了往小里试试...) elif guess albert age : print(猜的太小了往大里试试...) else: print(恭喜你猜对了...)毫无疑问这是一段low逼的代码。。。。。。因为重复的代码太多了这种情况的发生是因为有些场景下我们需要反复验证某种情况比如验证用户名和密码时如果用户输入的用户名和密码不匹配我们一般会反复提醒用户输入用户名和密码直到输入正确为止。那么我们无法判断用户在输入几次之后能够输入正确上述代码格式也就不能使用了。这种情况我们完全可以使用while 条件循环来处理while循环又叫做条件循环既满足条件才会执行语法如下albert_age 18 # albert才18岁OMG~ guess int(input(: )) while guess ! albert_age: # 如果猜的年龄和实际年龄不符 if guess albert_age : print(猜的太大了往小里试试...) elif guess albert_age : print(猜的太小了往大里试试...) guess int(input(:)) print(恭喜你猜对了...)while 条件# 循环体# 如果条件为真那么循环体则执行执行完毕后再次循环重新判断条件。# 如果条件为假那么循环体不执行循环终止注意满足条件就是指条件为真一般我们会用True直接表示条件为真或者使用下面小练习的count 10 的运算判断的形式如果表示条件为假可以这样表示False None 0 () [] {} #总结一下False0或者空都为False(2while循环小练习#打印0-10 count0 # count的初始值为0 while count10# 如果count小于等于0 print(loop,count) # loopl loop2 countl # 前面提过的该行等价于count count 1 #打印0-10之间的偶数 count0 while count 10: if count2 0#用来比较左右两边的值是否相等count2如果等于0表示count为偶 数 print(loop,count) count1 #打印0-10之间的奇数 count0 while count 10: if count%2 1: print(loop,count) count1(3)while循环之死循环死循环就是会一直执行的循环因为条件一直成立import time num0 while True: print(count,num) time.sleepl#让程序在这里睡暂停1秒 num1(4while循环嵌套与tagtag只是一个变量不过他是布尔类型只有True和False你也可以写成0或者1当我们有多层循环的时候使用tag可以迅速退出所有循环tagTrue while tag: ...... while tag: ...... while tag: tagFalse #循环逐层判断当tag为false时循环会逐层退出(5 while循环break与continue这是理解的重点在后续的购物车、网盘等python练习中会经常出现也是python等编程语言比较重要的语法知识。#break用于退出本层循环 while True: print 123 break print 456 #continue用于退出本次循环继续下一次循环 while True: print 123 continue print 456所以上面猜年龄的程序可以这样改写albert_age 18 while True: guess int(input(:)) if guess albert_age : print(猜的太大了往小里试试...) elif guess albert _age : print(猜的太小了往大里试试...) else: print(恭喜你猜对了···) break #用户猜对的时候退出循环(6while与else组合使用与其它语else一般只与if 搭配不同在Python中还有个while.else语句while后面的else 作用是指当while循环正常执行完中间没有被break中止的话就会执行else后面的语句。count 0 while count 5 : count 1 print(Loop, count) else: print(循环正常执行完啦) print(-----out of while loop -------) 输出 Loop 1 Loop 2 Loop 3 Loop 4 Loop 5 循环正常执行完啦 ------out of while loop ------ # 如果执行过程中被break啦就不会执行else的语句 count 0 while count 5 : count 1 if count 3:break print (Loop, count) else: print(循环正常执行完啦) print(---out of while loop ------) 输出 Loop 1 Loop 2 ------out of while loop------ 2.for循环(1for循环(迭代循环)for循环是迭代式循环for 遍历 被循环中的每一项内容比如下面的代码for会循环遍历range(10)中的每一个元素即0123...9语法如下for i in range(10): 缩进的代码块说明其中i为迭代出来的一个个对象只是一个变量名可以任意关键字for和in是必须的range(10是一个被迭代的对象只要能存多个值他就可以被迭代你直接写一个列表也是一样的迭代循环可以理解被迭代的对象就是一个老母鸡她肚子里有的是蛋迭代出来的对象就是蛋计算0到9的和sum_value 0 #将和的初值置0 for i in range10): sum_value i #第三次出现啦再不会的话~ print(sum_value)(2break与continue(同上while循环)(3for循环与else连用我们常常会在for循环遍历一个序列或者字典后接着语句else,很多新手会误以为是判断执行else后面的代码其实不然for循环里面也不存在判断,而已执行完遍历的对象后再执行else后面的代码。# 实例1 L [1,2,3,45,67,89,10] for i in L: print (i) else: print(ending) #输出 1 2 3 4 5 6 7 8 9 10 ending # 实例2 dir {lkobe2LBJ3CP34TDK} # 字典格式12 3 4为键Kobe LBJ...为键所对应的值 for k,v in dir.items(): print (k,v) else: print (ending) #输出 1 kobe 2 LBJ 3 CP3 4 TDK ending 四、流程控制语句用法说明1.避免多层分支嵌套如果这篇文章只能删减成一句话就结束那么那句话一定是“要竭尽所能的避免分支嵌套”。过深的分支嵌套是很多编程新手最容易犯的错误之一。假如有一位新手程序员写了很多层分支嵌套那么你可能会看到一层又一层的大括号ififif...elseelseelse...俗称“嵌套if地狱(Nested If StatementHell”。如果能够避免的话尽可能用其他的方式代替这种多层嵌套非常不利于代码的可读性尤其是当一个 if 分支下代码的量比较多的时候。2.封装那些过于复杂的逻辑判断如果条件分支里的表达式过于复杂出现了太多的notand/or那么这段代码的可读性就会大打折扣-这时我们可以把他拆解或者先用not的形式取反取反的意思即为原来值为True,not后为False原来值为False,not后为True。3.留意不同分支下的重复代码重复代码是代码质量的天敌而条件分支语句又非常容易成为重复代码的重灾区。所以当我们编写条件分支语句时需要特别留意不要生产不必要的重复代码。当你编写分支代码时请额外关注由分支产生的重复代码块如果可以简单的消灭它们那就不要迟疑。4.使用“德摩根定律”在做分支判断时我们有时候会写成这样的代码# 如果用户账户没有余额或者用户透支额度拒绝用户购买 # 以下是伪代码 if not 没有余额 or not 有透支额度: print(拒绝用户购买)第一眼看到代码时是不是需要思考一会才能理解它想干嘛这是因为上面的逻辑表达式里面出现了2个not和1个r。而我们类恰好不擅长处理过多的“否定”以及“或”这种逻辑关系。这个时候就该德摩根定律出场了。通俗的说德摩根定律就是 not A or not B 等价于 notA and B。通过这样的转换上面的代码可以改写成这样if not (没有余额 and 有透支额度) print(拒绝用户购买)5.在条件判断中使用all()any()all ( )和any两个函数非常适合在条件判断中使用。这两个函数接受一个可迭代对象返回一个布尔值其中all(seq)仅当seq中所有对象都为布尔真时返回True,否则返回Falseany(seq)只要seq中任何一个对象为布尔真就返回True否则返回False假如我们有下面这段代码def all_numbers_gt_lo(numbers) : # 仅当序列中所有数字大于10时返回True if not numbers #如果numbers为空因为在这里numbers代表一个列表[l23。..]这种格式, 在列表中空列表为False这行代码就用来判断numbers是否为空为空就返回False return False for n in numbers: #遍历numbers中的每一个元素 if n 10: return False #如果有元素小于等于l0该函数马上返回False return True #如果numbers列表中的所有元素都大于10那么返回True如果使用all内建函数再配合一个简单的生成器表达式上面的代码可以写成这样def all numbers gt l0 2(numbers): return bool (numbers) and all (n 10 for n in numbers)简单、高效同时也没有损失可用性6.使用 try/while/for 中 else 分支让我们看看这个函数def do_stuff() : first_thing_successed False try: do_the_first_thing() # 做第—件事 first_thing_successed True #第一件事成功了把标志位置为True except Exception as e #如果上面两行代码try中的两行代码_有错误第一件事没有成功执行下面语句 print(Error while calling do_some_thing) return # 仅当first_thing 成功完成时做第二件事 if first_thing_successed: return do_the_second_thing()在函数do_stuff 中我们希望只有当do_the_first_thing 成功调用后也就是不抛出任何异常才继续做第二个函数调用。为了做到这一点我们需要定义一个额外的变量first_thing_successed来作为标记。其实我们可以用更简单的方法达到同样的效果def do_stuff(): try: do_the_first_thing() except Exception as e print (Error while calling do_some_thing) return else: return do_the_second_thing()在 try 语句块最后追加上 else 分支后分支下的do_the_second_thing便只会在 try下面的所有语句正常执行也就是没有异常没有return、break等完成后执行。类似的Python里的for/while循环也支持添加else分支它们表示当循环使用的迭代对象被正常耗尽、或while循环使用的条件变量变为False 后才执行 else 分支下的代码。7.与 None 值的比较在 Python中有两种比较变量的方法 和 is ,二者在含义上有着根本的区别表示二者所指向的的值是否一致is表示二者是否指向内存中的同一份内容也就是id(x)是否等于 id(y)None在 Python语言中是一个单例对象如果你要判断某个变量是否为None时记得使用is而不是因为只有is 才能在严格意义上表示某个变量是否是 None。否则可能出现下面这样的情况class Foo(object): def __eq__(selfother) #魔法方法当该类在判断中做左值时触发 return True foo FOO() print(foo) Print(foo None) print(foo is None)在上面代码中Foo这个类通过自定义件。__eq__魔法方法的方式很容易就满足了 None 这个条件。所以当你要判断某个变量是否为 None 时请使用is 而不是8.留意 and 和or的运算优先级看看下面这两个表达式猜猜它们的值一样吗?(True or False) and False True or False and False答案是不一样它们的值分别是Fals和True你猜对了吗问题的关键在于and运算符的优先级大于or。因此上面的第二个表达式在 Python看来实际上是True or (False and False)。所以结果是True而不是Fls。在编写包含多个and和的表达式时请额外注意and和or的运算优先级。即使执行优先级正好是你需要的那样你也可以加上额外的括号来让代码更清晰。

更多文章