1.Python前世今生
python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。
最新的TIOBE排行榜,Python赶超PHP占据第五!
Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。互联网公司广泛使用Python来做的事一般有:自动化运维、自动化测试、大数据分析、爬虫、Web 等。
注视:上述重点字体表示该公司主要使用Python语言开发
2.为什么是Python而不是其他语言?
C 和 Python、Java、C#等
C语言: 代码编译得到机器码 ,机器码在处理器上直接执行,每一条指令控制CPU工作
其他高级语言: 代码编译得到字节码 ,虚拟机执行字节码并转换成机器码再后在处理器上执行
Python 和 C Python这门语言是由C开发而来
对于使用:Python的类库齐全并且使用简洁,如果要实现同样的功能,Python 10行代码可以解决,C可能就需要100行甚至更多.
对于速度:Python的运行速度相较与C,绝逼是慢了
Python 和 Java、C#等
对于使用:Linux原装Python,其他语言没有;以上几门语言都有非常丰富的类库支持
对于速度:Python在速度上可能稍显逊色
所以,Python和其他语言没有什么本质区别,其他区别在于:擅长某领域、人才丰富、先入为主。
3.Python的种类
-
- Cpython(解释)代码----字节码-----机器码(解释一行,执行一行)
Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上。 - Jyhton
Python的Java实现,Jython会将Python代码动态编译成Java字节码,然后在JVM上运行。 - IronPython
Python的C#实现,IronPython将Python代码编译成C#字节码,然后在CLR上运行。(与Jython类似) - PyPy(特殊)(编译)代码---字节码-----机器码(全部转换完之后在执行)
Python实现的Python,将Python的字节码字节码再编译成机器码。 - RubyPython、Brython ...
- Cpython(解释)代码----字节码-----机器码(解释一行,执行一行)
4.python基础
—python规则
1.安装:python解释器(作用:开辟内存,执行结果,检验代码格式是否正确,最终释放内存,给出结果)
windows--安装目录:C:\python35
2.写代码(程序)
将内容保存到目录下面,在终端里面执行:c:\python35\python.exe G:\1.py
python内部内部执行顺序:1.打开文件,读取文件内容 2.词法,语法分析 3. 符合规则之后 代码—字节码—机器码
—解释器
window环境:解释器—C:\python\python.exe G:\1.py (给个文件执行)
C:\python\python.exe (进入解释器环境,单行执行)
liunx环境:文件头部信息:#!/usr/bin/env python
#-*- coding:utf8 -*-(指定编译器编码)
chmod 755 1.py (给文件权限) ./1.py (直接执行)
—潜规则
文件格式后缀名以.py结尾
—编码
最早出现的编码(ascii):只支持英文,8位一个字节(例如a:00000001)
万国码:(编码至少16位)随着电脑的普及,为了支持其他国家使用,出现支持各种语言的编码。中文占三个字节(24位)。(例如a:00000000 00000001)(对于a类型的来说,位数较多,比较占用内存,所以出现出现万国码的压缩版 utf-8)
utf-8:中文还是占用三个字符
gbk,gb2312:正对中文的编码,gb2312比给gbk增加了繁体字,中文只需2个字节
默认python2编码为ascii码,python3为utf-8
5.IDE(pycharm(软件))
使用方法:
a.创建自己的目录(project)
b.每天新建一个新目录
c.每个目录里面创建py文件
d.在py文件中右键选择run‘s1’左键执行
e.修改文件编码
f.修改文件模板
g.改变页面大小
6.注释
单行注释:代码前面加# 多行注释:三个引号 ("""代码""") 鼠标选中多行ctrl+?键进行多行注释 选择多行注释的代码ctrl+?取消多行注释
7..pyc文件 字节码文件
8.变量(声明变量)
变量名要求:1.字母 2.数字(不能以数字开头) 3.下划线 4.不能使用关键字 5.变量名要有意义(中间以下划线分隔,可识别读高)
示例:
name = 'chengfei' n = name print(name) name = 'wuyanmin' print(n) print(name)
9.输入 输出
输入:
input:v = input ('请输入用户名:') v = 表示接收用户输入的值(等同于变量)
import:示例: import getpass v = getpass.getpass('请输入密码:')
输出:
print('内容'):打印括号里面的内容 print(变量):打印变量的内容
示例:
name = input('请输入姓名:') print(name)
import getpass pwd = getpass.getpass ('>>>') print(pwd)
import getpass name = input('请输入姓名:') pwd = getpass.getpass ('请输入密码:') age = input('请输入您的年龄:') print(name) print(pwd) print(age)
10.条件语句
if 条件: if 条件: if 条件:
成功走这儿 ... if 条件:
else: elif 条件: ...
失败走这儿 ... elif 条件:
elif 条件: ...
... else:
else: ...
...
示例:
username = input('请输入用户名:') if username == 'chengfei': print('超级管理员') elif username == 'wuyanmin': print('超级管理员的老婆大人') elif username == '乖乖': print('吾皇') else: print('拜拜。。。') print('end')
user_type = input('请输入姓名:') if user_type == '成飞': family_job = input('请输入家庭职责:') if family_job == '扫地': print('你是武艳敏的老公') elif family_job == '铲屎': print('你是乖乖的铲屎官') else: print('你不是这个家里的人') else: print('你不是这个家里的人') print('滚蛋')
11.循环语句
while 条件:
continue (跳出本次循环,执行下次循环)
break (跳出所有循环)
示例:
i = 1 while i < 11 : print(i) i += 1
=========================> while True: username = input('请输入用户名:') pwd = input('请输入密码:') if username == 'chengfei' and pwd == '123': print('登录成功') break else: print('登录失败,请重新登录')
i = 1 while True: if i == 7 : i += 1 continue print(i) i += 1 if i == 11 : break
i = 1 while i < 11 : if i == 7: i += 1 continue print(i) i += 1 if i == 11: break
12.运算符
a.算术运算符
b.比较运算符
c.赋值运算符
d.逻辑运算符
e.成员运算符
13.练习题
1、使用while循环输入 1 2 3 4 5 6 8 9 10
2、求1-100的所有数的和
value = 0 i= 1 while i < 101: value += i i+=1 print(value)
3、输出 1-100 内的所有奇数
i = 1 while i < 101: if i % 2 == 1: # i % 2 == 0 输出的是偶数 print(i) i += 1
4、输出 1-100 内的所有偶数
5、求1-2+3-4+5 ... 99的所有数的和
i = 1 value = 0 while i < 100 : if i % 2 == 1: value += i if i % 2 == 0: value -= i i += 1 print(value)
6、用户登陆(三次机会重试)
i=1
while i < 4: username = input( '请输入用户名:') pwd = input('请输入密码:') pwd = int (pwd) if username == 'chengfei' and pwd == 123: print('登录成功') break else: print('登录失败,请重新输入') i += 1
14.python类型
—整数:创建:a = 123 或 a = int(123) 转换:age = ‘18’ ---- new_age = int(age) print (type(变量)) 查看这个变量是什么类型
—布尔值 :创建:a = True b = False 转换:数字转换时,只有0是False,其他都是True,字符串转换时,只有为空时是False,其他True(a = 1 -- b = bool(a) print (b))
—字符串:-创建:a = 'tom' 或 a = str('tom') -转换:age = 18 new_age = str(age)
-字符串的拼接:如下
str = '我叫成飞,今年18岁,性别:男。' val = '扯淡' new_str = str + val print(new_str)
-字符串的格式化(占位符):如下
str = '我叫成飞,今年18岁,%s,性别:男。' new_str = str % ('chedan') print(new_str) str = '我叫成飞,今年18岁,%s,性别:男。' % ('chedan') print(str)
-判断子序列是否在其中:如下
content = '中国是个共产主义国家' if '123'in content: print('包含敏感字符') else: print(content)
-去除空白(只能去除前后,不能去除中间)
val = ' 成飞 ' val_1 = val.strip() #去除左右空白 new_val = val.rstrip() #去除右边空白 new_new_val = val.lstrip() #去除左边空白 print(val) print(val_1) print(new_val) print(new_new_val)
-分割
user_info = 'alex sb123 9' v = user_info.split(' ') #分割所有的 val = user_info.split(' ',1) #分割最左边的 new_val = user_info.rsplit(' ',1) #分割最右边的 print(v) print(val) print(new_val)
-长度
val = '成飞是男的' num = len (val) print(num)
-索引(0代理表第一个,以此类推)
val = '成飞是男的' new_val = val [0] print(new_val)
val = '成飞是男人' i = 0 while i < len(val): print(val[i]) i += 1 #长度索引加循环的示例 val = input( '>>>') i = 0 while i < len(val): print(val[i]) i += 1 #长度索引加输入加循环的示例
-切片(第一个数字指从第几个字符开始,第二数字不填表示到最后一个字符,第三个数字表示步长为几)
str = '我叫成飞,今年18岁,性别:男。' print(str[0]) #打印第一个字符 print(str[1:6]) #打印第(1<=值>6)的字符 print(str[0:-1]) #打印从第一个开始到不包含最后一个的字符的所有字符 print(str[0:]) #打印所有的字符 print(str[0::3]) #打印所有范围之内步长为3的字符 print(str[-5:-2]) #打印从倒数第五个开始不包括最后两个的字符
15.列表
-创建列表:a = ['tom','jim',123,'alxe'] 或 a = list(['tom','jim',123,'alxe'])
-in判断:
a = ['成飞','alxe',123,'guaiguai','武艳敏'] # a = list(['成飞','alxe',123,'guaiguai','武艳敏']) if '成飞' in a: print(a) if 'a' in a[1]: print(a)
-索引 val = a [0] print (val)
-长度 val = len(a) print (val)
-切片 val = a [0::2] print (val)
-追加 a.append ('chengfei') 追加只能从最后追加
-插入 a.insert (1,'xo') 在第二个字符串前面插入,这里的0指的是索引
-删除 a.remove ('tom') 只删除列表中的第一个该字符串 del a [0] 删除列表下的第几个字符串 (可以索引删除,也可以切片删除)
-修改 a[0] = 'chengfei' 重新给该字符赋值
-for循环
a = list(['成飞','alxe',123,'guaiguai','武艳敏']) for item in a: print(item) break # continue
16.字典
-创建 v = {'name':'tom','pwd':'123'} 或 v = dic ({'name':'tom','pwd':'123'})
-索引 val = v['name'] print(val)
-增加 (有该值时,修改,没有该值,增加)v['age'] = 18 print (v)
-删除 del v['name']
-for循环
-长度 print (len(v))
-示例
v = {'name':'chengfei','password':'123123'} n = v ['name'] # 通过索引keys获取values(只能根据keys获取values) print(n) v ['age'] = 18 # 增加 无 增加 有时 修改 print(v) del v['name'] # 删除 print(v) for item in v : # for 循环所有的keys值 print(item) for item in v.keys(): # for 循环所有的keys值 print(item) for item in v.values(): # for 循环所有的values值 print(item) for key,val in v.items(): # for 循环keys,values的值 print(key,val)
16.字典列表相互嵌套
-示例
user_list = { 'k1': 'v1', 'k2': {'kk1': 'vv1','kk2': 'vv2'}, 'k3': 456, 'k4': ['tom','jim',123,{'k11':'v11'},['a','b','c']] } user_list['k4'][4].append('123') user_list['k4'][3]['name'] = 'chengfei' print(user_list)
-应用
user_list = [ {'name':'jim','pwd':'123','time':1}, {'name':'tom','pwd':'123','time':1}, {'name':'alxe','pwd':'123','time':1} ] user = input('用户名:') pwd = input('密码:') for item in user_list: if user == item['name'] and pwd == item['pwd']: print('登陆成功') break
练习题:
a. 元素分类
有如下值集合 v1 = [11,22,33,44,55,66,77,88,99,90],
将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}
v1 = [11,22,33,44,55,66,77,88,99,90] v2 = {'k1':[],'k2':[]} for item in v1: if item < 66: v2['k2'].append(item) elif item > 66: v2['k1'].append(item) print(v2)
b. 功能要求:
v = 2000
要求用户输入总资产,例如:2000
显示商品列表,让用户根据序号选择商品,加入购物车
购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。
goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998},
]
v = 2000 goods = [ {"name": "电脑", "price": 1999}, {"name": "鼠标", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美女", "price": 998} ] for item in goods: print(item) num = input('请输入您要购买的序号:') new_num = int(num) if goods[new_num]["price"] < 2000 : print(goods[new_num]['name']+'购买成功') val = int(goods[new_num]["price"]) new_val = str(v - val) print('您的余额为:'+ new_val) else: print('余额不足,请充值')
c. 用户交互,显示省市县三级联动的选择
dic = {
"河北": {
"石家庄": ["鹿泉", "藁城", "元氏"],
"邯郸": ["永年", "涉县", "磁县"],
}
"河南": {
...
}
"山西": {
...
}
}
dic = { "河北": { "石家庄": ["鹿泉", "藁城", "元氏"], "邯郸": ["永年", "涉县", "磁县"], }, "河南": { ... }, "山西": { ... } } for item in dic.keys(): print(item) inp = input('请输入您要查询的省份:') for city in dic[inp].keys(): print(city) cinp = input('请输入您要查询的城市:') for county in dic[inp][cinp]: print(county)