python修炼第二天
第二天的课程还是塞得满满的,一天下来充实也疲惫。那天听出金星师傅嗓子有些沙哑,想必是讲课说话太多导致。啥也不说了。唯有努力练功方可回报!
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修炼第二天的更多相关文章
- python课程第二周重点记录
python课程第二周重点记录 1.元组的元素不可被修改,元组的元素的元素可以被修改(字典在元组中,字典的值可以被修改) 2.个人感觉方便做加密解密 3.一些方法的使用 sb = "name ...
- Python爬虫第二天
Python爬虫第二天 超时设置 有时候访问网页时长时间未响应,系统就会判断网页超时,无法打开网页.如果需要自己设置超时时间则: 通过urlopen()打开 ...
- python学习第二讲,pythonIDE介绍以及配置使用
目录 python学习第二讲,pythonIDE介绍以及配置使用 一丶集成开发环境IDE简介,以及配置 1.简介 2.PyCharm 介绍 3.pycharm 的安装 二丶IDE 开发Python,以 ...
- python修炼第一天
Python修炼第一天 新的开始:不会Python的运维,人生是不完整的. 为了我的人生能够完整,所以我来了!今后跟着太白金星师傅学习功夫,记录一下心得,以便日后苦练. 一 Python的历史: Py ...
- python学习第二次笔记
python学习第二次记录 1.格式化输出 name = input('请输入姓名') age = input('请输入年龄') height = input('请输入身高') msg = " ...
- python学习第二天 -----2019年4月17日
第二周-第02章节-Python3.5-模块初识 #!/usr/bin/env python #-*- coding:utf-8 _*- """ @author:chen ...
- 小象学院Python数据分析第二期【升级版】
点击了解更多Python课程>>> 小象学院Python数据分析第二期[升级版] 主讲老师: 梁斌 资深算法工程师 查尔斯特大学(Charles Sturt University)计 ...
- Python人工智能第二篇:人脸检测和图像识别
Python人工智能第二篇:人脸检测和图像识别 人脸检测 详细内容请看技术文档:https://ai.baidu.com/docs#/Face-Python-SDK/top from aip impo ...
- Python学习-第二天-字符串和常用数据结构
Python学习-第二天-字符串和常用数据结构 字符串的基本操作 def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1 ...
随机推荐
- Linux下使用acme.sh 配置https 免费证书
acme.sh 简单来说acme.sh 实现了 acme 协议, 可以从 let‘s encrypt 生成免费的证书.acme.sh 有以下特点:一个纯粹用Shell(Unix shell)语言编写的 ...
- Vue-Router路由Vue-CLI脚手架和模块化开发 之 vue-router路由
vue-router路由:Vue.js官网推出的路由管理器,方便的构建单页应用: 单页应用(SPA)只有一个web页面的应用,用户与应用交互时,动态更新该页面的内容:简单来说,根据不同的url与数据, ...
- Linux 启动时profile、bashrc、~/.bash_profile、~/.bashrc、~/.bash_profile执行顺序以及文件说明
Linux 启动时profile.bashrc.~/.bash_profile.~/.bashrc.~/.bash_profile执行顺序以及文件说明 一.执行顺序 登录linux时,/etc/pro ...
- 算法(第四版)C# 习题题解——2.1
写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 这一节内容可能会用到的库文件有 ...
- D9 图论综合题
1.白银莲花池 LUOGU 2411 第一种思路:当然我们可以写三个bfs a掉这个题,这写下来一二百行要有了吧: 第二种:我们可以在一个bfs中维护所有的信息,一个方向数组,从起点开始,向八个方向扩 ...
- opencv学习之路(33)、SIFT特征点提取(一)
一.简介 二.OpenCV中的SIFT算法接口 #include "opencv2/opencv.hpp" #include <opencv2/nonfree/nonfree ...
- Django 中使用 Celery
起步 在 <分布式任务队列Celery使用说明> 中介绍了在 Python 中使用 Celery 来实验异步任务和定时任务功能.本文介绍如何在 Django 中使用 Celery. 安装 ...
- 20175312 2018-2019-2 实验一《Java开发环境的熟悉》实验报告
20175312 2018-2019-2 实验一<Java开发环境的熟悉>实验报告 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试J ...
- VBoxManage
虚拟机名称 centos6.9-1 centos6.9-2 centos6.9-3 使用命令开机 虚拟机 VBoxManage startvm 'centos6.9-1' 正常启动 VBoxManag ...
- Ubuntu - Start - 必要软件安装
1.安装Chromium浏览器 sudo apt install chromium-browser 如果出错, 先更新下apt sudo apt update 2. 安装rime输入法 sudo ap ...