zoukankan      html  css  js  c++  java
  • python基础(二)

    一、模块初识

    __author__ = 'meng'
    
    import sys
    
    #print (sys.path) #1.打印环境变量
    #print (sys.argv) #2.打印相对路径
    #print (sys.argv[2]) #3.读参数,计算机从0开始数
    
    '''
    import os
    #cmd_res = os.system("dir") #执行命令,不显示结果
    cmd_res = os.popen("dir").read() #读出结果
    print ("---->",cmd_res)
    os.mkdir("new_dir")  #创建目录
    '''
    

     以下输出的结果对应上面注释1,2,3

     

    二、.pyc文件

    python是一门先编译后解释的语言。python程序第二次运行时,先在硬盘找同名的.pyc文件,如果找到直接载入,否则从新编译解释运行。pyc文件其实是PyCodeObject的一种持久化解决方案。

    三、python常用数据类型

    1、数字

    int(整型): 在python3里面,只有一种整数类型int,表示为长整型,没有python2中的Long.

    long长整型):python2中长整数没有限制长整数数值的大小,实际上我们使用的机器内存数值有限,我们使用的长整数数值不可能无限放大。如果整数发生溢出,python会将整数自动转化为长整数。如今在长整数数据后面不加字母L也不会导致严重后果。

    float(浮点数):小数。

    2、布尔值

    真或假

    1或0

    3、字符串

    "Hello World"

    python的字符串拼接,需要在内存中开辟一块连续的空间,并且一单修改字符串需要再次开辟空间,+号一出现就会在内存中开辟一块空间。

    >>>
    >>> type(10)
    <class 'int'>
    >>> type(3.5)
    <class 'float'>
    >>> type(True)
    <class 'bool'>
    >>>
    

     四、三元运算

    >>> a,b,c = 1,3,5
    >>> d =a if a < b else c
    >>> d
    1
    >>>
    

      result = 值1 if 条件 else 值2

    如果条件为真:result = 值1

    如果条件为假: result = 值2

    五、bytes数据

    msg = "穿越火线"
    print (msg)
    print (msg.encode()) #python3默认使用utf-8编码
    print (msg.encode().decode()) #解码
    

      把字符串先转成bytes,再转回来。

    "D:Program Files (x86)python36python.exe" D:/py14/day2/sys_mod.py
    穿越火线
    b'xe7xa9xbfxe8xb6x8axe7x81xabxe7xbaxbf'
    穿越火线
    
    Process finished with exit code 0
    

      

     六、列表切片

    __author__ = 'meng'
    
    names = ["M4A1","AK-47","AWM","巴雷特"]
    
    print (names)
    print (names[0],names[2])
    print (names[1:3]) #切片,顾头不顾尾,从左往右数
    print (names[3])#取最后一个
    print (names[-1])#从右往左取,取最后一个,下标-1代表最后一位
    print (names[-2:])#取最后2个,
    print (names[:2])#空着代表0,取下标0和1的值
    

      下面是对应的输出结果

    "D:Program Files (x86)python36python.exe" D:/py14/day2/names.py
    ['M4A1', 'AK-47', 'AWM', '巴雷特']
    M4A1 AWM
    ['AK-47', 'AWM']
    巴雷特
    巴雷特
    ['AWM', '巴雷特']
    ['M4A1', 'AK-47']
    
    Process finished with exit code 0
    

      

    七、深浅copy

    如果只有顶级对象:

    >>> D = ['IT','name','age']
    >>> import copy
    >>> C1 = copy.copy(D)   #浅拷贝
    >>> C2 = copy.deepcopy(D) #深拷贝
    >>> D                                 #原始列表
    ['IT', 'name', 'age']
    >>> id(D);id(C1);id(C2)  #三个不同对象
    42981832
    43400584
    43400776
    >>> D[1]=25           #改变下标1的值为 25
    >>> D;C1;C2           #D变了,深浅copy没变
    ['IT', 25, 'age']
    ['IT', 'name', 'age']
    ['IT', 'name', 'age']
    >>>
    

     如果有嵌套对象,源里的嵌套对象改变,浅copy跟着改变嵌套对象,深copy不受影响。

    __author__ = 'meng'
    
    import copy
    names = ["M4A1","AK-47","AWM",["警棍","马来剑"],"巴雷特"]
    b = copy.copy(names) 
    c = copy.deepcopy(names) 
    print (names)
    names[2] = "狙击步枪"
    names.insert(5,"AN94")
    names[3][0] = "尼泊尔"
    print (names)
    print (b)
    print (c)
    #######################对应输出结果
    ['M4A1', 'AK-47', 'AWM', ['警棍', '马来剑'], '巴雷特']
    ['M4A1', 'AK-47', '狙击步枪', ['尼泊尔', '马来剑'], '巴雷特', 'AN94']
    ['M4A1', 'AK-47', 'AWM', ['尼泊尔', '马来剑'], '巴雷特']
    ['M4A1', 'AK-47', 'AWM', ['警棍', '马来剑'], '巴雷特']
    
    【结论】
    深浅拷贝都是对源对象的复制,占用不同的内存空间
    如果源对象只有一级目录的话,源做任何改动,不影响深浅拷贝对象
    如果源对象不止一级目录的话,源里的嵌套对象改动,都要影响浅拷贝,但不影响深拷贝
    序列对象的切片其实是浅拷贝,即只拷贝顶级的对象
    

      

     八、元组

    元组跟列表一样,元组只能读,()表示,不能增删改元素。

    购物车程序练习:

    __author__ = 'meng'
    
    product_list = [
        ("Iphone",5800),
        ("Mac Pro",9800),
        ("Bike",800),
        ("Watch",10600),
        ("Coffee",31),
        ("python",120)
    ]
    shopping_list = []
    salary = input("please input your salary:")
    if salary.isdigit(): #如果输入的字符串是数字为真
        salary = int(salary)  #把字符串转成int整数类型
        while True:
            for index,item in enumerate(product_list):  #enumerate打印下标
                 #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 ("Add %s into shopping cart,your current blances is33[31;1m %s33[0m" %(p_item,salary))
                    else:
                        print ("33[41;1m 你的余额只剩[%s],还买个毛线啊33[0m " % salary)
                else:
                    print ("你要买的 [%s] 商品不存在!" % 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")

    购物车二

    __author__ = 'meng'
    #!coding:utf-8
    import sys
    goods = [
                    {"name": "电脑", "price": 1999},
                    {"name": "鼠标", "price": 10},
                    {"name": "游艇", "price": 20},
                    {"name": "美女", "price": 998},
                ]
    shop_list = [] #用户选择的商品价格
    shop_list_2 = [] #用户选择的商品名称
    
    salary = input('请输入你的工资,工资必须大于0:').strip()
    #print (type(salary))
    if salary.isdigit(): #如果输入的是阿拉伯数字为真,
        salary = int(salary)  #把字符串转成 int 类型
        while True:
            for i,k in enumerate(goods): #获取列表元素的下标
                print (i,k)              #打印下标和值
            user_choice = input ('请输入商品序号购买::').strip()
            if user_choice.isdigit():
                user_choice = int(user_choice)
                if user_choice < len(goods) and user_choice >= 0:
                    p_item = goods[user_choice]['price']  #获取用户选择的商品价格
                    p_key = goods[user_choice]['name']    #获取用户选择的商品名称
                    #print (p_item)
                    if p_item < salary: #买得起
                        shop_list.append(p_item) #加入购物车的商品价格表
                        shop_list_2.append(p_key) #加入购物车的商品名称
                        #print (shop_list)
                        salary = salary - p_item #实时余额
                        print ('商品 [%s] 已经加入购物车,你的可用余额还有[ %d ],输入 q 退出!' %(p_key,salary))
                    else:
                        print ('你的余额只有[ %s],不能购买[ %s],输入 q 退出!' % (salary,p_key))
                else:
                    print ('你购买的商品不存在,请重新输入商品的序号购买!')
            elif user_choice == 'q':
                sys.exit('你购买的 %s 已经放入购物车,购买成功!你的可用余额还有 %d ,退出登录!' %(shop_list_2,salary))
    

      

     九、字符串常用操作

     

    __author__ = 'meng'
    
    name = "my 	name is {name} and i am {year} old"
    
    print (name.capitalize()) #首字母大写
    print (name.count("m")) #统计有多少个 m
    print (name.center(50,"-")) #把字符串放中间,不够的用-表示
    print (name.endswith("ng")) #判断字符串是否是以 ng 结尾
    print (name.expandtabs(50)) #把tab键转换成多少个空格
    print (name[name.find("name"):]) # 字符串切片
    print (name.format(name = "meng",year=23)) # 格式化输出
    print (name.format_map({'name':'meng','year':23})) #很少用
    print (name.index("is")) #该方法返回查找对象的索引位置
    print ("Aab123".isalnum()) #包含英文字母和阿拉伯数字
    print ("abAC".isalpha()) #纯英文字符
    print ("1A".isdecimal()) #10进制为真
    print ("1A".isdigit()) #字符串是数字为真
    print ("1A".isidentifier())#判断是不是一个合法的标识符
    print ("+".join(["1","2","3"])) #将列表里面的元素连接起来
    print (name.ljust(50,"*")) #长度50,不够的用*表示
    print (name.rjust(50,"-")) #长度50,开始位置不够的用-号表示
    print ("Meng".lower()) #变成小写
    print ("Meng".upper())#变大写
    print ("
    Meng".lstrip())#去掉左边的空格
    print ("Meng
    ".rstrip())#去掉右边的空格
    print ("  Meng
    ".strip())#去掉开头和结尾的空格
    print ("1+2+3+4".split("+")) #+号作为分隔符的作用
    print ("1+2
    +3+4".splitlines()) #自动识别不同系统的换行符
    

      十、字典的使用

     字典是一种 key-value的数据类型,字典不存在下标。字典是无序的,key是唯一的。字典用{}表示,元组用()表示,列表用[]表示。

     

  • 相关阅读:
    Django-haystack对接elasticsearch
    Django http 和 https 官网解答
    -bash: nohup: command not found
    Mysql 10060登录异常解决方法
    ssh
    sed grep awk用法
    grep用法
    shell 随笔
    列表生成式
    css
  • 原文地址:https://www.cnblogs.com/menglingqian/p/6247753.html
Copyright © 2011-2022 走看看