数据类型和变量
Python使用缩进来组织代码块,请务必遵守约定俗成的习惯,坚持使用4个空格的缩进。
变量,常量,整数,浮点数的知识与c相似
*对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5。
*整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。
*比如"I’m OK"包含的字符是I,’,m,空格,O,K这6个字符
注意:
除法:(结果为浮点数)
>>> 9 / 3
3.0
地板除:(结果为整数)
>>> 10 // 3
3
求余:(结果为整数)
>>> 10 % 3
1
字符串和编码
>>> ord('A')
65
>>> ord('中')
20013
>>> chr(66)
'B'
>>> chr(25991)
'文'
等价于
>>> '\u4e2d\u6587'
'中文'
以Unicode表示的str通过encode()方法可以编码为指定的bytes:
>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:
>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'
Python中采用的格式化方式和C语言是一致的,用%实现,举例如下:
print("%s is a %s." %("peiqi","pig"))
输出:
peiqi is a pig.
注意:
1.%s永远起作用,它会把任何数据类型转换为字符串
2.字符串里面的%是一个普通字符:这个时候就需要转义,用%%来表示一个%
另一种格式化字符串的方法是使用字符串的format()方法,它会用传入的参数依次替换字符串内的占位符{0}、{1}……,:
>>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)
'Hello, 小明, 成绩提升了 17.1%'
使用list和tuple
list和tuple是Python内置的有序集合,一个可变,一个不可变。根据需要来选择使用它们
list
hero =['diaochan','xiaoqiao','daji']
print(hero)
['diaochan', 'xiaoqiao', 'daji']
通过索引访问:
print(hero[0])
print(hero[1])
print(hero[2])
diaochan
xiaoqiao
daji
如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素:
print(hero[-1])
print(hero[-2])
print(hero[-3])
daji
xiaoqiao
diaochan
添加:
hero =['diaochan','xiaoqiao','daji']
hero.append('zhouyu')
print(hero)
['diaochan', 'xiaoqiao', 'daji', 'zhouyu']
把元素插入到指定的位置,比如索引号为1的位置:
hero =['diaochan','xiaoqiao','daji']
hero.insert(1,'zhouyu')
print(hero)
['diaochan', 'zhouyu', 'xiaoqiao', 'daji']
删除:
hero =['diaochan','xiaoqiao','daji']
hero.pop()
print(hero)
['diaochan', 'xiaoqiao']
要删除指定位置的元素,用pop(i)方法,其中i是索引位置:
hero =['diaochan','xiaoqiao','daji']
hero.pop(1)
print(hero)
['diaochan', 'daji']
替换:
hero =['diaochan','xiaoqiao','daji']
hero[1]=('wangzhaojun')
print(hero)
['diaochan', 'wangzhaojun', 'daji']
tuple
另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改,例:
hero =('diaochan','xiaoqiao','daji')
没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,能用tuple代替list就尽量用tuple。
注意:
要定义一个只有1个元素的tuple,如果这么定义:
>>> t = (1)
>>> t
1
定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。
所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:
>>> t = (1,)
>>> t
(1,)
还有一种情况需要注意:
t = ('a', 'b', ['A', 'B'])
t[2][0] = 'X'
t[2][1] = 'Y'
print(t)
('a', 'b', ['X', 'Y'])
指向不变:tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。
条件判断
格式:
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
注意不要少写了冒号:
若前面两个判断语句都满足条件,执行第一句,下面不执行
input()读取用户的输入:
birth = input('birth: ')
if birth < 2000:
print('00前')
else:
print('00后')
错误原因:input()返回的数据类型是str,str不能直接和整数比较,必须先把str转换成整数。
改为:
s = input('birth: ')
birth = int(s)
if birth < 2000:
print('00前')
else:
print('00后')
循环
for
for x in …循环:把每个元素代入变量x,然后执行缩进块的语句。
Python提供一个range()函数,可以生成一个整数序列,再通过list()函数可以转换为list。例如:
print(list(range(11)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
while
只要条件满足,就不断循环,条件不满足时退出循环
L = ['Bart', 'Lisa', 'Adam']
n = 0
while n <3:
print("hello,",L[n])
n = n+1
hello, Bart
hello, Lisa
hello, Adam
或者
L = ['Bart', 'Lisa', 'Adam']
n = 0
while n <3:
print("hello,%s"%L[n])
n = n+1
hello,Bart
hello,Lisa
hello,Adam
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
跳过当前的这次循环,直接开始下一次循环
break语句可以在循环过程中直接退出循环,而continue语句可以提前结束本轮循环,并直接开始下一轮循环。这两个语句通常都必须配合if语句使用。
不要滥用break和continue语句
如果程序进入死循环,可以用Ctrl+C退出程序
使用dict和set
dict
dict:字典
例如:
d = {'a':10,'b':20,'c':30}
print(d['b'])
20
添加或者指定数据`
d = {'a':10,'b':20,'c':30}
d['d']=40
print(d['d'])
40
若多次执行,则后面会把前面的数据覆盖掉
要避免数据不存在的错误,有两种办法
(1)通过in判断数据是否存在
d = {'a':10,'b':20,'c':30}
d['d']=40
print('e' in d)
False
(2)通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:
d = {'a':10,'b':20,'c':30}
d['d']=40
print(d.get('e'))
print(d.get('e',2))
None
2
用pop(key)方法,对应的value也会从dict中删除:
d = {'a':10,'b':20,'c':30}
d.pop('c')
print(d)
{'a': 10, 'b': 20}
set
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
d = set([1,2,3,4,5,1,2,3])
print(d)
{1, 2, 3, 4, 5}
添加:
通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果
d = set([1,2,3,4,5,1,2,3])
d.add(4)
print(d)
{1, 2, 3, 4, 5}
删除:
通过remove(key)方法可以删除元素
d = set([1,2,3,4,5,1,2,3])
d.remove(4)
print(d)
{1, 2, 3, 5}
交集、并集等操作:
d = set([1,2,3,4,1])
m = set([2,3,5])
print(d&m)
print(d|m)
{2, 3}
{1, 2, 3, 4, 5}
可变对象:
排序:
d = ['r','a','c','b']
d.sort()
print(d)
['a', 'b', 'c', 'r']
不可变对象:
d = "abc"
print(d.replace('b','B'))
print(d)
aBc
abc