数据类型

常见的基本数据类型:
1. int 整数
2. bool 布尔. 判断. if while
3. str 字符串, 一般放小量的数据.
4. list 列表. 可以存放大量的数据
5. dict 字典, 以key:value的形式存储数据
6. set 集合(数学)
7. tuple 元组 不可变
  • int
  整数:可以 +、-、*、/、//、%、**运算
  bit_length() 一个数的二进制长度
  • bool
  类型转换
    字符串转换成整数 int(str)
    整数转换换字符串 str(int)
    结论: 想转化成xxx数据类型 xxx(目标)
    结论2: True => 1 False => 0
    结论3 , 可以当做False来用的数据: 0, "", [], (),{}, None 所有的空都是False
    所有的空的东西都是False
  • 字符串  字符:单一的文字符
      字符串:有序的字符序列
      字符串由' " ''' """ 括起来的内容叫字符串
      索引
        一排数字,反应第某个位置的字符 ,索引的下标从0开始,使用[]来获取数据
      切片:[start:end:step] 顾头不顾腚 最后一个取不到
          开始:结尾:步长
s = '刘德华很帅但是张国荣更'
print(s[2])
print(s[11])
print(s[-1]) # 倒数第一
print(s[-4]+s[-3]+s[-2])
View Code
  切片:[start:end:step]  顾头不顾腚 最后一个取不到
      开始:结尾:步长 step:步长.如果是+从左往右. 如果是-从右往左 每n个取1个
 1 s = '刘德华很帅但是张国荣更'
 2 #切片 s[start: end] 顾头不顾尾
 3 print(s[7:10])
 4 print(s[0:3])
 5 print(s[-4:-1])
 6 print(s[-1:-4]) # 默认的方向是从左往右切.
 7 #从德开始切. 切到结尾
 8 print(s[1:]) # 末尾
 9 print(s[:4]) # 开头
10 print(s[:])
11 
12 
13 s = "我要开始玩幺蛾子了你们怕不怕我很怕"
14 print(s[1:5])
15 print(s[5:1:-1])
16 #第三个参数是步长
17 print(s[1:5:3])
18 print(s[4:8:2])
19 
20 s = "0123456789"
21 print(s[::2]) # 02468
22 print(s[-1:-6:-2])
23 print(s[::-3])
24 print(s[::-1])
View Code
常用操作方法:
   1. upper() 转化成大写. 忽略大小写的时候  lower小写
   2. strip() 去掉左右两端空白 用户输入的内容都要去空白
   3. replace(old, new) 字符串替换
   4. split() 切割 结果是list
   5. startswith() 判断是否以xxx开头 endseith 结尾
   6. find() 查找
   7. isdigit() 判断是否是数字组成
   8. len() 求长度. 内置函数

  1.大小写转来转去
 1 s = "abcd is not a good man! Mn is a good man"
 2 s1 = s.capitalize()  # 首字母大写
 3 print(s1)
 4 s2 = s.lower()
 5 s3 = s1.upper() # 转化成大写字母. 要求记住. 使用场景: 忽略大小写的时候需要
 6 print(s2)
 7 print(s3)
 8 
 9 
10 s = "abcd is not a good man! Mn is a good man"
11 s1 = s.swapcase()  # 大小写互换
12 print(s1)
13 
14 s2 = "БBß" # 俄美德
15 print(s2)
16 print(s2.lower())
17 print(s2.casefold()) # 都转化成小写. 支持的文字比lower多
18 
19 
20 s = "class app_le banana ora1nge pear "
21 s1 = s.title() # 标题.把单词的首字母大写
22 print(s1)
View Code
  2.切来切去
 1 s = "天然"
 2 s1 = s.center(4,"*") # 把字符串拉长成4个单位 用*扩充
 3 print(s1)
 4 
 5 s = " \t       你好啊. 我叫赛利亚       "
 6 print(s)
 7 s1 = s.strip() # 去掉空白
 8 print(s1)
 9 
10 
11 
12 #模拟登陆
13 #用户输入的内容是无法保证合法的. 需要进行处理和判断
14 username = input("请输入用户名:").strip()
15 password = input("请输入密码:").strip()
16 if username == "alex" and password == "123":
17     print("成功")
18 else:
19     print("失败")
20 
21 
22 s = "你好啊跟你好"
23 print(s.strip(""))
24 
25 
26 
27 s = "abs_wasd_rty_thon_evaj_eggon"
28 # s1 = s.replace("rty", "try")
29 s1 = s.replace("i", "SB", 2)
30 print(s1)
31 
32 s = "abs_wasd_rty_thon_evaj_eggon"
33 lst = s.split("_") # 刀有多宽 就要损失掉多少
34 print(lst)
35 
36 
37 
38 s = "周润发周星驰周笔畅周杰伦"
39 lst = s.split("周润发周星驰周笔畅周杰伦")  # 切割的内容在边上. 会出现空字符串
40 print(lst)
View Code
 3.格式化输出
1 # 格式化输出
2 print("我叫%s, 我今年%d岁了, 我喜欢干%s" % ("abs", 18, "python"))
3 print("我叫{}, 我今年{}岁了, 我喜欢干{}".format("abs", 18, "python"))
4 print("我叫{0}, 我今年{1}岁了, 我喜欢干{2}".format("abs", 18, "python"))
5 print("我叫{name}, 我今年{age}岁了, 我喜欢干{hobby}".format(name="sbs", age=18, hobby="python"))
View Code
4.查找
1 s = "今天的内容非常简单.你们信吗? 作业也很容易. 就是整理不太好"
2 print(s.startswith("太好了"))
3 print(s.endswith("太好了"))
4              
5 
6 s = "胡辣汤炸鸡啤酒烤鸭酱肘锅包肉炸鸡炸鸡炸鸡"
7 print(s.count("炸鸡")) # 计数
8 print(s.find("疙瘩汤")) # 如果找不到返回-1  用这个
9 print(s.index("疙瘩汤")) # 如果找不到报错.
View Code
5.条件判断
 1 s = "一二壹贰叁肆萬两"
 2 print(s.isnumeric())
 3 
 4 # 条件判断
 5 s14 = "123.16"
 6 s15 = "abc"
 7 s16 = "_abc!@"
 8 # 是否由字⺟和数字组成
 9 print(s14.isalnum())
10 print(s15.isalnum())
11 print(s16.isalnum())
12 # 是否由字⺟组成
13 print(s14.isalpha())
14 print(s15.isalpha())
15 print(s16.isalpha())
16 # 是否由数字组成, 不包括⼩数点
17 print(s14.isdigit())
18 print(s14.isdecimal())
19 print(s14.isnumeric()) # 这个⽐较⽜B. 中⽂都识别.
20 print(s15.isdigit())
21 print(s16.isdigit())
View Code
6.计算字符串的长度
1 s = "我是上帝, 你也是上帝"
2 print(len(s)) # 内置函数len(字符串) 返回给你字符串的长度
View Code
for循环
我们可以使⽤for循环来便利(获取)字符串中的每⼀个字符
语法:
  for 变量 in 可迭代对象:
    pass
    可迭代对象: 可以⼀个⼀个往外取值的对象
 1 s = "朱元璋朱棣"
 2 count = 0
 3 while count < len(s):
 4         print(s[coount])
 5         count += 1
 6 
 7 s = "朱元璋朱棣朱建峰"
 8 #for循环
 9 #for变量 in 可迭代对象:
10 #把可迭代对象中的每一个元素 ,分别赋值给前面的变量,可以方便可迭代对象的遍历
11 for c in s:
12     print(s)
13 
14 
15 了解一下  报错
16 for i in 10:
17     print(i)
18 
19 TypeError: 'int' object is not iterable
20 错误类型:整数对象不能迭代
View Code
  • list
  什么是列表
    能装东西的东西,列表中装的数据是没有限制的,32位 python可以存放: 536870912个元素,
64位可以存放: 1152921504606846975个元素.大小基本上是够用的
  列表使用[]来表示. 在列表中每个元素元素之间用逗号隔开

  索引
    索引和切片参照字符串
    一排数字,反应第某个位置的字符 ,索引的下标从0开始,使用[]来获取数据
    切片:[start:end:step] 顾头不顾腚 最后一个取不到
       开始:结尾:步长

1 lst = ["上海滩","西游记","家有儿女","奥特曼","包青天","少年包青天"]
2 print(lst[3])
3 print(lst[-4])
4 print(lst[-1][1:3])
View Code

      切片:[start:end:step] 顾头不顾腚 最后一个取不到
    开始:结尾:步长 step:步长.如果是+从左往右. 如果是-从右往左 每n个取1个

1 # lst = ["上海滩","西游记","家有儿女","奥特曼","包青天","少年包青天"]
2 #  切片
3 # print(lst[1:3]) # 切片出来的是列表.
4 # print(lst[1:5:2])
5 # print(lst[-1:-4:-2])
View Code

增删改查

  新增:

    1.append() 追加

    2.insert()  插入   

    3.extend() 迭代增加 

 1 # lst = []
 2 # lst.append("周杰伦") # 追加 在最后添加, 效率比较高
 3 # lst.append("周芷若")
 4 # lst.append("周公瑾")
 5 # print(lst)
 6 
 7 # lst = ["刘德华", "渣渣辉", "古天乐", "陈小春"]
 8 # lst.insert(2,"马德华")  # 插入, 可能会导致元素移动
 9 # print(lst)
10 
11 # lst = ["刘昊然", "张一山", "徐峥", "黄渤"]
12 # lst.extend(["刘能", "赵四", "广坤"])
13 # print(lst)
View Code

  删除:

    1.remove()   指定元素

    2.pop()   弹 

    3.clear()   清空

    4.del     

 1 # 删除 pop, remove, clear, del
 2 # lst = ["刘能", "广坤", "皮长山", "大脚"]
 3 
 4 # lst.pop(2) # 可以指定元素删除(索引)
 5 # print(lst)
 6 # s1 = lst.pop() # 默认弹出最后一个
 7 # print(s1)
 8 # s2 = lst.pop()
 9 # print(s2)
10 # print(lst)
11 
12 # lst.remove("广坤")
13 # lst.remove("大脚")
14 # print(lst)
15 
16 # lst = ["语文", "数学", "地理", "历史", "英语", "化学"]
17 
18 # lst.clear() # 清空
19 
20 # 可以切片删除
21 # del lst[2]
22 # del lst[0]
23 # del lst[::2]
24 # print(lst)
View Code

   修改:

    索引修改

1 # lst = ["功夫", "大话西游", "少林寺", "无间道", "战狼", "战狼2"]
2 # # lst[2] = "西西里的美丽传说"
3 # lst[-3] = "新世界"
4 # lst[1:3] = ["一步之遥"]
5 # lst[1:5:2] = ["胡辣汤", "烩面"] # 注意如果步长不是1. 那么元素的个数要匹配
6 # print(lst)
View Code

   查询:

   for el in list:

     print(el)

  

# 列表是一个可迭代对象. 可以使用for循环
# for el in list:
#     print(el)
View Code

相关操作:

 1 lst = ["马化腾", "马云", "刘强东", "周鸿祎", "李彦宏", "马云", "马云"]
 2 print(lst.count("马云"))    #出现几次
 3 
 4 lst = [1.,15,55,54,5,9,64,4,6]
 5 lst.sort()   #正序
 6 lst.sort(reverse=True)  倒序排序
 7 
 8 lst.reverse()  翻转
 9 
10 
11 print(len(lst))   长度
View Code

嵌套

  

  元组和列表都可以进行嵌套

1 # lst = ["周润发", "周星驰", "周笔畅", "周公瑾", ["九品芝麻官", ["吴孟达", "ads", "林雪"],"算死草", "赌侠", "赌圣", "整蛊专家"]]
2 #
3 # lst[4][1][1] = lst[4][1][1].capitalize()
4 # print(lst)
View Code
  • 元组

  不可变的列表,只读列表,由小括号()表示.元素与元素之间用逗号隔开,数据类型没有限制

  如果是空元组:tuple()

  一个元素(1,)

 1 # 清朝皇帝 (努尔哈赤, 皇太极, 顺治, 康熙, 雍正, 乾隆)  这些是不可变的  怎么都不会变的
 2 
 3 # huang = ("努尔哈赤", "皇太极", "顺治", "康熙", "雍正", "乾隆", "嘉庆", "道光", "光绪", "咸丰")
 4 # # huang[1] = "朱元璋" # 报错 'tuple' object does not support item assignment
 5 # print(huang)
 6 
 7 # 小括号在计算机里还表示算数优先级
 8 # print((8+3)*7)
 9 
10 # tu = (1,) # 加了逗号, 就是元组了
11 # tu = ("哈哈","呵呵","嘿嘿",)
12 # print(type(tu))8
13 # lst = list()  # []
14 # tu = tuple()  # 空元组
15 
16 # 元组也有索引和切片 和列表一样和字符串也一样
17 # tu = ("iphone", "nokia", "砸核桃", "Lenovo", "HTC", "Honor")
18 # print(tu[-1])
19 # print(tu[1:3])
20 # print(tu[1:5:2])
21 
22 # 不可变指的是第一层元素不可变, 第二层取决于你的数据类型
23 # tu = (1, 2, 5, ["胡辣汤", "滋滋冒油的大猪蹄子", "酱猪肘", "香喷喷的米饭", "脆皮炸鸡"])
24 # tu[3].append("锅包肉")
25 # print(tu)
26 
27 # tu = ("孙悟空", "白骨精", "哪吒", "二师兄", "妲己")
28 #
29 # for el in tu:  # element 元素
30 #     print(el)
View Code

range

  

 1 #range()
 2  for i in range(100):   0-99
 3         print(i)
 4 
 5 for i in range(3,8):   34567   没有8     
 6     print(i)
 7 
 8 for i in range(5,10,2): 从5到10 步长是2
 9     print(i)
10 
11 
12 # range(边界) 从0到这个边界
13 # range(start, end) 从start到end结束. 不能到end
14 # range(start, end, step) 从start到end. 步长是step
15 
16 
17 lst = ["张无忌", "张三丰", "张翠山", "张一山", "张磊", "张伟", "张角"]
18 for i in lst:
19     print(i)                没有索引
20 
21 
22 for i in  range(len(lst)):
23     print(lst[i])              有索引
24 
25 tu = ("首页", "登录", "注册", "购物", "退出")
26 for i in range(len(tu)):
27         print(i,tu[i])
View Code

遍历列表的时候可以使用range

  for i in range(len(list))

    print(i,list[i])

  • 字典

什么是字典 

   字典(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没有要求.可以保存任意类型的数据

 

 1 # 合法 
 2 dic = {123: 456, True: 999, "id": 1, "name": 'sylar',"age": 18, "stu": ['帅哥', '美女'], (1, 2, 3): '麻花藤'} 
 3 print(dic[123])
 4 print(dic[True])
 5 print(dic['id']) 
 6 print(dic['stu']) 
 7 print(dic[(1, 2, 3)]) 
 8 # 不合法 
 9 # dic = {[1, 2, 3]: '周杰伦'}   # list是可变的. 不不能作为key 
10 # dic = {{1: 2}: "哈哈哈"}     # dict是可变的. 不不能作为key 
11 dic = {{1, 2, 3}: '呵呵呵'}    # set是可变的, 不不能作为key
View Code

 

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

字典的增删改查

增加

dict[新key] = value
dict.setdefault()
 1 dic = {}
 2 dic['name'] = '周润发' # 如果dict中没有出现这个key, 就会新增⼀个key-value的组
 3 合进dict
 4 dic['age'] = 18
 5 print(dic)
 6 # 如果dict中没有出现过这个key-value. 可以通过setdefault设置默认值
 7 dic.setdefault('李嘉诚') # 也可以往⾥⾯设置值.
 8 dic.setdefault("李嘉诚", "房地产") # 如果dict中已经存在了. 那么setdefault将不会
 9 起作⽤
10 print(dic)
11 
12 # dic = {}
13 # # 徐峥:人在囧途
14 # dic['徐峥'] = "人在囧途" # 直接用key往里面存数据即可
15 # dic['黄渤'] = "疯狂的石头"
16 # dic["王宝强"] = "天下无贼"
17 # dic["王宝强"] = "士兵突击" # 如果key已经存在。 那么会替换掉原来的value, 修改
18 #
19 # dic.setdefault("黄秋生")
20 # dic.setdefault("黄秋生", "无间道")    # 如果存在了key, 不会执行新增
21 #
22 # print(dic)
View Code

删除

pop(key)
popitem()
clear()
del dict[key]
1 dic = {"黄日华": "天龙八部", "吕颂贤": "笑傲江湖", "苏有朋": "倚天屠龙记", "六小龄童": "西游记"}
2 # dic.pop("吕颂贤") # 指定key删除
3 # dic.popitem()  # 随机删除
4 # del dic["黄日华"]  # 删除
5 # dic.clear() # 清空字典
6 
7 print(dic)
View Code

修改

dic[key] = 新值
update()
查询
1. 用key直接查询 dict[key]
2. get(key, 如果key不存在返回的数据)
3. setdefault() 1. 执行新增流程. 2. 查询结果
 
 1 dic = {"刘能": "王小利", "赵四": "刘晓光", "王木生": "范伟", "谢大脚": "于月仙", "李大国": "小鬼"}
 2 # dic['王木生'] = "刘伟"
 3 dic2 = {"刘能": "大阳哥", "赵四": "github", "王木生": "汪峰", "谢大脚": "冯提莫", "王大拿": "金老板"}
 4 dic.update(dic2)
 5 print(dic)
 6 
 7 # 查询
 8 dic = {'刘能': '大阳哥', '赵四': 'github', '王木生': '汪峰', '谢大脚': '冯提莫', '李大国': '小鬼', '王大拿': '金老板'}
 9 # 1. 最直观。 直接用key
10 print(dic['周杰伦'])  # 当这个key不存在的时候会报错
11 # 2. get方法
12 print(dic.get("谢大脚", "周杰伦不在这里"))  # 没有key. 返回None
13 # 3. setdefault()  1. 新增(先看有没有key, 如果有就过, 如果没有,执行新增) 2.根据key把值返回
14 dic = {}
15 dic["盖伦"] = "德玛西亚之力"
16 value = dic.setdefault("菲奥娜", "无双剑姬")  # 新增
17 value2 = dic.setdefault("盖伦", "刘伟")  # 由于已经存在了key。 所以新增不执行。 直接查询结果
18 value3 = dic.setdefault("薇恩", "")
19 
20 print(value3)
21 print(dic)
View Code

相关操作

 1 dic = {"汪峰": "大陆音乐半壁江山", "周杰伦": "亚洲音乐天王", "罗志祥": "亚洲舞王"}
 2 
 3 # 对字典的遍历
 4 # print(dic.keys())   # dict_keys(['汪峰', '周杰伦', '罗志祥']) 像列表但不是列表
 5 # for key in dic.keys():
 6 #     print(key)  # 拿到key
 7 #     print(dic[key]) # 拿到value
 8 
 9 # print(dic.values())
10 # for value in dic.values():
11 #     print(value)
12 
13 
14 # 也可以遍历字典
15 # [('汪峰', '大陆音乐半壁江山'), ('周杰伦', '亚洲音乐天王'), ('罗志祥', '亚洲舞王')]
16 # print(dic.items())  # 拿到的是key和value
17 for k, v in dic.items(): # 当需要遍历字典. 在操作中涉及到key和value的时候.
18     print(k) # 元组
19     print(v)
20 
21 
22 # 字典本身是一个可迭代对象,可以直接进行for循环
23 for el in dic:  # 直接拿到key
24     print(el)
25     print(dic[el])
26 
27 # 前面的变量的个数和后面解包的个数一致
28 # a, b = (10, 20) # 解构, 解包
29 # print(a)
30 # print(b)
View Code

字典的嵌套

 1 wf = {
 2     "name": "汪峰",
 3     "age": 48,
 4     "成名曲": "春天里",
 5     "wife": {
 6         "name": "章子怡",
 7         "age": 39,
 8         "工作": "演员"
 9     },
10     "children":[
11         {"num": "001", "name": "汪一", "hobby": "唱歌"},
12         {"num": "002", "name": "汪二", "hobby": "演戏"} # wf['children'][1]['name']
13     ]
14 }
15 
16 # wf['wife']['age'] = wf['wife']['age'] + 10
17 # print(wf)
View Code

 

posted on 2018-09-06 17:50  JintaoMA  阅读(145)  评论(0编辑  收藏  举报

导航