浅谈自学Python之路(day2)
今天的主要内容是:
- 标准库
- 数据类型知识
- 数据运算
- 三元运算
- bytes类型
- 字符串操作
- 字典
- 集合
标准库
Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持,先来介绍2个简单的。
sys
import sys
print(sys.path)#打印环境变量
输出结果为:
os
import os
os.mkdir("dir_mk")
此代码段含义为,在当前目录下新建一个文件夹,输出结果为:
文件夹下出现了新建的dir_mk文件夹:
import os
cmd_res = os.system("dir") #执行命令,但不保存结果
dir:查看当前路径下的文件,但此时输出结果有乱码,可以换为:
cmd_res = os.popen("dir").read() #read方法把它取出来
print("-->",cmd_res) #把它输出
这样输出结果如下:
简单明了
- 自己写个模块
就以之前写的登录程序为例,将其复制改名为login,然后在调用这个模块
_username = 'lym'
_password = 'abc123'
username = input("username:")
#password = getpass.getpass("password:")
password = input("password:")
if _username == username and _password == password:
print("Welcome user {name} login...".format(name=username))
else:
print("Invalid username or password!")
然后调用
import login
结果如下
接着手动输入用户名密码
这样一个简单的创建模块就创建好了,当然上面自己写的login.py模块只能在当前目录下导入,如果想在系统的何何一个地方都使用怎么办呢? 此时你就要把这个login.py放到python全局环境变量目录里啦,基本一般都放在一个叫做 python/lib/site-packages 的文件夹目录下,这个目录在不同的OS里放的位置不一样,用 print(sys.path) 可以查看python的环境变量列表
数据类型知识
1.数字
int(整型)
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
long(长整型)
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
float(浮点型)
浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。
complex(复数)
复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
注:Python中存在小数字池:-5 ~ 257
2.布尔值
真或假
0或1
3.字符串
"hello world"
name = "lym"
print "i am %s " % name
#输出: i am lym
PS: 字符串是 %s;整数 %d;浮点数%f
- 移除空白
- 分割
- 长度
- 索引
- 切片
4.列表(开发中最常用的其中一种)
print("----------------------")
names = "LiangFF Guoy LiuZY XinY"
names = ["LiangFF","Guoy","LiuZY","XinY"]
names.append("GouJ")#添加到最后
names.insert(1,"GeD")#插入
names[2] = "WuX"#替换 print(names)
print(names[0],names[1])
print(names[1:4])#切片,顾头不顾尾,所以打印的值为,第2,3,4个值,第5个值不打印(即names[4]),这就是顾头不顾尾,用数学符号表示即[ )
print(names[-2:-1])#不能为[-1:-2],因为顺序是从左往右
print(names[-2:])
print(names[0:3])
print(names[:3])
print("----------------------")
#删除
names.remove("WuX")
del names[2]#删除第三个值
names.pop()#删掉最后一个
print(names)
print("----------------------")
names.reverse()#反转
print(names)
print("----------------------")
names.sort()#排序
print(names)
print("----------------------")
print(names.index("GeD"))#查询值所在位置
print(names[names.index("GeD")])
print(names.count("GeD"))#查询有几个GeD值
print("----------------------")
names.clear()#清空
print(names)
print("----------------------")
names = ["LiangFF","Guoy","LiuZY","XinY"]
names2 = [1,2,3,4]
names.extend(names2)#names2合并到names中
print(names,names2)
基本操作:
- 索引
- 切片
- 追加
- 删除
- 长度
- 切片
- 循环
- 包含
import copy names = ["LiangFF","Guoy","LiuZY",["jack","mike"],"XinY"]
names2 = copy.deepcopy(names) #names2 = copy.copy(names) 此为浅copy
print(names[0:-1:2])
print(names[::2])#0或-1可以省略
# for i in names:
# for j in names2:
# print(i,j) print(names)
print(names2) names[2] = "刘泽宇"
print(names)
print(names2) names[3][0] = "JACK"
print(names)
print(names2)
输出结果为:
以上结果为深度Copy的结果,即names2将names的值完全copy下来,而且完全不做改动,具体有什么区别,上面的代码段中有浅copy的代码,大家可以试一试看看有什么区别,在这里就不做演示了
但还要补充2个额外的浅copy写法,代码如下:
names2 = names[:]
或者是
names2 = list(names)
这两种写法,和浅copy names2 = copy.copy(names) 是一样的作用,大家有兴趣可以尝试
其中
print(names[0:-1:2])
这段代码意思是,输出names中从的第一个值,到最后一个值,而且步数为2(隔一个输出一个值),也可以写为
print(names[::2])#0或-1可以省略
但第二种写法 print(names[::2]) 较好,因为如果值是五个的话,用第一种写法 print(names[0:-1:2]) ,第五个是输出不了的,可以先看一下输出的结果
第二种就可以把第1,3,5的值都输出,第一种则不行,如果值的个数为6,即有6个值,那么这两种写法都会输出1,3,5这三个值,即上下输出结果是一样的,本质上这两种写法的含义是相同的,可能第二种写法的排异性会好些,建议写第二种
补充Copy的用法—创建联合账号
#浅Copy用处用来创建联合账号
person = ["name",["saving",100]] p1 = person[:]
p2 = person[:] p1[0] = "lym"
p2[0] = "ym" p1[1][1]=50 print(p1)
print(p2)
输出结果为:
当我修改了P1中第二个数组中的第二个数为50时,输出时,P2当中第二个数组的第二个数也变为了50
names = ('lff','ged')
names.append('guoy')
print(names)
结果是报错的:
说明上面的代码只是演示了为什么元组只能查不能添加
它只有2个方法,一个是count,一个是index,完毕。
练习:写出购物车程序
需求:
- 启动程序后,让用户输入工资,然后打印商品列表
- 允许用户根据商品编号购买商品
- 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
- 可随时退出,退出时,打印已购买商品和余额
person = {"name": "mr.wu", 'age': 18}
或
person = dict({"name": "mr.wu", 'age': 18})
常用操作:
- 索引
- 新增
- 删除
- 键、值、键值对
- 循环
- 长度
数据运算
- 首先举个简单的例子 4 +5 = 9 。 例子中,4 和 5 被称为操作数,"+" 称为运算符。
比较运算:
赋值运算:
逻辑运算:
成员运算:
身份运算:
位运算:
运算符优先级:
三元运算
a = 10
b = 5
c = 4
d = a if a > b else c
print("d =",d)
输出结果为:
如果条件为真:d = a
如果条件为假:d = c
bytes类型
msg = "我爱你"
print(msg)
print(msg.encode(encoding = "utf-8"))#字符串转成byte类型
print(msg.encode(encoding = "utf-8").decode(encoding="utf-8"))#再转回来
字符串操作
- 特性:不可修改
#!/usr/bin/env.python
# -*- coding: utf-8 -*-
"""
-------------------------------------------------
File Name: string
Description :
Author : lym
date: 2018/2/27
-------------------------------------------------
Change Activity:
2018/2/27:
-------------------------------------------------
"""
__author__ = 'lym' name = "lym is a good boy"
print(name.capitalize())#首字母大写
print(name.count("l"))#统计l出现次数
print(name.casefold())#大写全部变小写
print(name.center(50,"-"))#输出输出 '---------------------lym----------------------'
print(name.encode())#将字符串编码成bytes格式
print(name.endswith("m"))#判断字符串是否以m结尾
print( "lym\tlff".expandtabs(10))#输出"lym lff", 将\t转换成多长的空格
print(name.find('a'))#查找m,找到返回其索引,找不到返回-1
print(name[name.find('a'):])#字符串切片 输出 a good boy name = "my name is {name},and i am {age} years old"
print(name.format(name = "lym",age = 22)) #格式化输出,可参考Day1格式化输出内容
print(name.format_map({'name':'lym','age':22}))#字典
print('ab123'.isalnum())#包含所有的英文字符+阿拉伯数字 返回True
print('ab123\f'.isalnum())#若有特殊字符则返回False
print('abc'.isalpha())#包含所有的英文,包括大写英文
print('1A'.isalpha())#十进制返回True,其他返回False
print(''.isdigit())#是不是一个整数
print('a123'.isidentifier())#判断是否为一个合法的标识符,若开头为数字,则返回False
print('A23'.islower())#判断首字母是否为小写,若为小写则返回True
print('A23'.isnumeric())#是否只有数字在里面,若是则返回True
print('A23'.isspace())#是否是一个空格
print('My Name Is Lym'.istitle())#每个单词开头是否为大写,若是则返回True
print('My Name Is Lym'.isprintable())#是不是可以打印的,比如 ttf.file,drive file是不可打印的,用途较少
print('My Name Is Lym'.isupper())#是否都为大写,若是则返回True
print('My Name Is Lym'.join("=="))
print('+'.join(['','','','']))
print(name.ljust(50,'*'))#内容加在‘*‘左边
print(name.rjust(50,'~'))#内容加在‘~’右边
print('Lym'.lower())
print('Lym'.upper())
print('\nLym\n'.lstrip())#去除左边的空格
print('----------')
print('\nLym\n'.rstrip())#去除右边的空格
print('----------')
print('\nLym\n'.strip())#左右空格都去掉
print('----------')
print('Lym'.strip()) p = str.maketrans("abcdefli",'123$@456')
print("yiming liang".translate(p) ) print('yiming liang'.replace('l','L',1))#替换
print('yiming liang'.rfind('l'))#找从左往右数最右边的l的索引值
print('1+2+3+4'.split('+'))#把字符串按照+号分成一个列表,+号可以用其字符串中的任意值代替,就按你代替的值来分
print('1+2\n+3+4'.splitlines())#按换行来分
print('yiming LIAng'.swapcase())#大小写反转
print('yiming liang'.title())#每个单词开头字幕大写
print('yiming liang'.zfill(50))#在最前面加50个0 print( '---')
字典
#key-value 键—值
info = {
'': "ym",
'': "zq",
'': "aq",
}
print(info)
#字典是无序的,字典不需要下标,通过key查找
print(info[""]) info[""]="lp"#如果存在,则将204里的值ym替换为lp
print(info)
info[""]="zr"#如果字典中不存在207,则添加一个新的
print(info) #delete
del info[""]#删除207
print(info) info.pop("")#删除205
print(info)
info.popitem()#随便删一个
print(info)
#--------------------查-----------------------------
info = {
'': "ym",
'': "zq",
'': "aq",
}
print(info.get(""))
print('' in info)#info.has_key("205") 这个在py2.x py3里没有了
#--------------------update------------------------
info = {
'': "ym",
'': "zq",
'': "aq",
}
b = {
'':'haa',
1:3,
2:4
}
info.update(b)
print(info)
#合并两个字典,有交叉就覆盖,无交叉就创建 ;204 ym替换haa;1:3 2:4加入info
print(info.items())#字典转为列表
#--------------------初始化一个新的字典------------------------
c = dict.fromkeys([6,7,8],"asd")#尽量别用
print(c)
字典的特性:
- dict是无序的
- key必须是唯一的
#!/usr/bin/env.python
# -*- coding: utf-8 -*-
"""
-------------------------------------------------
File Name: more_dictionary
Description :
Author : lym
date: 2018/3/2
-------------------------------------------------
Change Activity:
2018/3/2:
-------------------------------------------------
"""
__author__ = 'lym' #目录
av_catalog = {
"欧美":{
"www.youporn.com": ["很多免费的,世界最大的","质量一般"],
"www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
"x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
},
"日韩":{
"tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
},
"大陆":{
"":["全部免费,真好,好人一生平安","服务器在国外,慢"]
}
}
av_catalog["大陆"][""][1] = "啊哈哈哈哈哈" av_catalog.setdefault("台湾",{"":["台湾小姐姐美","美若天仙的台湾小姐姐"]})#如果没有台湾,则添加台湾,如果字典中有台湾,则不变 for k in av_catalog:
print(k,av_catalog[k])#打印 key ,value
print("--------------打印values的值-------------")
print(av_catalog.values())
print("--------------打印key的值-------------")
print(av_catalog.keys())
循环格式:
for k in av_catalog:
print(k,av_catalog[k])#打印 key ,value
另外一种循环格式,先将字典转成列表,在循环,不建议用:
b = {
'':'haa',
1:3,
2:4
}
for k in b:
print(k,b[k])#建议用 for k,v in b.items():#不建议用
print(k,v)
以上内容包含了字典中所以函数方法,包括增删改查循环还有多级字典等,大家可以把代码拷贝到自己的编译器中运行以下即可明白
集合
集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集等关系
集合常识:
#!/usr/bin/env.python
# -*- coding: utf-8 -*-
"""
-------------------------------------------------
File Name: 集合
Description :
Author : lym
date: 2018/3/5
-------------------------------------------------
Change Activity:
2018/3/5:
-------------------------------------------------
"""
__author__ = 'lym'
#集合也是无序的
list_1 = [1,4,6,8,6,9,2,3,4]
#变成集合 set 数据类型是集合<class 'set'>
list_1 = set(list_1) print(list_1,type(list_1)) list_2 = set([2,6,88,0,6,7,3])
print(list_1,list_2) #list_1.intersection(list_2)--交集
print(list_1.intersection(list_2)) #list_1.union(list_2)--并集
print(list_1.union(list_2)) #list_1.difference(list_2)--差集 = 1里有的2里没有的
print(list_1.difference(list_2))
#list_2.difference(list_1)--差集 = 2里有的1里没有的
print(list_2.difference(list_1)) #
list_3 = set([2,3,6])
print(list_3.issubset(list_2))
print(list_1.issuperset(list_3)) #对称差集,将两个集合中互相没有的取出=把交集去掉
print(list_1.symmetric_difference(list_2)) print("这是一条分割线".center(50,'-')) list_4 = set([1,5,7])
print(list_3.isdisjoint(list_4))#3与4是否有交集,若有为True,若无为False
其他知识:
s = set([3,5,9,10]) #创建一个数值集合 t = set("Hello") #创建一个唯一字符的集合 a = t | s # t 和 s的并集 b = t & s # t 和 s的交集 c = t – s # 求差集(项在t中,但不在s中) d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中) 基本操作: t.add('x') # 添加一项 s.update([10,37,42]) # 在s中添加多项 使用remove()可以删除一项: t.remove('H') len(s)
set 的长度 x in s
测试 x 是否是 s 的成员 x not in s
测试 x 是否不是 s 的成员 s.issubset(t)
s <= t
测试是否 s 中的每一个元素都在 t 中 s.issuperset(t)
s >= t
测试是否 t 中的每一个元素都在 s 中 s.union(t)
s | t
返回一个新的 set 包含 s 和 t 中的每一个元素 s.intersection(t)
s & t
返回一个新的 set 包含 s 和 t 中的公共元素 s.difference(t)
s - t
返回一个新的 set 包含 s 中有但是 t 中没有的元素 s.symmetric_difference(t)
s ^ t
返回一个新的 set 包含 s 和 t 中不重复的元素 s.copy()
返回 set “s”的一个浅复制
运用上方的知识,利用运算符将集合常识中代码简化:
#!/usr/bin/env.python
# -*- coding: utf-8 -*-
"""
-------------------------------------------------
File Name: 集合简化
Description :
Author : lym
date: 2018/3/5
-------------------------------------------------
Change Activity:
2018/3/5:
-------------------------------------------------
"""
__author__ = 'lym' list_1 = set([1,4,6,8,6,9,2,3,46])
list_2 = set([2,6,88,0,6,7,3])
print(list_1)
print(list_2) #交集
print(list_1 & list_2)
#并集
print(list_1 | list_2)
#差集
print(list_1 - list_2)#在1不在2
print(list_2 - list_1)#在2不在1
#对称差集
print(list_1 ^ list_2) print("这是一条分割线".center(50,'-')) #添加一项
list_1.add(666)
print(list_1)
#添加多项
list_1.update([68,89,99])
print(list_1)
#删除
print(list_1.pop())
list_1.remove(46)#删除一项
print(list_1)
以上就是本讲的全部内容
欢迎大家多多交流
- QQ:616581760
- weibo:https://weibo.com/3010316791/profile?rightmod=1&wvr=6&mod=personinfo
- zcool:http://www.zcool.com.cn/u/16265217
- huke:https://huke88.com/teacher/17655.html
浅谈自学Python之路(day2)的更多相关文章
- 浅谈自学Python之路(day3)
今天的主要内容是: 撒 文件操作 对文件操作的流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下: tonghuazhen 听说白雪公主在逃跑 小红帽在担心 ...
- 浅谈自学Python之路(购物车程序练习)
购物车程序练习 今天我们来做一个购物车的程序联系,首先要理清思路 购物车程序需要用到什么知识点 需要用到哪些循环 程序编写过程中考虑值的类型,是int型还是字符串 如果值为字符串该怎么转成int型 用 ...
- 浅谈自学Python之路(day1)
2018-02-19 17:15:14 Python语言相对于其他语言较为简洁,也相对好入门比如后面不加分号,基本见不着大括号等优点 第一个程序,也是学每门语言都需要掌握的第一个代码 print(& ...
- 自学Python之路
自学Python之路[第一回]:初识Python 1.1 自学Python1.1-简介 1.2 自学Python1.2-环境的搭建:Pycharm及python安装详细教程 1.3 ...
- 自学Python之路-Python核心编程
自学Python之路-Python核心编程 自学Python之路[第六回]:Python模块 6.1 自学Python6.1-模块简介 6.2 自学Python6.2-类.模块.包 ...
- 自学Python之路-Python基础+模块+面向对象+函数
自学Python之路-Python基础+模块+面向对象+函数 自学Python之路[第一回]:初识Python 1.1 自学Python1.1-简介 1.2 自学Python1.2-环境的 ...
- 自学Python之路-django
自学Python之路-django 自学Python之路[第一回]:1.11.2 1.3
- 自学Python之路-Python并发编程+数据库+前端
自学Python之路-Python并发编程+数据库+前端 自学Python之路[第一回]:1.11.2 1.3
- 自学Python之路-Python网络编程
自学Python之路-Python网络编程 自学Python之路[第一回]:1.11.2 1.3
随机推荐
- 微信小程序video监测播放进度
video组件提供的进度相关的监测只有 bindtimeupdate ,官方说明这个函数250ms触发一次,在开发者工具上基本符合,但在真机上每隔1秒触发一次.达不到我们要求的精度.对比下音频,wx. ...
- lsof command not found 解决
有些centos 没有 lsof命令,需要安装 yum install lsof -y 使用: lsof -i:端口号
- 【剑指Offer】65、矩阵中的路径
题目描述: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经 ...
- uva 1401
Neal is very curious about combinatorial problems, and now here comes a problem about words. Knowing ...
- 【JavaScript进阶】深入理解JavaScript中ES6的Promise的作用并实现一个自己的Promise
1.Promise的基本使用 // 需求分析: 封装一个方法用于读取文件路径,返回文件内容 const fs = require('fs'); const path = require('path') ...
- (C/C++学习)7.数组及其访问方式
说明:数组的数据类型是一种构造类型,而存储数组的内存是一段连续的存储区域.数组的数据类型决定了连续内存的访问方式,它包括数组的三要素:起始地址.步长以及元素个数. 一.一维数组 1.形式:type 数 ...
- Centos 7 关闭firewall防火墙启用iptables防火墙
一.关闭firewall防火墙 1.停止firewall systemctl stop firewalld.service 2.禁止firewall开机启动 systemctl disable fir ...
- C C++ POSIX 的一些 IO 操作
一些 C C++ POSIX 的 IO 操作总结 文件-内存之间 内存-内存之间 POSIX 有无缓冲的 IO 操作 对文件的操作,读文件至内存,从内存写至文件 // 读文件至内存buf中 void ...
- Python模块 os.walk
Os.walk os.walk(top,topdown=True,onerror=None,followlinks=False) os.walk()是python中内置(built-in)的目录树生成 ...
- i++与++i的区别及效率
i++与++i的区别及效率 先看看基本区别:i++ :先在i所在的表达式中使用i的当前值,后让i加1++i :让i先加1,然后在i所在的表达式中使用i的新值 看一些视频教程里面写for循环的时候都 ...