Python简介
python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。
最新的TIOBE排行榜,Python赶超PHP占据第五!!!
由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可!!!
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 ...
Python环境
安装python环境
mac上默认安装的是python 2.7 ,如果要安装3.x版本,可以使用pyenv引擎。 pyenv地址如下:
https://github.com/pyenv/pyenv
可以结合virtualenv安装配置python, pyenv-virtuanenv 地址:
https://github.com/pyenv/pyenv-virtualenv
关于使用,github有详细说明
python编码
python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。
显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:
报错:ascii码无法表示中文
1 #!/usr/bin/env python
2 print("您好")
改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 print("您好")
或者,如果你直接使用unicode的“您好”也可以,即:
1 #!/usr/bin/env python
2 print(u"您好")
注释
当行注视:# 被注释内容
多行注释:""" 被注释内容 """
pyc文件
执行Python代码时,如果导入了其他的 .py 文件,那么,执行过程中会自动生成一个与其同名的 .pyc 文件,该文件就是Python解释器编译之后产生的字节码。
ps:代码经过编译可以产生字节码;字节码通过反编译也可以得到代码。
变量
变量定义的规则:
- 变量名只能是 字母、数字或下划线的任意组合
- 变量名的第一个字符不能是数字
- 以下关键字不能声明为变量名
• ['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']
要查看系统有哪些关键字可以这么看:
while循环
基本数据类型
1、字符串
2、布尔类型
3、整数
4、浮点数
5、数字
6、列表
7、元组
8、字典
9、日期
1、字符串
1.1、如何在Python中使用字符串
a、使用单引号(')
用单引号括起来表示字符串,例如:
str='this is string';
print str;b、使用双引号(")
双引号中的字符串与单引号中的字符串用法完全相同,例如:
str="this is string";
print str;c、使用三引号(''')
利用三引号,表示多行的字符串,可以在三引号中自由的使用单引号和双引号,例如:
str='''this is string
this is pythod string
this is string'''
print str;2、布尔类型
bool=False;
print bool;
bool=True;
print bool;3、整数
int=20;
print int;4、浮点数
float=2.3;
print float;5、数字
包括整数、浮点数。
5.1、删除数字对象引用,例如:
a=1;
b=2;
c=3;
del a;
del b, c;
#print a; #删除a变量后,再调用a变量会报错
a. 整数 int
- 创建
a = 123
a = int(123)
- 转换
age = "18"
new_age = int(age)
b. 布尔值
- 创建
a = True
b = False
- 转换
- 数字转换,只有0是False,其他True
- 字符串, 只有""是False,其他True
- 待续...
c. 字符串
- 创建
a = "alex"
a = str('alex')
- 转换
age = 19
new_age = str(age)
- 字符串的拼接
name = 'alex'
gender = '女'
new_str = name + gender
print(new_str)
- 字符串格式化
# 占位符,
# name = '我叫李杰,性别:%s,我今年%s岁,我在说谎!'
# new_str = name %('男',19,)
# print(new_str) name = '我叫李杰,性别:%s,我今年%s岁,我在说谎!' %('男',19,)
print(name)
- 判断子序列是否在其中
content = "Alex 前几天去泰国玩姑娘,一不小心染上了病,他的内心活动是,真该多来几个" if "前几天去" in content:
print('包含敏感字符')
else:
print(content)
- 移除空白
val = " alex "
print(val)
# new_val = val.strip() # 左右
# new_val = val.lstrip()# 左边
# new_val = val.rstrip() # 右边
# print(new_val)
- 分割
user_info = "alex sb123 9"
# v = user_info.split('|')
# v = user_info.split('|',1)
# v = user_info.rsplit(' ',1)
# print(v)
- 长度(字符)
val = "李杰sb"
v = len(val)
print(v)
- 索引
val = "李杰sb"
v = val[0]
print(v)
val = input('>>>')
i = 0
while i < len(val):
print(val[i])
i += 1
- 切片
name = '我叫李杰,性别我今年岁,我在说谎!'
print(name[0])
print(name[0:2])
print(name[5:9])
print(name[5:])
print(name[5:-2])
print(name[-2:])
d. 列表
创建:
a = ['alex','狗','eric',123]
a = list(['alex','狗','eric',123])
in判断:
if 'al' in a:
pass
if 'al' in a[0]:
pass
索引:
val = a[0]
长度:
val = len(a)
切片:
a = ['alex','狗','eric',123]
v = a[0::2]
print(v)
追加:
a = ['alex','狗','eric',123]
a.append('xxoo')
print(a)
插入:
a = ['alex','狗','eric',123]
a.insert(0,'牛')
print(a)
删除:
a = ['alex','eric','狗','eric',123]
# a.remove('eric')
del a[0]
print(a)
更新:
a = ['alex','eric','狗','eric',123]
a[1] = '阿斯顿发送到'
print(a)
For循环:
a = ['alex','eric','狗','eric',123]
for item in a:
print(item)
# break
# continue
e. 字典操作
- 创建
v = {
'name': 'alex',
'password': '123123'
}
# 常用操作 # 索引获取值
# n = v['name']
# print(n)
# 增加,无,增加;有,修改
# v['age'] = 19
# print(v)
# 删除
# del v['name']
# print(v)
# 循环
# for item in v.keys():
# print(item)
# for item in v.values():
# print(item)
# for key,val in v.items():
# print(key,val)
作业代码:
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 import getpass
4
5 f1 = open('db','r')
6 data = f1.read()
7 f1.close()
8
9 print(data)
10 user_info_list = []
11 user_str_list = [i for i in data.split('\n') if i] # 移除data.split()生成的空元素
12 print("user_str_list is",user_str_list)
13 for item in user_str_list:
14 temp = item.split('|')
15 v = {
16 'name': temp[0],
17 'pwd': temp[1],
18 'times': temp[2]
19 }
20 user_info_list.append(v)
21 user_info_list[1]['times'] = 3
22
23
24 over_input = False
25 while True:
26 if over_input:
27 print("Good bye !")
28 break
29 else:
30 user_name = input("请输入用户名: ")
31 for user_info in user_info_list:
32 if user_name.strip() == user_info["name"].strip() and int(user_info["times"]) > 0:
33 user_password = getpass.getpass("请输入密码: ")
34 if user_password.strip() == user_info["pwd"]:
35 user_info["times"] = 3
36 over_input = True
37 print("Welcome, 登录成功!")
38 break
39 else:
40 user_info["times"] = int(user_info["times"]) - 1
41 if int(user_info["times"]) == 0:
42 print("超出系统设置最大重试次数,账户被锁定!")
43 over_input = True
44 break
45 else:
46 print("登录失败,请重新登录!")
47 break
48 else:
49 print("输入不合法的用户名或该用户账户被锁定!")
50 over_input = True
51 break
52
53 file_user_info = ""
54 for user_info in user_info_list:
55 temp_user_info = "{}|{}|{}\n".format(user_info["name"], user_info["pwd"], user_info["times"])
56 file_user_info += temp_user_info
57
58 f2 = open('db','w')
59 f2.write(file_user_info)
60 f2.close()