0%

数值与字符串

python的第二节课笔记(基础入门)

python共有六大基础数据类型:分别是数值,字符串,列表,元组,字典,集合。

数值:

常见数值类型:

int 整型 ( 没有小数点)
float 浮点型 (小数,有小数点)
bool 布尔类型 ( True False) [首字母必须大写]

常用函数:

语法 解释
type(数据) 查询数据的类型
id(变量) 查询变量的内存地址

示例:

1
2
3
4
5
6
7
8
print(type(1))
print(type(0))
print(type(-1))
print(type(1.0))
print(type(-1.1))
print(type(True))
#print(type(true)) # 开头必须大写,否则报错
print(type(False))
1
2
a = 100
print(id(a))

运行结果为:

常见运算符

符号 意义
+
-
*
/
// 取整
% 取余
** 次方/幂

注意:

  • 在python中bool型的True和False分别等同于1和0,也可直接进行运算
  • 数值类型是不可变(更改之后,内存地址也会发生改变,没有增删改查等操作)的非序列结构(存储的只能为单个元素,不可进行拆分,没有下标索引的概念),即用变量接收一个数值,只能为一个地址,一种数据类型
  • 上面是常见数值类型 ,数值是不可变的数据类型

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1、创建了两个变量
num1 = 15
num2 = 12
#利用变量引用里面的值进行数学计算
print(num1 + num2) #27
print(num1 - num2) #3
print(num1 * num2) #180
print(num1 / num2) #1.25
print(num1 // num2) # 1
print(num1 % num2) # 3

print(2**3) # 2的3次方 2 * 2 * 2
print(2**4) # 2的4次方 2 * 2 * 2 * 2
print(2**5) # 2的5次方 2 * 2 * 2 * 2 * 2

print(True * False)
print(True + False)
#print(True / False) # 注意:0不能为分母,不可以做除数

数据类型强转:

语法 解释
int(想要转变的数据) 强转为整型
float(想要转变的数据) 强转为浮点型
str(想要转变的数据) 强转为字符串

数值模块(了解):

注意:

  • 只要运算双方有一个浮点型的存在,结果必然是浮点型
  • 浮点数无法作高精度计算,原因:计算机的底层都是二进制,浮点数存在精度问题们无法完全转变为二进制
  • 解决:导入decimal模块
  • 作用:1、提高计算的精密度 2、可以用作字符串包裹的数值的计算
1
2
3
4
5
6
7
import decimal
print(4.0 / 2)
print(1.1 - 0.2)
print(decimal.Decimal(1.1)-decimal.Decimal(0.2))
print(10 / 3)
print(decimal.Decimal(10)/decimal.Decimal(3))
print(decimal.Decimal('2')-decimal.Decimal("1"))

运行结果为:

字符串:

字符串的定义:

生活当中遇到的文本信息就是字符串,只要在键盘上能够打出来的字符都是字符串,使用str表示。

总的来说,字符串可以有三种定义方式,分别是:单引号、和双引号三引号(三个单引号和三个双引号),只有三引号才支持换行,其他两种不支持换行

1
2
3
4
5
6
7
st1 = '这是第二个字符串'
st2 = "这是第二个字符串"
st3 = """这是第二个
字符串"""
print(type(st2)) #类型为str
print(st1)
print(st3)

字符串的特点:

不可变的有序序列结构。

注意:

  • 不可变:有增删改查的操作,生成的数据需要使用新变量接收
  • 序列:可以存储多个元素,可以进行拆分有下标索引的概念
  • 序列结构的数据类型有:字符串,列表,元组

字符串的查找:

查找单个值 形式为 索引(下标),即 str[下标]
查找多个值 即切片,形式为 str[起始下标:结束下标]
隔位取值 形式为 str[起始:结束:步长]

注意:

  • 顺序:索引从0开始
    逆序:索引从-1开始
  • 查找多个值时,区间为左闭右开区间,因此实际操作,结束下标需要+1位
  • 起始下标默认为第一个, 结束下标默认为最后一个
  • 步长默认为1, 想要隔n位取,就步长设置为 n+1
    顺序,步长没有要求,负数表示取反
    逆序,步长为负
1
2
3
4
5
6
7
8
9
10
str1 = "你们好呀,15期的小伙伴!"
print(str1[2]) # 好
print(str1[-2]) # 伴
print(str1[5:7]) #15
print(str1[5:8]) #15期
print(str1[5:8:2]) # 步长为2,隔1个取一个,为”1期“
print(str1[0:-1:3]) # 步长为3,隔2个取一个,结束位为-1,左闭右开,拿不到,为”你呀5小“
print(str1[0:13:3]) # 结束位12 + 1 ,13可以取到,为”你呀5小!“
print(str1[::-1]) # 不写默认所有,步长为负数表示取反,为”!伴伙小的期51,呀好们你“
#print(str1[]) # 冒号是语法结构,不可以省略

字符串的拼接:

方法数 解释 语法
法一 +表示直接拼接 str + str
法二 * 表示成倍复制 str * int
法三 利用字符串的格式化来拼接字符串 语法1:”%s %f”%(str, float)
法四 利用format方法来拼接 语法1: “{}{}”.format(变量1,变量2)
语法2:f”{变量1}{变量2}”
1
2
3
4
5
6
# 法一法二

a = "1314"
b = "520"
print(a + b) #1314520
print(b * 2) #520520
1
2
3
4
5
6
7
8
9
10
11
# 法三法四

a = 10
b = 20
print("和为{a+b}") # 只要被引号包裹就是字符串,不再具备变量的特性
print("和为,", a+b) #
print("和为%s"%(a+b)) # 格式成字符串
print("和为%.4f"%(a+b)) # 格式为浮点型,并保留4位小数
print("和为{}".format(a+b))
print(f"和为{a+b}")

运行结果为:

字符串格式化:

解释 语法
法一 字符串的 %r 和 %s,%f 格式化输出 “%.2f”%变量名
法二 字符串的 format 方法 “{}”.format(变量名)
f”{变量名}”
法三 join方法 “链接符号”.join(序列)
%s 转化为字符串
%f 转化为浮点型,其中%.nf,保留n位小数
%d 格式化为整数
%r 原样输出

1
2
3
4
5
6
7
8
9
10
11
12
13
lm = 3.3333333333333333
print("%.2f"%lm)
print(type(lm))
print("%.4f"%lm)
print("%.20f"%lm)

year = 2023
month = 4
day = 14
print("你们好呀,今天是:%s年%s月%s号!"%(year, month, day))
print("你们好呀,今天是:{}年{}月{}号!".format(year, month, day))
print(f"你们好呀,今天是:{day}{month}{year}号!")
print(f"先不{day}用其他厨{day}房电器{day}作为手{day}续费唱日出")

运行结果为:

错误示范:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
year = 2023
month = 4
day = 14

print("你们好呀,今天是:2023年4月14号!")
print("你们好呀,今天是:year年month月day号!")

"""
上述代码的问题:变量没有对里面的值进行引用,而是直接原模样的打印了出来
原因:变量放在了引号里面,就是单纯的字符,
不再具备变量的功能(不能引用里面的值)
解决:保留变量的属性(能够引用里面的值)
"""
#year在引号外面,是变量,其他依旧是字符

print("你们好呀,今天是:",year,"年month月day号!")

运行结果为:

法三:

1
2
3
4
5
6
7
8
9
10
11
12
"""
"链接符号".join(序列)
字符串,列表,元组

2023-4-14
2023/4/14
"""
year = str(2023)
month = 4
day = 14
data = [year, "%s"%month, f"{day}"] # 将数值格式化为字符
print("/".join(data))

常见疑问:

print(f"第{week}周,第{day}天")这句话的f和{week}分别代表什么?

这句话中的 f 是 Python 3.6 中引入的 f-string(格式化字符串)语法,可以方便地将变量的值插入到字符串中,而不需要使用传统的字符串格式化方法。

在 f-string 中,用 {} 包围的变量会被替换成对应的值。例如,{week} 会被替换成 week 变量的值。通过在 {} 中使用表达式,可以进行更复杂的字符串格式化操作。

例如,在下面的例子中,我们可以使用 f-string 将数字变量插入到字符串中:

1
2
3
4
5
6
7
8
9
# 定义变量
x = 10
y = 20

# 使用 f-string 进行字符串格式化
result = f"The value of x is {x}, and the value of y is {y}."

# 输出结果
print(result) # The value of x is 10, and the value of y is 20.

在上面的例子中,我们使用 f-string 将变量 xy 插入到字符串中,并且在字符串中直接使用了这些变量的值。

总之,f 是 f-string 的开头,而 {week} 是表示要插入 week 变量的值。

字符串的更改:

字符串不可变,需要使用新变量接收。
语法 解释
str.replace(旧,新) 默认更改所有
str.replace(旧,新,次数) 顺序更改指定次数
1
2
3
4
5
6
str1 = "hello ah tongxue!"
str1_new1 = str1.replace("t", "T")
print(str1) #hello ah tongxue!
print(str1_new1) #hello ah Tongxue!
str1_new2 = str1.replace("h", "H", 1)
print(str1_new2) #Hello ah tongxue!

字符串切割:

语法 解释
str.split(“指定分割字符”) 从指定字符处分割,默认指定分割字符有几个,就分割几次
str.split(“指定分割字符”,次数) 从指定字符处分割,可指定分割次数
1
2
3
4
5
str2 = "20230414"
str2_new1 = str2.split("4")
str2_new2 = str2.split("0", 1)
print(str2_new1)
print(str2_new2)

运行结果为:

字符串查找:

语法 解释
str.find(“指定查找字符”) 从整个字符串查找
str.find(“指定查找字符”,起始,结束) 从指定位置查找

注意:

  • 找到:返回字符的下标
  • 没有找到:返回-1
1
2
3
4
str1 = "hello ah tongxue!"
print(str1.find("st")) # -1
print(str1.find("ah")) # 6
print(str1.find("ah", 8,10)) # 指定位置查找,-1

首字母转变大写:

语法 解释
str1.title() 字符串首字母转变大写
1
2
3
str1 = "beautiful"
str1_new3 = str1.title()
print(str1_new3) #Beautiful

字符串的其他方法:

字符串转义:

在特定字符前面加 \ 会解释成带有特殊含义的转义字符(在print内起作用)。

注意:

  • \n:换行
  • \t :水平制表符—默认以8个字符长度对齐,超过则按8的倍数对齐
  • 在转义字符前面再加一个\可以取消转义,同时在字符串前面加r可以取消字符串内所有转义字符
1
2
3
4
5
6
print("hellocls15sky")
print("hello\tcls15sky")
print("hello\tcls15\tsky")
print("hello\t\tcls15\t\tsky")
print("hello\\tcls15\\tsky")
print(r"hello\tcls15\tsky")

运行结果为:

字符串的编码:

字符串编码是为了在计算机中表示和处理文本数据。计算机内部以二进制形式存储和处理数据,而文本是由字符组成的,每个字符都有一个对应的编码值。因此,为了在计算机中表示和处理文本,需要将字符映射到对应的编码值。
str.encode(“编码方式”) 默认以utf-8格式编码,当然可以指定encoding编码格式。
str.decode(“解码方式”) 解码,和encode用法一致

注意:

  • 用什么编码就用什么解码,否则会乱码
1
2
3
4
5
6
7
8
jk = "酒空"
print(jk)
bianma = jk.encode("utf-8")
print(bianma) # 指定编码方式为utf-8
res0 = bianma.decode("gbk") # 出现了乱码的现象
res1 = bianma.decode("utf-8") # 正常
print(res0)
print(res1)

运行结果为: