1、python是什么?
Python是一种计算机程序设计语言。你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言
2、python能用来做什么
日常任务,比如自动备份;可以用来做网站;云计算最火的语言;运维人员必备语言等等等
3、python的版本
python目前有两个版本,一个是python2.x 一个是python3.x
关于python两个版本区别此处描写的更加详细
http://www.cnblogs.com/codingmylife/archive/2010/06/06/1752807.html
4、第一个python程序
1 print('hello world!')
5、python的变量
变量定义的规则:
-
- 变量名只能是 字母、数字或下划线的任意组合
- 变量名的第一个字符不能是数字
- 以下关键字不能声明为变量名 ['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']
变量的赋值
name = 'ly'
6、python的输入和输出
用print()
在括号中加上字符串,就可以向屏幕上输出指定的文字。比如输出'hello, world'
Python提供了一个input()
,可以让用户输入字符串,并存放到一个变量里。比如输入用户的名字:
>>> name=input('please input your name:') please input your name:ly >>> name 'ly'
input()的输入的类型默认都是字符串
>>> num=input(':')
:1
>>> type(num)
<class 'str'>
格式化输出字符串可以使用%格式化输出,例如
name = input('name:') age = int(input('age:')) score = float(input('score:')) info = (''' -------------info %s ------------- name:%s age:%d score:%.2f ----------------------------------- ''') % (name,name,age,score)
%s 字符串 %d 10进制整数 %f 浮点型(取两位%.2f)
有的时候字符串里面的%是一个普通字符,就需要转义使用%%来表示%
格式化输出还可以使用.format方式
1 info1 = (''' 2 -------------info1 {name}------------ 3 name:{name} 4 age:{age:d} 5 score:{score:.2f} 6 ------------------------------------- 7 ''').format(name=name,age=age,score=score) 8 print('format的一种输出方式',info1) 9 info2 = (''' 10 -------------info2 {0}------------- 11 name:{0} 12 age:{1:d} 13 score:{2:.2f} 14 ----------------------------------- 15 ''').format(name,age,score) 16 print('format的另一种输出方式',info2)
{}默认字符串{:d}整数型{:f}浮点型(取2位{:.2f})
7、python的数据类型
可以使用内部函数type()来查看数据的类型
7.1 字符串(str)
用单引号‘’或双引号“”括起来的任意文本,字符串中包含转义字符\,制表符\t,换行符\n
转义字符\的使用方法,比如我们要输出一个\
>>> print('\\') \
打印D:\test的文件路径也需要使用转义
>>> print('D:\\test') D:\test
如果字符串中有许多字符都需要转义的话,就需要加很多的\,为了简化python提供一种非常简便的方式r' ',例如如果我们要打印D:\test\test.txt时,可以这么写
>>> print(r'D:\test\test.txt') D:\test\test.txt
如果字符串中有很多换行,写在一行使用使用\n不好阅读,为了简化python提供'''...'''的格式表示多行内容
>>> print('''line1) ... line2 ... line3''') line1) line2 line3
7.2布尔型(bool)
布尔型表示判断只有True和Flase两种值,布尔值可以使用and、or、not计算
7.3整数型(int)
任意大小的整数,包含负整数
7.4浮点型(float)
小数
7.5列表(list)
一种有序的集合,使用[ ]定义可以随时添加和删除其中的元素,比如创建0-9的整数集合
>>> num=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> num [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
可以通过索引来访问list中的每个元素,索引默认从0开始,比如定义一个班级的列表
1 >>> classmates=['张三','李四','王五','赵六'] 2 >>> classmates 3 ['张三', '李四', '王五', '赵六'] 4 >>> classmates[0] 5 '张三' 6 #添加一个王二麻子 7 >>> classmates.append('王二麻子') 8 >>> classmates 9 ['张三', '李四', '王五', '赵六', '王二麻子'] 10 #删除王五,使用remove,默认删除第一个 11 >>> classmates.remove('王五') 12 >>> classmates 13 ['张三', '李四', '赵六', '王二麻子'] 14 #查看每个元素对应的索引号可以使用enumerate 15 >>> for obj,value in enumerate(classmates): 16 ... print(obj,'--',value) 17 ... 18 0 -- 张三 19 1 -- 李四 20 2 -- 赵六 21 3 -- 王二麻子 22 #删除张三,使用pop方法,默认删除最后一个元素 23 >>> classmates.pop(0) 24 '张三' 25 >>> classmates 26 ['李四', '赵六', '王二麻子']
要把某个元素替换成别的元素,可以直接赋值给对应的索引位置
>>> classmates ['李四', '赵六', '王二麻子'] >>> classmates[2] = '周二' >>> classmates ['李四', '赵六', '周二']
list中所有元素也可以是不同的数据类型例如:
>>> list = ['apple',1,True]
>>> list
['apple', 1, True]
list元素也可以是另一个list
>>> list1 = ['red','blue',list]
>>> list1
['red', 'blue', ['apple', 1, True]]
python中列表的操作函数跟方法
len(list) 列表元素的个数
max(list) 返回列表元素的最大值
min(list) 返回列表元素的最小值
list() 修改其他的数据类型为list类型(不是所有数据类型都可转换)
列表操作方法
list.append(obj) 在列表末尾添加新元素
list.count(obj) 统计某个元素在列表中出现的次数
list.extend() 追加,在列表末尾添加一个列表
list.index(obj) 从列表中找出某个元素对应的索引号
list.insert(index,obj) 将某个元素插入列表指定的索引位置
list.pop(index) 删除列表中某个索引对应的元素,不写默认删除最后一位
list.remove(obj) 删除列表中某个元素,不写默认删除第一位
list.reverse() 反向列表中元素
>>> a
[0, 1, 2, 4, 5, 6, 7, 8]
>>> a.reverse()
>>> a
[8, 7, 6, 5, 4, 2, 1, 0]
list.sort() 对列表中元素进行排序
>>> a
[8, 7, 6, 5, 4, 2, 1, 0]
>>> a.sort()
>>> a
[0, 1, 2, 4, 5, 6, 7, 8]
7.6元组(tuple)
另一种有序的列表叫元组,元组跟列表非常相似,但是元组一旦初始化就不能修改,使用()定义,元组同样可以操作
如果元组中只有一个元素需要在元素后面添加,(逗号)
>>> b=('a')
>>> b
'a'
>>> type(b)
<class 'str'>
>>> b=('a',)
>>> type(b)
<class 'tuple'>
7.7字典(dict)
python内置了字典dict的支持,使用 键---值(key---value)的方式存储,具有极快的查找速度
定义方法使用{}定义
>>> d = {'张三':90,'李四':58,'王五':65}
>>> d
{'张三': 90, '李四': 58, '王五': 65}
>>> d['李四']
58
>>>
根据key值直接拿到value,把数据放入dict的方法,除了初始化时指定之外,还可以通过key放入
>>> d['周二']=100
>>> d
{'张三': 90, '李四': 58, '王五': 65, '周二': 100}
如果多次对一个key放入value,后面的值会把前面的冲掉,如果key不存在,dict就会报错
>>> d['金三胖']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: '金三胖'
要避免key不存在的错误,有两种方法,一种是in方法
>>> '金三胖' in d
False
>>> '周二' in d
True
一种是通过dict提供的get方法,如果key不存在,可以返回None或自定义value
>>> d.get('金三胖')
>>> d.get('金三胖',0)
0
要删除使用dict.pop(key)方法,对应的value也会从dict中删除,注意dict内部存放的顺序跟key放入的顺序是没有关系的
>>> d {'张三': 90, '李四': 58, '王五': 65, '周二': 100} >>> d.pop('王五') 65 >>> d {'张三': 90, '李四': 58, '周二': 100}
和list相比dict有以下几个特点
a.查找和插入的速度极快,不会随着key的增加而变慢
b.需要占用大量的内存,内存浪费多
而list正好相反,所以dict是一种用空间换取时间的方法,需要牢记的是dict中key必须是不可变对象,list就不能作为key,而字符串、整数、元组都可以作为key
7.8 set
set和dict类型,也是一组key的集合,但是不存储value,由于key不能重复,所以,在set中没有重复的key
要创建一个set需要提供一个list作为输入集合
>>> s = set([1,2,'a','b',2])
>>> s
{'b', 1, 2, 'a'}
注意,传入的参数是一个list,而显示的{ }只是告诉你这个set内部有这几种元素,显示的顺序也不表示set是有序的,并且重复元素会自动过滤
可以通过add(key)添加元素到set,可以重复添加,不会有效果,通过remove(key)删除元素
>>> s.add(3)
>>> s.add(3)
>>> s
{1, 2, 'a', 3, 'b'}
>>> s.remove('b')
>>> s
{1, 2, 'a', 3}
set可以看出是数学意义上无序和无重复的元素的集合,因此两个set可以做数学意义上的交集、并集等操作
>>> s1
{1, 2, 3}
>>> s2
{2, 3, 4}
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}
set和dict的唯一区别仅在于没有存储对应的value,但是set和dict一样,同样不可放入可变对象
7.9 空值(None)
空值是python中一个特殊的值,用None表示,None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
8、运算符
8.1 算数运算
+ 加法 - 减法 * 乘法 / 除(使用/除时,结果为float类型) //地板除(结果为整数int) % 取余数 ** 次幂(2**2 表示2的2次幂结果4)
8.2 比较运算,输出结果为bool
== 等于 != 不等于(python3.0之后不可以写作<>) > 大于 < 小于 >= 大于等于 <=小于等于
8.3赋值运算
= 简单的赋值运算符
+=加法赋值运算符 c+=a相当于c=c+a
-=减法赋值运算符 c-=a相当于c=c-a
*=乘法赋值运算符 c*=a相当于c=c*a
/=除法赋值运算符 c/=a相当于c=c/a
%=取余赋值运算符 c%=a相当于c=c%a
除此之外还有**= //=
8.4逻辑运算符
and 布尔与 两者都是True才是True,否则为False
or 布尔或 两者都是False才是False,否则为True
not 布尔非 非True就是False,非False就是True
8.5成员运算
in 如果在指定的序列找到值,则返回True,否则为False
not in 如果在指定的序列中没有找到值,返回True,否则为False
8.6身份运算
is is是判断两个标识符是不是引用一个对象
is not is not 是判断两个标识符是不是引用不同对象
8.7强制类型转换符
不同数据类型之间可以进行转换
>>> a = '1'
>>> type(a)
<class 'str'>
>>> int(a)
1
>>> b = int(a)
>>> type(b)
<class 'int'>
8.8 python中不同对象进行比较需要使用operator模块
需要引入 operator 模块,适合任何对象,包含的方法有:
import operator
operator.lt(a, b) a小于b? operator.le(a, b) a小于等于b? operator.eq(a, b) a等于b? operator.ne(a, b) a不等于b? operator.ge(a, b) a大于等于b? operator.gt(a, b) a大于b
运算符 | 描述 |
---|---|
lambda | Lambda表达式 |
or | 布尔“或” |
and | 布尔“与” |
not x | 布尔“非” |
in,not in | 成员测试 |
is,is not | 同一性测试 |
<,<=,>,>=,!=,== | 比较 |
| | 按位或 |
^ | 按位异或 |
& | 按位与 |
<<,>> | 移位 |
+,- | 加法与减法 |
*,/,% | 乘法、除法与取余 |
+x,-x | 正负号 |
~x | 按位翻转 |
** | 指数 |
x.attribute | 属性参考 |
x[index] | 下标 |
x[index:index] | 寻址段 |
f(arguments...) | 函数调用 |
(experession,...) | 绑定或元组显示 |
[expression,...] | 列表显示 |
{key:datum,...} | 字典显示 |
'expression,...' | 字符串转换 |
9、判断语句和循环语句
python的语法比较简单,采用缩进方式;已#开头表示注释,批量注释使用'''。。。''',其他每一行都是一个语句,当语句已冒号:结尾时,缩进的语句视为代码块。按照约定俗成,缩进应始终坚持使用4个空格(不要tab键和空格混用,python是区分大小写的)。
9.1判断语句
简单的if判断语句为
if 条件:#条件为True
执行结果
else: #否则
执行结果
if中还可以使用elif做更细致的判断,elif 是else if的缩写,if语句是从上往下判断,如果某个判断上是True,就会执行相应的结果,执行完毕后会忽略掉接下来的elif和else
9.2循环语句for
for...in....语句可以循环遍历list或tuple,又称作迭代,例:
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
#执行这段代码,会依次打印names的每一个元素:
Michael
Bob
Tracy
如果要计算从1到100的数之和,我们可以使用for循环实现
sum=0
#range()函数可以生成一个整数序列,range(1,101)代表从1开始取到100,相当于
#[1,2,3,4,5.....100]的一个列表
for i in range(1,101):
sum = sum + i
print(sum)
9.3循环语句while
while循环是,只要条件满足,就不断循环,条件不满足时退出。例:
打印1到10的整数
>>> i=0
>>> while i <10:
... i = i + 1
... print(i)
...
1
2
3
4
5
6
7
8
9
10
在循环中,可以使用break和continue,需要配合if语句来使用,break是退出循环,continue是跳过当前循环
一个经典的猜数字的游戏
1 #!/usr/bin/env python3 2 #-*- coding: utf-8 -*- 3 #经典猜数字游戏 4 import random 5 #取一个随机数(0-9) 6 num = random.randint(0,9) 7 #用户输入一个数字 8 #给3次机会判断输入的数字跟获取的随机数是否相等,并给出提示,超过次数提示机会已用尽 9 for i in range(3): 10 #用户输入一个数字 11 num_of_user = int(input('请输入一个0-9的数字:')) 12 #首先判断输入的数值是否0-9之间 13 while True: 14 if num_of_user in range(10): 15 break 16 else: 17 print('输入的数值超过0-9区间范围!,请重新输入') 18 num_of_user = int(input(':')) 19 if num_of_user == num: 20 print('恭喜你猜对了!') 21 break 22 elif num_of_user > num: 23 print('你猜测的数字过大!') 24 else: 25 print('你猜测的数字小了!') 26 27 else: 28 print('你的机会已用尽,对不起,你输了!')
一个交互式的猜数字游戏
#!/usr/bin/env python3 #-*- coding: utf-8 -*- #经典猜数字游戏 import random #取一个随机数(0-9) num = random.randint(0,9) #创建一个计数器 count = 0 while count<3: #用户输入一个数字 num_of_user = int(input('请输入一个0-9的数字:')) #计数器循环+1 count += 1 #首先判断输入的数值是否0-9之间 while True: if num_of_user in range(10): break else: print('输入的数值超过0-9区间范围!,请重新输入') num_of_user = int(input(':')) if num_of_user == num: print('恭喜你猜对了!') break elif num_of_user > num: print('你猜测的数字过大!') else: print('你猜测的数字小了!!') if count == 3: print('三次机会已用尽,请问你还想继续玩吗Y/N?') play_flag = input(':') if play_flag == 'Y': count = 0 elif play_flag == 'N': print('游戏结束。') else: print('输入的命令有误,游戏结束。')