本文是Python通用编程系列教程,已全部更新完成,实现的目标是从零基础开始到精通Python编程语言。本教程不是对Python的内容进行泛泛而谈,而是精细化,深入化的讲解,共5个阶段,25章内容。所以,需要有耐心的学习,才能真正有所收获。虽不涉及任何框架的使用,但是会对操作系统和网络通信进行全局的讲解,甚至会对一些开源模块和服务器进行重写。学完之后,你所收获的不仅仅是精通一门Python编程语言,而且具备快速学习其他编程语言的能力,无障碍阅读所有Python源码的能力和对计算机与网络的全面认识。对于零基础的小白来说,是入门计算机领域并精通一门编程语言的绝佳教材。对于有一定Python基础的童鞋,相信这套教程会让你的水平更上一层楼。

一 运算方式

1. 数学运算

既然我们编程的目的是为了控制计算机能够像人脑一样工作,那么人脑能做什么,就需要程序中有相应的机制去模拟。人脑无非是数学运算和逻辑运算,对于数学运算就是加减乘除,很简单,我们先来看一下。 计算机的核心部件就是CPU,CUP有两个功能,控制和运算,接下来就看一下计算机是如何进行运算的,关于计算的控制功能会在第五阶段有详细的说明。 以下假设变量:a=10,b=20:

2. 比较运算

以下假设变量:a=10,b=20

3. 赋值运算

以下假设变量:a=10,b=20

4. 逻辑运算

5. 身份运算

# is比较的是id
# 而==比较的是值
复制代码

二 分支语句

1. if,else

对于逻辑运算,即人根据外部条件的变化而做出不同的反映,比如
如果:一切都是天意,那么:谁也逃不离

if ’everything‘ is “God's will“:print('everyone can not flee')
复制代码

或许这个例子太抽象了,我们再举一个简单的例子:未成年人禁止吸烟。

age=15
if age >= 18:print('禁止吸烟')
else:print('可以吸烟')
复制代码

成年人虽然可以吸烟,但是体重低于50kg的人最好是不要吸烟,还有在工作场所不能吸烟

age = 98
weight = 45
is_public_place = True
# 只有同时满足三个条件才可以吸烟
if age >= 18 and weight >= 50 and not is_public_place:print('可以吸烟')
else:print('不能吸烟')
复制代码

2. if循环嵌套使用

age = 98
weight = 45
# is_public_place = True
is_public_place = False
# 1 只要在公共场所就不能吸烟
if is_public_place:print('任何人禁止吸烟')
else:# 2 不是工作场所,先判断用户年龄user_age = input('请输入年龄')user_age = int(user_age)if user_age >= 18:# 3 再来判断用户体重user_weight = input('请输入体重')user_weight = int(user_weight)if user_weight >= 50:print('可以吸烟')else:print('体重太轻了,建议不要吸烟')else:print('未成年人禁止吸烟')
复制代码

3. if,elif,else 使用

如果:成绩>=90,那么:优秀 如果成绩>=80且<90,那么:良好 如果成绩>=70且<80,那么:普通 其他情况:很差

score=input('>>: ')
score=int(score)
if score >= 90:print('优秀')
elif score >= 80:print('良好')
elif score >= 70:print('普通')
else:print('很差')
复制代码

使用模板

if 条件1:
&emsp;&emsp;&emsp;&emsp;缩进的代码块
&emsp;&emsp;elif 条件2:
&emsp;&emsp;&emsp;&emsp;缩进的代码块
&emsp;&emsp;elif 条件3:
&emsp;&emsp;&emsp;&emsp;缩进的代码块
&emsp;&emsp;......
&emsp;&emsp;else:&emsp;&emsp;
&emsp;&emsp;&emsp;&emsp;缩进的代码块
复制代码

三 循环语句

1. while 循环

(1) while循环(条件循环)

为什么要使用循环,先来看下面一段代码

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循环又叫做条件循环,既满足条件才会执行,语法如下:

while 条件:    # 循环体# 如果条件为真,那么循环体则执行,执行完毕后再次循环,重新判断条件。。。# 如果条件为假,那么循环体不执行,循环终止
复制代码

注意:满足条件就是指条件为真,一般我们会用True直接表示条件为真,或者使用下面小练习的 count <= 10 的运算判断的形式,如果表示条件为假可以这样表示:

False    None    0   ""    ()    []   {}
# 总结一下:False,0或者空都为False
复制代码

(2) while循环小练习

#打印0-10
count=0
while count <= 10:print('loop',count)count+=1
#打印0-10之间的偶数
count=0
while count <= 10:if count%2 == 0:print('loop',count)count+=1
#打印0-10之间的奇数
count=0
while count <= 10:if count%2 == 1:print('loop',count)count+=1
复制代码

(3) while循环之死循环

死循环就是会一直执行的循环,因为条件一直成立

import time
num=0
while True:print('count',num)time.sleep(1)num+=1
复制代码

(4) while循环嵌套与tag

tag只是一个变量,不过他是布尔类型,只有True和False,你也可以写成0或者1,当我们有多层循环的时候,使用tag可以迅速退出所有循环

tag=True
&emsp;&emsp;while tag:
&emsp;&emsp;&emsp;&emsp;......
&emsp;&emsp;&emsp;&emsp;while tag:
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;........
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;while tag:
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;tag=False
复制代码

(5) while循环break与continue

这是理解的重点,以后会经常用

#break用于退出本层循环
while True:print "123"breakprint "456"
#continue用于退出本次循环,继续下一次循环
while True:print "123"continueprint "456"
复制代码

所以上面猜年龄的程序可以这样改写

albert_age = 18
while True:guess = int(input(">>:"))  if guess > albert_age :     print("猜的太大了,往小里试试...")  elif guess < albert_age :     print("猜的太小了,往大里试试...")  else:print("恭喜你,猜对了...")break  # 用户猜对的时候退出循环
复制代码

(6) while与else组合使用

与其它语言else 一般只与if 搭配不同,在Python 中还有个while ...else 语句,while 后面的else 作用是指,当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句。

count = 0
while count <= 5 :count += 1print("Loop",count)
else:print("循环正常执行完啦")
print("-----out of while loop ------")"""
输出
Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Loop 6
循环正常执行完啦
-----out of while loop ------
"""
# 如果执行过程中被break啦,就不会执行else的语句啦
count = 0
while count <= 5 :count += 1if count == 3:breakprint("Loop",count)
else:print("循环正常执行完啦")
print("-----out of while loop ------")"""
输出
Loop 1
Loop 2
-----out of while loop ------
"""
复制代码

2. for循环

(1) for循环(迭代循环)

for循环是迭代式循环,for 遍历 被循环的每一项内容,语法如下

for i in range(10): 缩进的代码块
复制代码

说明:

  • 其中i为迭代出来出来的一个个对象,i只是一个变量名,可以任意
  • 关键字for 和 in是必须的
  • range(10) 是一个被迭代的对象,只要能存多个值,他就可以被迭代,你直接写一个列表也是一样的
  • 迭代循环可以理解被迭代的对象就是一个老母鸡,她肚子里有的是蛋,迭代出来的对象就是蛋

(2) break与continue(同上while循环)

(3) for循环与else连用

我们常常会在for循环遍历一个序列或者字典后,接着语句else,很多新手会误以为是判断执行else后面的代码,其实不然,for循环里面也不存在判断,而已执行完遍历的对象后,再执行else后面的代码

# 实例1
L = [1,2,3,4,5,6,7,8,9,10]
for i  in L:print(i)
else:print('ending')
"""
#输出
>>>
1
2
3
4
5
6
7
8
9
10
ending
"""# 实例2dir = {1:'kobe',2:'LBJ',3:'CP3',4:'TDK'}
for k,v in dir.items():print (k,v)
else:print('ending')"""
#输出
1 kobe
2 LBJ
3 CP3
4 TDK
ending
"""
复制代码

三 流程控制语句用法说明

1. 避免多层分支嵌套

如果这篇文章只能删减成一句话就结束,那么那句话一定是“要竭尽所能的避免分支嵌套”。过深的分支嵌套是很多编程新手最容易犯的错误之一。假如有一位新手程序员写了很多层分支嵌套,那么你可能会看到一层又一层的大括号:if: if: if: ... else: else: else: ...俗称_“嵌套 if 地狱(Nested If Statement Hell)”_。如果能够避免的话,尽可能用其他的方式代替,这种多层嵌套非常不利于代码的可读性,尤其是当一个 if 分支下代码的量比较多的时候。

2. 封装那些过于复杂的逻辑判断

如果条件分支里的表达式过于复杂,出现了太多的 not/and/or,那么这段代码的可读性就会大打折扣,这时我们可以把他拆解,或者先用not 的形式取反。

3. 留意不同分支下的重复代码

重复代码是代码质量的天敌,而条件分支语句又非常容易成为重复代码的重灾区。所以,当我们编写条件分支语句时,需要特别留意,不要生产不必要的重复代码。当你编写分支代码时,请额外关注由分支产生的重复代码块,如果可以简单的消灭它们,那就不要迟疑。

4. 使用“德摩根定律”

在做分支判断时,我们有时候会写成这样的代码:

# 如果用户账户没有余额或者用户透支额度,拒绝用户购买
# 以下是伪代码
if not “用户登录” or not “有透支额度”:print("拒绝用户购买")
复制代码

第一眼看到代码时,是不是需要思考一会才能理解它想干嘛?这是因为上面的逻辑表达式里面出现了 2 个 not 和 1 个 or。而我们人类恰好不擅长处理过多的“否定”以及“或”这种逻辑关系。这个时候,就该 德摩根定律 出场了。通俗的说,德摩根定律就是 not A or not B 等价于 not (A and B)。通过这样的转换,上面的代码可以改写成这样:

if not (“用户登录” and “有透支额度”):print("拒绝用户购买")
复制代码

5. 在条件判断中使用 all() / any()

all() 和 any() 两个函数非常适合在条件判断中使用。这两个函数接受一个可迭代对象,返回一个布尔值,其中:

  • all(seq):仅当 seq 中所有对象都为布尔真时返回 True,否则返回 False
  • any(seq):只要 seq 中任何一个对象为布尔真就返回 True,否则返回 False

假如我们有下面这段代码:

def all_numbers_gt_10(numbers):# 仅当序列中所有数字大于 10 时,返回 Trueif not numbers:return Falsefor n in numbers:if n <= 10:return Falsereturn True
复制代码

如果使用 all() 内建函数,再配合一个简单的生成器表达式,上面的代码可以写成这样:

def all_numbers_gt_10_2(numbers):return bool(numbers) and all(n > 10 for n in numbers)
复制代码

简单、高效,同时也没有损失可用性。

6. 使用 try/while/for 中 else 分支

让我们看看这个函数:

def do_stuff():first_thing_successed = Falsetry:do_the_first_thing()first_thing_successed = Trueexcept Exception as e: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")returnelse: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__(self, other):return Truefoo = 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

答案是:不一样,它们的值分别是 False 和 True,你猜对了吗?问题的关键在于:and 运算符的优先级大于 or。因此上面的第二个表达式在 Python 看来实际上是 True or (False and False)。所以结果是 True 而不是 False。在编写包含多个 and 和 or 的表达式时,请额外注意 and 和 or 的运算优先级。即使执行优先级正好是你需要的那样,你也可以加上额外的括号来让代码更清晰。

Python通用编程 - 第二章:流程控制相关推荐

  1. Python通用编程 - 第一章:用户交互

    本文是Python通用编程系列教程,已全部更新完成,实现的目标是从零基础开始到精通Python编程语言.本教程不是对Python的内容进行泛泛而谈,而是精细化,深入化的讲解,共5个阶段,25章内容.所 ...

  2. Python计算机视觉编程第二章——局部图像描述子

    Python计算机视觉编程 局部图像描述子 (一)Harris 角点检测器 (二)SIFT(尺度不变特征变换) 2.1 兴趣点 2.2 描述子 2.3 检测兴趣点 2.4 匹配描述子 (三)匹配地理标 ...

  3. python编程案例教程第四章_Python编程入门-第四章 流程控制 -学习笔记

    第四章 流程控制 一.布尔逻辑 *在Python中,用True和False表示真值.一般使用4个主要的逻辑运算符来组合形成布尔值:not\and\or\==. 如: False==False #Tru ...

  4. Python黑帽编程2.4 流程控制

    Python黑帽编程2.4  流程控制 本节要介绍的是Python编程中和流程控制有关的关键字和相关内容. 2.4.1 if -..else 先上一段代码: #!/usr/bin/python # - ...

  5. 小学生python趣味编程-【少儿编程】python趣味编程第二课:写文字

    python趣味编程第二课:本文仅针对8-16岁的青少年,所以流程是按如何去教好中小学生走的,并不适合成人找工作学习,因为进度也是按照青少年走的 大家好,我是C大叔,上一篇文章已经跟大家介绍了一款开发 ...

  6. 拒绝从入门到放弃_《Python 核心编程 (第二版)》必读目录

    目录 目录 关于这本书 必看知识点 最后 关于这本书 <Python 核心编程 (第二版)>是一本 Python 编程的入门书,分为 Python 核心(其实并不核心,应该叫基础) 和 高 ...

  7. Python爬虫学习第二章-1-requests模块简介

    Python爬虫学习第二章-1-requests模块简介   这一章主要是介绍requests模块的相关知识以及使用 1.requests模块简介: 概述:是python中原生的一款基于网络请求的模块 ...

  8. python核心编程第二版pdf_Python Book电子书pdf版合集 Python核心高级编程第二版

    1小时学会Python.doc 51CTO下载-[Python系列].BeginningPythonFromNovicetoProfessionalSecondEdition.pdf 8.Python ...

  9. Python精确指南——第二章 界面开发

    2 Python GUI 借助Python语言的优势,使用Python的界面库开发界面程序,开发周期更短.但因为Python的界面开发库底层实现一般不是Python,只是为Python封装的接口,所以 ...

  10. Java学习之路 第三章 流程控制

    第三章 流程控制 1.if条件语句 (1)简单的if条件语句语法: if(条件){语句: } 注意:a.条件必须最后返回一个布尔值. (2)嵌套if语句语法: if(条件1){if(条件2){...} ...

最新文章

  1. Kanade's trio 2017多校#3 trie
  2. postgresql windows 开发环境搭建
  3. Python 一种接触就容易爱上的语言二
  4. VC6程序申请管理员权限
  5. 击中-击不中变换(约束)—lhMorpHMTC
  6. C# Task的简单使用
  7. npm publish 发布一个 Angular 库的时候报错
  8. 该如何高效实用Kotlin?看这一篇就够了!
  9. 选项卡 || 图片切换
  10. matlab机器学习基础
  11. 前端,自定义印章效果
  12. python 恢复删除的文件_如何恢复已删除的python文件(一看就会的恢复软件)
  13. 华师大的计算机专业属于提前批吗,华东师范大学提前批上海录取线确定
  14. 360顽固木马专杀工具 千万别用
  15. 【CODE】Longest Substring Without Repeating Characters
  16. Vue3+file-saver+xlsx 实现 excel 导出
  17. StarUML 代码生成(C++)
  18. 请描述你对测试的了解, 内容可以涉及测试流程, 测试类型, 测试方法, 测试工具等。
  19. butter中文意思_butterfly是什么意思_butterfly的翻译_音标_读音_用法_例句_爱词霸在线词典...
  20. mysql 数据增长_mysql查询数据是否连续增长

热门文章

  1. 制作删不掉的php唯读档,ppt母版logo删除不了怎么办
  2. instagram第三方登录
  3. 作文 进入中职计算机班,我的中职生活作文(精选5篇)
  4. C#打造一个开源webgis(四)地图客户端(上)
  5. 吴恩达机器学习 编程作业 python 版提交方法以及代码-week2
  6. linux使用grep查找文件内容,linux如何使用grep命令查找文件内容
  7. Java 生成条形码 订单条形码
  8. pdf怎么提取图片?职场达人都在用的两个方法分享给你。
  9. ams1117 lm317 对比_LM317和AMS-1117-3.3
  10. BOM差异对比——Spreadsheet Compare