本文是Python通用编程系列教程,已所有更新完成,实现的目标是从零基础开始到精通Python编程语言。本教程不是对Python的内容进行泛泛而谈,而是精细化,深刻化的讲解,共5个阶段,25章内容。因此,须要有耐心的学习,才能真正有所收获。虽不涉及任何框架的使用,可是会对操做系统和网络通讯进行全局的讲解,甚至会对一些开源模块和服务器进行重写。学完以后,你所收获的不只仅是精通一门Python编程语言,并且具有快速学习其余编程语言的能力,无障碍阅读全部Python源码的能力和对计算机与网络的全面认识。对于零基础的小白来讲,是入门计算机领域并精通一门编程语言的绝佳教材。对于有必定Python基础的童鞋,相信这套教程会让你的水平更上一层楼。python
既然咱们编程的目的是为了控制计算机可以像人脑同样工做,那么人脑能作什么,就须要程序中有相应的机制去模拟。人脑无非是数学运算和逻辑运算,对于数学运算就是加减乘除,很简单,咱们先来看一下。 计算机的核心部件就是CPU,CUP有两个功能,控制和运算,接下来就看一下计算机是如何进行运算的,关于计算的控制功能会在第五阶段有详细的说明。 如下假设变量:a=10,b=20: 程序员
如下假设变量:a=10,b=20 编程
如下假设变量:a=10,b=20 服务器
# is比较的是id
# 而==比较的是值
复制代码
对于逻辑运算,即人根据外部条件的变化而作出不一样的反映,好比
若是:一切都是天意,那么:谁也逃不离网络
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('不能吸烟')
复制代码
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('未成年人禁止吸烟')
复制代码
若是:成绩>=90,那么:优秀 若是成绩>=80且<90,那么:良好 若是成绩>=70且<80,那么:普通 其余状况:不好函数
score=input('>>: ')
score=int(score)
if score >= 90:
print('优秀')
elif score >= 80:
print('良好')
elif score >= 70:
print('普通')
else:
print('不好')
复制代码
使用模板oop
if 条件1:
    缩进的代码块
  elif 条件2:
    缩进的代码块
  elif 条件3:
    缩进的代码块
  ......
  else:  
    缩进的代码块
复制代码
为何要使用循环,先来看下面一段代码学习
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
复制代码
#打印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
复制代码
死循环就是会一直执行的循环,由于条件一直成立
import time
num=0
while True:
print('count',num)
time.sleep(1)
num+=1
复制代码
tag只是一个变量,不过他是布尔类型,只有True和False,你也能够写成0或者1,当咱们有多层循环的时候,使用tag能够迅速退出全部循环
tag=True
  while tag:
    ......
    while tag:
      ........
      while tag:
        tag=False
复制代码
这是理解的重点,之后会常常用
#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 # 用户猜对的时候退出循环
复制代码
与其它语言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 Loop 6 循环正常执行完啦 -----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 ------ """
复制代码
for循环是迭代式循环,for 遍历 被循环的每一项内容,语法以下
for i in range(10):
缩进的代码块
复制代码
说明:
咱们经常会在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 """
# 实例2
dir = {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 """
复制代码
若是这篇文章只能删减成一句话就结束,那么那句话必定是“要竭尽所能的避免分支嵌套”。过深的分支嵌套是不少编程新手最容易犯的错误之一。假若有一位新手程序员写了不少层分支嵌套,那么你可能会看到一层又一层的大括号:if: if: if: ... else: else: else: ...
俗称_“嵌套 if 地狱(Nested If Statement Hell)”_。若是可以避免的话,尽量用其余的方式代替,这种多层嵌套很是不利于代码的可读性,尤为是当一个 if 分支下代码的量比较多的时候。
若是条件分支里的表达式过于复杂,出现了太多的 not/and/or
,那么这段代码的可读性就会大打折扣,这时咱们能够把他拆解,或者先用not 的形式取反。
重复代码是代码质量的天敌,而条件分支语句又很是容易成为重复代码的重灾区。因此,当咱们编写条件分支语句时,须要特别留意,不要生产没必要要的重复代码。当你编写分支代码时,请额外关注由分支产生的重复代码块,若是能够简单的消灭它们,那就不要迟疑。
在作分支判断时,咱们有时候会写成这样的代码:
# 若是用户帐户没有余额或者用户透支额度,拒绝用户购买
# 如下是伪代码
if not “用户登陆” or not “有透支额度”:
print("拒绝用户购买")
复制代码
第一眼看到代码时,是否是须要思考一会才能理解它想干吗?这是由于上面的逻辑表达式里面出现了 2 个 not
和 1 个 or
。而咱们人类刚好不擅长处理过多的“否认”以及“或”这种逻辑关系。这个时候,就该 德摩根定律 出场了。通俗的说,德摩根定律就是 not A or not B
等价于 not (A and B)
。经过这样的转换,上面的代码能够改写成这样:
if not (“用户登陆” and “有透支额度”):
print("拒绝用户购买")
复制代码
all()
和 any()
两个函数很是适合在条件判断中使用。这两个函数接受一个可迭代对象,返回一个布尔值,其中:
all(seq)
:仅当 seq
中全部对象都为布尔真时返回 True
,不然返回 False
any(seq)
:只要 seq
中任何一个对象为布尔真就返回 True
,不然返回 False
假如咱们有下面这段代码:
def all_numbers_gt_10(numbers):
# 仅当序列中全部数字大于 10 时,返回 True
if not numbers:
return False
for n in numbers:
if n <= 10:
return False
return True
复制代码
若是使用 all()
内建函数,再配合一个简单的生成器表达式,上面的代码能够写成这样:
def all_numbers_gt_10_2(numbers):
return bool(numbers) and all(n > 10 for n in numbers)
复制代码
简单、高效,同时也没有损失可用性。
让咱们看看这个函数:
def do_stuff():
first_thing_successed = False
try:
do_the_first_thing()
first_thing_successed = True
except 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")
return
else:
return do_the_second_thing()
复制代码
在 try
语句块最后追加上 else
分支后,分支下的do_the_second_thing()
便只会在 try 下面的全部语句正常执行(也就是没有异常,没有 return、break 等)完成后执行。相似的,Python 里的 for/while
循环也支持添加 else
分支,它们表示:当循环使用的迭代对象被正常耗尽、或 while 循环使用的条件变量变为 False 后才执行 else 分支下的代码。
在 Python 中,有两种比较变量的方法:==
和 is
,两者在含义上有着根本的区别:
==
:表示两者所指向的的值是否一致is
:表示两者是否指向内存中的同一分内容,也就是 id(x)
是否等于 id(y)
None
在 Python 语言中是一个单例对象,若是你要判断某个变量是否为 None 时,记得使用 is
而不是 ==
,由于只有 is
才能在严格意义上表示某个变量是不是 None。
不然,可能出现下面这样的状况:
class Foo(object):
def __eq__(self, other):
return True
foo = Foo()
print(foo)
print(foo == None)
print(foo is None)
复制代码
在上面代码中,Foo 这个类经过自定义 __eq__
魔法方法的方式,很容易就知足了 == None
这个条件。
因此,当你要判断某个变量是否为 None 时,请使用 is
而不是 ==
。
看看下面这两个表达式,猜猜它们的值同样吗?
(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
的运算优先级。即便执行优先级正好是你须要的那样,你也能够加上额外的括号来让代码更清晰。