python 自学之路-Day Two
Day1补充部分
模块初识
模块就是由其他人写好的功能,在程序需要的时候进行导入,直接使用,也叫库。
库有标准库和第三方库,所谓标准库,就是不需要安装就可以直接使用的,自带的;第三方库,就是需要进行下载安装才可以使用。
Python之所以强大是因为其中不仅支持标准库和还支持第三方库,目前先了解一下简单的两个库:sys和os。
文件名不能命名为与模块的名相同的名字,import在寻找模块的时会在当前的目录下寻找,所以如果同名的话会报错,但在p3中会出现不报错的情况。
Sys
Sys.path打印出来是一堆路径,全是python的全局环境变量,存python的内部调用的文件或者是模块的路径,如果不在就会出错。
import sys print(sys.path )
标准库库存放在lib目录下,第三方库存放在sit_packages目录下。
argv,打印相对路径,但在pychame中会显示是绝对路径;还可以添加参数。
import sys
print(sys.argv) 输出结果 e:\Private\私人文件\python\day2>py -3 sys_mod.py ['sys_mod.py'] 在输入的时候加入参数: e:\Private\私人文件\python\day2>py -3 sys_mod.py 1 2 3 ['sys_mod.py', '', '', ''] import sys
print(sys.argv[2]) e:\Private\私人文件\python\day2>py -3 sys_mod.py 1 2 3 2
Os
和操作系统进行交互。调用命令,查看文件,查看文件大小等
.System(”dir”)dir是Windows查看当前目录下的文件,如果存入变量中,输出结果会变成0,因为输出是直接输出到屏幕上,输出完就没了,这里的0是代表输出成功,1是输出错误。执行命令不保存结果。
import os
cmd_res = os.system("dir")
print("--->",cmd_res)#执行命令不保存结果 结果返回: ---> 0
.popen(”dir”)同样存入变量,打印出的时候是内存地址,需要把结果读出来的时候需要加入read,加入的原因,可以理解命令存在内存中,需要用read来取出,如果不取就只是地址。
import os
cmd_res = os.popen("dir").read() #取结果
print("--->",cmd_res)
.mkdir当前目录下创建目录
os.mkdir("new_dir")
创建名字为new_dir的目录
.pyc
PyCodeObject和pyc文件。
我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。
bytes类型
py中文本和二进制分开表示,前者用str表示,后者这bytes表示,p3中两者分的很清晰,不能混合,无法再字节包里面搜索字符串,也不能在字符包里面搜索字节,两者但又可以相互转换(解码decode和编码encode)。
msg = "人工智能" print(msg) print(msg.encode(encoding= "utf-8") ) print(msg.encode(encoding= "utf-8") .decode(encoding= "utf-8") )
在p3中不加入encoding = “utf-8”也不会出错,但最好还是规范点,加上改句。
列表
列表也同样可以进行类似range的步长的输出:
names =["LuFei","SuoLong",["Luo","JiDe"],"XiangJiShi","QiaoBa"]
print(names [0:-1:2])
print(names [::2])
#range (1,10,2) 起始,结束,步长
for i in names :
print(i)
切片
顾首不顾尾,[1:3]第一个代表起始位置,第二个代表结束位置,但不包括在内
在不知道列表多大的情况下,可以用-1代表最后一个列表位置。排序是从左到右,如果需要取末尾的位置可以用负数,需要取到最后一个可以省略如:[-3:]。
names =["LuFei","SuoLong",["Luo","JiDe"],"XiangJiShi","QiaoBa"] print(names[1:3])#切片
print(names[2:-1])
print(names[-2:])
print(names[:3])
追加
变量名前加入.append("”),只能在最末尾的追加
names .append("WuSuoPu")#追加
插入
.insert(1,””)1代表的是需要插入的位置
names.insert(1,"BuLuKe")#插入
names.insert(3,"ShenPing")
更改
N[n]=””,N为列表名,n代表需要更改的位置
names[2] = "LuBing"#替换
print(names)
删除
N.remove("”)直接移除
del N[n],n为删除的位置
N.pop(n)没有输入下标n默认删除最后一个,如果有下标n则删除下标位置的。
#delete
names.remove("QiaoBa")
del names[1] = names.pop(1)
names.pop(1)
查找位置
N.index(“”)
print(names.index("QiaoBa") )#查找下标
print(names[names.index("QiaoBa") ]) #根据下标打印
统计
用法类似:N.count(“”)对某元素的统计。
print(names.count("QiaoBa") )#统计
排序
Sort优先级高到低为:特殊符号,数,大写,小写
names.sort()#排序
倒序
列表的原本的顺序颠倒。
names.reverse()#倒序
扩展
两个列表合并在一起:extend,被合并的还是会存在
names2 = [1,2,3,4]
names.extend(names2)#扩展合并 如果删除后者的话:运行的过程会出错。 del names2
print(names,names2 )
复制
复制中有分两种,一种是深复制,一种是浅复制,前者是会进行完整对修改进行的复制,后者只是复制第一层,如果出现嵌套的情况是对嵌套的内容地址的内容进行修改的也会复制。
import copy #需要完整复制的时候需要加入这句 names2 = copy.deepcopy(names)#深copy,慎用
#names2 = copy.copy(names) #和浅copy一样
#names2 = names .copy() #只是copy第一层,浅层的,内嵌的的时候,内层的列表是指针内容被修改,属于第二层的内容,修改会同步进行复制
print(names)
print(names2)
names[0] = "路飞"#列表里面填写的是下标!!
names[2][0] = "罗"#= name2[2][0] = "罗"
print(names)
print(names2)
元组
一旦创建就不能修改,只读列表,小括号,只有两个用法,count和index。
names = ('JC','jc')
print(names.count("JC") )
print(names.index("JC") )
程序练习。
结合列表和判断语句写出
程序:购物车程序
需求:
1.启动程序后,让用户输入工资,然后打印商品列表
2.允许用户根据商品编号购买商品
3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
4.可随时退出,退出时,打印已购买商品和余额
字符串操作
name = 'my name is jc'
print(name.capitalize()) .format()格式输出 .format_map()字典用法格式输出 .isalnum()阿拉伯数字加英文字母,其他的输出都不可以 .isalpha()纯英文字母 .isadecimal()十进制数 .isdigit()是不是整数 .isidentifier()是不是一个合法的标识符(变量名) .isnumeric()是不是一个只有数字在里面 .isspace()是不是空格 .istitle()是不是每个首字母大写 .isprinable()字符串不存在这个,tty file,drive file这类文件不能打印的 .isupper()是不是大写 p = str.maketrans("abcdefen",'123$@456')
print("j chen".translate(p) ) print('My Name Is '.isupper())
print('+'.join( ['','','']) ) print('a 1A'.isidentifier()) #判读是不是一个合法的标识符
print('33A'.isnumeric())
。。。
等等,可以逐个进行试验,一般经常用到的指令都不多,有些指令只可意会不可言传~~
字典
字典一种key - value 的数据类型,和平时学习使用的字典类似
特性:
字典没有顺序(下标),列表有序(下标)
Key是唯一的,如果相同的key会自动覆盖(去重)
# Author: JC
info = {
'stu1101': "HaiZeiWang",
'stu1102': "HuoYingRenZhe",
'stu1103': "DaoJian",
}
print(info['stu1101']) #打印
#add
info ['stu1104'] = "小鬼杀手" #如果存在就查找不存在就增加
print(info)
#修改
info ['stu1101'] = "海贼王"
print(info)
#del
#info.pop("stu1101")
#del info ["stu1103"]
info.popitem() #随机删除
print(info)
#查找
print(info .get("stu1101"))#没有的话就就会返回none
info ["stu1102"]#不存在的情况会报错
print("stu1102" in info) #info.has_key("1102")在py2中存在
三级菜单
程序: 三级菜单
要求:
打印省、市、县三级菜单
可返回上一级
可随时退出程序
Homework:
购物车优化
用户入口
1.商品信息存入文件里
2.已购商品,余额记录
商家入口
1.可以添加商品,修改商品价格
python 自学之路-Day Two的更多相关文章
- Python自学之路---Day13
目录 Python自学之路---Day13 常用的三个方法 匹配单个字符 边界匹配 数量匹配 逻辑与分组 编译正则表达式 其他方法 Python自学之路---Day13 常用的三个方法 1.re.ma ...
- Python自学之路---Day01
目录 Python自学之路---Day01 注释 单行注释 多行注释 print()函数 语法 参数 实例 input()函数 语法 参数 实例 查看Python的关键字 代码 变量与常量 变量 如何 ...
- Python自学之路
2020年春节,受新型冠状病毒影响,整个春节假期,全国人民都在恐慌之中,为了避免大家上班相互传染,公司号召国家政策,开始上班日期延迟,在家呆的实在太无聊,突然感觉自己不能浪费这美好的时光,决定学习Py ...
- 我的Python自学之路-003 字符串的知识
'''字符串是以引号或者单引号括起来的任意文本,例如"123","asdfjk",'adfa'引号或者单引号,只是一种表示方法,并不是字符串的一部分如果字符串本 ...
- python 自学之路-Day one
一.Python介绍 创始人吉多范罗苏姆(龟叔),脚本解释程序 应用领域广,数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等. 主要应用领域: 云计算:OpenStack: WEB开发:经 ...
- Python自学之路——自定义简单装饰器
看了微信公众号推送的一道面试题,发现了闭包的问题,学习时间短,从来没有遇到过这种问题,研究一下. Python函数作用域 global:全局作用域 local:函数内部作用域 enclosing:函数 ...
- 我的Python自学之路-002 字典的知识
'''字典是python中唯一的验证类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算.根据计算的结果决定value的存储地址.所以字典是无序存储的.且key必 ...
- 我的Python自学之路-001 列表的知识
#_date_:2020/9/11 '''列表和字典是python中用的最多的数据类型 假如要存储一个班级的人名,需要怎么做?有这么几种方法:1.定义很多个变量: name0 = 'wucaho' n ...
- 全面进攻python之前回顾下自己近三个月的自学之路
人生是在一直试错的过程中成长起来的.这句话貌似很有道理,但回顾了下自己近三个月python自学学习之路,又觉得自己对这句话又有了新的看法------行动之前必须要有正确的选择,这样做错了才能成长. 2 ...
随机推荐
- springCloud系列 Config配置中心
1.config服务的部署 2.yum文件的格式 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 3.热部署 4.配 ...
- SpringCloud实战-Zuul网关服务
为什么需要网关呢? 我们知道我们要进入一个服务本身,很明显我们没有特别好的办法,直接输入IP地址+端口号,我们知道这样的做法很糟糕的,这样的做法大有问题,首先暴露了我们实体机器的IP地址,别人一看你的 ...
- C#实现联通短信Sgip协议程序源码
此程序为中国联通Sgip协议程序接口,适合在中国联通申请了短信发送端口的公司使用. 短信群发已经成为现在软件系统.网络营销等必不可少的应用工具.可应用在短信验证.信息群发.游戏虚拟商品购买.事件提醒. ...
- java.lang.IllegalArgumentException: Request header is too large
tomcat运行项目时,有一个请求过去后,后台报这样的错java.lang.IllegalArgumentException: Request header is too large原因:请求头超过了 ...
- Extjs 上传文件 IE不兼容的问题[提示下载保存]
我最不喜欢的浏览器的是IE,但无奈很多项目的客户使用的是IE. 在使用Extjs做文件上传时,其他浏览器没有问题,但IE却一个劲提示保存文件,看服务端运行,它其实是运行成功了已经,但客户端的进度条却一 ...
- ucloud发送短信的php sdk
在ucloud官方的版本中,只有python的sdk可供调用,现提供php的sdk发送短信 项目地址:https://github.com/newjueqi/ucloudsms 使用方法: (1)在c ...
- scrapy分布式爬虫scrapy_redis一篇
分布式爬虫原理 首先我们来看一下scrapy的单机架构: 可以看到,scrapy单机模式,通过一个scrapy引擎通过一个调度器,将Requests队列中的request请求发给下载器,进行页 ...
- Python sys和shutil模块
# !/user/bin/python # -*- coding: utf-8 -*- import sys # version 获取版本信息 sys.version # maxint 支持的最大in ...
- 搭建 vue2 单元测试环境(karma+mocha+webpack3)
从网上找了很多例子关于单元测试,都是如何新建项目的时候的添加单元测试,用vue-cli中怎么添加,但是我的项目已经生成了,不能再一次重新初始化,这时如何添加单元测试,这里面遇到了好多坑,写在这里记录一 ...
- Mac下将文件复制到移动硬盘
在Mac下将移动硬盘格式化成exfat,这样Mac和Windows都可以对移动硬盘进行识别