Python基础(三)

  • 2019 年 10 月 3 日
  • 筆記

今日主要内容

  • 整型
    • 范围
    • 进制转换
  • 字符串
    • 索引
    • 切片
    • 部分方法详解
  • 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,