基本数据类型和变量

基本数据类型和变量

1. 数值类型

1.1 整数(int)

  • 整数跟我们平常认识的整数一样,包括正整数、负整数和零,是没有小数点的数字
  • Python 可以处理任意大小的整数,例如:1,100,-8080,0,等等
1
2
3
4
print(1 + 2)  # 3
print(1 - 2) # -1
print(1 * 2) # 2
print(1 / 2) # 0.5

1.2 浮点型(float)

  • print(2/6): 小数点后默认只保留 16 位小数0.3333333333333333
  • 使用round()函数可以指定输出有效位数(四舍五入)print(round(2/6,3))—-> 0.333
1
2
3
print(0.55+0.41)  # 0.96
print(0.55+0.4) # 0.9500000000000001
print(0.55*0.411) # 0.9610000000000001

因为计算机对浮点数的表达本身是 不精确 的。
保存在计算机中的是二进制数,二进制对有些数字不能准确表达,只能非常接近这个数。

所以我们在对浮点数做运算和比较大小的时候要小心

1.3 算术运算符

运算符描述案例
+加法print(2+3)结果为5
-减法print(2-3)结果为-1
*乘法print(2*3)结果为6
/除法print(2/3)结果为0.6666666666666666
//取商print(2//3)结果为0
%取余print(2%3)结果为2
**次方print(2**3)结果为8

1.4 布尔类型

一个布尔值只有 True 、 False 两种值,可以直接用(请注意大小写),也可以通过布尔运算计算出来。

布尔值可以用 and、or 和 not 运算。

  • and(与)运算, True and True 结果就是 True。
  • or(或)运算, True or False 结果就是 True。
  • not(非)运算, not True 结果就是 False。
  1. 布尔对象只有两种取值: TrueFalse
  2. 布尔类型 True 真,也可以用 1 表示 False 假 也可以用 0 表示
  3. 字母之间的比较,是根据 ASCII 码 来比较的,a=97,A=65

1.5 空值

基本上每种编程语言都有自己的特殊值——空值,在 Python 中,用 None 来表示

2. 字符串

凡是被引号(单引号:'***',双引号:"***",三引号:'''***'''"""***""")引起来的数据都叫字符串。

当字符串中本身有双引号时,为了避免出现语法错误,可以用单引号拉长表示这个字符串, 如: print('He said:"Hello!"')

转义符 \n是换行符的意思,\t是制表符的意思

如果想让换行符或者其他有特殊含义的符号不生效,则可以在\之前再加上一个\,或者在字符串最前边加上r

1
2
3
print('c:\\totel.txt')

print(r'c:\totel.txt')

在 python 中,写路径时可以使用/来代替\

2.1 三引号的作用

  • 三引号可以保留字符串的格式,包括换行符和空格等
    1
    2
    3
    print('''曾经沧海难为水,
    除却巫山不是云。
    ''')
  • 三引号不予关键字连接时,则表示为注释,一般用在函数及方法里。
    1
    2
    3
    4
    '''
    曾经沧海难为水,
    除却巫山不是云。
    '''

2.2 字符串拼接

字符串的拼接为直接拼接,不进行任何运算, print('1'+'5')—-> 15
字符串拼接时有*加 int 数字,则表示将字符串重复拼接 int 遍。

1
2
3
print("a" *3)

aaa

2.3 下标

字符串的下标由左往右为0开始,右右往左为从-1开始。

1
2
3
4
a = '刘总你好啊'

print(a[2]) # 你
print(a[-1]) # 啊

2.4 切片

字符串通过下标,得到字符串中特定的内容就叫切片
切片的完整写法,是[起始值:终止值:步长],步长是每几位取一次值,当步长省略时,默认为 1

  1. 切片的区间为 左闭右开
  2. 字符串切片前面的索引是切片开始的元素的 索引,后面的索引是切片结束的元素的 索引 + 1

通过切片,切出 你好 的字符串。

1
2
3
print(a[2:4])

print(a[-3:-1])

通过切片,切出 你好啊 的字符串

1
print(a[2:])

如果 后面的索引 空着不写,表示到整个字符串的结束,如果 前面的索引 不写,可以表示 从字符串的开头切片

使用切片可以将字符串 倒序 输出

1
2
3
a = 'ABCDEFGHIJKLMN'

print(a[::-1]) # NMLKJIHGFEDCBA

2.5 获取字符串长度

内置函数 len() 可以用来获取字符串的长度,也是获取字符串中字符的个数.

1
2
3
a = 'abcdefghijklmn'

print(len(a))

2.6 获取字符下标

内置函数intdex() 可以根据字符找到在字符串中的下标,默认返回第一次出现时的下标。

1
2
3
4
a = 'dsaldfjlsakdfjaldsjfx'

print(a.index('d'))
print(a.index('d', 2))

2.7 字符串格式化

2.7.1 % 格式化

  • %s :表示 字符串
  • %d :表示 十进制 整数
  • %f :表示 浮点数
1
2
3
info='我叫%s,今年是%d年,还有%f元'%('刘德华', 2020, 19.8)

print(info) # 我叫刘德华,今年是2020年,还有19.800000元
  • 可以使用 %09d 对不足部分进行补位,默认为 0
  • 0 :代表 要补位的符号,如果不写,默认为 空格
  • 9 :代表 输出的 位数,不写则不会进行补位。
1
2
3
print('税前薪资:%09d元'%(19))    # 税前薪资:000000019元
print('税前薪资:%9d元'%(1900)) # 税前薪资: 1900元
print('税前薪资:%d元'%(1900)) # 税前薪资:1900元

如果为小数时,可以使用 .2 表示需要 保留的小数位

1
2
3
print('税前薪资:%012.2f元'%(19.8864))  # 税前薪资:000000019.89元
print('税前薪资:%12.2f元'%(19.8864)) # 税前薪资: 19.89元
print('税前薪资:%f元'%(19.8864)) # 税前薪资:19.886400元

使用 % 作为格式化符号时,输出结果默认为 右对齐,如果希望 左对齐 则需要使用补位符改为 -

1
2
3
print('税前薪资:%-12.2f元'%(19.8864))  # 税前薪资:19.89元
print('税前薪资:%12.2f元'%(19.8864)) # 税前薪资: 19.89元
print('税前薪资:%f元'%(19.8864)) # 税前薪资:19.886400元

2.7.2 format 格式化

基本格式:字符串.format(参数,参数,…)
字符串中使用 {} 作为占位符,占位符内填写 format 中的元素 下标(下标从 0 开始)

1
2
3
4
s = "PYTHON"
a = "你好"

print("{0}".format(s,a)) # PYTHON

通过 字典 的形式进行赋值

1
print("{HELLO}".format(HELLO= '你好'))    # 你好

可以对每个 参数 单独设置格式。

格式:{<参数序号>: <格式控制标记>}

:填充对齐宽度.精度类别
补位填充符号< 左对齐 > 右对齐 ^ 居中对齐输出的宽度数字千位分隔符小数的精度或字符串最大长度整数类别
1
2
3
print("{HELLO:-^30,.3f}".format(HELLO= 12312345.67890))

--------12,312,345.679--------

2.7.3 f 格式化

f 格式化和 format 格式化 参数相同。

1
2
3
4
int1 = 12312345.67890
print(f"{int1:-^30,.3f}")

--------12,312,345.679--------

三组大括号嵌套,可以让格式化输出中有 大括号

2.8 字符串的方法

2.8.1 统计count

count 方法:可以返回字符串对象包含了多少个 参数指定的 字符串。
第二个参数为开始位置,第三个参数为结束位置。

1
2
3
str1 = '我们今天不去上学,我们去踢足球'

print(str1.count("我们")) # 2

2.8.2 查找find

find 方法:会在字符串中查找 参数 字符串,并返回该 参数字符串 在其中 第一个 出现的位置索引。
如果字符串对象中 没有 要查找的参数字符串,就会返回 -1
第二个参数为开始位置,第三个参数为结束位置。

1
2
3
str1 = '我们今天不去上学,我们去踢足球'

print(str1.find("我们")) # 0

2.8.3 分割splitsplitlines

  • split方法:以参数字符串为 分隔符,将字符串 切割为多个 字符串,并返回列表,分隔符本身会被丢弃掉。
1
2
3
str1 = '小张:79 | 小李:88 | 小赵:83'

print(str1.split('|')) # ['小张:79 ', ' 小李:88 ', ' 小赵:83']
  • splitlines 方法:将字符串按 换行符 进行切割,为元素存入一个 列表 并返回这个列表。
1
2
3
4
5
6
7
str1 = '''
小王 10000元
小李 20000元
小徐 15000元
'''

print(str1.splitlines()) # ['', '小王 10000元', '小李 20000元', '小徐 15000元']

splitlines 方法经常用在文件处理中,读出文件内容存入字符串,然后把每行内容依次存入列表。

2.8.4 拼接join

join 方法和 split 方法正好相反
json 方法:将列表中的字符串元素 以某个字符串为连接符,拼接 为一个新的字符串

1
2
3
4
5
6
7
list1 = [
'小张:79 ',
' 小李:88 ',
' 小赵:83'
]

print("|".join(list1)) # 小张:79 | 小李:88 | 小赵:83

2.8.5 去除空格strip、lstrip、rstrip

  • strip 方法:删除字符串 前后 的空格。
  • lstrip 方法:删除字符串 前面(左边)的空格。
  • rstrip 方法:删除字符串 后面(右边)的空格。
1
2
3
4
5
6
7
str1 = '   你好 !   '
str2 = ' 你好 ! '
str3 = ' 你好 ! '

print(str1.strip()) # 你好 !
print(str2.lstrip()) # 你好 !
print(str3.rstrip()) # 你好 !

2.8.6 替换replace

replace 方法:用来 替换 字符串中所有 指定的 字符。

1
2
3
str1 = '   你好 !   '

print(str1.replace(' ', '')) # 你好!

2.8.7 startswithendswith

  • startswith方法:检查字符串是否以指定的字符串 开头,如果是,则返回 True, 否则返回 False
  • endswith方法:检查字符串是否以指定的字符串 结尾, 如果是,则返回 True,否则返回 False
1
2
3
4
str1 = '我们今天不去上学,我们去踢足球'

print(str1.startswith('我们')) # 返回 True
print(str1.endswith('我们')) # 返回 False

2.8.8 isdigitisalpha

  • isdigit方法:检查字符串是否全部由 数字 构成,如果是,返回 True,否则返回 False
  • isalpha方法:检查字符串是否全部由 字母 构成,如果是,返回 True,否则返回 False
1
2
print('123'.isdigit())  # True
print('abc'.isalpha()) # True

2.8.9 字符串倒序

通过 切片 [::-1] 操作可以将字符串 倒序 排列。

1
2
3
4
str1 = '字符串的倒序'

reverse = str1[::-1]
print(reverse) # 序倒的串符字

3. 变量

3.1 命名规则

  1. 组成:字母、数字、下划线
  2. 一般以字母(大写、小写均可)开头
  3. 大小写敏感
  4. 不能与关键字相同 if=1
  5. 不能与内置函数相同print=1
  1. 不能以数字开头
  2. 不能以中文命名

3.2 变量指向问题

1
2
3
4
a = 'Hello World'
b = a
a = 123
print(a) # Hello World

变量指向说明:

  • a —-> Hello World
  • b —-> a —-> Hello World
  • a —-> 123
  • b —-> Hello World

3.3 赋值

python 中变量的类型由所赋值的数据类型决定。

  1. 任何变量赋值都不会改变变量原来指向对象的值;
  2. 如果原来的对象有其他变量指向他,也不会改变其他变量的指向
1
2
3
4
a = 3	---> a = 3
b = a ---> b = 3, a = 3
a = 4 ---> a = 4, b = 3
b = a ---> b = 4, a = 4

操作

1
2
3
4
a += 1	// a = a + 1
a -= 1 // a = a - 1
a *= 5 // a = a * 1
a /= 2 // a = a / 1

4. 可变与不可变数据类型

可变与不可变数据类型的区别:

  • 可变数据类型: 当变量对应的数据值发生变化时,对应的 内存地址 不变.
    • 数值类型(int、float、bool)、string(字符串)、tuple(元组)
  • 不可变数据类型: 当变量对应的数据值发生变化时, 对应的 内存地址 发生 变化.
    • 列表(list)、字典(dict)、集合(set)

可变数据类型更改值后,内存地址不发生改变;不可变数据类型更改值后,内存地址发生改变

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 不可变数据类型
a = 5
b = a
a = a + 1
print(a) # 输出 6
print(b) # 输出 5,b并没有被修改

s1 = "hello"
s2 = s1
s1 = s1 + " world"
print(s1) # 输出 "hello world"
print(s2) # 输出 "hello",s2并没有被修改

t1 = (1, 2, 3)
t2 = t1
# 尝试修改元组
# t1[0] = 4 # 这行代码会抛出 TypeError 异常,因为元组是不可变的

# 可变数据类型
lst1 = [1, 2, 3]
lst2 = lst1
lst1.append(4)
print(lst1) # 输出 [1, 2, 3, 4]
print(lst2) # 输出 [1, 2, 3, 4],lst2也被修改了

d1 = {"name": "Alice", "age": 30}
d2 = d1
d1["age"] = 31
print(d1) # 输出 {"name": "Alice", "age": 31}
print(d2) # 输出 {"name": "Alice", "age": 31},d2也被修改了

5. 基本数据类型转换

方法说明
int(x [,base ])将 x 转换为一个整数
float(x )将 x 转换到一个浮点数
complex(real [,imag ])创建一个复数
str(x )将对象 x 转换为字符串
repr(x )将对象 x 转换为表达式字符串
eval(str )用来计算在字符串中的有效 Python 表达式,并返回一个对象
tuple(s )将序列 s 转换为一个元组
list(s )将序列 s 转换为一个列表
chr(x )将一个整数转换为一个字符
unichr(x )将一个整数转换为 Unicode 字符
ord(x )将一个字符转换为它的整数值
hex(x )将一个整数转换为一个十六进制字符串
oct(x )将一个整数转换为一个八进制字符串