python之基础1

一、介绍
介绍
的创始人为吉多·范罗苏姆(Guido van ) 。1989年的圣诞节期间,Guido开始写能够解释语言语法的解释器 。这个名字,来自Guido所挚爱的电视剧Monty ’s。他希望这个新的叫做的语言,能符合他的理想:创造一种C和shell之间,功能全面 , 易学易用,可拓展的语言 。
最新的TIOBE排行榜,赶超PHP占据第4 ,  崇尚优美、清晰、简单 , 是一个优秀并广泛使用的语言 。
可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域 。目前业内几乎所有大中型互联网企业都在使用,如:、、BT、Quora(中国知乎)、豆瓣、知乎、、Yahoo!、、NASA、百度、腾讯、汽车之家、美团等 。
1.web开发
拥有很多免费数据函数库、web模板系统、以及与web服务器进行交互的库 , 可以实现web的开发,目前比较有名气的 web框架为flask和 。这两款框架的效率都非常高
2.桌面开发
在图形界面开发上也很强大,可以利用/PyQT框架开发各种桌面软件!
3.网络编程
支持高并发的网络框架 ,  引入的使异步编程变的非常简单(没有)
4.爬虫
在爬虫领域的绝对是霸主地位,无人能及
5.人工智能
这个我就不多说了吧,地球人都知道在人工智能的地位
6.云计算
是从事云计算工作需要掌握的一门编程语言 , 目前很火的云计算框架就是由开发的,如果想要深入学习并进行二次开发,就需要具备的技能 。
7.自动化运维
是一门综合性的语言 , 能满足绝大部分自动化运维需求 , 前端和后端都可以做,从事该领域 , 应从设计层面、框架选择、灵活性、扩展性、故障处理、以及如何优化等层面进行学习 。
8.游戏开发
在网络游戏开发中,也有很多应用 , 相比于Lua or C++,比Lua有更高阶的抽象能力,可以用更少的代码描述游戏业务逻辑,据我所知《文明》这款游戏就是写的
9.科学运算
97年开始,NASA就在大量使用在进行各种复杂的科学运算,随着NumPy, SciPy, ,等众多程序库的开发,使的越来越适合于做科学计算、绘制高质量的2D和3D图像 。和科学计算领域最流行的商业软件相比,是一门通用的程序设计语言,比所采用的脚本语言的应用范围更广泛
二、真实的应用场景
CIA: 美国中情局网站就是用开发的
NASA: 美国航天局(NASA)大量使用进行数据分析和运算
:世界上最大的视频网站就是用开发的
:美国最大的在线云存储网站 , 全部用实现,每天网站处理10亿个文件的上传和下载
:美国最大的图片分享社交网站,每天超过3千万张照片被分享,全部用开发
:大量的基础库均通过实现的
linux系统: 世界上最流行的Linux发行版本中的yum包管理工具就是用开发的
豆瓣: 公司几乎所有的业务均是通过开发的
知乎: 国内最大的问答社区,通过开发(国外Quora)
春雨医生:国内知名的在线医疗网站是用开发的
除上面之外,还有搜狐、金山、腾讯、盛大、网易、百度、阿里、淘宝 、土豆、新浪、果壳等公司都在使用完成各种各样的任务 。
三、的就业方向
发展前景一:Linux运维
发展前景二: Web网站工程师
发展前景三:自动化测试
发展前景四:数据分析
发展前景五:人工智能
四、安装解释器
打开官网下载中心

python之基础1

文章插图

python之基础1

文章插图

python之基础1

文章插图

python之基础1

文章插图

python之基础1

文章插图
测试安装是否成功:cmd下输入关键字,如果能进入交互界面表示OK
安装方法
pip介绍
pip的用法其实跟linux的yum很像,它可以帮我们安装所需要的环境包,并且可以包解决依赖关系
列出已安装的包
【python之基础1】pip list
安装要安装的包
pip install xxx
安装特定版本
pip install django==1.1.5
导出的环境
pip freeze > requestment.txt
从导出的环境中安装所需要的包
pip install -r requestment.txt
卸载导出的环境中的包
pip uninstall -r requestment.txt
升级包
pip install -U <包名>
显示包所在的目录
pip show -f <包名>
搜索包
pip search <搜索关键字>
查询可升级的包
pip list -o
下载包而不安装
pip install <包名> -d <目录> 或 pip install -d <目录> -r requirements.txt
更换国内pypi镜像
阿里:
豆瓣:
中国科学技术大学:
pip install <包名> -i http://pypi.v2ex.com/simple
指定全局安装源
在unix和macos,配置文件为:$HOME/.pip/pip.conf
在上,配置文件为:%HOME%\pip\pip.ini
(1):在文件管理器中,输入%%
(2):会定位到一个新的目录下,在该目录下新建pip文件夹,然后到pip文件夹里面去新建个pip.ini文件
(3):在新建的pip.ini文件中输入以下内容,搞定文件路径:"C:\Users\\\\pip\pip.ini"
[global] timeout = 6000 index-url = http://pypi.douban.com/simple
创建的虚拟环境 为什么需要虚拟环境:
如果你现在用 1.10.x写了个网站,然后你的领导跟你说,之前有一个旧项目是用 0.9开发的,让你来维护,但是 1.10不再兼容 0.9的一些语法了 。这时候就会碰到一个问题,我如何在我的电脑中同时拥有 1.10和 0.9两套环境呢?这时候我们就可以通过虚拟环境来解决这个问题 。
安装虚拟环境:
是用来创建虚拟环境的软件工具,我们可以通过pip或者pip3来安装
pip install virtualenvpip3 install virtualenv
创建虚拟环境:
创建虚拟环境非常简单,通过以下命令就可以创建了:
virtualenv [虚拟环境的名字]
进入虚拟环境:
虚拟环境创建好了以后,那么可以进入到这个虚拟环境中,然后安装一些第三方包,进入虚拟环境在不同的操作系统中有不同的方式,一般分为两种,第一种是,第二种是*nix:
进入虚拟环境:进入到虚拟环境的文件夹中,然后执行 。linux进入虚拟环境: /path/to//bin/
python之基础1

文章插图
一旦你进入到了这个虚拟环境中,你安装包,卸载包都是在这个虚拟环境中 , 不会影响到外面的环境 。退出虚拟环境:
退出虚拟环境很简单,通过一个命令就可以完成: 。
创建虚拟环境的时候指定解释器:
在电脑的环境变量中,一般是不会去更改一些环境变量的顺序的 。也就是说比如你的/在/的前面 , 那么你不会经常去更改他们的位置 。但是这时候我确实是想在创建虚拟环境的时候用这个版本,这时候可以通过-p参数来指定具体的解释器:
virtualenv -p C:\Python36\python.exe [virutalenv name]
这个软件包可以让我们管理虚拟环境变得更加简单 。不用再跑到某个目录下通过来创建虚拟环境,并且激活的时候也要跑到具体的目录下去激活 。
安装
linux:pip install virtualenvwrapper 。windows:pip install virtualenvwrapper-win 。
基本使用:
创建虚拟环境:
mkvirtualenv my_env
那么会在你当前用户下创建一个Env的文件夹,然后将这个虚拟环境安装到这个目录下 。
如果你电脑中安装了和,并且两个版本中都安装了,那么将会使用环境变量中第一个出现的版本来作为这个虚拟环境的解释器 。
切换到某个虚拟环境:
workon my_env
退出当前虚拟环境:
deactivate
删除某个虚拟环境:
rmvirtualenv my_env
列出所有虚拟环境:
lsvirtualenv
修改的默认路径:
在我的电脑->右键->属性->高级系统设置->环境变量->系统变量中添加一个参数,将这个参数的值设置为你需要的路径 。
创建虚拟环境的时候指定版本:
在使用的时候,可以指定--的参数来指定具体的路径:
mkvirtualenv --python==C:\Python36\python.exe hy_env
五、变量
变量是什么?什么是变量?变量有什么好处?
变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储运行时可更改的程序信息 。例如,可以创建一个名为的变量来存储用户单击Web页面上某个对象的次数 。使用变量并不需要了解变量在计算机内存中的地址 , 只要通过变量名引用变量就可以查看或更改变量的值 。在例如:咱们平时玩的游戏都有level,打怪就升级 , 那个level就是变量
变量定义的规范:
变量名只能是字母、数字或下划线的任意组合
变量名的第一个字符不能是数字
变量名不能为关键字,比如 and,as,break,class,,def,del............
变量名字尽量起个个有意义的名字,比如:name=‘张三’,不要词不达意,比如:aaa='张三'
变量名字不要起过长
变量名字尽量不要起拼音或者汉字
变量应该具有的属性或者特征
name='疯子'
id,type,value
id——代表变量的内存地址
type——代表变量的数据类型
value——代表等号右边的值
这3个特点缺一个都不叫变量
的小整数池
在交互模式下有一个小的整数池,他的范围是[-5,256],这么做的好处是避免浪费空间和资源
只要是在这个数值内,内存地址都一样
在中,出于对性能的考虑会扩大这个整数池,至于扩大到多少,视内存而定
六、常量
常量即代表不变的量,其实在里不存在真正不变的量,只不过潜规则在我们想定义一个常量的时候变量名为大写即为常量:
比如:一个人的年纪不断的增长,那么年纪就叫常量,如果这个人死了,那么他的年纪就被定格在了那一年的年纪上,这个时候年纪就是常量
AGE=60
七、用户与程序()交互
首先来说什么是交互,交互就跟人与人对话一样,你有来言,我有去语,能够对话...能够沟通 , 那么用户怎么跟程序去对话呢?这时候我们可以调用的一个内置函数,叫:input
#例子name = input()print(name)#如果你想让程序有提示信息name = input("what's your name?")print(name)
八、注释
随着代码越来越多,如果你不写注释的话可能过几天连自己写的代码都不知道写的什么意思,更何况是别人了,因此就需要有注释来提示用户
单行注释可以用#表示,#号右边的为注释内容如果要多行注释可以用'''''' , 左右两边一边1个3引号中间的部分就是注释的内容
九、数据类型 数字
#int整型定义:age=10 #age=int(10)用于标识:年龄,等级,身份证号,qq号,个数#float浮点型定义:salary=3.1 #salary=float(3.1)用于标识:工资,身高,体重,
字符串
单引号,多引号,三引号的区别和作用#多行字符串需要用到三引号双引号和单引号都是用来定义单行字符串的,那么2者有什么区别呢,举个例子想把这个句话定义成字符串怎么办?what's your name这句话当中有一个单引号了,如果我们在用单引号把他包起来 , 他就会报错,因此,我们需要在外面用双引号包裹起来res = "what's your name"
#在python当中数字可以进行加法 , 那么字符串可以吗?让我大声的告诉你,也可以a = '你'b = '好'a + b#结果为'你好'#注意,字符串只能和字符串相加 , 不能和别的数据类型相加
字符串的拼接
列表
#在[]内用逗号分隔,可以存放任意个任意类型的值比如(数字 , 字符串 , 列表 , 元组都OK) , #用于标识存储多个值,比如一个班级的学生有多个,一个人的兴趣爱好也有多个>>> test = [1,2,'a',[1,2],{'a','b'}]>>> test[1, 2, 'a', [1, 2], {'b', 'a'}]>>>#利用下标取列表里的值>>> test[0]1>>>
列表的定义和取值
元组
元组跟列表一样都可以存取多个值 , 只不过元组大部分是用来读的
View Code
字典
#既然有了列表可以存取多个值 , 为什么还要有字典呢?举个例子你就明白了比如在这个列表中有2个值一个28用来表示年纪,一个187用来标识身高,但是并没有一个说明,那个元素对应的是年纪,那个元素对应的是身高info = [28,187]#因此,字典就可以解决这个问题info = {'age':28,'high':187}
字典
info={'name':'fengzi','hobbies':['play','sleep'],'company_info':{'name':'宏福','type':'education',}}info['company_info']['name']#取公司名字
字典的取值和嵌套
布尔
#布尔类型就是True和False>>> a=100>>> b=200>>> >>> a > b #不成立就是False,也就是假False>>> a < b #成立就是True, 也就是真True#谨记#0,None,空都为假 , 其余为真
布尔类型
引用计数和垃圾回收机制 十、可变类型和不可变类型
#1.可变类型:在id不变的情况下,value可以变,则称为可变类型,如列表,字典#2. 不可变类型:value一旦改变,id也改变 , 则称为不可变类型(id变,意味着创建了新的内存空间)
View Code
十一、格式化输出
#程序中经常会有这样场景:要求用户输入信息,然后打印成固定的格式#比如要求用户输入用户名和年龄,然后打印如下格式:My name is xxx,my age is xxx.#这种情况下就用到了%s和%dres = 'my name is %s, my age is %d' % ('疯子',29)print(res)#这里要注意%d只可以接收数字,%s可以接收数字也可以接收字符串
格式化输出占位符
#第一种方法,传递参数res = 'my name is {name}, my age is {age}'.format(name='疯子',age=29)print(res)#第二种方法按顺序res = 'my name is {0}, my age is {1}'.format('疯子',29)print(res)
格式化的用法
内置函数(len,in,not in) 十二、基本运算符
a = 10b=20
python之基础1

文章插图
十三、比较运算符
python之基础1

文章插图
十四、赋值运算符
python之基础1

文章插图
十五、身份运算符
#is表示id是否相等,也就是比较内存地址是否一致,一致为True,不一致为False#==表示两个值是否一致 , 一致为True,不一致为False
is和==的区别
十六、流程控制if...else....
name = '疯子'res = input('你叫什么名字?')if res == name:print('帅哥')else:print('丑男')
示例1
#如果:女人的年龄>=18并且<22岁并且身高>170并且体重<100并且是漂亮的,那么:表白,否则:叫阿姨age_of_girl=18height=171weight=99is_beautiful=Trueif age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_beautiful == True:print('表白...')else:print('阿姨好')
示例2
十七、逻辑运算符
python之基础1

文章插图
小练习:
#1.定义布尔型变量 has_ticket 表示是否有车票#2.定义整形变量 knife_length 表示刀的长度,单位:厘米#3.首先检查是否有车票,如果有,才允许进行安检#4.安检时,需要检查棍子的长度,判断是否超过20厘米#如果超过20厘米 , 提示棍子的长度 , 不允许上车#如果不超过20厘米,按键通过#5.如果没有车票,不允许进门
has_ticket = Truestick_length = 22if has_ticket:if stick_length > 20:print('你的棍子太长了',stick_length)else:print('请进....')else:print('您没有车票,不允许进入车站')
小练习答案
十八、流程控制之while
while 条件:# 循环体# 如果条件为真,那么循环体则执行,执行完毕后再次循环 , 重新判断条件 。。。# 如果条件为假,那么循环体不执行,循环终止
num = 0while num < 5:print(num)num+=1
打印0到4的数字
num = 0while num <= 10:if num % 2 ==0:print(num)num += 1
打印0到10之间的偶数
import timenum = 0while True:print(num)num += 1time.sleep(1)
死循环
count = 0while count <= 5 :count += 1print("Loop",count)else:print("循环正常执行完啦")print("-----out of while loop ------")输出Loop 1Loop 2Loop 3Loop 4Loop 5Loop 6循环正常执行完啦-----out of while loop ------
while...else...
for letter in 'Python':# continue第一个实例if letter == 'h':continueprint('当前字母 :', letter)var = 10# continue第二个实例while var > 0:var = var -1if var == 5:continueprint('当前变量值 :', var)print("Good bye!")count = 0#break实例while True:print(count)count+=1if count == 5:break
和break
练习
import randomwin = 0lost = 0ping = 0while True:print('\033[31m胜:%s输:%s平:%s\033[0m' % (win, lost, ping))chooses = ['石头', '剪刀', '布']print('欢迎来猜拳\n1.石头2.剪刀3.布4退出')hum = input('请出拳:')computer = random.choice(chooses)if (hum == '1' and computer == '石头') or (hum == '2' and computer == '剪刀') or (hum == '3' and computer == '布'):ping += 1print('\033[31m不要走,决战到天亮?。033[0m')elif (hum == '1' and computer == '剪刀') or (hum == '2' and computer == '布') or (hum == '3' and computer == '石头'):win += 1print('\033[31m你好NB?。033[0m')elif (hum == '1' and computer == '布') or (hum == '2' and computer == '石头') or (hum == '3' and computer == '剪刀'):lost += 1print('\033[31m你个损塞\033[0m')elif hum == '4':breakelif not hum:continueelse:print('输入错误?。?#39;)print('\033[31m=\033[0m' * 50)
---猜拳游戏
十九、流程控制之for循环
1 迭代式循环:for , 语法如下
for i in range(10):
缩进的代码块
2 break与(同上)
文件
#在python3中如何打开一个文件呢?f = open('lock.txt', 'r',encoding='utf-8')#应用程序向操作系统发起打开文件的操作print(f.read())#操作系统打开文件得到文件句柄返回给应用程序并赋值给ff.close()#应用程序向操作系统发起关闭文件的信号,并且回收变量f#注意:操作完文件后一定要记得关闭 , 因为如果开的文件多了,不关闭,会浪费系统资源,使系统变慢#但是还是有很多同学忘记关闭文件 , 因此,可以用下面这个方式with open('lock.txt', 'r', encoding='utf-8') as f:print(f.read())#这里要注意字符编码,秉承一个原则就不会出现乱码(用什么方式写的,就用什么方式打开)
View Code
r,#只读模式【默认模式,文件必须存在,不存在则抛出异常】w , #只写模式【不可读;不存在则创建;存在则清空内容】a,#之追加写模式【不可读;不存在则创建;存在则只追加内容】#以下三种跟上面三种一样,只不过是以二进制方式rb wbab文本打开的常用模式
r,w,a
操作文件的方法#掌握f.read() #读取所有内容,光标移动到文件末尾f.readline() #读取一行内容,光标移动到第二行首部f.readlines() #读取每一行内容,存放于列表中f.write('1111\n222\n') #针对文本模式的写,需要自己写换行符f.write('1111\n222\n'.encode('utf-8')) #针对b模式的写,需要自己写换行符f.writelines(['333\n','444\n']) #文件模式#了解f.readable() #文件是否可读f.writable() #文件是否可读f.closed #关闭文件f.flush() #立刻将文件内容从内存刷到硬盘f.name #查看打开的文件名操作文件的方法
view code
f.seek(0,0)等价于f.seek(0)#代表把光标移动到开头f.seek(2,1)#代表在相对位置移动2个字节(1代表光标的相对位置,2代表在相对位置上把光标向后移动2个字节)f.seek(-3,2)#代表在末尾往前移动3个字节(2代表把光标移动到末尾 , -3代表把光标向前移动3个字节)f.read(3)代表读取3个字符(意思是光标在第三个字节后面)光标位置移动
光标移动
二十、作业
编写一个用户登录程序
登录成功显示欢迎页面登录失败显示密码错误,并显示错误几次登录三次失败后,退出程序
username = 'root'password = 'root'count = 0print('请登录...')while True:user = input('username:')pwd = input('password:')if user == username and pwd == password:print('欢迎登陆')breakelse:count += 1print('密码错误', count)if count == 3:print('滚')break
View Code
作业升级:
可以支持多个用户登录用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态
userinfo = {'root':['root',0],'fengzi':['fengzi',0],'test': ['test',0]}while True:with open('lock.txt', 'r', encoding='utf-8') as f:username = input('username:')if not username:continueelif username in f.read():print('您的账户已被锁定,请联系管理员')elif username in userinfo.keys():password = input('password:')if password in userinfo[username][0]:print('欢迎页面')breakelse:userinfo[username][1] += 1print('密码错误',userinfo[username][1])if userinfo[username][1] >= 3:with open('lock.txt', 'a', encoding='utf-8') as f:f.write('%s|' % username)else:print('用户名不存在')
View Code