python自动化之路-day1

Python简介

Python的创始人为吉多·范罗苏姆(Guido van Rossum)简称龟叔;
Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。

Python的应用

python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,

如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。
目前Python主要应用领域:
云计算: 云计算最火的语言, 典型应用OpenStack
WEB开发: 众多优秀的WEB框架,众多大型网站均为Python开发,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
科学运算、人工智能: 典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas
系统运维: 运维人员必备语言
金融:量化交易,金融分析,在金融工程领域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于c,c++,java,尤其擅长策略回测
图形GUI: PyQT, WxPython,TkInter

Python是一门什么样的语言?

编程语言主要从以下几个角度为进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言,
每个分类代表什么意思呢,我们一起来看一下。

编译和解释的区别是什么?
    编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快; 
    而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的. 
    这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)

如何区分低级语言和高级语言?
    接近底层的语言就是低级语言。

强类型定义语言和弱类型定义语言
    (1)强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。
    (2)弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。
    强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!
例如:Python是动态语言,是强类型定义语言(类型安全的语言); VBScript是动态语言,是弱类型定义语言(类型不安全的语言); JAVA是静态语言,是强类型定义语言(类型安全的语言)。
通过上面这些介绍,我们可以得出,**python是一门动态解释性的强类型定义语言**

Python的优缺点

先看优点
    Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。
    开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。
    高级语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节
    可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行
    可扩展性————如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。
    可嵌入性————你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。
再看缺点:
    速度慢,Python 的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些,因此这也是很多所谓的大牛不屑于使用Python的主要原因,但其实这里所指的运行速度慢在大多数情况下用户是无法直接感知到的,必须借助测试工具才能体现出来,比如你用C运一个程序花了0.1s,用Python是0.01s,这样C语言直接比Python快了10s,算是非常夸张了,但是你是无法直接通过肉眼感知的,因为一个正常人所能感知的时间最小单位是0.15-0.4s左右,哈哈。其实在大多数情况下Python已经完全可以满足你对程序速度的要求,除非你要写对速度要求极高的搜索引擎等,这种情况下,当然还是建议你用C去实现的。
    代码不能加密,因为PYTHON是解释性语言,它的源码都是以名文形式存放的,不过我不认为这算是一个缺点,如果你的项目要求源代码必须是加密的,那你一开始就不应该用Python来去实现。
    线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。关于这个问题的折衷解决方法,我们在以后线程和进程章节里再进行详细探讨。

Python的安装

Windows
    1、下载安装包
        https://www.python.org/downloads/
    2、安装
        默认安装路径:C:\python35
    3、配置环境变量
        【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】
        如:原来的值;C:\python35,切记前面有分号
Linux和Mac
    无需安装,原装Python环境
    ps:如果自带2.6,请更新至3.5,或者两个版本共存

第一个Python程序

在家目录创建个helloworld.py程序,内容为:
    #!/usr/bin/env python3 #指定运行的程序的路径
    print("hello,world")
PS:第一行是指定这个脚本是由python解释器来执行,
   第二行是在屏幕上打印"hello,world"

一、第一句Python代码

/home/dev/ 目录下创建 hello.py 文件,内容如下:

1

print "hello,world"

执行 hello.py 文件,即: python /home/dev/hello.py

python内部执行过程如下:


Python变量

#_*_conding:utf-8_*_
fist_name = "lam"
上述代码声明了一个变量,变量名为:fist_name, 变量name的值为:“lam”

变量定义的规则:
1,变量名只能是字母,数字或下划线的任意组合
2,变量名的第一个字符不能是数字
3,以下关键字不能声明为变量名
【and,as,assert,break,class,continue,def,del,elif,else,except,exec,finally,for,from,global,if,import,in,while】
4.变量名不能有特殊字符。
5.长的变量名可以使用驼峰区分也可以使用下划线进行区分。
变量的赋值:


#!/usr/bin/envpython

# -*- coding:utf-8 -*-

 

name1 = "wupeiqi"

name2 = "alex"

字符编码

python解释器在加载.py文案中的代码时,会对内容进行编码(默认ascll)

AmericanStandard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。

报错:accill码无法表示中文
#!/usr/bin/env python
print "你好,世界"
改正:显示的告诉python解释器,用什么编码来执行代码,即:
#!/usr/bin/env python
#_*_ coding: utf-8 _*_
print "你好,世界"

显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536
注:此处说的的是最少2个字节,可能更多

UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...

所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:


注释

单行注释:# 被注释内容
多行注释: """ 被注释内容 """
部分注释:选中,ctrl+/ (整体移动,tab键)

用户输入

name = input("name:")
age = input("age:")
job = input("job:")
hobby = input("hobby:")
hobby_two = "meinv"
需要注意的是python2和python3的用户交互的区别。

字符串格式化

print函数的使用

 Name = raw_input("Name:")

Age= raw_input("Age:") Job = raw_input("Job:") print("Information of[]:" + Name + "\n Name:[]" + Name + "\n Age:[]" + Age + "\n Name:[]" + Job) msg = ''' Information of %s Name{}:%s Age{}:%s Job{}:%s ''' %(Name,Name,Age,Job) print(msg) print(type(Name)) print(type(Age)) print(type(Job)) print("Information of%s;\nName;%s\nAge;%s\nJob;%s" %(Name, Name, Age,Job)) %s:字符串string %d整数int %f浮点数float

流程控制if

luckynum = 19

inputnum = -1 for in range(3): inputnum = int(raw_input("please inputnum int:")) if inputnum > luckynum: print("the real number is smaller.") elif inputnum < luckynum: print("the real number is bigger.") else: print("bingo") break else: print("too many retrys!")

模块初始

Python的强大之处在于他有非常丰富强大的标准库和第三方库,几乎你想实现的任何功能都有相应的python库支持,以后的课程中会深刻讲解常用到的各种库
现在我们先象征性的学2个简单的。
sys
#!/usr/bin/env python
#_*_ coding: utf-8 _*_
import sys
print (sys.argv)
输出:python test.py hello world
['test.py','hello','world'] #把执行脚本时传递的参数获取到了
os
#!/usr/bin/env python
#_*_ coding:utf-8 _*_
import os
os.system ("df -Th") #调用系统命令

结合一下使用:
import os
os.system('',join(sys.argv[1:])) #把用户的输入参数当做一条命令交给os.system来执行。

补充:
字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。 

decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。 

encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。

由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes



Day1: 作业

作业二:编写登陆接口

  • 输入用户名密码
  • 认证成功后显示欢迎信息
  • 输错三次后锁定
本人作业code:(欢迎交流)
import os,sys,shutil
file1 = open("test.txt","r")     #打开文件
line = file1.read()
line = line.split()                         #格式化字符串
file1.close()
user_name = input("Username:")
if user_name in line:
    p = line.index(user_name)+ 2            #p 密码物理位置
    n = line.index(user_name)+ 1            #n 用户的锁定状态
    if "inactive" == line[p]:              #检索文件,如果用户状态为锁定,则退出
        print("You have be locked! Please contact adminstrator!")
        sys.exit(0)
    else:
        for i in range(3):                  #循环三次,如果密码正确,登录成功
            passwd = input("Passwd:")
            if line[n] == passwd:
                print("Welcome %s login our system"%user_name)
                break
        else:                               #循环三次后,如果密码不正确,则修改用户状态,锁定用户
            print("You have retried 3 times,to avoid attack,I will block your account")
            file2 = open("test_update.txt","w")
            file1 = open("test.txt","r")
            for m in file1:
                if user_name in m:
                    m = m.replace("active","inactive")
                file2.write(m)
            os.rename("test_update.txt","test.txt")
            file1.close()
            file2.close()
            sys.exit(0)
else:                                       #用户不在文件中,则直接退出
    print("Invalid name! Bye!Bye!")

作业用到内容链接:1.https://my.oschina.net/hkmax/blog/146553
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 Python 自动化测试身份证的测试用例: ```python import unittest class TestIDCard(unittest.TestCase): def test_validate_id(self): id1 = '110101199003074253' # valid ID id2 = '11010119900307425X' # valid ID with X at the end id3 = '11010119900307425A' # invalid ID with invalid character at the end id4 = '11010119900307' # invalid ID with missing digits self.assertTrue(validate_id(id1)) self.assertTrue(validate_id(id2)) self.assertFalse(validate_id(id3)) self.assertFalse(validate_id(id4)) def validate_id(id): # Check if ID is 18 digits long if len(id) != 18: return False # Check if first 17 digits are valid numbers for i in range(17): if not id[i].isdigit(): return False # Check if last digit is a valid number or X if id[17] != 'X' and not id[17].isdigit(): return False # Check if birthdate is valid year = int(id[6:10]) month = int(id[10:12]) day = int(id[12:14]) if month < 1 or month > 12 or day < 1 or day > 31: return False if month in [4,6,9,11] and day > 30: return False if month == 2 and day > 29: return False if month == 2 and day == 29 and (year % 4 != 0 or (year % 100 == 0 and year % 400 != 0)): return False # Check if checksum is valid weight = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2] checksum = sum([int(id[i]) * weight[i] for i in range(17)]) % 11 checkcode = {0:'1',1:'0',2:'X',3:'9',4:'8',5:'7',6:'6',7:'5',8:'4',9:'3',10:'2'} if id[17] != checkcode[checksum]: return False return True if __name__ == '__main__': unittest.main() ``` 该测试用例包括一个 `validate_id` 函数,用于验证身份证号码的有效性。`test_validate_id` 函数则测试了几个不同的身份证号码,包括一个有效的身份证号码、一个以 X 结尾的有效身份证号码,一个以 A 结尾的无效身份证号码以及一个缺少数字的无效身份证号码。如果 `validate_id` 函数可以正确地验证这些身份证号码,则测试用例会通过。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值