【心灵鸡汤】
推荐书籍:《三体》《百年孤独》《硅谷钢铁侠》

【Tips && Review】

1. vim中,tab键就是一个tab键,一个tab不是4个空格,会比4个空格要长,所以执行程序时会报错。所以如果在linux中编写代码,不要用tab。

2. 格式化,如果单行,可以"" or  '' 如果多行,用''' ''' or """ """

3. python 没有常量的概念,代表常量要通常要大写, 例如: MYSQL_CONNECTION = '192.168.1.23'

4. 能直接import的就是标准库,python自带100多个。
   使用三方库,下载安装方式(pip或者源码),然后导入即可。下载源可修改成国内镜像源:豆瓣, linux下修改配置文件即可。

5. 全局三方库存放位置:site-packages目录   or  dist-packages目录 (可用sys.path查看)

6. python3: pyc文件会默认放到__pycache__目录下
   python是先编译后解释,实际是将pyc交给解释器。
   手动执行一个py文件,不会生成pyc,除非是执行另一个程序去调用这个py文件,才会生成pyc。
   如果py文件有改动,先会判断py和对应的pyc的时间是否一致,如果py改动了,那py文件修改时间也会是新的,这时就会重新编译。

7. 退出程序
   exit() 
   或 
   exit('Bye!')  #退出时打印字符串
   或
   sys.exit()  #前提是import sys

8. user = 'hexu'
   passwd = '123456'
   ==> 可以写成: user,passwd = 'hexu','123456'    # 由这个引出列表的概念

9. 数据类型
   包括:数字、布尔值、字符串、列表、元组、字典
   查看类型:type()
   (1)数字
       整型:int
       浮点型:float
       长整型:long

   (2)布尔值(用作判断)
       True是1
       False是2
(3)元组(只读)
# 定义一个元组
read = ('AAA','BBB','CCC','AAA')

# 打印
print(read)
==> ('AAA', 'BBB', 'CCC', 'AAA')

# 计数
print(read.count('AAA'))
==> 2

# 找索引,有重复的数据时,只能找到重复数据的第一个索引
print(read.index('AAA'))
==> 0
【重点介绍列表、字符串、字典的使用】

1. 列表
   python列表:解决一个变量中存多个值。python叫列表,其它语言叫数组,列表中每一个值叫做一个元素,列表中也可以放变量,可以放元组。
   列表中的元素开始都是从0开始,取最后一个是[-1],这叫下标。
   切片:顾首不顾尾,不能反着取值,也就是不能取倒数第一 【至】 倒数第5这类的
   列表中也可以放列表、元组
# 列表基本格式
team = ['aaa','bbb','ccc','ddd','eee','fff','ggg','hhh']
print(team)
==> ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg', 'hhh']

# 4-5列插入'alex','wupeiqi'
team.insert(3,'alex')
team.insert(4,'wupeiqi')
print(team)
==> ['aaa', 'bbb', 'ccc', 'alex', 'wupeiqi', 'ddd', 'eee', 'fff', 'ggg', 'hhh']

# 取出第3-6人
print(team[2:6])
==> ['ccc', 'alex', 'wupeiqi', 'ddd']

# 取前五人
print(team[:5])
==> ['aaa', 'bbb', 'ccc', 'alex', 'wupeiqi']

# 取第5到最后的人
print(team[4:])
==> ['wupeiqi', 'ddd', 'eee', 'fff', 'ggg', 'hhh']

# 取后4人
print(team[-4:])
==> ['eee', 'fff', 'ggg', 'hhh']

# 删除第7个人
team.remove(team[6])
print(team)
==> ['aaa', 'bbb', 'ccc', 'alex', 'wupeiqi', 'ddd', 'fff', 'ggg', 'hhh']

# 删除新加入的两个人:'alex','wupeiqi'
del team[3:5]  # del 可以删除任何数据
print(team)
==> ['aaa', 'bbb', 'ccc', 'ddd', 'fff', 'ggg', 'hhh']

# 修改元素
team[0] = 'aaa-leader'
print(team)
==> ['aaa-leader', 'bbb', 'ccc', 'ddd', 'fff', 'ggg', 'hhh']

# 隔人打印=迈2步
print(team[0::2])  # 也可以写成 print(team[::2])
==> ['aaa-leader', 'ccc', 'fff', 'hhh']

# 取完一次还可继续取
>>> name = ['hexu','liuwei']
>>> name[0][0]
'h'

# index只会显示找到的第一个索引
>>> name = ['hexu','liuwei','hexu']
>>> name.index('hexu')
0

# 排序:排序字母从a-z,数字从小到大 注意:py3中,sort不会将数字和字符串同时排序,py2可以
name = ['c','d','a','e','b']
name.sort()
print(name)
==> ['a', 'b', 'c', 'd', 'e']

# 列表追加
name = ['c','d','a','e','b']
name1 = ('xxx','yyy','zzz')
name.extend(name1)
print(name)
>>> ['c', 'd', 'a', 'e', 'b', 'xxx', 'yyy', 'zzz']

# pop() 默认是将最后一个元素删除
list = [1,2,3,4,5,6]
list.pop()
print(list)
==> [1, 2, 3, 4, 5]

# 删除第四个元素
list = [1,2,3,4,5,6]
list.pop(3)
print(list)
==> [1, 2, 3, 5, 6]

# 反转
list = [1,2,3,4,5,6]
list.reverse()
print(list)
==> [6, 5, 4, 3, 2, 1]

# 操作列表的函数
list = [1,2,3,4,5,6]
print(len(list)) # 打印列表的长度
==> 6

print(max(list)) # 打印列表中最大的值
==> 6

print(min(list)) # 打印列表中最小的值
==> 1

列表中增加一个列表,name.copy()的话,如果把列表中的列表更新,两边都会同时更新 ,因为内存地址是一致的
完全cpoy:
import copy # 三方库
copy.copy() # 浅copy
copy.deepcopy()  # 深copy  内存数据也copy过来了

 

 

2. 字符串

#定义字符串
string = 'Hello World!'

# 打印字符串
print(string)
==> Hello World!

# 查看字符串长度,空格也算一个字符
print(len(string))
==> 12
# 字符类型
print(type(string))
==> <class 'str'>

# strip() 去掉字符串结尾的空格,可以用作判断输入的内容结尾有空格时,也会识别
string = 'Hello World!  '
print(string.strip())
==> Hello World!

# 分割 split()
name = 'hexu,xuelu'
name1 = name.split(',')  # 以逗号进行分隔
print(name1)             # 输出的结果是列表
==> ['hexu', 'xuelu']
# 合并 join()
print('|'.join(name1)) # 用'|' 将刚才生成的列表合并
==> hexu|xuelu

# 判断字符串有没有空格,有返回True,没有则返回False
msg = 'I am a Man!'
print('' in msg)
==> True

# 变量赋值的两种形式
_first_ = 'My name is {name},{age} years old'
second = _first_.format(name = 'Hexu', age = 28)
print(second)
==> My name is Hexu,28 years old

_first_ = 'My name is {0},{1} years old'
second = _first_.format('Xuelu', 26)
print(second)
==> My name is Xuelu,26 years old
# 切片
msg = 'ABCDEFGHIJKLMN'
print(msg[3:7:2]) # 先取出第4-7的字符:DEFG     最后的2表示步长,隔2取字符
==> DF

# 以输出的字符为中心,平均分配40个‘#’,也就是一边一半
print(string.center(40, '#'))
==> ##############Hello World!##############

# 判断字符串中有没有某些内容
string = 'This is a new begining!'
if string.find('hero'):
    print(string)
else:
    print('没有找到你输入的内容')
==> This is a new begining!   # 字符串里没有‘hero’,为什么也打印出来了?

# isdigit表示判断age的值是不是数字类型:
age = '28'
if age.isdigit():
    print('True')
else:
    print('False')
# 规定用户必须输入数字类型时,可使用isdigit
age = input('年龄: ')
if age.isdigit():
    age = int(age)
    print('你输入的年龄是:',age)
else:
    print('输入有误,必须是数字,请重新输入.')

# 判断有无特殊字符,有返回False,没有则返回True
name = 'Hero#CC'
print(name.isalnum())
==> False

# startswith endswith 判断是以什么字符开头,匹配到返回True,匹配不到返回False
car = 'My car is a CC!'
print(car.startswith('M'))
==> True
print(car.startswith('My'))
==> True
print(car.endswith('Passat'))
==> False

# 大小写字符转换
color = 'blue,red,balck,Yellow'

print(color.upper()) # 全部转成大写
==> BLUE,RED,BALCK,YELLOW

print(color.lower()) # 全部转成小写
==> blue,red,balck,yellow


print(color.capitalize()) # 首个字母大写
==> Blue,red,balck,Yellow

 

3. 字典

没有下标,通过key取值
 打印出的字典是无序的
 几个需要注意使用的函数:
 items 转换成列表了,数据量大的时候不要这么做,很耗时
 setdefault 如果存在就返回 如果不存在,就默认添加k,v值
 popitem 随机删,不要用
 fromkeys 不要用
id_db = {
    1111:{
        'name':'Hexu',
        'age':28,
        'addr':'Beijing'
    },
    2222:{
        'name':'Xuelu',
        'age':26,
        'addr':'Shahe'
    }
}

# 字典是无序的
print(id_db)  
==> {2222: {'name': 'Xuelu', 'addr': 'Shahe', 'age': 26}, 1111: {'name': 'Hexu', 'addr': 'Beijing', 'age': 28}}

# 通过key取value
print(id_db[1111]) 
==> {'name': 'Hexu', 'addr': 'Beijing', 'age': 28}

# 另一种通过key取value的方式,get取值不报错
v = id_db.get(1111)
print(v)
==> {'name': 'Hexu', 'addr': 'Beijing', 'age': 28}

# 修改key名字
id_db[1111]['name'] = 'new-Hexu'
print(id_db)
==> {2222: {'name': 'Xuelu', 'addr': 'Shahe', 'age': 26}, 1111: {'name': 'new-Hexu', 'addr': 'Beijing', 'age': 28}}

# 添加key-value,无序的
id_db[2222]['qq_num'] = '664076968'
print(id_db)
==> {2222: {'name': 'Xuelu', 'addr': 'Shahe', 'qq_num': '664076968', 'age': 26}, 1111: {'name': 'new-Hexu', 'addr': 'Beijing', 'age': 28}}

# 删除key,对应的值也会跟着删除
id_db[2222].pop('addr')
print(id_db)
==> {2222: {'name': 'Xuelu', 'qq_num': '664076968', 'age': 26}, 1111: {'name': 'new-Hexu', 'addr': 'Beijing', 'age': 28}}

# 将字典test加入到id_db字典中
test = {
    3333:{
        'name':'bbbb    '
    }
}
id_db.update(test)   
print(id_db)
==> {3333: {'name': 'bbbb'}, 2222: {'name': 'Xuelu', 'qq_num': '664076968', 'age': 26}, 1111: {'name': 'new-Hexu', 'addr': 'Beijing', 'age': 28}}

# 取出所有value,输出的结果是以列表的形式展现
print(id_db.values())  
==> dict_values([{'name': 'bbbb'}, {'name': 'Xuelu', 'qq_num': '664076968', 'age': 26}, {'name': 'new-Hexu', 'addr': 'Beijing', 'age': 28}])

# 取出所有key,输出的结果是以列表的形式展现
print(id_db.keys())  
==> dict_keys([3333, 2222, 1111])

# 判断某个key是否在整个字典中,
print(1111 in id_db)
==> True