今天的主要内容是:

  • 标准库
  • 数据类型知识
  • 数据运算
  • 三元运算
  • 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"
 
字符串拼接:
  python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,+号每出现一次就会在内从中重新开辟一块空间。
 
字符串格式化输出
 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)

基本操作:

  • 索引
  • 切片
  • 追加
  • 删除
  • 长度
  • 切片
  • 循环
  • 包含
列表中Copy的用法
 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

5、元组(不可变列表)
 
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表
 
创建元组:
 names = ('lff','ged')
names.append('guoy')
print(names)

结果是报错的:

说明上面的代码只是演示了为什么元组只能查不能添加

它只有2个方法,一个是count,一个是index,完毕。

练习:写出购物车程序

需求:

  1. 启动程序后,让用户输入工资,然后打印商品列表
  2. 允许用户根据商品编号购买商品
  3. 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
  4. 可随时退出,退出时,打印已购买商品和余额

  

6、字典(无序)
创建字典:
 person = {"name": "mr.wu", 'age': 18}

person = dict({"name": "mr.wu", 'age': 18})

常用操作:

  • 索引
  • 新增
  • 删除
  • 键、值、键值对
  • 循环
  • 长度

数据运算

  • 首先举个简单的例子 4 +5 = 9 。 例子中,45 被称为操作数,"+" 称为运算符。
算数运算:

比较运算:

赋值运算:

逻辑运算:

成员运算:

身份运算:

位运算:

运算符优先级:

三元运算

 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 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。

 #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)的更多相关文章

  1. 浅谈自学Python之路(day3)

    今天的主要内容是: 撒 文件操作 对文件操作的流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下: tonghuazhen 听说白雪公主在逃跑 小红帽在担心 ...

  2. 浅谈自学Python之路(购物车程序练习)

    购物车程序练习 今天我们来做一个购物车的程序联系,首先要理清思路 购物车程序需要用到什么知识点 需要用到哪些循环 程序编写过程中考虑值的类型,是int型还是字符串 如果值为字符串该怎么转成int型 用 ...

  3. 浅谈自学Python之路(day1)

    2018-02-19  17:15:14 Python语言相对于其他语言较为简洁,也相对好入门比如后面不加分号,基本见不着大括号等优点 第一个程序,也是学每门语言都需要掌握的第一个代码 print(& ...

  4. 自学Python之路

    自学Python之路[第一回]:初识Python    1.1 自学Python1.1-简介    1.2 自学Python1.2-环境的搭建:Pycharm及python安装详细教程    1.3  ...

  5. 自学Python之路-Python核心编程

    自学Python之路-Python核心编程 自学Python之路[第六回]:Python模块       6.1 自学Python6.1-模块简介    6.2 自学Python6.2-类.模块.包  ...

  6. 自学Python之路-Python基础+模块+面向对象+函数

    自学Python之路-Python基础+模块+面向对象+函数 自学Python之路[第一回]:初识Python    1.1 自学Python1.1-简介    1.2 自学Python1.2-环境的 ...

  7. 自学Python之路-django

    自学Python之路-django 自学Python之路[第一回]:1.11.2 1.3

  8. 自学Python之路-Python并发编程+数据库+前端

    自学Python之路-Python并发编程+数据库+前端 自学Python之路[第一回]:1.11.2 1.3

  9. 自学Python之路-Python网络编程

    自学Python之路-Python网络编程 自学Python之路[第一回]:1.11.2 1.3

随机推荐

  1. C# 计算百分比

    //计算比率 decimal A =(decimal) 200.20; decimal B = (decimal)1000.20; decimal t = decimal.Parse((A/B).To ...

  2. java中一个数组不能放不同数据类型的值

    在java中,数组不能放不同数据类型的值. 方法一: 多态 定义数组类型的时候定义为父类,而存进数组为父类的子类 public class test2 { public static void mai ...

  3. SqlServer IsNull 与 NullIf

    ISNULL(check_expression, replacement_value) check_expression 与 replacement_value 数据类型必须一致,如果 check_e ...

  4. [工具]ps

    ps 如果想看一个进程的启动时间,可以用lstart来看 [root@jiangyi02.sqa.zmf /home/ahao.mah] #ps -eo pid,lstart,etime,cmd |g ...

  5. DNS详细解析过程【转】

    转自:http://blog.csdn.net/crazw/article/details/8986504 先说一下DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的网址www.baid ...

  6. 计蒜客 疑似病毒 (AC自动机 + 可达矩阵)

    链接 : Here! 背景 : 开始我同学是用 AC自动机 + DP 的方法来做这道题, 这道题的标签是 AC自动机, 动态规划, 矩阵, 按道理来说 AC自动机 + DP 应该是能过的, 但是他不幸 ...

  7. CTF实战(隐写术):欢迎来到地狱

    前言:请登录实验吧开启刷题模式,拿到的flag返回该网站验证正确性. 下载“欢迎来到地狱”CTF题目(总共三个文件

  8. Flask - 安装,仪式, 返回, 和 请求

    目录 Flask - 第一篇 安装,仪式, 返回, 和 请求 一. Flask 的安装 和 程序员仪式 安装 程序员仪式 二. Flask 的返回值 三. Flask 请求request Flask ...

  9. PAT 1093. Count PAT's

    The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, and ...

  10. 2.5.3 简单的 echo 输出

        echo的任务就是产生输出,可用来提示用户,或是用来产生数据供进一步处理.       原始的echo命令只会将参数打印到标准输出,参数之间以一个空格隔开,并以换行符号(newline)结尾. ...