第二天的课程还是塞得满满的,一天下来充实也疲惫。那天听出金星师傅嗓子有些沙哑,想必是讲课说话太多导致。啥也不说了。唯有努力练功方可回报!

1 序:

今天主要是详细学习了绝大部分的数据类型,字符编码,边看金星师傅的视频边记录与练习。日后在详细整理。嘿

知识点有:

  01 int

  02 str

  03 bool

  04 list

  05 tuple

  06 dict

  07 set

  08 编码

  09 数据类型补充

主要就是常用数据类型的操作,增删改查,内置方法等。计算机字符编码的原理,类型,以及字符编码的一些操作,最后是一些数据类型注意的坑,与一些细节原理知识。

2 数据类型

2.1 int 数字

  int数据类型主要用于计算。

  定义:  i = 111

  int的方法:

    bit_length: 将十进制 转换为二进制占得最小位数

    i = 4

    print(i.bit_length())

    结果是4就。4的二进制是0000 0100 ,所以可用位是三位 (100) 同理5 二进制是0000 0101 有效为也是三位(101)。

2.2 bool 布尔值

  布尔值:True False  真假两个值, 主要是条件判断。

  布尔值的转换:

    先说一下数字与字符串的转换:

    数字int转换字符串str:  str(int)

    字符串str转换数字int:  int(str)   注意字符串必须全部是数字组成才可以。

    数字int转换布尔值bool:  0 就是False   非0 就是True

    布尔值bool转换为数字int:  int(True)  结果是1 , int(False) 0 结果是0

    字符串str转换为布尔值bool:   print(bool(""))  空字符串是False,  非空字符串True。

2.3 str 字符串

  被引号引起来的就是字符串。

  字符串方法:

  1 upper()  字符全部大写

    s2 = s.upper()

  2 lower() 字符串全部变小写

    s3 = s.lower()

  3 swapcase()  大小写翻转

    s4 = s.swapcase()

  4 title() 非字母元素哥开的每个单词首字母大写

    s = "alex wusir*tom#jack"

    s5 = s.title()

  5 cennter() 居中

    s.center(30,"*") 填充物默认是空格,也可以自定义 这里是*

  6 startswith()  以什么为开头,  endswith()   以什么为结尾 。

    s = "oldboy"

    s.startswith("o")

    s.startswith("d",2,5)

    s.endswith("y")

    s.endswith("o")

  7 strip() 去除前后空格,制表符\t,换行符\n。

    s = " aaa "

    s8 = a.strip()

    print(s8)

    name = input("输入姓名").strip() 后面必须要加这个

    也可以去除字符,循环找字符串中对应的组合

    s = "bdaaaby"

    s.strip("bdy")

  8 lstrip() 只去左边,  rstrip() 只去右边

    方法同strip() 只是lstrip()只去左边  rstrip()只去右边。

  9 split() 分割 str --> list

    s = 'oldboy wustr alex'

    l = s.split() 默认按照空格分割并存储到列表中

    print(l)

    s = "oldboyowustroalex"

    l = s.split("o")

    print(l)

  10 join()

    s = "oldboy"

    s9 = "+".join(s) 通过连接符吧字符中的元素循环连接

    print(s9)

    同时还可以将列表转换为字符串

  11 replace() 替换

    s = "大铁锤and 小铁锤"

    s12 = s.replace("铁锤","钢蛋")

  12 find() ,  index() 通过元素找索引

    s = "abc def"

    s13.find("c")

    print(s) 有2个 只找一个。如果要多找:找到第一个后从第一个位置再往后找。

    s131.index(" ")

    find 找不到就返回-1 如果index找不到会报错 建议找find

  公共方法: 元祖 列表 字符串

  1 len()  统计元素个数

    s = "adfasdfsfdfgrtweerewrewd"

     print(len(s)) 打印出s长度

  2 count()   统计参数个数

    sp2 = s.count("a") 打印出s中有多少个a

  3 format()   格式化输出

    res = "我就叫{}今年{},爱好{}".format("jack",18,"游泳") 按顺序替换方法

    print(res)

    res = "我就叫{0}今年{1},爱好{2},我依然叫{0}".format("jack",18,"游泳") 下标的方法

    print(res)

    res = "我就叫{name}今年{age},爱好{hobbie}".format(name="jack",age=18, hobbie="游泳") 键值对的方法

  4 isdigit 判断数字

  5 isalpha 判断字母

  6 isalnum 判断数字

2.4 list 列表

list
1 索引 切片
li = [1111,"alex",222,"wusir"]
print(li[1])
print(li[-1])
注意 切片取出来的是一个列表
print(::2)
步长 2 增 删 改 查
l = ["老男孩","alex","jack","tom"]
2.1 增
1 l.append("小黑") 在最后追加值 l.append([1,2,3])
2 l.insert(0,"小黑") 在第0索引上插入
3 迭代这添加
l.extend("alex")
print(l)
把alex 分解为单个元素添加到列表中 2.2 删
1 l.pop(0) 按照索引删除 并且返回你删除的值
2 remove
l.remove("alex") 按照元素删除
3 clear
l.clear() 内容给删除,空列表 但是内存位置还有
4 del
del l
print(l) 在内存中直接删除列表。报错找不到这个l了
还可以按索引删除
del l[:3]
print(l) 删除前3个索引元素
2.3 改
1 按照索引改
l[2] = "武藤兰"
print(l) 2 按照切片改
l[:3]="abc"
print(l) 删除分片的全部元素, 然后把等号右边的元素,按最小元素添加到列表 2.4 查
1 索引查
l[1] 2 切片查
l[1:4] 3 for 循环查
for i in l:
print(i) 3 其他方法
1 count 统计次数
ll = [11,22,33,44,55,11,22]
ll.count(11) 11出现了几次 2 len 查几个元素
len(ll) 3 index 通过元素找索引
ll.index(22)
结果是1 可以切片去找 4 sort 排序
ll = [7,,4,9,1,2,8]
ll.sort() 从小到大排
ll.sort(revers=True) 从大到小排 5 reversed() 反序
ll.reversed() 4 列表的嵌套
ll = [1,2,"alex","wusir",["oldboy","ritian",99],"taibai"]

2.5 tuple

元祖 只读列表 只能读 不能增删改

tu = (1,2,"OK",[1,2,3])
for i in tu
print(i) 索引
print(tu(1))
切片
print(tu[0:3:1] count 统计元素个数 index 通过元素找索引 len() 统计元祖元素个数 注意 元祖的子级不能修改,元祖的孙子级可以修改
列子:
tu = [1,2,3,4,[1,2,3]]
print(tu[-1].append(4)))

2.6 dict

一 字典定义
key是唯一的 是二分法 二叉树 key必须是不可变的数据类型
key: 不可变的数据类型(也叫做可hash) str, bool, tuple, int,
value: 任意数据类型。
数据类型分类:
不可变的数据类型: str bool tuple int
可变数据类型: dict list set
容器类数据类型: list tuple dict set 存的什么类型,取出来就是什么类型
字典存储数据多,关系型数据查询速度快(二分查找)
dict = {"name":"taibai","age":21,"hobby":"girl"} 二 字典的操作
3.6版本之前都是无序的。 3.6之后字典是有序的。
1 增
dict = {"name":"jack","sex":"male"}
dict["age"]=18 有则覆盖,无则添加
setdefault
dict.setdefault("higt",180)
如果原来有就不变,如果没有就添加新的。 2 删
dict.pop("key") 按照键去删 返回删除的值
有一种情况如果没有key就会报错。这种情况可以在key 后面添加一个默认返回值,没有key就返回返回值
dict.pop("name1","没有次key")
dict.clear() 清空字典
del dict 从内存中全部删除
del dict["key"] 按照key删除
popitem 3.6版本前是随机删除。 3.6版本后默认删除最后一个
dict.popitem() 删除什么就返回什么 并放在一个元祖里面 3 改
dict['name']="老男孩" update
dic2.update(dic) 将dic的键值对覆盖到dic2中 dic不变
print(dic2) 4 查
print(dic["name"]) 这个方法不好 如果没有 就会报错。 dict.get("name1","没有次key") 如果没有 就返回返回值 用get 循环查
keys() values() items()
print(list(dict.keys()))
for k in dict.keys():
print(k) for v in dict.values():
print(v) for d in dict.items():
print(list(d)) 默认是items是生成key value元祖 分别赋值:
必须是一一对应。 不能多 不能少
a,b =1,2
a,b,c = ["alex","wusit","ritian"]
有到比较坑的:
a = 1
b = 5
a,b =b,a for k v in dict.items():
print(k,v) 公共方法:
len(dict) 键值对的数量 dic.fromkeys={["name","age"],None}

2.7 set

集合
无序的 不重复的数据类型 他里面的元素必须是可哈希的, 但是集合本身是不可哈希的
1 关系测试 交集,并级,子级,差级,去重 set1 = {1,"alex","jack","tom",(1,2,3)}
# ss = [1,1,2,2,3,4,5,6,7,7]
# set2 = list(set(ss))
# print(set2)
# 增
add
set1.add("666")
print(set1)
update 迭代增加
set1.update("jack")
print(set1) 删
remove 按照元素去删
set1.remove("jack")
pop 随机删 del 从内存删除 关系测试 交集 &
print(set1 & set2) 并集 |
print(set1 | set2)
print(set1.union(set2)) 差集 -
print(set1 - set2 ) set1 有的 set2中没有。也就是set1独有的
difference 反交集 ^
print(set1 ^ set2) 就是set1 与set2都有的其他的 子集 <
print(set1 < set2) set1 是 set2 的子集 父级 >
print( set2 > set1) set2 是 set1的父级 frozenset: 把集合变成一个冻集合
s = frozenset({1,2,3,4,5}) 作为字典的键key来使用 就是不可变类型

3 数据类型补充

ll = ["alex","wustr","taibai","brray","老男孩"]

del ll[1::2]
print(ll) for i in ll:
if ll.index(i) %2 ==1:
del ll[ll.index(i)]
print(ll) # range 数字列表范围
########################### 大坑 ############################
for i in range(len(ll)):
if i % 2 ==1:
del ll[i]
print(ll)
在循环一个列表时,不要对列表进行删除的动作(改变列表元素的个数)
两种方法: 方法一 :
s1 = []
for i in range(len(ll)):
if i % 2 ==0:
s1.append(ll[i])
print(s1) 方法二 :
for i in range(len(ll)-1,-1,-1):
# print(i)
if i%2==1:
del ll[i]
print(ll) ############### 字典的大坑 ################
在循环字典的时候,不要改变字典的大小,或添加删除等操作。
否则会改变列表的元素,导致循环次数出现问题。
dic = {'k1':'v1','k2':'v2','k3':'v3',4:666}
错误:
for k,v in dic.items():
if "k" in k:
del dic[k]
print(dic)
错误:
for i in dic:
# print(i)
if "k" in i:
del dic[i]
print(dic)
## 正确方法:
ll = []
for i in dic:
if "k" in i:
ll.append(dic[i])
print(ll) #################### 元祖问题 ###################3
如果 元祖里面只有一个元素 并且没有逗号隔开,那么他的数据类型与该元素一致
tul = (1)
print(tul,type(tul)) int类型
tu2 = ("alex")
print(tu2,type(tu2)) str类型

4 编码

注意 python3 版本    python2还有些区别

python3版本
1 不同编码之间的 二进制是不能互相识别的。他们使用的不同的编码本。
2 python3 str 内部编码方式(内存)为unicode
但是,对于文件的存储,和传输不能用unicode. 占用存储空间大
所以要用另一个bytes数据类型
str的方法 bytes都有
3 bytes型:内部编码方式(内存) 为非unicode
对于英文;
表现方式是:
str:
s ="hello world"
print(s,type(s))
是unicode 格式 bytes:
s1 = b"hello world"
print(s1,type(s1))
非unicode 格式 对于中文来说:
表现方式:
str:
s = "中国"
print(s,type(s))
bytes:
s1 = b"\xe4"
print(s1,type(s1)) 转换:
1 编码
s = "laonanhai"
s2 = s.encode("utf-8") 将str转换为bytes类e型 encode 编码
print(s2) s = "中国"
s2 = s.encode("utf-8") 将str转换为bytes类e型 encode 编码
s3 = s.encode("gbk")
print(s2)
print(s3)
2 解码
s = "中国"
s2 = s.encode("utf-8")
ss = s2.decode("utf-8") 将bytes转换为str类型 decode 解码
print(ss)

练习题

购物车功能要求:

要求用户输入总资产,列如:2000

显示商品列表,让用户根据序号选择商品,加入购物车

购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。
goods = [  {"name": "电脑", "price": 1999},
      {"name": "鼠标", "price": 10},
      {"name": "游艇", "price": 20},
      {"name": "美女", "price": 998},
]
money = input()
shopping_car = [{name:;电脑,count:3}]
1,展示商品
1, 电脑 1999
2, 鼠标 10
.....
1,输入的是全部数字
2,判断,范围。
购买成功,打印购买的商品列表
'''

python修炼第二天的更多相关文章

  1. python课程第二周重点记录

    python课程第二周重点记录 1.元组的元素不可被修改,元组的元素的元素可以被修改(字典在元组中,字典的值可以被修改) 2.个人感觉方便做加密解密 3.一些方法的使用 sb = "name ...

  2. Python爬虫第二天

    Python爬虫第二天   超时设置         有时候访问网页时长时间未响应,系统就会判断网页超时,无法打开网页.如果需要自己设置超时时间则:             通过urlopen()打开 ...

  3. python学习第二讲,pythonIDE介绍以及配置使用

    目录 python学习第二讲,pythonIDE介绍以及配置使用 一丶集成开发环境IDE简介,以及配置 1.简介 2.PyCharm 介绍 3.pycharm 的安装 二丶IDE 开发Python,以 ...

  4. python修炼第一天

    Python修炼第一天 新的开始:不会Python的运维,人生是不完整的. 为了我的人生能够完整,所以我来了!今后跟着太白金星师傅学习功夫,记录一下心得,以便日后苦练. 一 Python的历史: Py ...

  5. python学习第二次笔记

    python学习第二次记录 1.格式化输出 name = input('请输入姓名') age = input('请输入年龄') height = input('请输入身高') msg = " ...

  6. python学习第二天 -----2019年4月17日

    第二周-第02章节-Python3.5-模块初识 #!/usr/bin/env python #-*- coding:utf-8 _*- """ @author:chen ...

  7. 小象学院Python数据分析第二期【升级版】

    点击了解更多Python课程>>> 小象学院Python数据分析第二期[升级版] 主讲老师: 梁斌 资深算法工程师 查尔斯特大学(Charles Sturt University)计 ...

  8. Python人工智能第二篇:人脸检测和图像识别

    Python人工智能第二篇:人脸检测和图像识别 人脸检测 详细内容请看技术文档:https://ai.baidu.com/docs#/Face-Python-SDK/top from aip impo ...

  9. Python学习-第二天-字符串和常用数据结构

    Python学习-第二天-字符串和常用数据结构 字符串的基本操作 def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1 ...

随机推荐

  1. VueScroller 使用

    下载插件  npm install vue-scroller -D 引入插件: import Vue from 'vue'import VueScroller from 'vue-scroller' ...

  2. AutoCAD设置透明度后不起效果

    在AutoCAD中设置了实体的透明度,但是看到的效果是不透明 解决方法: 设置系统变量TRANSPARENCYDISPLAY

  3. Python VisibleDeprecationWarning: converting an array with ndim > 0 to an index will result in an error in the future

    问题原因:nd.array值直接用做数组索引,索引一般需为整数,可能带来风险,比如浮点数作为索引 解决方案:把nd.array值强制转成int peakIdx = int( np.asarray(pe ...

  4. 论文笔记:ProxylessNAS: Direct Neural Architecture Search on Target Task and Hardware

    ProxylessNAS: Direct Neural Architecture Search on Target Task and Hardware 2019-03-19 16:13:18 Pape ...

  5. <抽象工厂>比<工厂方法>多了啥

    前言:仅当复习讨论,写得不好,多多指教! 上一篇文章<比多了啥>介绍了简单工厂模式和工厂方法模式.本篇文章则讲最后一个工厂----抽象工厂.如果对工厂方法比较模糊的,可以返回上一篇文章复习 ...

  6. dao层、service和action的运用和区别

    DAO层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,对于数据库的操作,具体到对于某个表的增删改查, 也就是说某个DAO一定是和数据库的某一张表一一对应的 ...

  7. 8_管理及IO重定向

    五大类:运算器.控制器:CPU存储器:RAM输入设备/输出设备 程序:是由指令和数据组成的 控制器:读取指令运算器:存储器: 地址总线:内存寻址数据总线:传输数据控制总线:控制指令 寄存器:CPU暂时 ...

  8. acm:屁屁上的巴掌

    涉及算法:深度搜索 题目: 题目描述 小新是个调皮的孩子,他总是会把衣服搞脏,他的妈妈美伢非常的生气,于是在<和妈妈的约定条款>加上了第三百七十七条:小新衣服上每有一块污渍妈妈就会打小新的 ...

  9. POJ 1061 青蛙的约会(拓展欧几里得)

    #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #i ...

  10. Kotlin 泛型

    泛型,即 "参数化类型",将类型参数化,可以用在类,接口,方法上. 与 Java 一样,Kotlin 也提供泛型,为类型安全提供保证,消除类型强转的烦恼. 声明一个泛型类: cla ...