第二课 python基础2(列表,字符串,集合,字典…
2018-06-18 01:53:58来源:未知 阅读 ()
1.列表,元祖操作
2.字符串操作
3.字典操作
4.集合操作
5.文件操作
6.字符编码与转码
7.内置函数
1.列表,元祖操作
列表操作:
COPY:
结果:
可以看出,copy是个浅copy,它copy的是这个列表指针指向的地址,把每一个元素看成一个地址,所以'lzx‘ 改变了以后,list;b 也跟着改变了,所以’lz’没有改变
结果:
这个结果表示了a 和 b 这两个列表,其实指向的都是同一个地址,并没有又重新复制一列表给 b ,如果要复制一份单独的列表给 b ,就需要 import copy ,用这个库里的 deepcopy() 这个函数。
写一个小程序:
1.启动程序后,让用户输入工资,然后打印商品列表
2.允许用户根据商品编号购买商品
3.用户选择商品后,检测余额是否足够,够就直接扣款,不够就提醒
4.可随时退出,退出时,打印已购买的商品和余额
commodity = [ ('Iphone',5800), ('Mac_Pro',9800), ('bike',800), ('watch',10600), ('coffee',60), ('kola',10), ] shopping_list = [] salary = input('input your salary:') if salary.isdigit():#判断输入的是否是一个整数 salary = int(salary) while True: for index,item in enumerate(commodity): print(index,item)#打印出商品和下标 user_choice = input('please choose your commodity:') if user_choice.isdigit():#判断输入的是否是一个整数 user_choice = int(user_choice)#把输入的字符串转化成一个整数 if user_choice < len(commodity) and user_choice > -1: #判断商品 p_item = commodity[user_choice] if p_item[1] <= salary:#买得起 shopping_list.append(p_item) salary -= p_item[1] print('added %s in shopping car,your current balance is\033[31;1m%s\033[0m'%(p_item,salary)) else: print('\033[41;1m你的余额只剩[%s]啦,还买个毛线\033[0m'%salary) else: print('product code [%s] is not exist'%user_choice) elif user_choice == 'q': print('------shopping list------------') for p in shopping_list: print(p) print('your current balance:',salary) exit() else: print('invalid optiob')
2.字符串操作:
常用的为例:
3.字典操作
字典:无序的,没有下标,可以嵌套多层,多级操作
常用操作:
小程序:三级菜单:
data = { '北京':{ "昌平":{ "沙河":["oldboy","test"], "天通苑":["链家地产","我爱我家"] }, "朝阳":{ "望京":["奔驰","陌陌"], "国贸":{"CICC","HP"}, "东直门":{"Advent","飞信"}, }, "海淀":{}, }, '山东':{ "德州":{}, "青岛":{}, "济南":{} }, '广东':{ "东莞":{}, "常熟":{}, "佛山":{}, }, } enit_flag = False while not enit_flag: for i in data: print(i) choice1 = input('choice1:') if choice1 in data: while not enit_flag: for i2 in data[choice1]: print(i2) choice2 = input('choice2') if choice2 in data[choice1]: while not enit_flag: for i3 in data[choice1][choice2]: print(i3) choice3 = input('choice3:') if choice3 in data[choice1][choice2]: while not enit_flag: for i4 in data[choice1][choice2][choice3]: print(i4) choice4 = input('这是最后一层,返回请按b') if choice4 == 'b': break elif choice4 == 'q': enit_flag = True if choice3 == 'b': break elif choice3 == 'q': enit_flag = True if choice2 == 'b': break elif choice2 == 'q': enit_flag = True
后面学了函数以后可以用函数将重复的代码封装成一个函数,然后调用,看起来就会简洁很多了。
4.集合(set)
在集合中,所有的元素都是唯一的,无序的,主要操做:去重,关系测试
print(a.intersection(b))#求交集 print(a & b)
print(a.union(b))#求并集 print(a | b)
print(a.difference(b))#求差集,取a里有,b里没有的 print(a - b)
print(a.symmetric_difference(b))#对称差集,去除两边共有的,剩下的元素的集合 print(a ^ b)
print(a.issubset(b))#a是b的子集吗?返回t/f print(a.issuperset(b))#a是b的父集吗?
c.add((10))#在c的集合里添加一个10 print(c)
c.update([11,12,13])#在c的集合里添加多项 print(c)
c.discard(12)#在集合c里删除一个12,如果12没有在C中,则返回None,不报错 print(c)
c.remove(11)#在集合c里删除一个11,如果11没有在c中,则会报错 print(c)
print(len(a))#返回的a的长度
1.文件存储
(1)文件
我们大多数人可能都有相似的经历:在编写代码写的正起劲时,系统突然蓝屏崩溃,重启电脑后发现之前写过的代码全部不见了,这时候就会吐槽这破系统或者后悔之前没保存等等。
在你编写代码的时候,操作系统为了更快的做出响应,把当前所有的数据都放在内存中,因为内存和CPU的传输速度要比硬盘和CPU之间的传输速度快很多倍,但内存有一个天生的不足,就是一旦断电,没保存的数据就没有了,因此我们在编写代码时,应养成一个随时用快捷键Ctrl+S保存数据。
Windows是以扩展名来指出文件的类型的,一般比较常见的类型有: .exe,是可执行文件;.txt 是文本文件,还有.ppt ; .jpg ; .avi 等等,这些都被称为文件。
(2) 打开文件
Python中,用open()这个函数来打开文件并返回文件对象:
open(file , mode = 'r' , buffering = -1 , encoding = None , newline = None , closefd = True , opener = None )
open()有很多参数,除了第一个参数,后面的都有默认值,我们现在先只看第一个和第二个参数。第一个是传入文件名,要带路径,若不带路径,那么Python就会在当前文件夹去打开,第二个参数指定打开模式:
打开一个E盘下的 test.txt文件:
f = open(E: \\ test.txt )
没有消息说明文件已经被打开,可以对其进行操作,没有注明操作,默认是以只读的模式打开。
实例:
此段代码,就将“你好啊”写入了E盘 测试文件 文件夹中的a.txt文件中了。
文件对象方法:
close()方法用于关闭文件,文件的关闭非常重要,在对文件的操作之后定要记得关闭文件。
seek(offset,from) 方法有两个参数,表示从from(0代表文件的起始位置,1代表当前位置,2代表文件的末尾)偏移offset字节。
文件的读取和定位:
文件对象自身是可迭代的,可以直接用 for 迭代读取出来。
文件的写入:
如要写入文件,要确保文件的打开模式中有‘r’ 或 ‘a’ ,否则会出错。
文件补充:
.flash() 强制刷新。当要将一段数据写入文件的时候,运行这个程序,但是这段数据并没有马上存入文件,而是存入了缓存区,等到这个缓存满了以后再一起存入文件,在这个过程中,如果电脑蓝屏或死机了,那么这段数据就丢失了,而 . flash()这个函数,可以让数据直接存储到文件中
使用规则:
f = ('new','w',encoding = 'utf-8')
f.write('abc')#此时运行,这段数据并没有出现在文件中,在它的缓存中
f.flash()#此时运行,数据已经在new 的文件中了。
打印类似进度条程序:
import sys,time for i in range(20) sys.stdout.write('#') sys.stdout.flush()每次刷新 time.sleep(0.1)#等待0.1s
.truncate(): 截断文件
r+:读写,可以读可以以追加的方式写入
w+:写读,创建一个文件在写,若源文件有数据,则清空数据
a+:追加写读
rb:二进制读
wb:二进制写:
f.write('hello word'.encode())#hello word 是字符串格式的,所以要经过encode()编码,才可以二进制写入
ab:二进制追加写
网络传输必须用二进制的形式传输。
二进制的文件如果以字符串的格式打开可能会导致文件损坏,要用二进制的格式打开
文件修改:
文件中内容的修改:1.vim:先把文件全部加载到内存里,再修改
2.把改完的之后的内容放到一个新的文件中,源文件不变。
f = open('timian','r',encoding= 'utf-8') f2 = open('new','w',encoding = 'utf-8') for line in f: if '字符串1' in line: line = line.replace('字符串1','字符串2') f2.write(line) f.close() f2.close()
with语句:
f = open('文件名',‘r’,encoding = 'utf-8')
f2 = open('文件名2',‘r’,encoding = 'utf-8')
等同于: with open('文件名',‘r’,encoding = 'utf-8') as f ,\
open('文件名2',‘r’,encoding = 'utf-8') as f2:
for i in f:
print(i)
执行完后,文件会自动关闭,不用输f.close()去关闭了
6.字符的编码与转码
ASCII: 记住一句话:计算机中的所有数据,不论是文字、图片、视频、还是音频文件,本质上最终都是按照类似 01010101 的二进制存储的。
再说简单点,计算机只懂二进制数字! 所以,目的明确了:如何将我们能识别的符号唯一的与一组二进制数字对应上?于是美利坚的同志想到通过一个电平的高低状态来代指0或1,
八个电平做为一组就可以表示出 256种不同状态,每种状态就唯一对应一个字符,比如A--->00010001,而英文只有26个字符,算上一些特殊字符和数字,128个状态也够
用了;每个电平称为一个比特为,约定8个比特位构成一个字节,这样计算机就可以用127个不同字节来存储英语的文字了。这就是ASCII编码。
UNICODE编码: 很多其它国家都搞出自己的编码标准,彼此间却相互不支持。这就带来了很多问题。于是,国际标谁化组织为了统一编码:提出了标准编码准
则:UNICODE 。 UNICODE是用两个字节来表示为一个字符,它总共可以组合出65535不同的字符,这足以覆盖世界上所有符号(包括甲骨文)
utf8: unicode都一统天下了,为什么还要有一个utf8的编码呢? 大家想,对于英文世界的人们来讲,一个字节完全够了,比如要存储A,本来00010001就可以了,现在吃上了unicode的大锅饭, 得用两个字节:00000000 00010001才行,浪费太严重! 基于此,美利坚的科学家们提出了天才的想法:utf8. UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,它可以使用1~4个字节表示一个符号,根据
不同的符号而变化字节长度,当字符在ASCII码的范围时,就用一个字节表示,所以是兼容ASCII编码的。 这样显著的好处是,虽然在我们内存中的数据都是unicode,但当数据要保存到磁盘或者用于网络传输时,直接使用unicode就远不如utf8省空间啦! 这也是为什么utf8是我们的推荐编码方式。 Unicode与utf8的关系: 一言以蔽之:Unicode是内存编码表示方案(是规范),而UTF是如何保存和传输Unicode的方案(是实现)这也是UTF与Unicode的区别。
所以的转换,都是要通过unicode过度的。如果一个 gbk 转换成一个gb2312,就要先转换成unicode,再转换成 gb2312,可以看下面的例子:
#print(s.decode('utf-8').encode('gb2312'))#python2中是这样的,2中程序默认是ascii格式的,3中默认就是unicode格式的了 #print(s.encode('gb2312'))#所以不用decode(‘utf-8’)了 #print(s.encode('utf-8'))
s ='你好'#本身是unicode类型的 s1 = s.encode('gb2312') print(s1) print(s1.decode('gb2312').encode('utf-8').decode('gbk'))#s1原来是gb2312格式的,先转换解码成unicode的,然后再转换成gbk格式的 print(s1.decode('gb2312').encode('utf-8'))
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash