python学习-02(数据类型、字符串、列表、元祖、字典)

一、模块、库

Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持。

模块初始化:模块就是库,库可以是标准库或者是第三方库。 

sys模块

os模块 

Sys.path

导入模块的时候,先从当前目录下面查找。

我们起名字时候不能和导入的模块名字相同。

Python的第三方库 

E:\\python_path\\base\\lib\\site-packages

Python的标准库位置

 E:\\python_path\\base 

Sys.argv 功能:sys.argv 将你从命令行执行脚本时的 脚本名称、参数保存到列表中。

os模块:

os.system("") 调用后,直接输出屏幕

print (os.system("dir")) 结果是0,表示执行命令

 

第三方库

就是.py文件 

使用import 文件名(不需要.py) 

注意些的模块的路径。可以放在Python第三方库的目录下

 

二、pyc是什么?

1. Python是一门解释型语言? 

我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在。如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊! 

2. 解释型语言和编译型语言 

计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。 

编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。 

解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。 

解释型语言和编译型语言的优缺点:因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。 

此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。 

3. Python到底是什么 

其实Python和Java/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。 

当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。

其实当我们执行python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述Python,Python是一门先编译后解释的语言。 

4. 简述Python的运行过程 

在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。 

我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。 

当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。 

当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。 

所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

三、数据类型

3.1、数字 type()查看数据类型

  2 是一个整数的例子。

  长整数不过是大一些的整数。

  3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。

  (-5+4j)和(2.3-4.6j)是复数的例子,其中-5,4为实数,j为虚数。 

int(整型) 

  在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647

  在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807

long(长整型)(Python3中没有长整形)

  跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。

  注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。

float(浮点型)

      先扫盲 http://www.cnblogs.com/alex3714/articles/5895848.html

  浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。

complex(复数)  Python中虚数用j

  复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。

注:Python中存在小数字池:-5 ~ 257

3.2、布尔值 (布尔值中真为1(TRUE),假为0(False))

  真或假

  1 或 0

3.3三元运算符

  result = 值1 if 条件 else 值2

  如果条件为真,result=值1,

  如果条件为假,result=值2

3.4字符串

  字符串  hello world
  万恶的字符串拼接:python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。  

  name = "ajun"

  print "i am %s " % name 

  #输出: i am ajun

  PS: 字符串是 %s;整数 %d;浮点数%f

3.5进制

二进制:01

八进制:01234567

十进制:0123456789

十六进制:0123456789abcdef

3.6、字节类型(byte)

  Python3中最重要的新特性是对文本和二进制数据做了更加清晰的区分,文本采用unicode编码,用str表示。二进制用bytes字节表示。Python3中不会任意的混用二进制和字节方式。我们不能任意的拼接字节包和字符串,也无法再字节包中搜索字符串,反之一样。

  视频音频文件,必须是二进制。Python3中数据在网络上传输必须是二进制,而Python2中不需要。

  字节包和字符串之间需要编码转换。

  b开头的是二进制,Python3中字符串默认编码是utf-8。  

  print('¥20'.encode('utf-8'))
  结果:b'\xef\xbf\xa520'
  print(b'\xef\xbf\xa520'.decode('utf-8'))
  结果:¥20

3.7 运算符
#1.关系运算符  > < >= <=  == !=
print(5>3>2)
print(5>=3)
print(5>=5)
print(5==5)
print(5!=5)

#2.成员运算符 in not in is(自己看)
print(3 in [1,2,3])
print(3 not in [4,56,6])
print(3 in (1,2,3))

#3.逻辑运算符 and(与&&) or(或||) not(非 !)
print(2>3 and 1>2) #
print(2>3 and 1==1) #
print(3>2 and 2>=2) #
print(2>3 or 1>2) #
print(2>3 or 1==1) #
print(3>2 or 2>=2) #
print(not (2>3 and 1>2)) #
print(not (3>2 and 2>=2)) #

#4.位运算符 移位运算 >> << &(按位与) |(或)^(异或)
print(5>>1)#2        101    010
print(5<<2)#20      101    10100
print(10&5)#0      1010   0101   0000
print(10|5)#15    1010   0101   1111
print(10^1)#11   1010   0001   1011
print(8^2)#10   1000  0010    1010
#5.补充说明  --  ++  python不支持
i=5
print(-i)#-5 - 表示负号
print(--i)#5
print(+i)#5
print(++i)#5

#6关键字 and or not in is True Flase None
#if else for while break continue elif class def
#pass
#7.内置函数 max min sum len
import random
#a=[1,2,3,43,5,99,6,7,8,9,109,0,5,6]
a=list(range(11,2,-3))
print(a)
print(max(a)) #最大值
print(min(a))
print(sum(a))
print(len(a))
print(sum(a)/len(a))#求平均值
print(sorted(a))#从小到大
print(sorted(a,reverse=True))#从大到小
print(a)
random.shuffle(a)#打乱列表的顺序
print(a)

运算符练习:

1.输出并解释 2<5>4的值  #
2.如何判断3是否在集合(3,5,6)里面 #
3.当前有三个变量a,b,c,如何用逻辑运算符表示a最大
4.求10的左移两位的值和右移两位的值
5.求10和3的按位与、或、异或的值
6.i=3,i--和--i的值分别是多少,
7.a=[1,23,4,5,4,5,67,7,8,999,9,0,9]
 求a的最大值,最小值,和,平均值,
  显示从大到小的顺序和从小到大的顺序
View Code

四、列表

列表基础知识

列表用[]表示,打印列表,print()。列表的序数也是从0开始的。

列表:连续的有序序列,可以修改。
列表的表示:[],数据间用‘逗号’隔开
列表的存储:列表可以存储任意数据类型。
列表的访问:支持双向访问。

列表的创建:

name_list[]=['ajun','daxiong','kangfu']

  或者

name_list=list(['ajun','daxiong','kangfu'])

a=[1,2,3,4,5,6,7]#通过 = 方式来创建一个列表
#list() 把数据转换为列表
b=list(range(1,101,2))
c=list("python")#把字符串转换为列表
d=[]#定义一个空列表
e=[1,'xinan',1.1,[1,2,3,4]]#列表可以存储任意数据类型
print(e[2])#访问下标为2的元素
print(e[-2])#访问下标为-2的元素
#如何访问元素3?
print(e[-1][2])
列表访问举例

列表的切片

 1 >>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
 2 >>> names[1:4]  #取下标1至下标4之间的数字,包括1,不包括4
 3 ['Tenglan', 'Eric', 'Rain']
 4 >>> names[1:-1] #取下标1至-1的值,不包括-1
 5 ['Tenglan', 'Eric', 'Rain', 'Tom']
 6 >>> names[0:3] 
 7 ['Alex', 'Tenglan', 'Eric']
 8 >>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
 9 ['Alex', 'Tenglan', 'Eric']
10 >>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写
11 ['Rain', 'Tom', 'Amy'] 
12 >>> names[3:-1] #这样-1就不会被包含了
13 ['Rain', 'Tom']
14 >>> names[0::2] #后面的2是代表,每隔一个元素,就取一个
15 ['Alex', 'Eric', 'Tom'] 
16 >>> names[::2] #和上句效果一样
17 ['Alex', 'Eric', 'Tom']
alex的代码
 1 names = ["4ZhangYang", "#!Guyun","xXiangPeng","ChenRonghua","XuLiangchen"]
 2 print(names)
 3 print(names[0],names[2])
 4 print(names[1:3])
 5 print(names[:3])
 6 print(names[2:])
 7 print([1:-1])
 8 print(names[0:-1:2])
 9 print(names[::2])
10 print(names[:])
11 print([-1:-2])
12 
13 结果:
14 ['4ZhangYang', '#!Guyun', 'xXiangPeng', 'ChenRonghua', 'XuLiangchen']
15 4ZhangYang xXiangPeng
16 ['#!Guyun', 'xXiangPeng'] #分片包含前面不包含后面
17 ['4ZhangYang', '#!Guyun', 'xXiangPeng']#分片前面省略默认从0开始
18 ['xXiangPeng', 'ChenRonghua', 'XuLiangchen']#分片后面省略,默认到最后一个
19 ['#!Guyun', 'xXiangPeng', 'ChenRonghua']#分片,-1表示最后一个
20 ['4ZhangYang', 'xXiangPeng']#分片可以添加步长
21 ['4ZhangYang', 'xXiangPeng', 'XuLiangchen']
22 ['4ZhangYang', '#!Guyun', 'xXiangPeng', 'ChenRonghua', 'XuLiangchen']
23 []#分片默认前面的小于后面
列表打印的分片例子

 #列表的方法:增删改查

#增加 insert append extend
"""
a=[1,23,3,4,5,6]
b=['p','y','t','h']
a.insert(2,7)#向下标为2的位置,插入元素7
a.insert(3,"xinan")
a.append("17-1")#向末尾追加元素
#把列表b以元素的形式,追加到列表a
#a.append(b)#[1, 23, 7, 'xinan', 3, 4, 5, 6, '17-1', ['p', 'y', 't', 'h']]
#把列表b扩展到列表a中
a.extend(b)#[1, 23, 7, 'xinan', 3, 4, 5, 6, '17-1', 'p', 'y', 't', 'h']
print(a)
"""
View Code
#删除 remove  pop del  clear
a=[1, 23, 7, 'xinan', 3,'p', 'y', 't', 'h']
#a.pop(0)#删除的下标为0的元素
#a.pop()#默认删除最后一个元素
a.remove('y')#删除元素
#a.remove(1111111111111)
del a[0]#删除a[0]这个元素
#del a  #删除列表,都删除了
a.clear()#清空列表,但是没有删除
print(a)
删除举例

#修改
"""
a=[1, 23, 7, 'xinan', 3,'p', 'y', 't', 'h']
a[0]='xxxx'
print(a)
"""
#查看 count 统计 index 检索
"""
a=[1, 3, 7, '3', 3,4,5, 3, 1]
#print(a.count(3))#统计元素3出现了几次
#index方法查找元素的位置
print(a.index(3) )#返回元素3第一次出现的下标
print(a.index(3,2,-1) )#返回元素3第一次出现的下标
"""
查找举例
列表的排序和翻转
1 name_list=['ajun','daxiong','leipi','kangfu','ajun','1','2']
2 name_list.reverse()
3 print(name_list)
4 name_list.sort()
5 print(name_list)
6 
7 ['2', '1', 'ajun', 'kangfu', 'leipi', 'daxiong', 'ajun']
8 ['1', '2', 'ajun', 'ajun', 'daxiong', 'kangfu', 'leipi']
排序sort(),翻转reserve()

列表的复制

 1 #复制  copy   =
 2 # =  这种复制,a修改了,b也修改
 3 """
 4 a=[1,2,3,4,5]
 5 b=a
 6 print(a,b)
 7 a[2]='xinan'
 8 print(a,b)
 9 """
10 #copy 浅复制 :创建了一个新列表
11 """
12 a=[1,2,3,4,5]
13 b=a.copy()
14 print(a,b)
15 a[2]="xinan"
16 print(a,b)
17 """
18 #deepcopy
19 from copy import deepcopy
20 a=[1,2,3,[1,2,3],4]
21 b=deepcopy(a)
22 c=a.copy()
23 print(a,b,c)
24 a[3][0]="xinan"
25 print(a)
26 print(b)
27 print(c)
copy = deepcopy  三种复制举例
 1 name_list=['ajun','daxiong','leipi','kangfu','ajun','1','2']
 2 name_list2=name_list.copy()#copy()浅复制
 3 print(name_list2)
 4 name_list[1]='zhangsan'
 5 print(name_list)
 6 print(name_list2)
 7 name_list[1]=['lisi','wangwu']
 8 name_list2=name_list.copy()
 9 print(name_list)
10 print(name_list2)
11 
12 ['ajun', 'daxiong', 'leipi', 'kangfu', 'ajun', '1', '2']
13 ['ajun', 'zhangsan', 'leipi', 'kangfu', 'ajun', '1', '2']
14 ['ajun', 'daxiong', 'leipi', 'kangfu', 'ajun', '1', '2']
15 ['ajun', ['lisi', 'wangwu'], 'leipi', 'kangfu', 'ajun', '1', '2']
16 ['ajun', ['lisi', 'wangwu'], 'leipi', 'kangfu', 'ajun', '1', '2']
17 ['ajun', ['lisi', 'wangwu'], 'leipi', 'kangfu', 'ajun', '1', '2']
了解copy()

列表的方法:

#enumerate多用于在for循环中得到计数,
# 利用它可以同时获得下标和值,
# 即需要index和value值的时候可以使用
"""
a=['p','y','t','h','o','n']
for i,j in enumerate(a):#i获取下标 j获取列表的值
    print(i,j)
"""
enumerate用法

列表运算符 + *

1 a=[1,2,3,4,5,65]
2 b=list("python")
3 print(a+b,a*2)

列表表达式


#[ 表达式 for 变量 in 取值范围 if 条件]
b=[i*i for i in range(0,10,1) if i>5]
print(b)

列表练习

1.删除列表中所有的28这个元素

注意:remove的bug

import random
a=[]
for i in range(300):
    a.append(random.randint(1,100))
for i in range(0,a.count(28),1):
    a.remove(28)
方法一
for i,j in enumerate(a):#i是a列表的下标
    if j==28:#j是列表的元素的值
        a.pop(i)#直接根据下标来删除列表元素
方法二
b=[]
for i,j in enumerate(a):#i是a列表的下标
    if j!=28:#j是列表的元素的值
        b.append(j)
a=b.copy()
方法三

 

五、元祖

元祖的表示(),元祖是不可修改的列表。

#元祖 : 轻量级列表
#元祖:连续的有序序列,元素不可修改
#支持双向访问,切片,查 count index
#元祖的表示:(,,,,,)

元祖的创建

1 name_list=('ajun','daxiong','leipi','kangfu','ajun','1','2')#直接创建
2 print(name_list)
3 name_list=tuple(('ajun','daxiong','leipi','kangfu','ajun','1','2'))#通过tuple()方法创建
4 print(name_list)
5 name_list=['ajun','daxiong','leipi','kangfu','ajun','1','2']
6 name_list2=tuple(name_list)#列表转换为元祖
7 print(name_list2)
元祖的创建

元祖只有两种方法,查找index()和统计count()

1 name_list=('ajun','daxiong','leipi','kangfu','ajun','1','2')
2 print(name_list.index('ajun'))
3 print(name_list.count('ajun'))
4 
5 0
6 2
元祖的查找和统计

六、字典

 字典操作:

字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。 

#字典:无序的(不支持双向访问)
#可以修改的(增删改查)
#dict key:键 value:值 item:项
#字典的表示:{键:值,键:值,,,,,,}

语法:

info = {

    'stu1101': "TengLan Wu",

    'stu1102': "LongZe Luola",

    'stu1103': "XiaoZe Maliya",

}

字典的特性:

dict是无序的

key必须是唯一的,so 天生去重 

创建,增加,修改,删除(pop方法)

创建字典
stu_dict={'stu1102': 'LongZe Luola', 'stu1104': '大熊', 'stu1103': 'XiaoZe Maliya', 'stu1101': 'TengLan Wu'}
print(stu_dict)
增加或者修改  存在就是修改,不存在就是增加,通过key
stu_dict={'stu1102': 'LongZe Luola', 'stu1104': '大熊', 'stu1103': 'XiaoZe Maliya', 'stu1101': 'TengLan Wu'}
stu_dict["stu1104"] = "大熊00"
print(stu_dict)

{'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1101': '康复'}

删除

stu_dict={'stu1102': 'LongZe Luola', 'stu1104': '大熊', 'stu1103': 'XiaoZe Maliya', 'stu1101': 'TengLan Wu'}
stu_dict.pop('stu1102')
print(stu_dict)

{'stu1104': '大熊', 'stu1103': 'XiaoZe Maliya', 'stu1101': 'TengLan Wu'}
>>> info
字典的方法

删除

 1 stu_dict={'stu1102': 'LongZe Luola', 'stu1104': '大熊', 'stu1103': 'XiaoZe Maliya', 'stu1101': 'TengLan Wu'}
 2 del stu_dict['stu1102']
 3 print(stu_dict)
 4 
 5 {'stu1104': '大熊', 'stu1103': 'XiaoZe Maliya', 'stu1101': 'TengLan Wu'}
 6 
 7 #随机删除
 8 stu_dict={'stu1102': 'LongZe Luola', 'stu1104': '大熊', 'stu1103': 'XiaoZe Maliya', 'stu1101': 'TengLan Wu'}
 9 stu_dict.popitem()
10 print(stu_dict)
11 
12 {'stu1102': 'LongZe Luola', 'stu1104': '大熊', 'stu1103': 'XiaoZe Maliya'}
del 删除方法 popitem()随机删除方法

查找

1 stu_dict={'stu1102': 'LongZe Luola', 'stu1104': '大熊', 'stu1103': 'XiaoZe Maliya', 'stu1101': 'TengLan Wu'}
2 print('stu1102' in stu_dict )
3 print(stu_dict.get('stu1102')) #存在返回内容,不存在返回None
4 print(stu_dict.get('stu1105'))
5 
6 True
7 LongZe Luola
8 None
查找

多级字典

 1 av_catalog = {
 2     "欧美":{
 3         "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
 4         "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
 5         "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
 6         "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
 7     },
 8     "日韩":{
 9         "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
10     },
11     "大陆":{
12         "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
13     }
14 }
15 
16 av_catalog["大陆"]["1024"][1] += ",可以用爬虫爬下来"
17 print(av_catalog["大陆"]["1024"])
多级字典(源自老男孩)
1 stu_dict={'stu1102': 'LongZe Luola', 'stu1104': '大熊', 'stu1103': 'XiaoZe Maliya', 'stu1101': 'TengLan Wu'}
2 print(stu_dict.values())
3 print(stu_dict.keys())
4 
5 dict_values(['LongZe Luola', '大熊', 'XiaoZe Maliya', 'TengLan Wu'])
6 dict_keys(['stu1102', 'stu1104', 'stu1103', 'stu1101'])
显示值和关键字

setdefault查找,对的返回对的值,不对的返回对的值

stu_dict={'stu1102': 'LongZe Luola', 'stu1104': '大熊', 'stu1103': 'XiaoZe Maliya', 'stu1101': 'TengLan Wu'}
print(stu_dict.setdefault('stu1104','大熊'))
print(stu_dict.setdefault('stu1104','康复'))

大熊
大熊
setdefault()方法

多级更新,update

1 stu_dict={'stu1102': 'LongZe Luola', 'stu1104': '大熊', 'stu1103': 'XiaoZe Maliya', 'stu1101': 'TengLan Wu'}
2 b={'1':'2','3':'4','5':'6'}
3 stu_dict.update(b)
4 print(stu_dict)
5 
6 {'stu1102': 'LongZe Luola', 'stu1104': '大熊', 'stu1103': 'XiaoZe Maliya', 'stu1101': 'TengLan Wu', '1': '2', '3': '4', '5': '6'}
update()方法,多个内容更新

items方法,把字典改为列表

1 stu_dict={'stu1102': 'LongZe Luola', 'stu1104': '大熊', 'stu1103': 'XiaoZe Maliya', 'stu1101': 'TengLan Wu'}
2 print(stu_dict.items())
3 
4 dict_items([('stu1102', 'LongZe Luola'), ('stu1104', '大熊'), ('stu1103', 'XiaoZe Maliya'), ('stu1101', 'TengLan Wu')])
items()方法,把字典改为列表

循环打印字典:

 1 #Author:ajun
 2 stu_dict={'stu1102': 'LongZe Luola', 'stu1104': '大熊', 'stu1103': 'XiaoZe Maliya', 'stu1101': 'TengLan Wu'}
 3 #循环dict
 4 #方法1
 5 for key in stu_dict:
 6     print(key,stu_dict[key])
 7 
 8 #方法2
 9 for k,v in stu_dict.items(): #会先把dict转成list,数据里大时莫用
10     print(k,v)
循环打印字典

字典练习题:

"""小王":"111","小李":"112",....}
欢迎进入通信录
1、查询联系人资料(查 指定人)
2、插入新的联系人(存在,修改,不存在添加)
3、删除已有联系人(删除)
4、退出通信录
"""
 1 a={"小王":"111","小李":"112","小张":"113"}
 2 print("欢迎进入通讯录")
 3 print("1:查询联系人资料")
 4 print("2:插入新的联系人")
 5 print("3:删除已有联系人")
 6 print("4:退出通讯录")
 7 while True:
 8     num =int(input("请输入数字1-4:"))
 9     if 1>num or num>4:
10         print("error,请重新输入:")
11     elif num==1:
12         name=input("请输入要查询的姓名:")
13         print(name,"的电话号码",a.get(name,"不存在"))
14     elif num==2:
15         name = input("请输入要查询的姓名:")
16         if name in a:
17             print(name,"已存在,电话号码为:",a[name])
18             flag=input("请问是否修改?yes/no")
19             if flag=="yes":
20                 a[name]=input("新的电话号码:")
21             else:
22                 continue
23         else:
24             print(name,"不存在")
25             flag = input("请问是否添加联系人?yes/no")
26             if flag=="yes":
27                 a[name]=input("新的电话号码:")
28             else:
29                 continue
30         print(name, "的电话号码", a.get(name, "不存在"))
31     elif num==3:
32         name = input("请输入要删除的姓名:")
33         print(name,a.pop(name,"不存在"))
34     else:
35         break
参考答案

 

七、字符串

特性:不可修改

#字符串的表示的:' '   " "   """ """   '''  '''
#字符串是不可以修改的
#字符串的访问 不可修改的有序序列 双向访问


格式化:
#格式化

字符串的格式化问题?
"%[-][+][0][m][.n]格式字符"%x
打印 001 002 …… 100
"""
for i in range(1,101):
print("%+03d"%i)
"""
利用format,写一个显示个人信息(学号,姓名,年龄 )
 1 # 格式化输出:方法1:
 2 """
 3 name = input("what is your name?")
 4 age = int(input("age:"))
 5 job = input("job:")
 6 salary = input("salary:")
 7 info = '''
 8 -------info of %s  ---------
 9 Name:%s
10 Age :%d
11 Job :%s
12 Salary: %s
13 ''' % (name, name, age, job, salary)
14 print(info)
15 # 格式化输入方法2:
16 name = input("what is your name?")
17 age = int(input("age:"))
18 job = input("job:")
19 salary = input("salary:")
20 info2 = '''
21 -------info of {_name} ---------
22 Name:{_name}
23 Age :{_age}
24 Job :{_job}
25 Salary: {_salary}
26 '''.format(_name=name,
27            _age=age,
28            _job=job,
29            _salary=salary)
30 print(info2)
31 
32 # 格式化输出,方法3
33 name = input("what is your name?")
34 age = int(input("age:"))
35 job = input("job:")
36 salary = input("salary:")
37 print( '''
38 -------info of {0} ---------
39 Name:{0}
40 Age :{1}
41 Job :{2}
42 Salary: {3}
43 '''.format(name, age, job, salary))
44 """
三种方法 参考

0)查找

#字符串的方法 left左 right 右 middle 中间 center中间
#查找 find rfind index rindex count

 1 a="xinan17-1,I love xinan"
 2 """
 3 print(a.find("i"))#1
 4 print(a.rfind("i"))#18
 5 print(a.find("i",3,-1))#18
 6 print(a.find("中"))#不存在,返回-1
 7 print(a.index("i"))#1
 8 print(a.rindex("i"))#18
 9 print(a.index("i",3,-1))#18
10 print(a.index("中"))#不存在,报错
11 print(a.count("n",5,-1))#1
12 """
#分割 split rsplit  partition rpartition
1 a="xinan17-1, I love xinan"
2 print(a.split())#默认是空格,返回值是列表
3 print(a.split("n"))#默认是空格,返回值是列表

split的应用

1 x=input("请输入三个整数")# "12 34 56"
2 a,b,c=map(int,x.split())
3 print(a,b,c)
1 a="I love China, I love python"
2 print(a.split(" ",2))
3 print(a.partition("love"))
4 print(a.rpartition("love"))
#join 实现连接字符串

1 a=['p', 'y', 't', 'h', 'o', 'n']
2 print(''.join(a))
#lower() upper()
1 a="I love China, I love python"
2 """
3 print(a.lower())#所有字母变成小写
4 print(a.upper())#所有字母变成大写
5 print(a.capitalize())#段落首字母,变成大写
6 print(a.title())#单词首字母大写
7 print(a.swapcase())#大小写互换
8 """

替换

1 #替换 replace 一一对应的替换
2 print(a.replace("love","",1))
3 #maketrans  生成对应关系表
4 #translate  调用关系表
5 table=''.maketrans('lo','中国')
6 print(a.translate(table))
7 """
#strip rstrip lstrip
1 a="          love China, I love pythoIIInIIiiI     "
2 print(a.strip("Iio"))#从两端删除指定字符
3 print(a.rstrip("I"))#从右边删除指定字符
4 print(a.lstrip("I"))#从左边删除指定字符
5 print(a.strip())#默认删除空白

组成判断,字母数字

 1 str_1='ILCDWabd289768297088AHGS'
 2 """
 3 print(str_1.isalpha())#判断字符串是否是由字母组成
 4 print(str_1.isdecimal())#判断字符串是否由数字组成
 5 print(str_1.isdigit())#判断字符串是否由数字组成
 6 print(str_1.isnumeric())#判断字符串是否由数字组成
 7 print(str_1.isspace())#判断字符串是否由空白组成(tab 空格)
 8 print(str_1.istitle())#判断单词首字母是否是大写
 9 print(str_1.isupper())#判断字母是否是大写
10 print(str_1.islower())#判断字母是否是小写
11 print(str_1.isalnum())#alpha和num
12 """

填充

1 #center ljust  rjust zfill
2 str_1="我爱中国"
3 """
4 print(str_1.center(20,"="))
5 print(str_1.rjust(20,"="))
6 print(str_1.ljust(20,"="))
7 print(str_1.zfill(20))
8 """

模块应用:

1 import string
2 print(string.ascii_letters)#字母
3 print(string.digits)#数字
4 print(string.punctuation)#特殊符号
5 print(string.hexdigits)
6 print(string.octdigits)

字符串练习题:

 1 了解下列字符串方法的功能?
 2 name = "my \tname is {name} and i am {year} old"
 3 
 4 print(name.capitalize())
 5 print(name.count("a"))
 6 print(name.center(50,"-"))
 7 print(name.endswith("ex"))
 8 print(name.expandtabs(tabsize=30))
 9 print(name[name.find("name"):])
10 print(name.format(name='alex',year=23))
11 print(name.format_map(  {'name':'alex','year':12}  ))
12 print('ab23'.isalnum())
13 print('abA'.isalpha())
14 print('1A'.isdecimal())
15 print('1A'.isdigit())
16 print('a 1A'.isidentifier()) #判读是不是一个合法的标识符
17 print('33A'.isnumeric())
18 print('My Name Is  '.istitle())
19 print('My Name Is  '.isprintable()) #tty file ,drive file
20 print('My Name Is  '.isupper())
21 print('+'.join( ['1','2','3'])  )
22 print( name.ljust(50,'*')  )
23 print( name.rjust(50,'-')  )
24 print( 'Alex'.lower()  )
25 print( 'Alex'.upper()  )
26 print( '\nAlex'.lstrip()  )
27 print( 'Alex\n'.rstrip()  )
28 print( '    Alex\n'.strip()  )
29 p = str.maketrans("abcdefli",'123$@456')
30 print("alex li".translate(p) )
31 
32 print('alex li'.replace('l','L',1))
33 print('alex lil'.rfind('l'))
34 print('1+2+3+4'.split('\n'))
35 print('1+2\n+3+4'.splitlines())
36 print('Alex Li'.swapcase())
37 print('lex li'.title())
38 print('lex li'.zfill(50))
字符串练习

 练习1.凯撒加密

1 #实现凯撒加密 输入原文,输出密文
2 """
3 kaisai=input("请输入一个字符串:")
4 table=''.maketrans('abcdefghijklmnopqrstuvwxyz',\
5                    'defghijklmnopqrstuvwxyzabc')
6 print(kaisai.translate(table))
7 """
参考答案

练习2.特殊字符过滤

1 a=input("")
2 b=["暴力","血腥","色情"]
3 #b="".maketrans("暴力血腥色情","******")
4 #print(a.translate(b))
5 if a in b:
6     print(a.replace(a,"**"))
7 else:
8     print(a)
View Code

练习3:假设一个英文文章,里面的单独的字符I误写为i,请编程修改

1 a="i lovei China, i lovei python."
2 if a[0]=="i":
3     a=a.replace("i ","I ",1)
4 print(a.replace(" i "," I "))
View Code

练习4. 假设一个英文文章,里面的单词中的i误写为I,请编程修改

1 a="I loveI ChIna, I loveI python."
2 a=a.replace("I","i")
3 if a[0]=="i":
4     a=a.replace("i ","I ",1)
5 print(a.replace(" i "," I "))
View Code

练习5. 输入图案

*
***
*****
*******
*********

 1 while True:
 2     num=input("请输入一个整数:")
 3     if num.isdigit():
 4         num=int(num)
 5         for i in range(1,num+1):
 6             a="*"*(2*i-1)
 7             print(a.center(2*num))
 8         break
 9     else:
10         print("输入错误!!!请重新输入")
View Code

扩展,上下对称

 1 num=input("请输入一个数")
 2 if num.isdigit():
 3     num=int(num)
 4     if num>=2:
 5         for i in range(num):#0 1 2 3 4
 6             a="*" * (2*i+1)       #1 3 5 7 9
 7             print(a.center(2*num-1))
 8         for i in range(num-2,0,-1):
 9             a="*" * (2*i+1)       #1 3 5 7 9
10             print(a.center(2*num-1))
11         print("*".center(2*num-1))
12     elif num==1:
13         print("*")
14     else :
15         print("输入错误!")
16 else :
17     print("输入错误")
View Code

 

八、作业

8.1

程序:购物车程序

需求:

  1. 启动程序后,让用户输入工资,然后打印商品列表
  2. 允许用户根据商品编号购买商品
  3. 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 
  4. 可随时退出,退出时,打印已购买商品和余额
    product_list = [
        ('Iphone',5800),
        ('Mac Pro',9800),
        ('Bike',800),
        ('Watch',10600),
        ('Coffee',31),
        ('Alex Python',120),
    ]
    shopping_list = []
    salary = input("Input your salary:")
    if salary.isdigit():
        salary = int(salary)
        while True:
            for index,item in enumerate(product_list):
                #print(product_list.index(item),item)
                print(index,item)
            user_choice = input("选择要买嘛?>>>:")
            if user_choice.isdigit():
                user_choice = int(user_choice)
                if user_choice < len(product_list) and user_choice >=0:
                    p_item = product_list[user_choice]
                    if p_item[1] <= salary: #买的起
                        shopping_list.append(p_item)
                        salary -= p_item[1]
                        print("Added %s into shopping cart,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 option")
    参考答案 源自老男孩

8.2

8.1改进版

买家入口:实现商品信息存在文件中,购买物品后,余额显示

卖家入口:实现可以添加商品,修改商品

zuoye_sale.py
#Author:ajun
#实现商家模块,商家可以登录,并且可以添加商品和修改价格
import re
import getpass
name=input("Please input username:")
passwd=input("Please input passwd:")
count=0
f=open("sale_user.txt","r")

for line in  f.readlines():
    if(name==re.split(":",line)[0]):
        if(passwd==re.split(":",line)[1]):
            print("Welcome,login success!")
            while True:
                f1=open("good_list.txt",'r+')

                for line1 in f1:
                    good1=re.split(":",line1)[0]
                    print(" %s\t"%good1)
                select1=int(input("""Please select what you want to do?
                            1:添加商品
                            2:修改价格
                            3:退出\n"""))
                if(select1==1):
                    """添加商品模块"""
                    add_1=input("Please input goods and price:")
                    f1.write("\n")
                    f1.write(add_1)
                    f1.close()
                    continue
                elif(select1==2):
                    mod_goods=input("Please input goods :")
                    for line1 in f1:
                        if mod_goods in line1:
                            mod_price=input("Please input the price:")
                            if mod_price.isdigit():
                                f1.seek(0)
                                #f1=open("good_list.txt","r")
                                f_new=open("good_list.bak.txt","w",encoding="utf-8")
                                for line_1 in f1:
                                    if mod_goods in line_1:
                                        line_1=line_1.replace(re.split(":",line_1)[1],"%s:"%mod_price)
                                    f_new.write(line_1)
                                f_new.flush()
                                f1.close()
                                f_new.close()

                                #写回原文件
                                #f1.seek(0)
                                #f_new.seek(0)
                                f1=open("good_list.txt","w")
                                f_new=open("good_list.bak.txt","r")
                                for line_2 in f_new:
                                    f1.write(line_2)
                                f1.flush()
                                f1.close()
                                f_new.close()
                                continue
                            else:
                                print("你输入的价格格式错误!")
                                continue
                    else:
                        print("The name is  not exist!")
                        continue

                elif(select1==3):
                    """退出商品模块"""
                    exit()
                else:
                    """其它情况,从新输入模块"""
                    print("输入错误,请重新输入\n")
                    continue
                f1.close()
                break
        else:
            print("The password is wrong!")
else:
    print("The username is not exist!")

f.close()

zuoye_buyer.py
#Author:ajun
#实现买家模块,买家第一次登录需要输入收入。
#买家可以买东西
import re
import getpass
goods_dict={}
goods_list=[]
name=input("Please input username:")
passwd=input("Please input passwd:")
salary=0
count=0
shopping_list=[]
f=open("buyer_user.txt","r")

for line in  f.readlines():
    if name==re.split(":",line)[0]:
        if passwd==re.split(":",line)[1]:
            print("Welcome,login success!")
            passwd_flag=re.split(":",line)[2]
            passwd_flag=int(passwd_flag)
            if 1==passwd_flag:
                salary=int(re.split(":",line)[3])
            else:
                salary=input("Please input your money:")
                salary=int(salary)
                #修改文件

                f.close()
                f=open("buyer_user.txt","r")
                f_new=open("buyer_user.bak.txt","w",encoding="utf-8")
                for line_1 in f:

                    if name in line_1:
                        line_1=line_1.replace(":0:0:",":1:%s:"%salary)
                    f_new.write(line_1)

                f_new.flush()
                f.close()
                f_new.close()

            print("The money of your  is %s "%salary)
            """货品处理模块"""
            f1=open("good_list.txt",'r+')
            for line1 in f1:
                key_1=re.split(":",line1)[0]
                goods_dict[key_1]=re.split(":",line1)[1]
            f1.close()
            #print(goods_dict)
            """字典转换为列表模块"""
            for i in goods_dict.items():
                goods_list.append(i)
            #print(goods_list)
            """买货品模块"""
            while True:
                for item in goods_list:
                    print(goods_list.index(item),item)
                user_choice = input("Your choice?")
                if user_choice.isdigit():
                    user_choice=int(user_choice)

                    if user_choice < len(goods_list) and user_choice >= 0 :
                        p_item = goods_list[user_choice]
                        p_i=p_item[1]
                        #print(p_i)
                        p_i=int(p_i)
                        if p_i<salary :
                            salary-=p_i
                            shopping_list.append(p_item)
                            print(" Added %s in shopping cart, and 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 goods_list:
                        print(p)
                    print("Your current balance:%s"  % salary)
                    #写回数据
                    f=open("buyer_user.txt","w")
                    f_new=open("buyer_user.bak.txt","r")
                    for line_2 in f_new:
                        if name in line_2:
                            line_2=line_2.replace(re.split(":",line_2)[3],"%s"%salary)
                        f.write(line_2)
                    f.flush()
                    f.close()
                    f_new.close()
                    exit()
                else:
                     print("invalid option!")
        else:
            print("The password is wrong!")
else:
    print("The username is not exist!")

f.close()


buyer_user.txt
ajun1:ajun123:1:5000:
daxiong1:daxiong123:1:4000:
zhangsan1:zhangsan123:0:0:
lisi1:lisi123:1:3942:
wangwu1:wangwu123:0:0:

sale_user.txt
ajun:ajun123:
daxiong:daxiong123:
zhangsan:zhangsan123:
lisi:lisi123:
wangwu:wangwu123:

good_list.txt
cat:600::
dog:900:
iphone:5000:
bike:590:
cake:129:
参考答案-阿军

 

posted on 2017-06-24 18:09  a阿军  阅读(962)  评论(0编辑  收藏  举报

导航