欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python基础(三)

程序员文章站 2022-05-25 10:53:40
今日主要内容 整型 范围 进制转换 字符串 索引 切片 部分方法详解 for循环 一、整型(int) (一)整型的范围 32位: 2 31 ~ 2 31 1 64位: 2 63 ~ 2 63 1 (二)进制转换 1. 十进制转换二进制: 短除法:与2短除,除到商为0,从下向上取余 bin() 函数: ......

今日主要内容

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

一、整型(int)

(一)整型的范围

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

(二)进制转换

  1. 十进制转换二进制:

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

    Python基础(三)

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

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

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

    Python基础(三)

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

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

(三)不可变数据类型

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

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

    Python基础(三)

  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,