Python学习week2

标准库:不需要下载安装,import后就可以调用;

第三方库:需要下载安装才能import。

 

ctrl+B  导航到方法的定义


 sys模块:

sys.path  以列表的形式返回环境变量

sys.argv  在pycharm返回绝对路径;在命令行模式下返回相对路径,可输入参数,输入的参数与相对路径组成新的列表。

 


 

os模块:

os.system("dir")  只执行命令,不能保存结果。输出当前文件夹内文件目录,并且存在乱码,不能用来赋值。

directory=os.system("dir")  directory不会被赋值。

print(directory)  打印结果为“0”,表示执行成功。

可赋值的命令:

os.popen("dir")  返回对象地址,可赋值

directory=os.popen("dir").read()  返回当前文件夹内文件目录,无乱码。

print(directory)  打印出文件目录。

 

os.mkdir("new_dir")  在当前文件夹下新建名为“new_dir”的文件夹。

 

自己创建模块,调用模块时检索顺序为:当前文件夹-->环境变量,找不到的话报错。所以,当把模块放在当前文件夹的上级文件夹里时,报错。

解决办法:

1、将模块文件复制到环境变量下,venv\\lib\\site-packages文件夹下。

2、将模块所在文件夹加入环境变量中。

 


 

bytes和str(字节包和字符串):

python存储文件有两种方式:bytes和string,视频文件用bytes存储,文本文件两者都可以,在网络编程中,数据传输只可以用bytes方式,所以以string类型存储的文件需要编码成bytes类型。

python2中bytes和str相同,可以拼接,python3中明确区分开来,不能拼接。

str转换为bytes称为编码,使用encode()命令;

bytes转换为str称为解码,使用decode()命令,括号内填写str的编码类型,缺省时默认为utf-8。

 

string="四川成都"
print(string.encode(encoding="utf-8"))

print(string.encode("utf-8"))

print(string.encode())

输出相同:  b'\xe5\x9b\x9b\xe5\xb7\x9d\xe6\x88\x90\xe9\x83\xbd'

 


 

列表list

lis=['a','b','c','d','e']

print(lis[1])
print(lis[1:])  顾头不顾尾,lis[i,j]表示列表中索引为i到索引为j的元素,不包括索引为j的元素。

输出结果:

b  

['b', 'c', 'd', 'e']

 

for i in lis:

  print(i)  打印lis的所有元素

 

二维列表:  lis[i][j],不能用lis[i,j]表示

 

lis[0:-1]  表示所有元素

lis[0:-1:2]  表示步长为2的所有元素

lis[::2]  表示步长为2的所有元素,与lis[0:-1:2]功能相同

 

lis[-1]表示最后一个元素,lis[-2:]表示最后两个元素,lis[:2]表示前两个元素。

lis.append('aaa')将'aaa'插入到lis尾部。

lis.insert(2,'aaa')将'aaa'插入到lis的第三位,即索引为2的地方。

lis=['a','b','c','d','e','f']
lis.append('aaa')
lis.insert(2,'bbb')
print(lis)
输出为:  ['a', 'b', 'bbb', 'c', 'd', 'e', 'f', 'aaa']

 

lis[1]="changed"  将lis第二个元素改为‘changed’。

lis.remove('a')  删除‘a’元素

del lis[i]  删除lis的索引为i的元素

del lis  删除lis变量

lis.pop(i)  删除lis的索引为i的元素,缺省时默认为最后一个元素。

 

lis.index('a')  返回'a'的索引值

lis.count('a')  返回lis中‘a’的个数

lis.reverse()  翻转lis的顺序

lis.sort()  将元素按照首字母排序:特殊字符>数字>大写>小写,ASCII码表里的顺序

lis.extend(lis2)  将lis2的元素添加到lis的尾部,lis2不变

 


 

lis.copy()  浅copy,只copy列表的第一层。由数据的存储原理决定,列表的第二层在第一层只是地址元素,相当于指针。

浅拷贝四种方法:

import copy
lis=['a','b',['a2','b2'],'c','d']
lis1=list(lis)  列表工厂
lis2=lis.copy()  
lis3=copy.copy(lis)  
lis4=lis[:]  切片

 

例如:

lis=['a','b',['a2','b2'],'c','d']  

lis2=lis.copy()  lis[2]位置上存储的是['a2','b2']的地址信息,copy方法只拷贝lis的第一层元素,所以当lis[2]改变时,lis2跟着改变,但是当lis的其他第一层元素改变时,lis2不变。

 

lis=['a','b',['a2','b2'],'c','d']
lis2=lis.copy()
print(lis)
print(lis2)
lis[0]='AAA'
print(lis)
print(lis2)
lis[2][0]='AAA'
print(lis)
print(lis2)

输出:

 

['a', 'b', ['a2', 'b2'], 'c', 'd']
['a', 'b', ['a2', 'b2'], 'c', 'd']
['AAA', 'b', ['a2', 'b2'], 'c', 'd']
['a', 'b', ['a2', 'b2'], 'c', 'd']
['AAA', 'b', ['AAA', 'b2'], 'c', 'd']
['a', 'b', ['AAA', 'b2'], 'c', 'd']

 

 

如果想把一个列表赋值给另外一个列表,引用copy模块:这会增大内存消耗,谨慎使用。

深拷贝:

import copy

lis2=copy.deepcopy(lis)

 


 

lis2=lis  会造成lis2和lis指向同一块内存地址,两个变量完全相同,改变任一个变量时,两者一起改变。相当于c#中的引用类型。

 

lis=['a','b',['a2','b2'],'c','d']
lis2=lis
print(lis)
print(lis2)
lis[0]='AAA'
print(lis)
print(lis2)
lis[2][0]='AAA'
print(lis)
print(lis2)

输出:

 

['a', 'b', ['a2', 'b2'], 'c', 'd']
['a', 'b', ['a2', 'b2'], 'c', 'd']
['AAA', 'b', ['a2', 'b2'], 'c', 'd']
['AAA', 'b', ['a2', 'b2'], 'c', 'd']
['AAA', 'b', ['AAA', 'b2'], 'c', 'd']
['AAA', 'b', ['AAA', 'b2'], 'c', 'd']

 

 


 

如果有两个值类型的变量a和b,a=b,改变b并不会使a改变。

例如:

 

b=5
a=b
print(a,b)
b=10
print(a,b)

输出:

5 5
5 10

 


 元组tuple:只读列表。只有index和count两个方法

 

tup=('基哥','咪咪two','朱二娃','基佬强','毒炮')

print(tup.index('咪咪two'))

print(tup.count('基哥'))

输出:

1

1

 


 

练习:购物车

 1 product_list=[('iphone', 6000), ('bike', 800), ('book', 50),('pen',100),('computer',3000)]
 2 shopping_list=[]
 3 salary=input('input your salary:')
 4 if salary.isdigit():
 5     salary=int(salary)
 6     while True:
 7 
 8         '''for item in product:
 9             print(product.index(item),item)
10             '''
11         for index,item in enumerate(product_list):
12             print(index,item)
13         user_choice=input('选择商品:')
14         if user_choice.isdigit():
15             user_choice=int(user_choice)
16             if user_choice<len(product_list) and user_choice>=0:
17                 p_item=product_list[user_choice]
18                 if p_item[1]<=salary:
19                     shopping_list.append(p_item)
20                     salary-=p_item[1]
21                     print('added %s to your shopping cart,your balance is:\033[31;1m %d\033[0m'%(p_item[0],salary))
22                 else:
23                     print('\033[41;1m余额不足,只有%s\033[0m'%salary)
24             else:
25                 print('没有此商品')
26         elif user_choice=='q':
27             print('----shopping list----')
28             for p in shopping_list:
29                 print(p)
30             print('your current balance is:\033[31;1m%s\033[1m'%salary)
31             exit()
32         else:
33             print('invalid option')
购物车
改变输出颜色:
lis=['a','b','c','d']
print('\033[31;1m%s\033[1m'%lis)
print('\033[32;1m%s\033[1m'%lis)
print('\033[41;1m%s\033[1m'%lis)
print('\033[42;1m%s\033[1m'%lis)
输出结果为:


字符串操作:

字符串和列表一样有索引,可以切片操作。

 1 name='zhang haiyang'
 2 name2='zhang\thaiyang'
 3 name3='my name is {my_name},i am {age} years old'
 4 print(name.capitalize())    #首字母大写
 5 print(name.lower())
 6 print(name.upper())
 7 print('gang tian wu'.split())       #以空格为界限把字符串分割成列表
 8 print('1+2+3+4+5'.split('+'))   #以‘+’为界限
 9 print(name.count('a'))
10 print(name.center(50,'-'))      #把name变量居中打印,两边用-补充,总共50个字符
11 print(name.endswith('ang'))       #判断name变量是否以'ang'结尾
12 print(name2.expandtabs(20))     #把name2变量中的\t(Tab键)变成20个空格
13 print(name.find('hai'))     #find方法返回‘hai’首次出现的索引值
14 print(name[name.find('hai'):])      #打印name变量从‘hai’到最后一个字符,相当于列表的切片
15 print(name3.format(my_name='zhhy',age=20))      #格式化输出
16 print(name3.format_map({'my_name':'zhhy','age':20}))    #用字典为格式化输出传值
17 print('zhhy236400'.isalnum())   #是否只包含英文字母和数字
18 print('Zhhy'.isalpha())     #是否只包含字母
19 print('10'.isdecimal()) #是否是十进制数
20 print('010'.isdigit())   #是否是整数
21 print('aaa'.isidentifier())     #是否是合法标识符(变量名)
22 print('Aa'.islower())   #是否是小写
23 print('+'.join(['a','b','c']))      #将列表元素变成字符串,常用
24 print(name.ljust(50,'-'))
25 print(name.rjust(50,'*'))
26 print('  \nzhang'.lstrip())
27 print('zhang \n   '.rstrip(),'haiyang')
28 print('  \nzhang\n   '.strip())
29 p=str.maketrans('abcde','A2345')        #转换对应位置的字符
30 print('apple'.translate(p))
31 print('zhanghai'.replace('a','A',1))        #‘a’替换成‘A’,替换1个,缺省默认全部替换
32 print('ZHang'.swapcase())       #大小写转换
33 print('my name is gangtianwu'.title())      #字符串改变为标题形式
字符串操作

 


字典:无序,key唯一,可嵌套

key:value

 

1 dict_216={'weijf':'mimitwo',
2           'liuzhq':'gangtianwu',
3           'zhuhy':'zhuerwa'}
4 print(dict_216)
5 print(dict_216['weijf'])
字典

输出:

{'zhuhy': 'zhuerwa', 'liuzhq': 'gangtianwu', 'weijf': 'mimitwo'}    #无序输出,和输入顺序不同
mimitwo

 

 1 dict_216={'weijf':'咪咪two',
 2           'liuzhq':'刚田武',
 3           'zhuhy':'朱二娃'}
 4 print(dict_216)
 5 print(dict_216.keys())      #打印字典所有key
 6 print(dict_216.values())        #打印字典所有value
 7 #print(dict_216['tanglh'])       #查找元素,key时返回对应的value,不存在时报错,程序中断,只有在肯定存在此key时才可以使用
 8 print(dict_216.get('tanglh'))       #查找元素,如果key不存在,返回none,不会报错,程序继续执行
 9 print('tanglh' in dict_216)     #查找元素,返回true或者false。python2中语法:dict_216.has_key('tanglh'),python3中不再使用
10 dict_216['weijf']='猪骑士'     #改变字典元素
11 dict_216['chenjq']='鸡鸡'       #增加字典元素
12 del dict_216['weijf']       #删除元素,del方法是python内置方法。
13 dict_216.pop('liuzhq')      #删除元素
14 dict_216.setdefault('tanglh','毒炮')      #key存在时,不改变任何元素,不存在时,创建新的key-value
15 dict_216.setdefault('zhuhy','猪逼')
16 print(dict_216)
17 dict_new={'zhuhy':'潮流富贵猪逼',
18           1:2,
19           3:4}
20 dict_216.update(dict_new)       #合并更新dict_216
21 print(dict_216)
22 print(dict_216.items())     #字典转为列表
字典操作

遍历字典:

dict_216 = {'weijf': '咪咪two',
            'liuzhq': '刚田武',
            'zhuhy': '朱二娃'}
for i in dict_216:          #高效,推荐使用
    print(i,dict_216[i])
print('-----')
for i,j in dict_216.items():        #dict_216.items()先把dict_216转换成列表再遍历,效率低,不推荐使用
    print(i,j)
print('-----')
for i in dict_216:      #只遍历key,不打印value
    print(i)

 

posted @ 2018-09-09 22:04  我的下铺刚田武  阅读(279)  评论(0编辑  收藏  举报