第1章自动化系列一之初识Python

Python自动化
笔者QQ:572891887
Linux架构交流群:471443208

1.1 Python基础介绍

python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。
python是一种面向对象,直译式的计算机程序语言,Python崇尚优美、清晰、简单,是一个优秀并广泛使用的语言。

1.2Python应用领域

1.3Python语言分析

1.3.1Python编译型

负责翻译的程序来对我们的源代码进行转换,生成相对应的可执行代码。专业一点,就称为编译(Compile),而负责编译的程序自然就称为编译器(Compiler)。如果我们写的程序代码都包含在一个源文件中,那么通常编译之后就会直接生成一个可执行文件,我们就可以直接运行了。
但对于一个比较复杂的项目,为了方便管理,我们通常把代码分散在各个源文件中,作为不同的模块来组织。这时编译各个文件时就会生成目标文件(Objectfile)而不是前面说的可执行文件。一般一个源文件的编译都会对应一个目标文件。这些目标文件里的内容基本上已经是可执行代码了,但由于只是整个项目的一部分,所以我们还不能直接运行。待所有的源文件的编译都大功告成,我们就可以最后把这些半成品的目标文件“打包”成一个可执行文件了,这个工作由另一个程序负责完成,由于此过程好像是把包含可执行代码的目标文件连接装配起来,所以又称为链接(Link),而负责链接的程序就叫链接程序(Linker)。

1.3.2Python解释型

打个比方:如果你打算预读一本外文书,而你不知道这么外语,那么你可以找一名翻译,给他足够的时间让他从头到尾把整本书翻译好,然后把书的母语版交给你阅读。这个过程就编译,或者你也立刻让这名翻译辅助你阅读,让他一句一句的给你翻译,如果你想往回看某个章节他也的重新给你翻译。
两种方式:前者就相当于编译型:一次把所有的代码转换成机器语言,然后写成可执行文件。而后者就相当于我们要的解释型:在程序运行的前一刻, 还只有源程序而没有可执行程序;而程每执行到资源程序的某一条执行,则会有一个称之为解释程序的外壳程序,将源代码转换成二进制代码以供执行.

1.3.3Python优点

Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂.
开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期.

1.3.4Python缺点

1.4Python安装部署

学习Python首先当然是安装上,如下提供windows、Linux、Mac的安装方法(全部都是Python3.x,以下实践都是在Python3.x上进行)

1.4.1Windows

1.下载安装包 Python3.5 for windows
2.安装 默认安装路径:C:\python3.5.2
3.配置环境变量(原来的值;C:\python27,切记前面有分号)
右键计算机-->属性-->高级系统设置-->环境变量-->找到变量名为Path的一行双击-->Python安装目录追加到变量值中。用分号;分割
4.Windows更新Python,卸载重装即可

1.4.2Linux

Linux的yum依赖自带Python2.6、为防止错误,此处更新其实就是再安装一个Python3.x查看默认Python版本python -V
1.安装gcc,用于编译Python源码 yum install gcc
2.下载源码包
Python发行版 #选择版本下载
Python3.5版本 #安装Python3.5
3.解压并进入源码文件 cd python3.5.2
4.编译安装

  1. ./configure
  2. make all
  3. make install

5.查看版本

  1. /usr/local/bin/python3.5 -V
  2. Python 3.5.2

6.修改默认Python版本

  1. mv /usr/bin/python /usr/bin/python2.6
  2. ln -s /usr/local/bin/python3.5 /usr/bin/python

7.防止yum执行异常,修改yum使用的Python版本

  1. vi /usr/bin/yum
  2. #!/usr/bin/python 更改为 #!/usr/bin/python2.6

https://ruter.github.io/2015/12/03/Update-python/

1.4.3Mac

1.下载以下软件,直接双击运行即可安装
Mac OS X 10.5以上点击下载
Mac OS X 10.6以上点击下载

2.执行Python3命令即可查询

  1. xuliangwei:~ xuliangwei$ python3
  2. Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25)
  3. [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
  4. Type "help", "copyright", "credits" or "license" for more information.
  5. >>>

1.5Python快速入门

1.创建一个hello.py文件编写第一个程序

  1. #!/usr/bin/env python #指定环境变量
  2. print ("hello wolrd")

2.通过python3命令执行hello文件

  1. xuliangwei:day01 xuliangwei$ python3 hello.py
  2. hello wolrd

1.6Python注释

单行注释

  1. # 被注释内容
  2. # Author:xuliangwei

多行注释

  1. #每行最多不能超过80个字符
  2. '''
  3. This is a note!
  4. This is a note!
  5. This is a note!
  6. '''

1.7python变量

变量用来存储信息,在后面可以被程序调用,并且标识名称和类型。主要的功能,命名,并且存储至内存。

1.7.1变量声明

如下代码声明了一个变量
变量名为 “name” 变量name的值为:"xuliangwei"
变量的作用:昵称,其代指内存里某个地址中保存的内容name = "xulaingwei"
变量声明

上述代码声明了一个变量,变量名为: name,变量name的值为:"xuliangwei"
变量的作用:昵称,其代指内存里某个地址中保存的内容

1.7.2变量定义规则

  1. ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

1.7.3变量赋值

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. name1 = "xuliangwei"
  4. name2 = "weiwei"

变量赋值

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. name1 = "xuliangwei"
  4. name2 = name1

变量赋值2

1.8Python字符编码

python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascillASCII(American Standard Code for InformationInterchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。
显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode Unicode(万国码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536.
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:

报错:ascii码无法表示中文

  1. #!/usr/bin/env python
  2. # Author:xuliangwei
  3. # name = "你好,世界"
  4. # print (name)

改正:应该告诉python解释器,用什么编码来执行源代码 (在Python3默认支持中文)

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # Author:xuliangwei
  4. # name = "你好,世界"
  5. # print (name)

1.9Python用户输入

  1. #!/usr/bin/env python
  2. # Author:xuliangwei
  3. #将用户输入的内容赋值给name变量
  4. name = input("请输入用户名:")
  5. #打印输入的内容
  6. print(name)

输入密码时,如果想要不可见,可以利用getpass模块中的getpass方法

  1. #!/usr/bin/env python
  2. # Author:xuliangwei
  3. #导入getpass库
  4. import getpass
  5. #将用户输入的内容赋值给name变量
  6. name = input("请输入用户名:")
  7. pwd = getpass.getpass("请输入密码:") #在Pycharm下不支持此模块
  8. #打印输入的内容
  9. print("username:",name,"password:",pwd)

1.10Python格式化输出

Python格式化输入分为以下三种方式。推荐使用第三种方式,并且有的情况必须使用第三种方式
1.方法一:字符串是 %s;整数 %d;浮点数%f

  1. #!/usr/bin/env pytho
  2. # Author:xuliangwei
  3. name = input("name:")
  4. age = int(input("age:"))
  5. job = input("job:")
  6. salary = input("salary:")
  7. info = '''
  8. -------info of %s ------
  9. Name:%s
  10. Age:%d
  11. Job:%s
  12. Salary:%s
  13. ''' % (name,name,age,job,salary)
  14. print(info)

2.方法二:

  1. #!/usr/bin/env pytho
  2. # Author:xuliangwei
  3. name = input("name:")
  4. age = int(input("age:"))
  5. job = input("job:")
  6. salary = input("salary:")
  7. info2 = '''
  8. -------info of {0} ------
  9. Name:{0}
  10. Age:{1}
  11. Job:{2}
  12. Salary:{3}
  13. ''' .format(name,age,job,salary)
  14. print(info2)

3.方法三:强烈建议使用此方法

  1. #!/usr/bin/env python
  2. # Author:xuliangwei
  3. # name = "你好,世界"
  4. # print (name)
  5. name = input("name:")
  6. age = int(input("age:"))
  7. job = input("job:")
  8. salary = input("salary:")
  9. info3 = '''
  10. -------info of {_name_} ------
  11. Name:{_name_}
  12. Age:{_age_}
  13. Job:{_job_}
  14. Salary:{_salary_}
  15. ''' .format(_name_=name,
  16. _age_=age,
  17. _job_=job,
  18. _salary_=salary)
  19. print(info3)

执行结果如下:

  1. name:xuliangwei
  2. age:19
  3. job:IT
  4. salary:20000
  5. -------info of xuliangwei ------
  6. Name:xuliangwei
  7. Age:19
  8. Job:IT
  9. Salary:20000

1.11Python循环

1.11.1for循环

Python猜年龄小游戏:

  1. #!/usr/bin/env python
  2. # Author:xuliangwei
  3. age =22
  4. for i in range(10):
  5. if i <3:
  6. guess_num = int(input("请猜年龄:"))
  7. if guess_num == age:
  8. print ("你简直太聪明了!")
  9. break #不往后执行,退出
  10. elif guess_num>age:
  11. print("你猜的数字太大!")
  12. else:
  13. print("你猜的数字太小!")
  14. else:
  15. print("猜数时间到!bye")
  16. break

循环10次,如果猜错三次输入y还可以继续,否则直接退出。

  1. #!/usr/bin/env python
  2. # Author:xuliangwei
  3. age =19
  4. count = 0
  5. for i in range(10):
  6. if count <3:
  7. guess_num = int(input("请猜年龄:"))
  8. if guess_num == age:
  9. print ("你简直太聪明了!")
  10. break #不往后执行,退出
  11. elif guess_num>age:
  12. print("你猜的数字太大!")
  13. else:
  14. print("你猜的数字太小!")
  15. else:
  16. continue_count = input("哥们是否继续:")
  17. if continue_count == 'y':
  18. count = 0
  19. else:
  20. print("欢迎下次继续!")
  21. break
  22. count += 1

1.11.2While循环

如果猜错三次可无限继续,按n即可退出。

  1. #!/usr/bin/env python
  2. # Author:xuliangwei
  3. age =22
  4. count = 0
  5. while count <3:
  6. guess_num = int(input("请猜年龄:"))
  7. if guess_num == age:
  8. print ("你简直太聪明了!")
  9. break #不往后执行,退出
  10. elif guess_num>age:
  11. print("你猜的数字太大!")
  12. else:
  13. print("你猜的数字太小!")
  14. count += 1
  15. if count == 3:
  16. continue_count = input("哥们是否继续:")
  17. if continue_count != 'n':
  18. count = 0
  19. continue
  20. else:
  21. print("欢迎下次继续!")
  22. break
  23. count += 1

1.12Python流程控制

1.用户登录验证

  1. #!/usr/bin/env python
  2. # Author:xuliangwei
  3. # 提示输入用户名和密码
  4. # 验证用户名和密码
  5. # 如果错误,则输出用户名或密码错误
  6. # 如果成功,则输出 欢迎,XXX!
  7. import getpass
  8. user = "xuliangwei"
  9. passwd = "123"
  10. username = input("请输入用户:")
  11. #pwd = input("请输入密码:") #明文
  12. pwd = getpass.getpass("请输入密码:") #密文
  13. if user == username and pwd == passwd:
  14. print("欢迎,xuliangwei!")
  15. else:
  16. print ("用户名和密码错误")