数据类型

  • 整数
  • 浮点数
  • 字符串
  • 布尔值
  • 空值 None
  • 变量
  • 常量

字符串和编码

联系:为了把所有语言统一到一套编码里面,且不出现乱码,便出现了编码(ASCII、Unicode)。

  • ASCII:一个字节
  • Unicode:通常两个字节

新的问题:乱码虽然消失,但是文本全为英文,并且Unicode编码比ASCII编码多一倍存储空间,存储于传输不划算。

  • UTF-8:把Unicode转化为可变长编,根据数字大小编码成1~6个字节。

list和tuple

  • list:是一种有序数据类型,可以随时添加和删除其中元素。
  1. 用len()来获取列表元素个数
  2. 用pop(i)删除指定位置的元素
  3. 用直接赋值法替换对应元素
classmate[1] = 'sarah'
  • tuple(元组):和list类似,但是一旦初始化就不能修改,让代码更安全。tuple的不变性在于每个元素的指向是不变的。
#只有一个元素的tuple定义时必须加,消除歧义:
>>>t = (1,)
>>>t
(1,)

条件判断

# if 语句实现
age = 20
if age >= 18:
   print('your age is', age)
   print('adult')
   
   
# if else 语句
age = 3
if age >= 18:
   print('your age is',age)
   print('adult')
else:
   print('your age is',age)
   print('tennager')
   
   
# elif 是 else if 的缩写
if <条件判断1>:
  <执行1>
elif <条件判断2>:
  <执行2>
elif <条件判断3>:
  <执行3>
else:
  <执行4>

if语句的特点 : 是从上往下判断,如果某个判断上是TRUE,则把该判断对应的语句执行后,就忽略掉剩下的elif 和 else

关于input() : 使用input()语句时,注意其返回数据类型是str,str不能和整数比较,必须先把str换成整数,Python内部提供了int()函数来完成这件事


循环语句

Python的循环有两种:

  • for...in循环,以此把list或tuple中的每个元素迭代出来
names = ['Michales','Bob','Tracy']
for name in names:
    print(name)

如果想计算1—10的整数和,可以用一个sum变量做累加

sum = 0
for x in [1,2,3,4,5,6,7,8,9,10]
    sum = sum + x
print(sum)

如果要计算1-100的整数之和,从1到100有点困难,Python中有一个range()函数,可以生产整数序列,在通过list()函数可以转换为list。比如range(5)生成的序列是从0到小于5的整数:

list(range(5))
[0, 1, 2, 3, 4]
  • while循环:只要条件满足,就不断循环,条件不满足时退出循环。
    比如计算100以内的所有奇数之和,可以用while实现
sum = 0
n = 99
while n > 0:
    sum = sum + n
    n = n - 2
print(sum)

在循环内部变量n不断自减,直到变为-1,不再满足while条件,循环退出。

  • break
    在循环中,break语句可以提前退出循环
n = 1
while n <= 100:
    print(n)
    n = n + 1
print('END')

如果要提前结束循环,可以用break语句:

n = 1
while n<= 100:
    if n > 10:
       break #break语句会结束当前循环
    print(n)
    n = n + 1
print('END')
  • 可见break的作用是提前结束循环

continue

  • 在循环过程中,也可以通过continue语句,跳过当前的这次循环,直接开始下一次循环。
n = 0
while n < 10:
    n = n + 1
    print(n)

上面的程序可以打印出1~10。但是,如果我们想只打印奇数,可以用continue语句跳过某些循环:

n = 0
while n < 10:
    n = n + 1
    if n % 2 == 0:
         continue #continue语句会直接继续下一轮循环,后续的print()语句不会执行
    print(n)

使用dict和set

dict

如果用list,查询名字对应的成绩时,需要两个list,但是使用dict实现只需要一个“名字”-“成绩”对照表。

d = {'Michael': 95, 'Bob':75, 'Treacy':85}
d['Michel']

dict 查找迅速的原因在于利用索引的方式找到所需元素(key-value)
一个key只会对应一个value,多个key放入value中,后面的值会把前面的值冲掉

>>> d['Jack'] = 90
>>> d['Jack']
90
>>> d['Jack'] = 88
>>> d['Jack'] 
88

当key不存在时,dict会报错
为了避免错误,可以通过in 判断key是否存在,或者用get()方法找到对应的value值

>>> 'Thomas' in d
False
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1

如果要删除key,用pop(key)方法,对应的value也会从dict中删除

>>> d.pop('Bob')
75
>>> d
{'Michael':95,'Tracy':85}

dict特点:

  1. 查找和插入速度极快,不会随着key增加而变慢;
  2. 需要占用大量的内存,内存浪费较多
  3. dict是用空间来换取时间的一种方法
    注:Python内部有个计算value位置的算法——哈希算法,为保证hash的正确性,key不能变。字符串、整数是不可变的,list是可变的。

set

set功能与dict类似,但是不存储value,由于key不能重复,在set中没有重复的key
在创建set之前,需要提供一个list输入集合:

>>> s = set([1,2,3])
>>> s
{1, 2, 3}

注:即使输入重复的数据,最后显示时不会有重复元素,会被自动过滤。
通过add(key)添加元素到set中,可以重复添加,但不会有效果:

>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}

通过remove(key)删除元素:

>>> s.remove(4)
>>> s
{1, 2, 3}

set 可以看成数学意义上的无序和无重复元素合计,可以对其进行交集、并集操作

>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}

注:set与dict区别在于没有对应存储的value,但是原理与dict一样

不可变对象

可变对象list:

>>> a = ['c', 'b', 'a']
>>> a.sort()
>>> a 
['a', 'b', 'c']

不可变对象str:

>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'