随笔- 20  评论- 5  文章- 0 

Python基础(三)

今日主要内容

  • 整型
    • 范围
    • 进制转换
  • 字符串
    • 索引
    • 切片
    • 部分方法详解
  • for循环

一、整型(int)

(一)整型的范围

  • 32位:-2 ** 31 ~ 2 ** 31 -1
  • 64位:-2 ** 63 ~ 2 ** 63 -1

(二)进制转换

  1. 十进制转换二进制:

    • 短除法:与2短除,除到商为0,从下向上取余

    • bin() 函数:将十进制数转换为二进制数

      num = 13
      print(bin(num))  # 1101
  2. 二进制转换十进制

    • 算术法:从右向左依次乘2的n次方(n为0,1,2,...),最后相加

    • int() 函数:其中第二个参数传入几进制数,第一个参数传入对应进制数

      num = "1101"
      print(int(num, 2))  # 13

(三)不可变数据类型

  1. 什么是不可变/可变类型数据

    • 能在原地修改的数据是可变类型数据
    • 不能再原地修改的数据(修改就会开辟新的内存空间)是不可变类型数据
  2. 整型是不可变类型数据

  3. id() 函数:查看内存地址

    a = 10
    print(id(a))  # 1956675984
    a = a + 1
    print(id(a))  # 1956676016

二、字符串(str)

(一)索引

  1. 什么是索引?

    • 索引就是下标,python中索引是从0开始的
  2. 索引只给有序数据类型使用

  3. 索引的表示

    • str[下标]
  4. 正索引和反索引

    • 正索引:从左到右依次 0,1,2 ...
    • 反索引:从右到左依次 -1,-2,-3 ...
    a = "粪发涂墙的郭老湿"
    print(a[0])  # 粪
    print(a[3])  # 墙
    print(a[5])  # 郭
    print(a[-3])  # 郭
  • 注意:索引时,超出最大索引值会报错

    a = "粪发涂墙的郭老湿"
    print(a[10])  # IndexError: string index out of range

(二)切片

  • 上面的例子,如果想要得到"粪发涂墙",只能挨个索引再进行拼接

    a = "粪发涂墙的郭老湿"
    a1 = print(a[0])
    a2 = print(a[1])
    a3 = print(a[2])
    a4 = print(a[3])
    print(a1 + a2 + a3 + a4)  # 粪发涂墙

    是不是很麻烦 ,可以利用切片

  1. 切片只给有序数据类型使用

  2. 切片格式

    • str[start: end: step]
    • 默认step为1
  3. 特点:顾头不顾腚

    • 从开头切片不用输入start;

      切到结尾不用输入end;

      从开头切到结尾都不用输入

    a = "粪发涂墙的郭老湿"
    mes = a[:4]  # 从开头切不用输入start
    print(mes)  # 粪发涂墙
    • step为步长,可以利用step间隔切片
    a = "粪发涂墙老污郭"
    print(a[::2])  # 粪涂老郭
    • 步长若为负数,则反向切片

      注意:若反向切片,start和end的位置是从后往前取的

    a = "粪发涂墙老污郭"
    print(a[::-2])  # 郭老涂粪
    print(a[-2:-6:-1])  # 污老墙涂
    
    • 将字符串反转可以利用切片
    a = "粪发涂墙老污郭"
    a_inversion = a[::-1]
    print(a_inversion)  # 郭污老墙涂发粪
    
  • 索引时,超出最大索引值不会报错

(三)方法详解

  • str.upper() 全部变为大写
    str.lower() 全部变为小写
    str.startswith(n) 判断是否以n开头
    str.endswith(n) 判断是否以n结尾
    str.count(n) 计算n出现的次数
    str.strip() 去掉两端空格、\n、\t
    str.split(n) 以n切割
    str.replace(old, new) 替换
    str.isalnum() 判断是否由数字、中文、字母构成
    str.isalpha() 判断是否由中文、字母构成
    str.isdigit() 判断是否由阿拉伯数字构成
    str.isdecimal() 判断是否由十进制数字构成
  1. str.upper()

    • 将字符串全部变为大写,只对字母生效,对其他不报错
    a = "zxdznb"
    new_a = a.upper()
    print(a)  # 不可变类型,原字符串不变
    print(new_a)  # ZXDZNB
    
  2. str.lower()

    • 将字符串全部变为小写,只对字母生效,对其他不报错
    a = "ZXDZNB"
    new_a = a.lower()
    print(a)  # 不可变类型,原字符串不变
    print(new_a)  # zxdznb
    
  • 应用:登录验证码,不区分大小写

    verify_code = "eF7d"
    while True:
      user = input("账号:")
      pwd = input("密码:")
      while True:
          print(f"验证码:{verify_code}")
          vc = input("请输入验证码:")
          if vc.upper() == verify_code.upper():  # 全部变为大写
              break
          else:
              print("输入错误,请重新输入!")
      if user == "ZXD" and pwd == "zxd123":
          print("欢迎回来")
          break
      else:
          print(”账号密码错误,请重新输入!“)
    
  1. str.startswith(n)

    • 判断字符串是否以参数n开头,输出为布尔值
    • 还可以判断切片的开头
    a = "zxdznb"
    print(a.startswith("z"))  # True
    print(a.startswith("x"))  # False
    
    print(a.startswith("x", 1, 5))  # True
    print(a.startswith("z", 1, 5))  # False
    
  2. str.endswith(n)

    • 判断字符串是否以参数n结尾,输出为布尔值
    • 还可以判断切片的结尾
    a = "zxdznb"
    print(a.endswith("b"))  # True
    print(a.endswith("x"))  # False
    
    print(a.endswith("n", 1, 5))  # True
    print(a.endswith("z", 1, 5))  # False
    
  3. str.count(n)

    • 计算参数n在字符串中出现的次数
    • 还可以切片计算变量n出现的次数
    a = "zxdznb"
    print(a.count("z"))  # 2
    
    print(a.count("z", 0, 3))  # 1
    
  4. str.strip()

    • 默认去掉字符串两端空格、换行符(\n)、制表符(\t)
    • 也可以去掉指定内容
    a = "   zxdznb   "
    a1 = a.strip()
    print(a1)  # zxdznb
    
    a2 = a1.strip("b")
    print(a2)  # zxdzn
    
  • 应用:去掉用户输入账号密码时,手误多打的空格

    while True:
      user = input("账号:").strip()
      pwd = input("密码:").strip()
      if user == "ZXD" and pwd == "zxd123":
          print("欢迎回来!")
          break
      else:
          print("账号密码错误,请重新输入")
    
  1. str.split()

    • 默认以空格、换行符(\n)、制表符(\t)切割字符串,得到的是一个列表,
    • 也可以指定字符切割
    • 还可以填入第二个参数,可以指定切割次数
    a1 = "zxd znb"
    lst1 = a1.split()
    print(lst1[0], lst1[1])  # zxd znb
    
    a2 = "zxd,znb"
    lst2 = a2.split(",")
    print(lst2[0], lst2[1])  # zxd znb
    
    a3 = "xdznbznb"
    lst3 = a3.split("z", 1)
    print(lst3[0], lst3[1])  # xd nbznb
    
  2. str.replace(old, new)

    • 将字符串中的字符替换成新字符
    • 可以指定替换次数,默认全部替换
    a = "zxdhnbhnb"
    new1_a = a.replace("h", "z")
    print(new1_a)  # zxdznbznb  # 全部替换
    
    new2_a = a.replace("h", "z", 1)
    print(new2_a)  # zxdznbhnb  # 替换一次
    
  3. str.isalnum()

    • 判断字符串是否由数字、中文、字母组成
    a1 = "zxd666"
    a2 = "zxd_666"
    print(a1.isalnum())  # True
    print(a2.isalnum())  # False
    
  4. str.isalpha()

    • 判断字符串是否由字母、中文组成
    a1 = "zxd最nb"
    a2 = "zxd666"
    print(a1.isalpha())  # True
    print(a2.isalpha())  # False
    
  5. str.isdigit()

    • 判断字符串是否由阿拉伯数字组成
    a1 = "666"
    a2 = "六六六"
    print(a1.isdigit())  # True
    print(a2.isdigit())  # False
    
  6. str.isdecimal()

    • 判断字符串是否由十进制数字组成
    a1 = "66"
    a2 = "0x42"
    print(a1.isdecimal())  # True
    print(a2.isdecimal())  # False
    

三、for循环

(一)for循环和while循环的区别

  • for循环:有限循环
  • while循环:无限循环

(二)for循环的结构

  • for i in xxx:
      循环体
    
    • for:关键字
    • i:变量名
    • in:关键字
    • xxx:可迭代对象

(三)len() 函数

  • 查询数据的长度,通用函数用于所有数据类型

(四)for循环举例

  • 一个面试题

    for i in "abcde":
        pass
    print(i)  # 循环最后给变量i赋值的是e,没有变动e一直指向e
    
  • 理解for循环和函数自上而下执行机制

    num = 1
    count = 3
    while count:
      for i in "abc":
          print(i + str(num),end=",")
      print()
      count -= 1
      num += 1
    
    输出结果:
    a1,b1,c1,
    a2,b2,c2,
    a3,b3,c3,
    
posted on 2019-09-14 11:10 天狼大大 阅读(...) 评论(...) 编辑 收藏