zoukankan      html  css  js  c++  java
  • 基础篇

    计算机简介:

          计算机基本组成:主板+CPU+内存

           CPU:主频、核数.  主频和核数越大CPU越好.

           内存:大小(8G,16G,32G)、型号(DDR3,DDR4,DDR5)、主频(海盗船,玩家国度)

           显卡:显存,型号(N,A. 其中N型号中倒数第二个数越大越好例如:N-GTX 1080 TI),位宽

           硬盘:西数,希捷,日立,东芝

         计算机最低层是:电子电路,只能识别0,1.

    python简介:

        python是解释性、弱类型语言.

        python的优点:

         (1)定位"优雅","明确","简单"; (2)开发效率高;(3)python是一门高级语言; (4)可移植性;(5)可扩展性;(6)可嵌入性;

        python的缺点:

          (1)速度慢;(2)代码不能加密;(3)线程不能利用CPU问题.

        python解释器:cpython,ipython,pypy(运行速度快),jython,ironpython

    变量命名规则:

        (1)由数字,英文,下划线组成;

        (2)不能由数字开头.更不能是纯数字;

        (3)不能是关键字;

        (4)不能是中文;

        (5)不能太长;

        (6)要有意义;

        (7)区分大小写;

        (8)推荐使用驼峰和下划线两种类型

    常量:全部字母大写就是常量,约定俗成.

    python数据类型:

         (1)int(整数)  用于计算和大小比较    +,-,*,/,%(取余数),//(整除),<,>,<=,>=,!=(不等于)

         (2)str(字符串)  用',","""引起来都是字符串.     +(连接),*(重复)

         (3)bool(布尔值)   只有两个结果true和false

    if判断:

         最基本用法
      if 条件判断:
       代码块
      运行流程. 当条件是真. 执行代码块
      
      if 条件:
       代码块1
      else:
       代码块2
      执行流程: 当条件成立. 执行代码块1. 否则, 执行代码块2. 二选一
      
      if 条件1:
       代码块1
      elif 条件2:
       代码块2
      .....
      else:
       代码块n
      执行流程: 满足条件1执行代码块1;满足条件2执行代码块2;满足条件n执行代码块n.

    # 单行注释    '''多行注释 

    \n 换行    在print语句之后,python解释器会自动添加换行符      ==表示判断

    用户输入input接收的内容永远是字符串

    例1:print("周杰伦说:\"昆凌也不错.\"")   print('周杰伦说:"昆凌也不错."')    输出周杰伦说:''昆凌也不错.''

    例2:print("你好,",end="")  print("欢迎光临")     输出你好,欢迎光临

    例3:if语句的两种写法

    (1)
    num=int(input("请输入一个数"))
    if num>66:
     print("猜测结果大了")
    elif num<66:
     print("猜测结果小了")
    else:
     print("猜测结果正确")
    (2)
    num=int(input("请输入一个数"))
    if num>66:
     print("猜测结果大了")
    else:
     if num<66:
      print("猜测结果小了")
     else:
      print("猜测结果正确")

     while循环:

    while 条件:

        代码块  #循环体
        运行流程:如果条件为真,那么循环体则执行
                 如果条件为假,那么循环体不执行
    例 
    count=1
    while count<=5:
    print("你很帅!")
    count=count+1

    如果在循环的过程中,因为某些原因,你不想继续循环了,怎么把它中止掉呢?这就用到break 或 continue 语句

    break用于完全结束一个循环,跳出循环体执行循环后面的语句continue和break有点类似,区别在于continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环

    while True:
        s=input("请输入你的聊天内容:")
        if s=='q':
            break
        print("请开始你的表演:"+s)

    while True:
    s=input("请输入聊天内容:")
    if s=="q":
    break
    if "马化腾"in s:
    print("你输入的内容不合法!")
    continue
    print("请开始你的表演:"+s)

    例  1+2+3+4+...+100=?

    count=1
    sum=0
    while count<=100:
    sum=sum+count
    count=count+1
    print(sum)

    例  1--100之间的奇数

    count=1
    while count<=100:
    if count%2!=0:
    print(count)
    count=count+1

    while 后面的else 作用是指,当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句

    格式化输出:

    %s就是代表字符串占位符,%d,是数字占位符,%f,小数占位符

    name = input("请输入你的名字:")
    age = input("请输入你的年龄:")
    hobby = input("请输入你的爱好:")
    gender = input("请输入你的性别:")
    print("%s今年%s岁,爱好%s,性别%s" % (name,age,hobby,gender))

    如果字符串中有占位符,那么后面所有的%都是占位,需要转译,如果没有占位符%可以直接用.

    s = "网球"
    print("%s受到全世界%%30人们的喜欢." % s)

    运算符:

    算数运算符:+,-,*,/,**,%,//

    比较运算符:==,!=,<>(不等于),<,>,<=,>=

    赋值运算:=,+=(例 a+=1相当于a=a+1),-=,*=,/=,**=,%=,//=

    逻辑运算:

    and (并且)左右两端都是真,运算结果为真

    or(或者)左右两端有一端为真时.运算结果为真

    not(非)原来是假,现在是真.

    在没有()的情况下not 优先级高于 and,and优先级高于or,即优先级关系为( )>not>and>or,同一优先级从左往右计算

    not 2>1 and 3<4 or 4>5 and 2>1 and 9>8 or 7<6  #false
    F and T or F and T and T or F
    F or F or F
    F

    编码:

    1.ASCII  8位(bit) 1个字节  最多有256个位置,包含英文字母大小写.数字.标点等特殊符号.

    2.国标码 GBK 16位(bit) 2个字节 包含大部分常用的汉字.

    3.万国码 Unicode 32位(bit) 4个字节

    4.utf-8 :    英文  8位(bit) 1个字节

                    欧洲文字  16bit  2个字节

                    中文   24bit 3个字节

    8bit=1byte    1byte=1kb   1024kb=1mb   1024mb=1GB   1024GB=1TB

    1024TB=1PB  1024PB=1EB  1024EB=1ZB  1024ZB=1YB  1024YB=1NB

    数据类型:

    1.int 整数  bit_length()求二进制长度   

    2.bool  布尔

    3.str  字符串     存储少量数据

    4.list  列表    例:["123","abc",]

    5.tupe  元组  只读列表,不能改.

    6.dict  字典  一对一对的存储数据  key:value   

    7.set  集合  存储不重复的内容,保存大量内容.

    int类型: 

    只能进行求二进制长度操作

    例   

    a=27  ==>  a=11011(二进制)
    print(a.bit_length()) ==<5>

    bool类型:

    取值只有True或False.bool值没有操作

    字符串转换:

    例:

    i=2
    s=str(i) 总结:转换成...就有...把目标括起来
    print(type(s)) ==<class'str'>

    例:

    b=False
    c=int(b)
    print(c) ==<0> True=1 False=0

    例:

    s=""
    if s:
    print("123")
    else:
    print("abc") ==<abc> 空字符表示False,非空字符表示True.

    例:

    m=None
    if m:
    print("a")
    else:
    print("b") ==<b> 空的都是False,非空都是True

    字符串str:

    1.字符串的索引,切片,步长

    索引就是下标,切记,下标是从0开始.

    例:

    s="我爱吃东西."
    print(s[4]) ==<西>
    print(s[-1])     ==<.>
    通过索引获取到的内容. 还是一个字符串
    切片可以对字符串进行截取
    语法 s[起始位置: 结束位置]
    特点:顾头不顾腚

    例:

    s="我爱吃东西."
    s1 = s[2:5]
    print(s1) ==<吃东西>

    例:

    s="我爱吃东西."
    s3 = s[3:] # 默认到结尾
    print(s3) ==<东西.>

    例:

    s="我爱吃东西."
    s4 = s[:3] # 从头开始
    print(s4) ==<我爱吃>
    s5 = s[:] # 从头到尾都切出来
    print(s5) ==<我爱吃东西.>

    例:

    s="我爱吃东西."
    s6 = s[-2:] # 从-2 切到结尾 默认从左往右切
    print(s6) ==<西.>
    步长:
    语法:s[起始位置: 结束位置: 步长]

    例:

    s = "我是梅西,我很慌"
    s1 = s[1:5:2] # 从1开始, 到5结束, 每2个取1个
    print(s1) ==<是西>

    例:

    s = "我是梅西,我很慌"
    s2 = s[::3]
    print(s2) ==<我西很>
    s3 = s[6:2:-2] # - 表示反着来. 每两个取1个
    print(s3) ==<很,>

    2.字符串的相关操作

    大小写相关操作

    (1)capitalize()  ==首字母大小写

    例:

    s = "alex and wusir and taibai"
    s1 = s.capitalize() # 首字母大写
    print(s) # 原字符串不变 ==<alex and wusir and taibai>
    print(s1) ==<Alex and wusir and taibai>

    (2)upper()==全部大写        (3)lower()==全部小写

    例:

    s = "Alex is not a Good Man. "
    print(s.upper()) ==<ALEX IS NOT A GOOD MAN.>
    print(s.lower()) ==<alex is not a good man.>

    (4)strip()==去掉两端指定字符,中间去不掉.

    例:

    s = "*******呵a呵呵呵****************"
    print(s.strip("*")) ==<呵a呵呵呵>

    例:

    username = input("用户名:").strip()    # 去掉空格.
    password = input("密码:").strip() # 去掉空格
    if username == 'abc' and password == '123':
    print("登录成功")
    else:
    print("登录失败")

    (5)replase 替换

    例:

    s = "alex wusir alex sb taibai"
    s1 = s.replace("alex", "晓雪") # 原字符串不变
    print(s1) ==<晓雪 wusir 晓雪 sb taibai>
    # 去掉上述字符串中的所有空格
    s2 = s.replace(" ", "")
    print(s2) ==<alexwusiralexsbtaibai>
    s3 = s.replace("alex", "sb", 1)
    print(s3) ==<sb wusir alex sb taibai>

    (6)split 切割=刀    切割符左右两边都会出现''空字符.

    例:

    s = "alex_wuse_taibai_bubai"
    lst = s.split("_taibai_") # 刀是_ 切完的东西是列表. 列表装的是字符串
    print(lst) ==<['alex_wuse', 'bubai']>

    (7)format 格式化

    例:

    s = "我叫{}, 我今年{}岁了, 我喜欢{}".format("abc", 123, "456")
    print(s) ==<我叫abc, 我今年123岁了, 我喜欢456>
    # 可以指定位置
    s = "我叫{1}, 我今年{0}岁了, 我喜欢{2}".format("abc", 18, "456")
    print(s) ==<我叫18, 我今年abc岁了, 我喜欢456>
    s = "我叫{name}, 我今年{age}岁了, 我喜欢{mingxing}".format(name="abc", mingxing="456", age=123)
    print(s) ==<我叫abc, 我今年123岁了, 我喜欢456>

    (8)startswith  判断字符开头是否以...开头

    (9)endswith 判断字符是否以...结尾

    (10)count  判断...在字符串中出现的次数

    (11)find  查找...在字符串中出现的位置,如果没有出现返回-1

    (12)index 查找..在字符串中出现的位置,如果不存在则报错.

    例:

    s = "abc喜欢123,不喜欢abc"

    print(s.startswith("abc")) # 判断字符串是否以xxx开头 ==<Ture>
    print(s.endswith("456")) # 判断字符串是否以xxx结尾 ==<Flase>
    print(s.count("456")) # 计算xxx在字符串中出现的次数 ==<0>
    print(s.find("abc", 3)) # 计算xxx字符串在原字符串中出现的位置, 如果没出现返回 ==<12>
    print(s.index("456")) # index中的内容如果不存在. 直接报错

    (13)isdigit  判断字符串是否由数字组成

    (14)isalpht  判断字符串是否由字母组成

    (15)isalnum  判断是否由字母和数字组成

    (16)isnumerical  判断是否由数字组成也可以判断中文数字

    (17)len()  求字符串的长度

    例:

    s = "你今天喝酒了么"
    i = len(s) # print() input() len() python的内置函数
    print(i) ==<7>
    i = s.__len__() # 也可以求长度 len()函数执行的时候实际执行的就是它
    print(i) ==<7>

    (18) join()把字符串变成列表

    例:

    s='abc'
    s1=s.join("非常可乐")
    print(s1) ==<非abc常abc可abc乐>

    例:

    s='_'.join(['非','常','可','乐'])
    print(s) ==<非_常_可_乐>

    join可以把列表变成字符串

    split可以把字符串变成列表

    3.字符串的遍历

    (1)使用while进行遍历

    例:

    s = "晓雪老师.你好漂亮"
    print(len(s)) # 长度是:8 索引到7 ==<9>
    count = 0
    while count < len(s):
    print(s[count])
    count = count + 1

    (2)使用for进行遍历   

    优势:简单
    劣势:没有索引

    例:

    s = "晓雪老师.你好漂亮"
    for c in s: # 把s中的每一个字符交给前面的c 循环
    print(c)

    语法:

    for 变量 in 可迭代对象:

             循环体

    list列表:

    列表可以装大量的数据,不限制数据类型.      表达方式:[],方括号中的每项用","隔开.     列表和字符串一样,有索引和切片

    1.列表的增删改查

    (1).append("添加的元素")向列表中添加一个元素,默认元素添加到列表的末尾.

    例:

    lst = ["周杰伦", "王力宏", "周润发"]
    lst.append("伍佰")
    print(lst)    ==<['周杰伦', '王力宏', '周润发', '伍佰']>

    insert(指定位置,"添加的元素")把元素添加的指定的位置,原来在指定位置的元素往后移.

    例:

    lst = ["周杰伦", "王力宏", "周润发"]
    lst.insert(1, "马化腾") # 把元素插入到指定位置. 元素的移动
    print(lst) ==<['周杰伦', '马化腾', '王力宏', '周润发']>

    exend(添加的元素)把元素添加到列表的最后   如果添加的元素是字符串最后列表添加的元素是字符串的每一个元.

    迭代添加: 如果添加的是列表最后列表最后添加的是要添加的列表的元素.

    例:

    lst = ["周杰伦", "王力宏", "周润发"]
    lst.extend(["马云"])
    print(lst) ==<['周杰伦', '王力宏', '周润发', '马云']>

    例:

    lst = ["周杰伦", "王力宏", "周润发"]
    lst.extend(["马云", "王健林", "李嘉诚"]) # 迭代添加
    print(lst) ==<['周杰伦', '王力宏', '周润发', '马云', '马云', '王健林', '李嘉诚']>

    例: 多次输入名字,按q键停止输入.

    lst = []
    while 1:
    name = input("请输入学生的名字")
    if name.upper() == "Q":
    break
    else:
    lst.append(name) # 把名字添加到列表

    print(lst)
    结果:
    请输入学生的名字adf
    请输入学生的名字vht
    请输入学生的名字tj
    请输入学生的名字hm,
    请输入学生的名字q
    ['adf', 'vht', 'tj', 'hm,']

    2.   pop()删除最后一个元素,     pop(删除元素的索引)删除指定索引位置的元素

    例:

    lst = ["白菜", "大白梨", "茄子", "大白梨"]
    e = lst.pop() # 返回删除的元素, 删除最后一个
    print(e) ==<大白梨> #删除的元素
    print(lst)   ==<['白菜', '大白梨', '茄子']>   #删除最后一个元素的列表

    例:

    lst = ["白菜", "大白梨", "茄子", "大白梨"]
    e = lst.pop(1) # 根据给出的索引进行删除
    print(e) ==<大白梨>
    print(lst) ==<['白菜', '茄子', '大白梨']>

    remove(删除的元素)删除指定元素

    例:

    lst = ["白菜", "大白梨", "茄子", "大白梨"]
    lst.remove("大白梨")
    lst.remove("大白梨")
    print(lst) ==<['白菜', '茄子']>

    del 列表[]   切片删除

    例:

    lst = ["白菜", "大白梨", "茄子", "大白梨"]
    del lst[1:] #从索引为1到最后的元素全部删除
    print(lst) ==<['白菜']>

    list在循环的时候不能删除,因为会改变索引.

    例:

    lst=["周杰伦","周润发","周星星","马化腾","周树人"]
    for el in lst:
    lst.remove(el)
    print(lst) ==<['周润发', '马化腾']>

    例:

    lst=["周杰伦","周润发","周星星","马化腾","周树人"]
    del_lst=[]
    for el in lst:
    if el[0]=="周":
    del_lst.append(el)
    for el in del_lst: #循环记录的内容
    lst.remove(el) #删除原列表的内容
    print(lst) ==<['马化腾']>

     3. 列表的改

    列表的修改利用索引切片的修改

    索引修改

    例:

    lst = ["太白", "五色", "银王", "日天"]
    lst[0] = "太黑"
    print(lst) ==<['太黑', '五色', '银王', '日天']>

     迭代修改

    例:

    lst = ["太白", "五色", "银王", "日天"]
    lst[1:3] = "马化腾" # 迭代修改
    print(lst) ==<['太白', '马', '化', '腾', '日天']>

     例:

    lst = ["太白", "五色", "银王", "日天"]
    lst[1:3] = ["周杰伦", "王力宏"]
    print(lst) ==<['太白', '周杰伦', '王力宏', '日天']>

     4.列表的查询

    for循环

    例:

    lst = ["舒克贝塔", "黑猫警长", "熊大熊二", "葫芦娃", "吴佩琪"]
    for el in lst: # element(元素)
    print(el)
    结果:
    舒克贝塔
    黑猫警长
    熊大熊二
    葫芦娃
    吴佩琪

    5.列表的相关操作

    (1)len(列表)--列表长度

    例:

    lst = ["1", "2", "3", "4","2", "6"]
    print(len(lst)) ==<6>

    (2)count(指定字符)--指定字符的长度

    例:

    lst = ["1", "2", "3", "4","2", "6"]
    print(lst.count("2")) ==<2>

    (3)sort()--排序,数字从小到大      从大到小是sort(reverse)

    例:

    lst = [1, 9, 18, 2 , 34, 88, 7, 9]
    lst.sort() # 升序
    print(lst) ==<[1, 2, 7, 9, 9, 18, 34, 88]>
    lst.sort(reverse=True) # 倒序
    print(lst) ==<[88, 34, 18, 9, 9, 7, 2, 1]>

    (4)reverse--让列表从从右到左(倒序)排列 

     例:

    lst = [1, 9, 18, 2 , 34, 88, 7, 9]
    lst.reverse()
    print(lst) ==<[9, 7, 88, 34, 2, 18, 9, 1]>

    6.列表的嵌套

    降维操作

    例:

    lst = [1, "周杰伦", "张杰", ["周星驰", ["可口可乐"], "陈奕迅"]]
    print(lst[3][1][0]) ==<可口可乐>
    lst[3][1].append("芬达")
    print(lst) ==<[1,"周杰伦","张杰",["周星驰",["可口可乐","芬达"],"陈奕迅"]]>
    lst[2] = lst[2].replace("杰", "键")
    print(lst) ==<[1,"周杰伦","张键",["周星驰", ["可口可乐"], "陈奕迅"]]>

    tuple元组:

    不可变列表,只读列表.  有索引和切片

    当元组元素少于等于1时,需要加一个逗号.

    例:

    lit = (1, "花生", "山药")
    print(type(lit)) ==<class"tuple">
    tu = (1 ) # 需要添加一个逗号
    print(type(tu)) ==<class"int">
    tu = (1, )    # 需要添加一个逗号
    print(type(tu))          ==<class"tuple">

    空元组   tu=tuple()     元组只能进行(1)count()--查找元素出现的次数;(2)index()--查找元素是否存在,不存在直接报错.

    元组的遍历:

    for  el  in  tu:

          print(el)

    元组本身不能改变,元组内部第一层元素不能改变  如果元组中包含列表,则列表是可以变的.

    例:

    tu = (1, "马化腾", ["胡辣汤", "疙瘩汤", "西红柿鸡蛋汤"])
    tu[2].append("粘包米") # 元组本身没有变. 变的是儿子中的内容
    print(tu) ==<(1, '马化腾', ['胡辣汤', '疙瘩汤', '西红柿鸡蛋汤', '粘包米'])>

    range:

    例:

    for i in range(10): # 从0开始. 到10结束
    print(i)

    例:

    for i in range(3, 7):   # 从3 开始. 打印到7结束. 不能到7
    print(i)

    例:

    for i in range(3, 10, 2):  # 从3 到 10 每2个取一个
    print(i)

    例:

    for i in range(0, -5, -1):  #从0 开始到-5结束. 倒着数
    print(i)

    字典(dict):

    dict{}:括起来的键值对是字典.{key:value}

    字典中的key必须是可哈希的(不可变的).value没有限制.

    整数.字符串.元组是不可变的,列表是可变的.

      增:

    例:  

    dic={"A":"a"}
    dic["B"]="b"
    print(dic) ==<{'A': 'a', 'B': 'b'}>

     例:  如果key重复了,value会被替换.

    dic={"A":"a"}
    dic["B"]="b"
    dic["B"]="2" #赋值
    print(dic) ==<{'A': 'a', 'B': '2'}>

    setdefault 如果字典中包含这个key则不再继续保存.

    例:

    dic={"A":"a"}
    dic.setdefault("C","c")
    print(dic) ==<"A":"a","C":"c">
    dic.setdefault("C",3)
    print(dic) ==<"A":"a","C":"c">

      删除:

    (1)pop(key)

    例:

    dic={"A":"a","B":"b","C":"c"}
    dic.pop("A")
    print(dic) ==<{'B': 'b', 'C': 'c'}>

    例:

    dic={"A":"a","B":"b","C":"c"}
    ret=dic.pop("A")
    print(ret) ==<a>

    (2)del dic[key]

    例:

    dic={"A":"a","B":"b","C":"c"}
    del dic["B"]
    print(dic) ==<{'A': 'a', 'C': 'c'}>

    (3)popitem()  随机删除

    例:

    dic={"A":"a","B":"b","C":"c"}
    ret=dic.popitem()
    print(ret) ==<('C', 'c')>
    print(dic) ==<{'A': 'a', 'B': 'b'}>

    (4)clear  清空

    例:

    dic={"A":"a","B":"b","C":"c"}
    dic.clear()
    print(dic) ==<{}>

    dict中的元素在迭代循环的过程中不能执行新增和删除操作.

    formkeys 需要一个静态字典,执行fromkeys命令后返回一个新字典和上面定义的字典没有关系.

    例:

    dict={}
    a=dict. fromkeys(['A','B','C'],'ab')
    print(a) ==<{'A': 'ab', 'B': 'ab', 'C': 'ab'}>

    修改:

    (1)可以用key直接修改.

    例:

    dic1={"A":1,"D":"d","C":3}
    dic1["C"]=dic1["C"]-2
    print(dic1) ==<{'A': 1, 'D': 'd', 'C': 1}>

    (2)字典1.update(字典2) 把字典2添加的字典1中,如果字典2中key和字典1中的key重复则替换vlaue,如果不重复,则添加.

    例:

    dic={"A":"a","B":"b","C":"c"}
    dic1={"A":1,"D":"d","C":3}
    dic.update(dic1)
    print(dic) ==<{'A': 1, 'B': 'b', 'C': 3, 'D': 'd'}>

       查找:

    (1)用key直接查找

    例:

    dic={"及时雨":"宋江","小李广":"花荣","易大师":"剑圣"}
    print(dic["易大师"])   ==<剑圣>

    (2)get 如果key不存在则返回None,如果不想找回None可以添加一个默认值.  key存在则返回value

    例:

    dic={"及时雨":"宋江","小李广":"花荣","易大师":"剑圣"}
    print(dic.get("李光","默认值")) ==<默认值>

    (3)setdefault  先判断字典中有没有key,如果没有则添加.  再用这个key去字典中查询,返回查到的结果.

    例:

    dic={"及时雨":"宋江","小李广":"花荣"}
    ret=dic.setdefault("诺手","诺克")
    print(ret) ==<诺克> #查询
    print(dic) ==<{'及时雨': '宋江', '小李广': '花荣', '诺手': '诺克'}> #添加

     相关操作:

    (1)keys  返回所有的key  结果像集合像列表但不是列表  可以进行迭代循环.

     例:

    dic={"及时雨":"宋江","小李广":"花荣"}
    print(dic.keys()) ==<dict_keys(['及时雨', '小李广'])>
    for s in dic.keys():
    print(s)
    ==<及时雨
    小李广>

    (2)values 返回所有的value值   结果像集合像列表但不是列表  可以进行迭代循环.

    例:

    dic={"及时雨":"宋江","小李广":"花荣"}
    print(dic.values()) ==<dict_values(['宋江', '花荣'])>
    for s in dic.values():
    print(s)
    ==<宋江
    花荣>

    (3)items  返回所有key,value值     结果像列表但不是列表,列表中的元素是元组.

    例:

    dic={"及时雨":"宋江","小李广":"花荣"}
    print(dic.items()) ==<dict_items([('及时雨', '宋江'), ('小李广', '花荣')])>#键值对
    for s in dic.items():
    print(s)
    print(s[0])
    print(s[1])

    根据解构的一种算法:
    dic={"及时雨":"宋江","小李广":"花荣"}
    for k,v in dic.items():
    print(k)
    print(v)

    解构,解包

    例:

    a,b=1,2
    print(a) ==<1>
    print(b) ==<2>

    例:

    a=1,2  ==>  a=(1,2)
    print(a) ==<(1,2)>

    例:

    a,b=(1,2)
    print(a) ==<1>

     字典的嵌套

    例:

    dic={"name":"汪峰",
    "age":58,
    "wife":{"name":"章子怡",
    "age":37,
    "salar":1800000},
    "children":[{"name":"老大","age":18},
    {"name":"老二","age":7}]}
    print(dic["wife"]["salar"]) ==<1800000>
    print(dic["children"][1]["age"]) ==<7> #第二个孩子的年龄

    set集合   特点:去重

    set中的元素是不重复的,无序的里面的元素必须是可哈希的(int,str,tuple,bool).

    例:

    s={'王者荣耀','英雄联盟','王者荣耀',123,True,True}
    print(s) ==<{'英雄联盟', True, '王者荣耀', 123}>

    (1)增:add()   update()

    (2)删:pop()随机删除   remove()直接删除  clear()清空

    (3)改:先删后增

    (4)查:可迭代  for el in set:

    set集合本身是可以发生改变的,是不可哈希的.我们可以使用frozenset来保存数据.frozenset是不可变的.也就是一个可哈希的数据类型.

    例:

    frozenset([1,3,6,6,9,8])
    ss={'a',s}
    print(ss) ==<{'a', frozenset({1, 3, 6, 8, 9})}>

    is和==的区别:

    id()内存地址

    例:

    s="***是***"
    abc=id(s)
    print(abc) ==<2573374364144>

    例:

    lis=["花生","莲蓬","荷花"]
    lis1=["花生","莲蓬","荷花"]
    print(id(lis))
    print(id(lis1))
    ==<1965904831112
    1965904831048>#内存地址不一样

    例:

    s="花生"
    s1="花生"
    print(id(s))
    print(id(s1))
    ==<1486646978848
    1486646978848>#内存地址一样

    字符串会进入小数据池,会对字符串进行缓存,为了节省内存.

    字符串(str).整形(int).布尔(bool)都有小数据池.

    列表(list).元组(tuple).字典(dict)没有小数据池.

    注意:在使用字符串的时候,python会帮我们把字符串进行缓存,在下次使用的时候,可以直接指向这个字符串即可,可以节省内存.

    ==判断左右两端是否相等

    is判断左右两边的id是否相等,比较内存地址

    例:

    lis=["花生","莲蓬","荷花"]
    lis1=["花生","莲蓬","荷花"]
    print(lis==lis1) ==<Ture>
    print(lis is lis1) ==<Flase>

    编码和解码:

    编码:    encode()   之后的内容是bytes(字节)类型

    存储前必须先进行编码

    硬盘和网络传输都用UTF-8

    例:

    s="我饿了"
    bs=s.encode("UTF-8")
    print(bs) ==<b'\xe6\x88\x91\xe9\xa5\xbf\xe4\xba\x86'>

    英文在UTF-8编码之后还是英文

    1个中文在UTF-8编码之后是3个字节

    解码:   decode()   python本身用的就是unicode编码

    用什么编码就用什么解码

    例:

    bs=b'\xce\xd2\xb6\xf6\xc1\xcb'
    print(bs.decode("GBK")) ==<我饿了>解码之后是字符串

    例:   UTF-8转换成GBK

    '\xe6\x88\x91\xe9\xa5\xbf\xe4\xba\x86'
    s=bs.decode("UTF-8") 先把UTF-8解码成unicode字符串
    bss=s.encode("GBK") 在把字符串用GBK进行编码
    print(bss) ==<b'\xce\xd2\xb6\xf6\xc1\xcb'>

    深浅拷贝:

    字典,列表进行赋值操作,实际上是引用内存地址的赋值.内存中只有一个列表,两个变量指向一个列表.

    例:

    lst=["周杰伦","周润发","周星星",]
    lst1=lst #赋值内存地址一样
    lst.append("周树人")
    print(lst,lst1) ==<['周杰伦', '周润发', '周星星', '周树人'] ['周杰伦', '周润发', '周星星', '周树人']>

    浅拷贝:  copy  只拷贝第一层

    例:

    lst=["周杰伦","周润发","周星星",]
    lst2=lst.copy() == lst2=lst[:]
    lst.append("周树人")
    print(lst,lst2) ==<['周杰伦', '周润发', '周星星', '周树人'] ['周杰伦', '周润发', '周星星']>
    print(id(lst),id(lst2)) ==<1991369433864 1991369433800>

    深拷贝:   deepcopy 深度拷贝包括内部的所有内容进行拷贝

    例:

    lst1=['A','B','C',['a','b','c']]
    lst2=lst1.copy()
    lst1[3].append("d")
    print(lst1,lst2) lst1[3]和lst2[3]的内存地址相同
    ==<['A', 'B', 'C', ['a', 'b', 'c', 'd']] ['A', 'B', 'C', ['a', 'b', 'c', 'd']]>

    例:

    import copy
    lst1=['A','B','C',['a','b','c']]
    lst2=copy.deepcopy(lst1)
    lst1[3].append("d")
    print(lst1,lst2) ==<['A', 'B', 'C', ['a', 'b', 'c', 'd']] ['A', 'B', 'C', ['a', 'b', 'c']]>

    拷贝比创建对象的过程快.

    文件操作:

    在python中打开文件使用open()函数,获取文件句柄,通过操作句柄来进行各种操作.

    打开文件的方式有:r,w,a,r+,w+,a+,rb,wb,ab,r+b,w+b,a+b  默认使用的是r(只读)模式.

    常用操作:r,w,a,r+

    1.只读操作  r

    例:

    f=open("明星",mode='r',encoding='UTF-8')
    s=f.read()
    f.close()
    print(s)==<周杰伦.郭采洁.容祖儿.邓论>

    encoding表示编码集.根据文件的实际保存编码进行获取数据.

    绝对路径:(1)从磁盘的根目录开始一直到文件名;(2)互联网上的绝对路径.

    相对路径:同一个文件下的文件,相对于当前这个程序所在的文件夹而言.如果在同一个文件夹中.则相对路径就是这个文件名.如果在上一层文件夹.则要../("../"表示返回上层目录)

    read(n)读取n个字符.需要注意的是.如果再次读取.那么会在当前位置继续去读而不是从头读.

    2.只写操作  w

    写的时候,如果没有文件,则会创建文件;如果文件存在,则将文件中的原内容删除,再写入新内容.

    例:

    f=open("明星",mode='w',encoding='UTF-8')
    s=f.write("昆凌")
    f.flush()
    f.close() 此时文件中的内容只有'昆凌".

    在w模式下不能进行读"read"操作.

    3.追加  a   写入的内容会追加到文件的末尾

    例:

    f=open("明星",mode='a',encoding='UTF-8')
    f.write("小龙女")
    f.flush()
    f.close() 此时文件中的内容是"昆凌小龙女"

    4.只读字节     rb   读取出来的数据类型是byte类型,不能选择encoding字符集.

    例:

    f=open("明星",mode='rb')
    s=f.read()
    print(s)
    f.close() ==<b'\xe6\x98\x86\xe5\x87\x8c\xe5\xb0\x8f\xe9\xbe\x99\xe5\xa5\xb3'>

    5.只写字节  wb  可以不指定打开的文件的编码,但在写文件的时候必须将字符串转化成"utf-8"的bytes数据.

    例:

    f=open("小娃娃",mode='wb')
    f.write("你开心吗?".encode("utf-8"))
    f.flush()
    f.close() 此时小娃娃文件内容"你开心吗?"

    6.读写  r+  读写模式默认光标在文件开头.必须先读后写

    例:

    f=open("小娃娃",mode='r+',encoding="utf-8")
    s=f.read()
    f.write("邓超") 此时小娃娃内容只有"邓超"
    print(s) ==<你开心吗?>
    f.flush()
    f.close()

    在r+模式中,如果读取了内容,不管读取了多少.后面去写都是追加在末尾.如果没有读取,就在开头覆盖.

    7.写读  w+  先将所有内容清空,然后写入,最后读取,但是读取的内容是空的.必需在写完后将光标移动到开头的位置才能读取到内容.

    相关操作:

    1.seek()光标  移动到...位置    单位byte   

    例:

    f=open("明星",mode='r+',encoding="utf-8")
    f.read(3)
    f.seek(3) --光标移动到第一个字的位置

    seek(0)在开头  seek(1)在当前  seek(2)在末尾

    2.readable()判断文件是否可读

    3.writable()判断文件是否可写

    4.readlines()拿到列表元素是每行字和\n 可以执行for循环

    5.strip去掉空格 换行 制表符

    6.truncate()没有参数时从文件截到光标当前位置  truncate(参数)从文件头截到参数的位置.

    文件内容修改:

    with.open打开文件夹不用写close关闭文件夹

    例:

    import os
    with open("菜单",mode="r",encoding="utf-8")as f1,\
    open("菜单_副本",mode="w",encoding="utf-8")as f2:
    s=f1.read()
    ss=s.replace("肉","菜")
    f2.write(ss)
    os.remove("菜单") #删除原菜单
    os.rename("菜单_副本","菜单") #将菜单_副本重命名为菜单

    例:

    f=open("菜单",mode="r",encoding="utf-8")
    for line in f:
    print(line)
    f.close
    梅菜扣肉
    两个换行一个是文本中的换行,一个是print()中的换行.
    红烧肉

    酸辣土豆丝

    东坡肉

    例:

    import os
    with open("菜单",mode="r",encoding="utf-8")as f1,\
    open("菜单_副本",mode="w",encoding="utf-8")as f2:
    for line in f1:
    ss=line.replace("肉","菜")
    f2.write(ss)
    os.remove("菜单")
    os.rename("菜单_副本","菜单")
  • 相关阅读:
    tcl中指定随机数种子
    redis的三种连接方式
    js代码统计table中某一列的值
    CRF从HMM的演进
    SVM中的一些问题
    bert损失函数
    SQL 注入笔记
    20200818 千锤百炼软工人第四十四天
    20200816 千锤百炼软工人第四十三天
    20200816 千锤百炼软工人第四十二天
  • 原文地址:https://www.cnblogs.com/gxj742/p/9255825.html
Copyright © 2011-2022 走看看