一、数据类型和变量
1)、数据类型
1.整数 int
十六进制用0x前缀和0-9,a-f表示
2.浮点数 float
对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5
3.字符串 String
- 字符串是以单引号'或双引号"括起来的任意文本
- 字符串内部既包含'又包含",可以用转义字符\来标识:\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\
- 用r''表示''内部的字符串默认不转义
- 用'''...'''的格式表示多行内容
- 字符串有两种索引方式,从左往右以 0开始,从右往左以 -1 开始
- 字符串可以用 +运算符连接在一起,用 * 运算符重复
- 字符串的截取的语法格式如下:变量[头下标:尾下标:步长]
str = 'Runoob'
print(str) # 输出字符串
print(str[0:-1]) # 输出第一个到倒数第二个的所有字符
print(str[0]) # 输出字符串第一个字符
print(str[2:5]) # 输出从第三个开始到第五个的字符
print(str[2:]) # 输出从第三个开始的后的所有字符
print(str * 2) # 输出字符串两次
print(str + '你好') # 连接字符串
print('------------------------------')
print('hello\nrunoob') # 使用反斜杠(\)+n转义特殊字符
print(r'hello\nrunoob') # 在字符串前面添加一个 r,表示原始字符串,不会发生转义
输出结果为:
4.布尔值 bool
- 布尔值只有True、False两种值(请注意大小写)
- 布尔值可以用and、or和not运算:
and运算是与运算,只有所有都为True,and运算结果才是True
or运算是或运算,只要其中有一个为True,or运算结果就是True
not运算是非运算,它是一个单目运算符,把True变成False,False变成True
布尔值经常用在条件判断中
if age >= 18:
print('adult')
else:
print('teenager')
5.空值
用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值
2)、变量
1.变量
- 变量名必须是大小写英文、数字和_的组合,且不能用数字开头
- 等号(=)用来给变量赋值:等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值
同时为多个变量赋值
a = b = c = 1
为多个对象指定多个变量
a, b, c = 1, 2, "runoob"
2.常量
- 通常用全部大写的变量名表示常量
PI = 3.14159265359
- / 除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数
print(9 / 3)
3.0
- // 除法只取结果的整数部分
print(10 // 3)
3
- % 余数运算,可以得到两个整数相除的余数
print(10 % 3)
1
二、字符串和编码
1)、字符编码
- Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串
- ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符
- 在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes,bytes的每个字符都只占用一个字节
对bytes类型的数据用带b前缀的单引号或双引号表示:
x = b'ABC'
①以Unicode表示的str通过encode()方法可以编码为指定的bytes
print('ABC'.encode('ascii'))
b'ABC'
print('中文'.encode('utf-8'))
b'\xe4\xb8\xad\xe6\x96\x87'
print('中文'.encode('ascii'))
Traceback (most recent call last):
File "D:/Study/str.py", line 22, in
print('中文'.encode('ascii'))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
② 把bytes变为str,就需要用decode()方法
print(b'ABC'.decode('ascii'))
ABC
print( b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8'))
中文
③ bytes中只有一小部分无效的字节,可以传入errors='ignore'忽略错误的字节
print(b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore'))
中
④计算str包含多少个字符,可以用len()函数
print(len('ABCD'))
4
print(len('你好,北京'))
5
2)、格式化
1.%运算符:用来格式化字符串的
%d ---- 整数
%f ---- 浮点数
%s ---- 字符串(不太确定应该用什么,%s永远起作用)
%x ---- 十六进制整数
- 格式化整数和浮点数还可以指定是否补0和整数与小数的位数:
print('%2d-%02d' % (13, 14))
13-14
print('%.2f' % 3.1415926)
3.14
- 字符串里面的%是一个普通字符,需要转义,用%%来表示一个%
2.format()方法:用传入的参数依次替换字符串内的占位符{0}、{1}……
print('你好, {0}, 你的成绩提升了 {1:.2f}%'.format('张晓华', 11.23565))
你好, 张晓华, 你的成绩提升了 11.24%
三、使用list和tuple
1)、list
list是一种有序的集合,可以随时添加和删除其中的元素
列表使用 方括号[ ]
- 用len()函数可以获得list元素的个数
- 用索引来访问list中每一个位置的元素,记得索引是从0开始的,用-1做索引,直接获取最后一个元素
list1 = ['Google', 'Runoob', 1997, 2000];
list2 = [1, 2, 3, 4, 5, 6, 7 ];
print ("list1[0]: ", list1[0])
list1[0]: Google
print ("list2[1:5]: ", list2[1:5])
list2[1:5]: [2, 3, 4, 5]
- 可以往list中追加元素到末尾:append()
nickname = ['Mary','John','Hele']
nickname.append('Sam')
print(nickname)
['Mary', 'John', 'Hele', 'Sam']
- 把元素插入到指定的位置,比如索引号为2的位置:insert(i,' ')方法,其中i是索引位置
nickname = ['Mary','John','Hele']
nickname.append('Sam')
nickname.insert(2,'Lili')
print(nickname)
['Mary', 'John', 'Lili', 'Hele', 'Sam']
- 要删除list末尾的元素:pop()
nickname = ['Mary','John','Hele']
nickname.append('Sam')
nickname.insert(2,'Lili')
nickname.pop()
print(nickname)
['Mary', 'John', 'Lili', 'Hele']
- 要删除指定位置的元素:pop(i)方法,其中i是索引位置
nickname = ['Mary','John','Hele']
nickname.append('Sam')
nickname.insert(2,'Lili')
nickname.pop()
nickname.pop(1)
print(nickname)
['Mary', 'Lili', 'Hele']
- 把某个元素替换成别的元素,可以直接赋值给对应的索引位置
nickname = ['Mary','John','Hele']
nickname.append('Sam')
nickname.insert(2,'Lili')
nickname.pop()
nickname.pop(1)
nickname[1] = 'Sunny'
print(nickname)
['Mary', 'Sunny', 'Hele']
-
列表对 + 和 * 的操作符与字符串相似。+号用于组合列表,* 号用于重复列表
squares = [1, 4, 9, 16, 25]
squares += [36, 49, 64, 81, 100]
print(squares)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
- list里面的元素的数据类型也可以不同
L = ['Apple', 123, True]
print(L)
['Apple', 123, True]
s = ['python', 'java', ['asp', 'php'], 'scheme']
print(len(s))
4
p = ['asp', 'php']
s = ['python', 'java', p, 'scheme']
print(s)
['python', 'java', ['asp', 'php'], 'scheme']
print(p[1])
php
print(s[2][1])
php
- 其他列表函数&方法
① list(seq):将元组转换为列表
② max(list):返回列表元素最大值
③ min(list):返回列表元素最小值
④ list.copy():复制列表
⑤ list.clear():清空列表
⑥ list.count(obj):统计某个元素在列表中出现的次数
⑦ list.extend(seq):在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
⑧ list.remove(obj):移除列表中某个值的第一个匹配项
⑨ list.reverse():反向列表中元素
⑩ list.sort( key=None, reverse=False):对原列表进行排序(reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认))
2)、tuple
tuple:是一种有序列表叫元组。tuple和list非常类似,但是tuple一旦初始化就不能修改。
元组使用 小括号()
- 定义一个空的tuple:tup1 = ()
- 元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用
- 元组中的元素值是不允许修改的,但我们可以对元组进行连接组合
tup1 = (12, 34.56);
tup2 = ('abc', 'xyz')
# 以下修改元组元素操作是非法的。
# tup1[0] = 100
# 创建一个新的元组
tup3 = tup1 + tup2;
print (tup3)
(12, 34.56, 'abc', 'xyz')
- 元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组
tup = ('Google', 'Runoob', 1997, 2000)
print (tup)
('Google', 'Runoob', 1997, 2000)
del tup;
print (tup)
Traceback (most recent call last):
File "D:/Study/str.py", line 67, in
print(tup)
NameError: name 'tup' is not defined
元组运算符
元组内置函数
四、条件判断
1)、if 语句
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
1. if中常用的操作运算符:
< 小于
<= 小于或等于
> 大于
>= 大于或等于
== 等于,比较两个值是否相等
!= 不等于
2.input
因为input()返回的数据类型是str,str不能直接和整数比较,必须先把str转换成整数
s = input('birth: ')
birth = int(s)
if birth < 2000:
print('00前')
else:
print('00后')
birth: 1955
00前
2)、if 嵌套
在嵌套 if 语句中,可以把 if...elif...else 结构放在另外一个 if...elif...else 结构中
if 表达式1:
语句
if 表达式2:
语句
elif 表达式3:
语句
else:
语句
elif 表达式4:
语句
else:
语句
举个栗子:
num=int(input("输入一个数字:"))
if num%2==0:
if num%3==0:
print ("你输入的数字可以整除 2 和 3")
else:
print ("你输入的数字可以整除 2,但不能整除 3")
else:
if num%3==0:
print ("你输入的数字可以整除 3,但不能整除 2")
else:
print ("你输入的数字不能整除 2 和 3")
输入一个数字:8
你输入的数字可以整除 2,但不能整除 3
五、循环
1)、while 循环
- while语句的一般形式:只要条件满足,就不断循环,条件不满足时退出循环
while 判断条件:
语句
举个栗子:
n = 100
sum = 0
counter = 1
while counter <= n:
sum = sum + counter
counter += 1
print("1 到 %d 之和为: %d" % (n, sum))
1 到 100 之和为: 5050
- 无限循环:设置条件表达式永远不为 false 来实现无限循环,使用 CTRL+C 来退出当前的无限循环
举个栗子:
var = 1
while var == 1 : # 表达式永远为 true
num = int(input("输入一个数字 :"))
print ("你输入的数字是: ", num)
print ("Good bye!")
输入一个数字 :11
你输入的数字是: 11
输入一个数字 :25
你输入的数字是: 25
输入一个数字 :
- while 循环使用 else 语句:在条件语句为 false 时执行 else 的语句块
count = 0
while count < 5:
print (count, " 小于 5")
count = count + 1
else:
print (count, " 大于或等于 5")
0 小于 5
1 小于 5
2 小于 5
3 小于 5
4 小于 5
5 大于或等于 5
2)、for 语句
- for...in循环,依次把list或tuple中的每个元素迭代出来
格式:
for in :
else:
举个栗子:for x in ...循环就是把每个元素代入变量x,然后执行缩进块的语句
nickname = ['Mary','John','Hele']
for name in nickname:
print(name)
Mary
John
Hele
3)、range()函数
- 遍历数字序列,可以使用内置range()函数。会生成数列
for i in range(5):
print(i)
0
1
2
3
4
- 使用range指定区间的值
for i in range(5,9) :
print(i)
5
6
7
8
- 可以使range以指定数字开始并指定不同的增量(甚至可以是负数,有时这也叫做'步长')
for i in range(0, 10, 3) :
print(i)
0
3
6
9
- 负数
for i in range(-10, -100, -30) :
print(i)
-10
-40
-70
- range()函数,可以生成一个整数序列,再通过list()函数可以转换为list
L=list(range(5))
print(L)
[0, 1, 2, 3, 4]
4)、结束循环
- break:在循环中,break语句可以提前退出循环
n = 1
while n <= 100:
if n > 10: # 当n = 11时,条件满足,执行break语句
break # break语句会结束当前循环
print(n)
n = n + 1
print('END')
1
2
3
4
5
6
7
8
9
10
END
- continue:作用是提前结束本轮循环,并直接开始下一轮循环
n = 0
while n < 10:
n = n + 1
if n % 2 == 0: # 如果n是偶数,执行continue语句
continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行
print(n)
1
3
5
7
9
break语句可以在循环过程中直接退出循环,而continue语句可以提前结束本轮循环,并直接开始下一轮循环。这两个语句通常都必须配合if语句使用
5)、pass 语句:pass 不做任何事情,一般用做占位语句
六、dict和set
1)、dict
dict字典是另一种可变容器模型,且可存储任意类型对象
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中
格式:
d = {key1 : value1, key2 : value2 }
- 键必须是唯一的,但值则不必
访问字典里的值
- 把相应的键放入到方括号中
dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
print ("dict['Name']: ", dict['Name'])
print ("dict['Age']: ", dict['Age'])
dict['Name']: Runoob
dict['Age']: 7
- 字典键的特性:一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉
① 通过in判断key是否存在
② 通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value
③ pop(key)方法,对应的value也会从dict中删除
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
d.pop('Bob')
print(d)
{'Michael': 95, 'Tracy': 85}
2)、set
set集合是一个无序的不重复元素序列
可以使用大括号{ }或者 set()函数创建集合,注意:创建一个空集合必须用set()而不是 { },因为 { } 是用来创建一个空字典
格式:
parame = {value01,value02,...}
或者
set(value)
- 集合的特性
① 重复元素在set中自动被过滤
② 通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果
③ 通过remove(key)方法可以删除元素
④ set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作
s1 = set([1, 2, 3])
s2 = set([2, 3, 4])
s3 = s1 & s2
print(s3)
s4 = s1 | s2
print(s4)
{2, 3}
{1, 2, 3, 4}
1. 添加元素
语法格式:s.add( x )或s.update( x )
2. 移除元素
语法格式:s.remove( x )或s.discard( x )
3. 计算集合元素个数
语法格式:len(s)
4. 清空集合
语法格式:s.clear()
5. 判断元素是否在集合中存在
语法格式:x in s