zoukankan      html  css  js  c++  java
  • Python Day2

    本节知识点:

    1.模块初识,python代码运行方式

    2.数据类型

    3.布尔值

    4.列表

    5.元组

    6.购物车小程序

    7.字典

    8.深copy,浅copy

    一.模块初识

    什么是模块?

    在Python中有一个概念叫做模块(module),如果我们要在Python中实现某一项功能的时候,就需要用到模块了,模块一般被称为标准库,及第三方库

    那么我们接下来看看模块是怎么使用的.

    导入模块

    首先我们来看看常用的os模块和sys模块.

    sys模块:

    sys.path:打印相对路径

    # _author_=AbeoHu
    import sys
    print(sys.path)

    sys.argv:打印绝对路径

    # _author_=AbeoHu
    import sys
    print(sys.argv)

     os模块:

    os模块主要是作为和系统交互的模块

    os.system  操作系统中的命令

    # _author_=AbeoHu
    import os
    os.system("ipconfig")

    os.popen

    # _author_=AbeoHu
    import os
    print(os.popen("ipconfig"))#打印内存对象
    print(os.popen("ipconfig").read())#通过read调取出值

     os.mkdir

    # _author_=AbeoHu
    import os
    os.mkdir("AbeoHu")#创建新的目录

    Python的运行过程:

    首先咱们先来介绍一下PyCodeobject:

    Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令,从而完成程序的执行。相当于一个编译器。

    pyc是什么鬼?

    pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由Python的虚拟机来执行的

    那么Python代码是怎么执行的呢?

    PYthon 执行会先找pyc文件,如果没有,通过PyCodeobject进行编译,然后生成pyc文件,下次直接调取

                      

    二.数据类型

    什么是数据类型?

    计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在Python中,能够直接处理的数据类型有以下几种:

    整数:整数分为整数和长整数,整数就是数字,长整数就是长一点的整数

    浮点数:浮点数代表小数,类似于如1.233.14-9.01,等等。

    字符串:字符串是以单引号'或双引号"括起来的任意文本,比如'abc'"xyz"等等。

    那么怎么去判断一个数据是什么类型呢?

    type()

    # _author_=AbeoHu
    print (type("1"))#打印数据类型

    #小记

    长整数数据类型long,python3中没有长整数这个概念,so 忘掉他把.

    整数运算

    3大类型

    and  or  not

    and:就是和的意思,两个条件要完全匹配才正确

    # _author_=AbeoHu
    a = 1
    b = 2
    print(a > 2 and b < 1)
    
    False

    很显然,两者中间有条件不符合,显示False

    or:或,两者中有一者符合条件正确

    # _author_=AbeoHu
    a = 1
    b = 2
    print(a < 2 or b < 1)
    
    True

    有一个条件满足,返回True

    not:取反

    # _author_=AbeoHu
    a = 1
    b = 2
    print(not a > 2 and b > 1)
    
    True

    取反,将错误的表示正确的,正确的显示错误的

     预算符:

    in  存在

    # _author_=AbeoHu
    a = "111111111111111111111111111111"
    print('2' in a)#打印结果
    
    False

     not in  不存在

    # _author_=AbeoHu
    a = "111111111111111111111111111111"
    print('2' not in a)#打印结果
    
    True

    身份运算符:

    is

    # _author_=AbeoHu
    a = "111111111111111111111111111111"
    print(type(a) is str)#判断变量a是否是字符串

    is not

    # _author_=AbeoHu
    a = "111111111111111111111111111111"
    print(type(a) is not str)#判断变量a是否不是字符串

     三.布尔值

    布尔值和布尔代数的表示完全一致,一个布尔值只有TrueFalse两种值,要么是True,要么是False,在Python中,可以直接用TrueFalse表示布尔值(请注意大小写),也可以通过布尔运算计算出来:

    >>> True
    True
    >>> False
    False
    >>> 3<2
    False
    >>> 3>2
    True

     布尔值也可以用and not or运算:

    # _author_=AbeoHu
    5 > 3 and 3 > 1
    True
    5 > 3 or 1 > 3
    True
    not 1 > 2
    True

    四.列表

    1.什么是列表

    列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表的数据项不需要具有相同的类型。

    2.列表的使用方法

    首先介绍列表的格式:

    # _author_=AbeoHu
    a = ['AbeoHu','QQ','jack']#列表格式中间用,隔开,中括号括住

    如果我要将AbeoHu过滤出来:

    首先,列表的数是从0开始的,那么AbeoHu代表0,我们把0过滤出来

    # _author_=AbeoHu
    a = ['AbeoHu','QQ','jack']#列表格式中间用,隔开,中括号括住
    print(a[0])

    如果要追加内容到里面呢? .append

    a.append('xiaohu')

    插入到指定位置  insert

    a.insert(2,'xiaohu')

    删除 remove

    a.remove('xiaohu')

    找到里面有几个相同元素在里面  count

    print(a.count('xiaohu'))

    查找元素所在的位置 index

    print(a.index('xiaohu'))

    如果想把他们倒过来呢? reverse

    a.reverse()

    排序,Python默认是按照特殊字符 ,数字,字母排序的  sort

    a.sort()

    3.切片

    切片:Python切片指的是如果我想提取出中间一部分的数据的话,就需要用到切片了

    首先,我们先来定义一个列表:

    a = ['AbeoHu','QQ','jack','john']

    如果我现在想将AbeoHu到jack的元素调取出来,怎么切

    首先,我们先来讲讲python切片的特性:

    顾头不顾尾,看代码

    那我是不是得从0切到2是吧

    print(a[0:2])
    ['AbeoHu', 'QQ']#结果

    这就是顾头不顾尾,python切片的时候要往后转移一位,比如你要切第3个,那么你的位置就要定义到4

    取前3个元素

    print(a[:3])

    取后3个元素

    print(a[-3:])

    我们来定义一个大数字,1-100

    L=list(range(100))

    现在我想隔两个取一个元素

    print(L[::2])

    五.元组

    什么是元组?

    元组一般被称为常量数组,他和列表的区别在于,列表可以改变,元组不能改变.

    元组写法:

    # _author_=AbeoHu
    a = (1,2,3)

    元组用法:

    count(位置)

    a = (1,2,3)
    print(a.count(2))

    index(查找)

    # _author_=AbeoHu
    a = (1,2,3)
    print(a.index(3))

    将元组修改成列表

    # _author_=AbeoHu
    a = (1,2,3)
    a = list(a)

    六.购物车小程序

    # _author_=AbeoHu
    shop_list = [
        ('IPhone',10000),
        ('iPAD',500),
        ('coffie',200)
    ]
    decide = True
    shop=[]
    sallay = input("please your sally:")
    if sallay.isdigit():
        sallay = int(sallay)
        while decide:
            for index,item in enumerate(shop_list):
                print(index,item)
            user_cholice=input("请输入你的商品编号:")
            if user_cholice.isdigit():
                user_cholice=int(user_cholice)
                if user_cholice < len(shop_list) and user_cholice >=0:
                    pitem=shop_list[user_cholice]
                    if pitem[1] < sallay:
                        shop.append(pitem[0])
                        sallay -= pitem[1]
                        print("您购买了%s,余额还有%d" %(pitem[0],sallay))
                    else:
                        print("您的余额已不足。还剩%s"%sallay)
                        for i in shop:
                            print(i)
                        decide=False
                else:
                    print("您输入的商品编号不存在")
            elif user_cholice=='q':
                decide=False
            else:
                print("请输入正确的商品编号")
    else:
        print("工资为数字格式请重新输入")

    七.字典

    dict:

    Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

    举个例子,我们写一个成绩表,名字对应成绩

    用list(列表)写的话,我们得需要定义两个list

    # _author_=AbeoHu
    name = ['AbeoHu','QQ','John']
    scores = ['99','88','77']

    如果用字典的话,只需要定义他的key和值

    # _author_=AbeoHu
    d = {'AbeoHu':'99','QQ':'88','John':'66'}
    print(d['AbeoHu']

    如果我现在在外面给AbeoHu定义个新的值,会怎么样?

    # _author_=AbeoHu
    d = {'AbeoHu':'99','QQ':'88','John':'66'}
    d['AbeoHu'] = '222'
    print(d)
    
    {'AbeoHu': '222', 'QQ': '88', 'John': '66'}

    他会替换

    删除key  pop

    d.pop('AbeoHu')
    d.popitem() 不指定,随机删除

    循环打印字典:

    方法一:

    # _author_=AbeoHu
    d = {'AbeoHu':'99','QQ':'88','John':'66'}
    for i in d:
        print(i, d[i])

    方法2:

    # _author_=AbeoHu
    d = {'AbeoHu':'99','QQ':'88','John':'66'}
    for k,v in d.items():
        print(k,v)

    这两种方法区别:

    方法1会直接将字典打印出来

    方法2首先是将字典转换成列表然后再打印,.items 会变成一个列表

    方法1效率要比2高

    字典的用法:

    .get 返回值,正确不反回,不正确返回none

    print(d.get('qq'))

    has_key 判断key是否存在,存在返回True,不存在返回False

    setdefault 如果字典里没有这个key 就会生成,如果有,按字典的来

    d.setdefault('qq')


    update 旧的替换掉,新的增加

    # _author_=AbeoHu
    d = {'AbeoHu':'99','QQ':'88','John':'66'}
    d2={'AbeoHu':'222'}
    d.update(d2)
    print(d)

    九.深copy和浅copy用法

     首先我们先来看看字典的案例:

    # _author_=AbeoHu
    d = {'AbeoHu':'99','QQ':'88','John':'66'} #定义一个字典
    d2 = d #将变量指向字典
    d['AbeoHu']='200' #修改字典的元素
    print(d2)#查看变量d2变量

    那么d2变量变不变?

    {'QQ': '88', 'AbeoHu': '200', 'John': '66'} #d2也会跟着变

    这是为什么?我们先来看看这两个变量的内存地址:

    print(id(d))
    print(id(d2))
    2480295225288
    2480295225288

    两个id内存地址都一样,在python中是这样的,字典是为了减少内存地址,所以你不论变哪个,字典里对的元素也会跟着变

    浅copy:

    浅copy是完全独立的,咱们来举个例子

    # _author_=AbeoHu
    d = {'AbeoHu':'99','QQ':'88','John':'66'} #定义一个字典
    d2=d.copy()#copy字典
    d['AbeoHu']='222'#修改源字典
    print(d)#打印d字典
    print(d2)#打印copy的字典
    
    {'AbeoHu': '222', 'QQ': '88', 'John': '66'}
    {'AbeoHu': '99', 'QQ': '88', 'John': '66'}

    发现,copy的字典元素没变,这是因为字典是独立的

    copy本身是copy最深一层的,比如,我们在字典里面增加一个列表

    # _author_=AbeoHu
    d = {'AbeoHu':['99'],'QQ':'88','John':'66'} #定义一个字典
    d['x']=['222','www']#修改源字典
    d2=d.copy()#copy字典
    d['x'].append('xxxxxxxxxxxxxxxx')
    print(d)#打印d字典
    print(d2)#打印copy的字典
    结果
    {'QQ': '88', 'AbeoHu': ['99'], 'x': ['222', 'www', 'xxxxxxxxxxxxxxxx'], 'John': '66'}
    {'AbeoHu': ['99'], 'QQ': '88', 'John': '66', 'x': ['222', 'www', 'xxxxxxxxxxxxxxxx']}

    发现变了,copy是copy最深一层的

    深copy

    import copy
    copy.deepcopy()#深copy  完全独立克隆一份
    copy.copy()#浅copy
  • 相关阅读:
    hdoj5813【构造】
    Codeforces645B【树状数组求逆序数】
    pojcoin【未完待续】
    hdoj5818【模拟】
    poj2385【基础DP】
    poj3069【贪心,水】
    谦虚
    poj3617【贪心】
    poj2229【完全背包-规律Orz...】
    poj3176【简单DP】
  • 原文地址:https://www.cnblogs.com/AbeoHu/p/5723647.html
Copyright © 2011-2022 走看看