• 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'xe5x9bx9bxe5xb7x9dxe6x88x90xe9x83xbd'


    列表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:33[31;1m %d33[0m'%(p_item[0],salary))
    22                 else:
    23                     print('33[41;1m余额不足,只有%s33[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:33[31;1m%s33[1m'%salary)
    31             exit()
    32         else:
    33             print('invalid option')
    购物车
    改变输出颜色:
    lis=['a','b','c','d']
    print('33[31;1m%s33[1m'%lis)
    print('33[32;1m%s33[1m'%lis)
    print('33[41;1m%s33[1m'%lis)
    print('33[42;1m%s33[1m'%lis)
    
    输出结果为:


    字符串操作:

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

     1 name='zhang haiyang'
     2 name2='zhang	haiyang'
     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变量中的	(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('  
    zhang'.lstrip())
    27 print('zhang 
       '.rstrip(),'haiyang')
    28 print('  
    zhang
       '.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)
    
  • 相关阅读:
    【Java学习笔记之二十一】抽象类在Java继承中的用法小结
    【Java学习笔记之二十】final关键字在Java继承中的用法小结
    【Java学习笔记之十九】super在Java继承中的用法小结
    【Java学习笔记之十八】Javadoc注释的用法
    【Java学习笔记之十七】Java中普通代码块,构造代码块,静态代码块区别及代码示例分析
    hdu 5310(贪心)
    poj3268 最短路
    poj1797 最短路
    poj2253 最短路
    poj2387 最短路
  • 原文地址:https://www.cnblogs.com/zhhy236400/p/9594383.html
Copyright © 2020-2023  润新知