1. int ==> 整数. 主要⽤用来进⾏行行数学运算

  2. str ==> 字符串串, 可以保存少量量数据并进⾏行行相应的操作

  3. bool==>判断真假, True, False

  4. list==> 存储⼤大量量数据.⽤用[ ]表⽰示

  5. tuple=> 元组, 不可以发⽣生改变 ⽤用( )表⽰示

  6. dict==>字典,保存键值对,⼀一样可以保存⼤大量量数据

  7. set==> 集合, 保存⼤大量量数据. 不可以重复. 其实就是不保存value的dict

三. 布尔值(bool)
取值只有True, False. bool值没有操作.

转换问题: str => int int => str

int => bool bool=>int

str => bool bool => str

int(str) str(int)

bool(int). 0是False 非0是True int(bool) True是1, False是0

bool(str) 空字符串串是False, 不空是True str(bool) 把bool值转换成相应的"值"

四. 字符串串(str)
把字符连成串串. 在python中⽤用', ", ''', """引起来的内容被称为字符串串.

    行了噩梦开始了

4.1 切片和索引
1. 索引.索引就是下标.切记,下标从0开始

s1 = "python最⽜牛B"

print(s1[0])
print(s1[1])

print(s1[-1])

print(s1[-2])

2. 切片,我们可以使⽤用下标来截取部分字符串串的内容 语法: str[start: end]

规则: 顾头不顾腚, 从start开始截取. 截取到end位置. 但不包括end

print(s2[0:3]) 从0到3不包括3  

print(s2[4:])如果想直接最后直接最后

print(s2[-1:-5])从负一到负五 默认都是往从左往右所以怎么也不能这么数 一会可以有什么步数什么的 

print(s2[1:5:2])     从1到5隔两个一取,3就是3个一取,负2就反着走从右往左走也隔两个一取,正负决定取向方向,数决定几个一取

4.2 字符串串的相关操作⽅方法                      字符串特别牛逼,永不可变,任何对字符串的操作都没卵用,都要再打一个字符串

s1=“我才是真正的彭于晏”

s1.capitalize ()  这样的话什么卵用没有, capitalize 这是大小写转换  这老师不靠谱是真不行啊,妈的实践验证,这是首字母小写变成大写   大写不变,后面的所有大写变小写 小写不变  这个猜测是针对人名的吧

ret=s1.lower()我仅有的一点英语知识,所有字母小写

ret=s1.upper()所有字幕大写

ret=s1.sawpcase()这个是真正的大小写转换

ret = s1.casefold() 这个和lower 是一样的 就是这个牛逼一点说是什么东欧字母都支持 但是是不长用的

s3 = "alex eggon,taibai*yinwang_麻花藤

ret=s3。title()             

Alex Eggon,Taibai*Yinwang_麻花藤                            所有被特殊字符隔开的首字母都大写

s4 = "alex⽼老老男孩wusir "                             # Alex⽼老老男孩Wusir          

print(s4.title())            这个中文也算特殊字符

2 切来切去

s5 = "周杰伦"
ret = s5.center(10, "*")     拉长10个字符吧原字符改到里面  算原字符10个字符

print(ret)

改变tab字符长度那个不管了

s7 = " alex wusi r”  

ret = s7.strip(   )              这个是去掉左右两端的括号

print(ret)

lstrip   左边的空格        rstrip     右边的空格

s7 = "abcdefgabc"

print(s7.strip("abc"))         没有内容默认去空格  有内容去内容

s8 = "sylar_alex_taibai_wusir_eggon"
ret = s8.replace('alex', '⾦金金⻆角⼤大王')             这个是替换  一定要记得元字符串不可改

 ret = s8.replace('i', 'SB', 2 )           老套路 步长把i换成sb换2次

s9 = "alex,wusir,sylar,taibai,eggon"

lst = s9.split(",")         字符串切割根据,切,括号里是啥根据啥切
print(lst)

s12 = "我叫%s, 今年年%d岁了了, 我喜欢%s" % ('sylar', 18, '周杰伦') # 之前的写法print(s12)
s12 = "我叫{}, 今年年{}岁了了, 我喜欢{}".format("周杰伦", 28, "周润发") # 按位置格式化print(s12)
s12 = "我叫{0}, 今年年{2}岁了了, 我喜欢{1}".format("周杰伦", "周润发", 28) # 指定位置print(s12)
s12 = "我叫{name}, 今年年{age}岁了了, 我喜欢{singer}".format(name="周杰伦", singer="周润 发", age=28)

             格式化输出plus 终于有点用了

s13 = "我叫sylar, 我喜欢python, java, c等编程语⾔言."

ret1 = s13.startswith("sylar")

print(ret1)                         这是判断是不是括号内的开头          endwith 是否以括号内结尾

ret7 = s13.count("a")
print(ret7)             count 是查找括号里的 出现的 次数
ret5 = s13.find("sylar")
print(ret5)            find 是查找括号里的东西所在位置
ret6 = s13.find("tory")
print(ret6)            find   查找    找不到返回-1

ret7 = s13.find("a", 8, 22) # 切⽚片找

print(ret7)                   查找8到22  查找a在哪

ret8 = s13.index("sylar")                                    #  求索引位置. 注意. 如果找不不到索引. 程序会报错

print(ret8)                     解释的很明白了,索引是0开始的  和后面的len不一样

s14 = "123.16"
s15 = "abc"
s16 = "_abc!@"

print(s14.isalnum())
print(s15.isalnum())
print(s16.isalnum())                                是否由字母和数字组成的

print(s14.isalpha())
print(s15.isalpha())
print(s16.isalpha())                                是否由字母组成

print(s14.isdigit())
print(s14.isdecimal())
print(s14.isnumeric()) # 这个⽐比较⽜牛B. 中⽂文都识别.print(s15.isdigit())

print(s16.isdigit())                                是否由数字组成,不包括小数点

6. 计算字符串串的⻓长度

s18 = "我是你的眼, 我也是a"
ret = len(s18) # 计算字符串串的⻓长度print(ret)

注意: len()是python的内置函数. 所以访问⽅方式也不⼀一样. 你就记着len()和print()⼀一样就⾏行行 了了

  这尼玛哪一样了?   也不也是print打印出来吗?          就记得len是求长度就完了  也好使,而且不是从0开始数的

7. 迭代

我们可以使⽤用for循环来便便利利(获取)字符串串中的每⼀一个字符 语法:

for 变量量 in 可迭代对象:

pass
可迭代对象: 可以一个⼀个往外取值的对象                           就是固定公式你肿么破,至于这个可迭代对象,我还搞不清楚 现在学的 字符串 数字元组啊,什么的都是 可迭代吧。

in有两种⽤用法:
1. 在for中. 是把每⼀一个元素获取到赋值给前⾯面的变量量. 2. 不不在for中. 判断xxx是否出现在str中.

 自己试了一下第二个In感觉用处不大

# 练习, 计算在字符串串"I am sylar, I'm 14 years old, I have 2 dogs!"s20 = "I am sylar, I'm 14 years old, I have 2 dogs!"
count = 0
for c in s20:

    if c.isdigit():
        count = count + 1
print(count)       第17个是数字,一直打0到第17开始是1一直都是1     就是查找数字在s20里出现的次数      
这样的话第三天的完了,let's,go

第四天的也没什么特难的,都是英语难

⼀一. 列列表
1.1 列列表的介绍

列列表是python的基础数据类型之⼀一 ,其他编程语⾔言也有类似的数据类型. 比如JS中的数 组, java中的数组等等. 它是以[ ]括起来, 每个元素⽤用' , '隔开⽽而且可以存放各种数据类型:

lst = [1, '哈哈', "吼吼", [1,8,0,"百度"], ("我","叫", "元", "组"), "abc", {"我 叫":"dict字典"},{"我叫集合","集合"}]


列列表相比于字符串串. 不仅可以存放不同的数据类型. ⽽而且可以存放⼤大量量的数据. 32位python可以存放: 536870912个元素, 64位可以存放: 1152921504606846975个元素.⽽而且列列 表是有序的(按照你保存的顺序),有索引, 可以切⽚片⽅方便便取值.


2.2 列列表的索引和切片 列列表和字符串串⼀一样也拥有索引:

lst = ["麻花藤", "王剑林林", "⻢马芸", "周鸿医", "向华强"]

print(lst[0]) # 获取第⼀一个元素
print(lst[1])
print(lst[2])

lst[3] = "流动强" # 注意. 列列表是可以发⽣生改变的. 这⾥里里和字符串串不不⼀一样

print(lst) # ['麻花藤', '王剑林林', '⻢马芸', '流动强', '向华强']                这个修改比较简单

s0 = "向华强"
s0[1] = "美" # TypeError: 'str' object does not support item assignment 不不 允许改变
print(s0)                                            这边的话是个坑,这个的话 s0是字符串,字符串不可改


lst = ["麻花藤", "王剑林林", "⻢马芸", "周鸿医", "向华强"]

print(lst[0:3]) # ['麻花藤', '王剑林林', '⻢马芸']

print(lst[:3]) # ['麻花藤', '王剑林林', '⻢马芸']


print(lst[1::2])
print(lst[2::-1])
print(lst[-1:-3:-2])

# ['王剑林林', '周鸿医'] 也有步⻓长
# ['⻢马芸', '王剑林林', '麻花藤'] 也可以倒着取

# 倒着带步⻓长                        这个和昨天的序列一样,简单 序列加步长

⼆二. 列列表的增删改查
1. 增, 注意, list和str是不⼀一样的. lst可以发⽣生改变. 所以直接就在原来的对象上进⾏行行了了操作

lst = ["麻花藤", "林林俊杰", "周润发", "周芷若"]print(lst)
lst.append("wusir")
print(lst)            append在这组序列的最后面加一个

lst = ["麻花藤", "张德忠", "孔德福"]
lst.insert(1, "刘德华")                   # 在1的位置插⼊入刘德华. 原来的元素向后移动⼀位   可选序列       和上边的比应该是一个可以选序列一个不可选,

print(lst)             

lst = ["王志⽂文", "张⼀一⼭山", "苦海海⽆无涯"]

lst.extend(["麻花藤", "麻花不不疼"])

print(lst)                                   迭代添加就是智能添,把里面的元素一个个添加,而append就是无脑在后面加一个

2. 删除
pop, remove, clear, del       只有这几种  后文一点一点讲解用法


lst = ["麻花藤", "王剑林林", "李李嘉诚", "王富贵"]

print(lst)
deleted = lst.pop() # 删除最后⼀一个           不选数默认最后一个

print("被删除的", deleted)                       这个pop括号里选的啥(序列)就删除哪个元素,              

print(lst)                          

el = lst.pop(2) # 删除2号元素

print(el)            
print(lst)

lst.remove("麻花藤")                   # 删除指定元素        只能指定元素不能写序列

lst.remove("哈哈")                      # 删除不不存在的元素会报错

print(lst)

lst.clear()                 清空lst    全没

del lst[1:3]               del lst【1】  只删除一个也行

print(lst)        删除序列1到2 3 顾头不顾尾

3. 修改 索引切片修改

lst = ["太⽩白", "太⿊黑", "五⾊色", "银王", "⽇日天"]

lst[1] = "太污" # 把1号元素修改成太污

print(lst)

lst[1:4:2] = ["麻花藤", "哇靠"] # 切片修改也OK. 如果步⻓不是1, 要注意. 元素的个 数    这个也和之前的一样  

rint(lst)

lst[1:4] = ["李李嘉诚个⻳龟⼉儿⼦子"] # 如果切⽚没有步长或者步长是1. 则不⽤关心个数   就是吧1到3所有的都换一遍

print(lst)

4. 查询,列列表是⼀一个可迭代对象,所以可以进⾏行行for循环

只有这一种查询方式

for el in lst:
    print(el)      只有这一种查询方式  使用方法 把想查询的东西 在下面再写一行
for el in lst:
  if el== “想查询的”
然后这行再写打印它啊 加减啊 首字母大小写啊 判断是不是什么开头啊 这一般不用了 你都知道你要输入的,也可能用户输入的

5. 其他操作

lst = ["太⽩白", "太⿊黑", "五⾊色", "银王", "⽇日天", "太⽩白"]

c = lst.count("太⽩白") # 查询太⽩白出现的次数          这个查询也没什么改变

print(c)

lst = [1, 11, 22, 2]
lst.sort() # 排序. 默认升序

print(lst)
lst.sort(reverse=True) # 降序

 print(lst)              升序降序都要打的reverse   默认是f的  你要想倒序就要改成t

lst = ["太⽩白", "太⿊黑", "五⾊色", "银王", "⽇日天", "太⽩白"]

print(lst)
lst.reverse()           180 度 倒序
print(lst)

l = len(lst) # 列列表的⻓长度print(l)           这个排序永远没有0的 就是1正常不反人类数的

三. 列列表的嵌套 采⽤用降维操作.

⼀一层⼀一层的看就好.

lst = [1, "太⽩白", "wusir", ["⻢马⻁虎疼", ["可⼝口可乐"], "王剑林林"]]# 找到wusir

print(lst[2])
# 找到太⽩白和wusir

print(lst[1:3])# 找到太⽩白的⽩白字

print(lst[1][1])

# 将wusir拿到. 然后⾸首字⺟母⼤大写. 再扔回去

s = lst[2]
s = s.capitalize()             这都没什么难的,就是把之前的记住这都好用
lst[2] = s

print(lst)
# 简写
lst[2] = lst[2].capitalize()print(lst)       序列可以直接更改  所以简单点

# 把太⽩白换成太⿊黑
lst[1] = lst[1].replace("⽩白", "⿊黑")   替换单词一样  

print(lst)

# 把⻢马⻁虎疼换成⻢马化疼
lst[3][0] = lst[3][0].replace("⻁虎", "化")     当替换列表中的东西时这么用 多维吗  将为操作      

print(lst[3][0])

lst[3][1].append("雪碧")print(lst)     这条有点多余了

四. 元组和元组嵌套
元组: 俗称不可变的列列表.⼜又被成为只读列列表, 元组也是python的基本数据类型之⼀一, ⽤用⼩小括

号括起来, ⾥里里⾯面可以放任何数据类型的数据, 查询可以. 循环也可以. 切片也可以. 但就是不能 改.

tu = (1, "太⽩白", "李李⽩白", "太⿊黑", "怎么⿊黑")

print(tu)

print(tu[0])
print(tu[2])
print(tu[2:5]) # 切⽚片之后还是元组

# for循环遍历元组

for el in tu:

print(el)            自从学了for循环用的太多了这个早记得了

# 尝试修改元组
# tu[1] = "⻢马⻁虎疼" # 报错 'tuple' object does not support item assignment

tu = (1, "哈哈", [], "呵呵")
# tu[2] = ["fdsaf"] # 这么改不不⾏行行

tu[2].append("麻花藤") # 可以改了了. 没报错

tu[2].append("王剑林林")
print(tu)                       元素不可变这里指的是元组里的元素不可变,再里面的子元素可变 例如列表    子元素如果是元素还是不可变,再循环下去没试

元组中如果只有⼀一个元素. ⼀一定要添加⼀一个逗号, 否则就不是元组

tu = (1,)
print(type(tu))

元组也有count(), index(), len()等⽅方法. 可以⾃自⼰己测试使⽤用  

五. range
range可以帮我们获取到⼀一组数据. 通过for循环能够获取到这些数据.

for num in range(10):
    print(num)
for num in range(1, 10, 2):
    print(num)
for num in range(10, 1, -2):
    print(num)# 反着来, 和切⽚片⼀一样     这个range 和普通的for  变量 in  迭代对象,最大的区别就是 r一般对应数字假如1,2,3 打印出的是每一行一个数 1 2  3  而第二个for 是每一次都把123打出来了

⼀一. 字典的简单介绍
字典(dict)是python中唯⼀一的⼀一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是

唯⼀一的. 在保存的时候, 根据key来计算出⼀一个内存地址. 然后将key-value保存在这个地址中.这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key'必须是可hash的,如果你搞不懂什什么是可哈希, 暂时可以这样记, 可以改变的都是不可哈希的,那么可哈希就意味着不可变. 这个是为了了能准确的计算内存地址⽽而规定的.

已知的可哈希(不可变)的数据类型: int, str, tuple, bool不可哈希(可变)的数据类型: list, dict, set

语法 :
{key1: value1, key2: value2....}

注意: key必须是不可变(可哈希)的. value没有要求.可以保存任意类型的数据

dic = {123: 456, True: 999, "id": 1, "name": 'sylar', "age": 18, "stu": ['帅 哥', '美⼥女女'], (1, 2, 3): '麻花藤'}
print(dic[123])
print(dic[True])
print(dic['id'])
print(dic['stu'])
print(dic[(1, 2, 3)])
# 不不合法
# dic = {[1, 2, 3]: '周杰伦'}
# dic = {{1: 2}: "哈哈哈"}
dic = {{1, 2, 3}: '呵呵呵'}

# list是可变的. 不不能作为key # dict是可变的. 不不能作为key # set是可变的, 不不能作为key

dict保存的数据不是按照我们添加进去的顺序保存的。是按照hash表的顺序保存的。而hash表不是连续的,所以不能进行切片工作,它只能通过key来获取dict中的数据

二. 字典的增删改查和其他相关操作

1. 增加

dic = {}
dic['name'] = '周润发' # 如果dict中没有出现这个key, 就会新增⼀一个key-value的组 合进dict
dic['age'] = 18                       强行添加没啥说的 刚才翻了一下上边那么多 没研究明白  记得之前也有强行添加类的啊
print(dic)

# 如果dict中没有出现过这个key-value. 可以通过setdefault设置默认值

dic.setdefault('李李嘉诚') # 也可以往⾥里里⾯面设置值.     后面没设置值显示值为None
dic.setdefault("李李嘉诚", "房地产") # 如果dict中已经存在了了. 那么setdefault将不不会 起作⽤用 

print(dic)

2. 删除

ret = dic.pop("jay")           pop和前文一样bj4
print(ret)
del dic["jay"]                del同上
print(dic)

# 随机删除.
ret = dic.popitem()                          pycharm也不知道该说是修复了,还是说优化了,还是说bug   只删除最后一个了  不是随机删除了

# 清空字典中的所有内容dic.clear()            这个clear  这很干净

3. 修改

dic = {"id": 123, "name": 'sylar', "age": 18}
dic1 = {"id": 456, "name": "麻花藤", "ok": "wtf"}
dic.update(dic1) # 把dic1中的内容更更新到dic中. 如果key重名. 则修改替换. 如果不不存 在key, 则新增.
print(dic)
print(dic1)                      dic打印出来的是全的,dic1就是个弟弟 端茶倒水的

4. 查询 查询⼀一般⽤用key来查找具体的数据.

print(dic['name'])               
# print(dic['sylar']) # 报错          如果有这个key直接打出来了  没有这个key就报错

prit(dic.get("ok"))

print(dic.get("sylar")) # None                     这个最大的优点就是 如果没有这个不会报错会出None

print(dic.get("sylar", "⽜牛B")) # ⽜牛B           这个就是如果没有就输出自己打的value2值

5. 其他相关操作

dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科⽐比"}

print(dic.keys()) # dict_keys(['id', 'name', 'age', 'ok']) 不不⽤用管它是什什么.当 成list来⽤用就⾏行行
for key in dic.keys():   就是list 了  无脑背吧

print(key)

print(dic.values()) # dict_values([123, 'sylar', 18, '科⽐比']) ⼀一样. 也当list来⽤用
for value in dic.values():    同上

    print(value)

print(dic.items()) # dict_items([('id', 123), ('name', 'sylar'), ('age', 18), ('ok', '科⽐比')]) 这个东⻄西也是list. 只不不过list中装的是tuple   把list里面全变成tuple了
for key, value in dic.items(): # ?? 这个是解构                

    print(key, value)

# 解构
a, b = 1, 2print(a, b)

(c, d) = 3, 4
print(c, d)
e, f = [1, 2, 3]
print(e, f)

# 解构的时候注意数量量必须匹配

1. is 和 == 的区别

         #小数据池

            # 数字小数据池的范围  -5 ~ 256

            # 字符串中如果有特殊字符他们的内存地址就不一样

            # 字符串中单个*20以内他们的内存地址一样,单个*21以上内存地址不一致

           # 黑框框 == 终端

 

            # a = 'alex@'

            # a1 = 'alex@'

            # print(a is a1)    # Fales

 

            # n = 5//2

            # n1 = 2

            # print(n is n1)    #True

 

            # a = 'a'*21

            # b = 'a'*21

            # print(a is b)        False

 

           # a = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'

            # b = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'

            # print(a is b)          Ture

 

           # n = -6

            # n1 = -6

            # print(n is n1)  #False

 

            # n = -5

            # n1 = -5

            # print(n is n1)    #True

 

 

            # n = 257

            # n1 = 257

            # print(n is n1)     #True

 

 

            #总结:

 

                # == 比较   比较的俩边的值

 

                # is   比较   比较的是内存地址   id()

 

2. 编码和解码

 

         ascii 码:

 

               不支持  中文

 

               支持    英文  数字  符号

 

               8位      一个字节

 

         gbk码  国标:

 

               支持  中文,英文,数字,符号

 

               英文  16位   二个字节

 

               中文  16位   二个字节

 

 

         unicode  万国码

 

                支持  中文,英文,数字,符号

 

                英文  32 位  四个字节

 

                中文  32位   四个字节

 

 

         utf-8   长度可变的万国码 最少用8位

 

                英文   8位    一个字节

                中文   24位   三个字节

 

 

         Python3中 程序运行阶段 使用的是unicode   显示所有的内容

 

         bytes类型

 

            传输和存储都是使用bytes

 

         pycharm 存储的时候默认是使用utf-8

总结:

 

    is 和 == 区别

 

        is  比较内存地址

 

                id()   ---- 获取内存地址

 

                小数据池:

 

                    数字的小数据池范围是 -5 ~ 256

 

                    字符串:

 

                        字符串中不能包含特殊符号   + - * / @ 等等

                        字符串单个字符*20以内内存地址都是一样的,单个字符*21以上内存地址不一致

 

        注意: pycharm是个坑, 一个py文件中所有相同的字符串 一般都是使用一样的内存地址

 

        ==  比较俩边的值

 

    编码和解码

 

        encode(编码方式)     ---- 拿到明文编码后对应的字节

 

        decode(编码方式)     -----将编码后的字节解码成对应的明文

 

 

 

    注意: 用什么进行编码就要什么进行解码  不然后会懵逼!