Python随堂笔记 数据类型

113 阅读13分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

🌴 2022.3.16 下午

前言

🎬本文章是 【Python语言基础】 专栏的文章,主要是上课的随堂笔记与练习
🔗Python专栏 传送门
💻提示:本文的环境配置是Python3的开发环境。目录顺序以当堂内容(教材)为准,所以并非“1、2、3”
📽本节主要内容:认识python的数据类型,学习数据类型中的数字类型 字符串类型

2.1 数据类型

Python支持丰富的数据类型,其中标准的数据类型6个

  • Number(数字),如1、-2、3.0、5+6j、True
  • String(字符串),如'Internet'、"长城"
  • List(列表),如[1, 2, 3]、["Spring", "Summer", "Autumn", "Winter"]
  • Tuple(元组),如(1, 3, 5)、("大学", "中学", "小学")
  • Dictionary(字典),如{1: "优秀", 2: "良好", 3: "合格", 4: "不合格"}
  • Set(集合),如{"成功", "失败"}

2.2 数字类型

Python中的基本数据类型可以分为两类:数字和组合数据数字包括整数、浮点数、布尔值和复数,组合数据包括字符串、列表、元组、字典、集合

Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建

在这里插入图片描述

🚀 2.2.1 整型

整型(Int),又称为整数,包括正整数、负整数和零, 在Python中,整型不限制大小,没有Python 2.X中的长整型(Long),整数可以是二进制、八进制、十进制和十六进制整数

  • 十进制整数,使用0~9共10个数字表示,如3、-4、0等
  • 二进制整数,只需要用2个数字(0和1)就可以表示,以0B或0b开头,如0B1011(相当于十进制的11)、-0b101(相当于十进制的-5)
  • 八进制整数,需要用8个数字(0~7)表示,以0o或0O 开头,如0o56(相当于十进制的46)、-0O145(相当于十进制的-101)
  • 十六进制整数,需要用16个数字(0~F)表示,以0x 或0X开头,如0xAF(相当于十进制的175)、-0X123(相当于十进制的-291)

不同进制的数可以通过以下Python内置函数相互转化

  • bin()函数:将其他进制的数转换成二进制数
  • int()函数:将其他进制的数转换成十进制数
  • oct()函数:将其他进制的数转换成八进制数
  • hex()函数:将其他进制的数转换成十六进制数
# 不同进制的整数相互转化
print("十进制数→二进制数:",bin(56))   # 十进制数→二进制数: 0b111000   
print("十进制数→八进制数:",oct(-32))  # 十进制数→八进制数: -0o40   
print("十六进制数→十进制数:",int(0x48))# 十六进制数→十进制数: 72 
print("十进制数→十六进制数:",hex(18))  # 十进制数→十六进制数: 0x12

🚀 2.2.2 浮点型

浮点(Float)类型的数包括整数部分和小数部分,可以写成普通的十进制形式,也可以用科学计数法表示(带有指数的浮点数),十进制表示的浮点数,如0.62、-3.87、0.0等 科学计数法表示的浮点数,如32.6e18(相当于3.26×1019),-9.268E-3(相当于-0.009268) 在Python中,提供大约17位的精度和范围从-308到308的指数,不支持32位的单精度浮点数

f = 32.6e18
print("f =",f)
print("f = %e"%f)
print("f = %f"%f)

输出

  • f = 3.26e+19

    f = 3.260000e+19

    f = 32600000000000000000.000000

# 浮点数运算
a = 0.1
b = 0.2
print("a + b =",a + b)
#比较浮点数大小
if((a + b) == 0.3):         
  print("(a + b) == 0.3")
else:
  print("(a + b) != 0.3")

输出

  • a + b = 0.30000000000000004

    (a + b) != 0.3

🚀 2.2.3 复数类型

**复数(Complex):**由实数部分和虚数部分构成,可以用a + bj或a + bJ或complex(a, b)表示,如12.6 + 5j,-7.4-8.3J。复数z可以用z.real来获得实部,用z.imag来获得虚部

# 复数及其运算
c1 = 1.2 + 5.3j     
c2 = 4.6 + 60.8J   
print("c1 + c2 =",c1 + c2)     

输出

  • c1 + c2 = (5.8+66.1j)

🚀 2.2.4 布尔类型

布尔类型(Bool)的常量包括TrueFalse,分别表示真和假。

非0数字、非空字符串、非空列表、非空元组、非空字典、非空集合等在进行条件判断时均视为真(True);反之视为假(False)

兴趣 = ["武术","艺术","音乐","体育"]
if 兴趣:
  print("列表'兴趣'不为空!")
else:
  print("列表'兴趣'为空!")

输出

  • 列表'兴趣'不为空!

布尔类型的常量(True和False)如果出现在算术运算中,True 被当作 1,False 被当作 0

print(True + 2) //3                 
>>> print(False + 2) //2 

🚀 2.2.5 数字类型转换

Python中的几个内置函数可以进行数字类型之间数据的转换

  • int(x)函数:将x转换为一个整数
  • float(x)函数:将x转换为一个浮点数
  • complex(x)或complex(x, y)函数:其中,complex(x)将x转换为一个复数,实数部分为x,虚数部分为0
  • bool(x)函数:将非布尔类型数x转换为一个布尔类型常量
# 数字类型转换
print("int(2.56) →",int(2.56))		# int(2.56) → 2
print("int(-2.56) →",int(-2.56))	# int(-2.56) → -2
print("float(3) →",float(3))		# float(3) → 3.0
print("bool(-1) →",bool(-1))		# bool(-1) → True
print("bool(0.0) →",bool(0.0))		# bool(0.0) → False
print("complex(7,8) →",complex(7,8))# complex(7,8) → (7 + 8j)

🚀 2.2.6 分数和高精度实数

# 分数运算和高精度实数运算
from fractions import Fraction
a = Fraction(2,5)		# 创建分数对象
b = Fraction(1,5)		# 创建分数对象
a.denominator;			# 查看分母5
a.numerator;			# 查看分子2
a + b					# 分数之间的算术运算
Fraction(3,5)
from fractions import Decimal
1 / 3					# 一般精度实数
0.3333333333333333
Decimal(1 / 3)			# 高精度实数
Decimal('0.333333333333333314829616256247390992939472198486328125')

🚀 2.2.7 常用数学函数

Python中的数学函数有两种使用方式

  • Python中的常用内置数学函数
  • Math中的常用数学函数
import math                                                
x1 = 3.12                     		#样本1数据
x2 = 3.36                     		#样本2数据
x3 = 3.08                     		#样本3数据
x_ = (x1 + x2 + x3) / 3       		#计算样本平均值 
#计算样本总体标准偏差
s = math.sqrt((math.pow(x1-x_,2) + math.pow(x2-x_,2) + math.pow(x3-x_,2))/3)  
print("x_ =",x_)                	#输出样本平均值
print("s =",s)                       #输出样本标准偏差

输出

  • x_ = 3.186666666666667 s = 0.1236482466066093

2.3 字符串类型

  • 字符串是Python中最常用的数据类型之一,是一个有序的字符集合,用来存储和表现基于文本的信息

  • Python字符串需要使用成对的单引号'或双引号"括起来,如"Python"、"中国制造"等。在Python中,单引号(')字符串和双引号(")字符串是等效的

  • Python还允许使用三引号''''''"'创建跨多行的字符串,这种字符串中可以包含换行符、制表符及其他特殊字符

提示:在Python中,不支持字符类型,单个字符也是字符串

Python为字符串中的每个字符分配一个数字来指代这个元素的位置,即索引,第一个元素的索引是0,第二个元素的索引是1,以此类推,同时,字符串还支持反向索引,字符串中最后一个字符的索引是-1,倒数第二个字符的索引是-2,以此类推

在这里插入图片描述

  • Unicode字符串:不以u/U、r/R、b/B开头的字符串,或以u或U开头的字符串
  • 非转义的原始字符串:以r或R开头的字符串
  • bytes字节串:以b或B开头的字符串

除可以使用encode()函数和decode()函数在Unicode字符串与bytes字节串之间转换外,也可以使用str()函数和bytes()函数在这二者之间进行转换

# 不同类型字符串及其转换
print("Are you happy?")		# Are you happy?
print(u"I am really\u0020pleased.")		# I am really pleased.
print(r"d:\friends.txt")		# d:\friends.txt
print(b"rejoice")				# b'rejoice'
bytes("中国","GBK")				# b'\xd6\xd0\xb9\xfa'
str(b'\xd6\xd0\xb9\xfa',"GBK")   # '中国'
bytes("中国","UTF-8")     		# b'\xe4\xb8\xad\xe5\x9b\xbd‘
str(b'\xe4\xb8\xad\xe5\x9b\xbd',"UTF-8")	# '中国'

🚀 2.3.1 字符串及创建

# 使用赋值运算符(=)创建字符串
str1 = "prognosticate"         		
str2 = 'evaluation'             		
# 三引号字符串
str3 = """这是三引号字符串,可以包含转义字符"""
print("str1:",str1)
print("str2:",str2)
print("str3:",str3)

输出

  • str1: prognosticate

    str2: evaluation

    str3: 这是三引号字符串

    可以包含转义字符

# 使用str()或repr()函数创建字符串
str(8.42)	# '8.42'
str(True)	# 'True'
str([4,9,1,8])	# '[4, 9, 1, 8]'
repr((32.5,4000,('Google','Runoob')))	# "(32.5, 4000, ('Google', 'Runoob'))"

🚀 2.3.2 字符串访问

str = "sophiscated"
str		# 整个字符串sophiscated             
str[1]	# 索引为1的字符o
str[2:] # 从索引2开始的所有字符phiscated
str[:]	# sophiscated
str[:4] # 索引为4之前的所有字符'soph'
str[-1] # 倒数第1个字符.'d'
str[-5:-1] # 索引为-5~-2的字符.'cate’

从左往右读,:即开区间

🚀 2.3.3 字符串运算

操作符描述实例
+字符串连接a + b 输出结果: HelloPython
*重复输出字符串a*2 输出结果:HelloHello
[]通过索引获取字符串中字符a[1] 输出结果 e
[ : ]截取字符串中的一部分,遵循左闭右开原则,str[0:2] 是不包含第 3 个字符的。a[1:4] 输出结果 ell
in成员运算符 - 如果字符串中包含给定的字符返回 True'H' in a 输出结果 True
not in成员运算符 - 如果字符串中不包含给定的字符返回 True'M' not in a 输出结果 True
r/R原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母 r(可以大小写)以外,与普通字符串有着几乎完全相同的语法。print( r'\n' ) print( R'\n' )
# 字符串运算
"大家好," + "这是航天员王亚平."      
'大家好,这是航天员王亚平.'
"您的幸运数字为: " + 6      # +运算符两边必须都是字符串,否则报错.TypeError: can only concatenate str (not "int") to str
"重要的话." * 3
'重要的话.重要的话.重要的话.'
'c' in "lucky"
True
"quite" > "quiet"
True
# 使用Operator中的函数比较字符串大小
import operator                                      
str1 = "superman"                                     
str2 = "monster"                                      
print("'superman' < 'monster':",operator.lt(str1,str2))     
print("'superman' <= 'monster':",operator.le(str1,str2))    
print("'superman' == 'monster':",operator.eq(str1,str2))   
print("'superman' != 'monster':",operator.ne(str1,str2))    
print("'superman' > 'monster':",operator.ge(str1,str2))     
print("'superman' >= 'monster':",operator.gt(str1,str2))   

输出

  • 'superman' < 'monster': False

    'superman' <= 'monster': False

    'superman' == 'monster': False

    'superman' != 'monster': True

    'superman' > 'monster': True

    'superman' >= 'monster': True

🚀 2.3.4 字符串函数

🚁 字符串查找函数

  • str.find(str, beg=0, end=len(string)):find() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果指定范围内如果包含指定索引值,返回的是索引值在字符串中的起始位置。如果不包含索引值,返回-1
  • str.rfind(str, beg=0, end=len(string)):从右边开始查找
  • str.index(str, beg=0, end=len(string)):查找字符串str中是否包含子字符串str,如果包含则返回子字符串str在str中第一次出现的索引值,否则出错
  • str.startswith(substr, beg=0,end=len(string)):检查字符串str是否以指定子字符串substr开头
  • str.endswith(subStr):检查字符串str是否以指定子字符串subStr结束
str = "时间是一切财富中最宝贵的财富"
print("子字符串位置:",str.find("财富"))       	#从字符串左边开始查找
#子字符串位置: 5
print("子字符串位置:",str.find("财富",6))    	#从左边索引为6的字符开始查找
#子字符串位置: 12
print("子字符串位置:",str.rfind("财富"))      	#从字符串右边开始查找
#子字符串位置: 12
print("子字符串位置:",str.rfind("财富",4,10))	#从右边索引4~10的字符开始查找
#子字符串位置: 5
print(“字符串位置:”,str.rfind(“成功”))      	#从字符串右边开始查找
#子字符串位置: -1
print(str.startswith("时间"))
#True
print(str.endswith("财富"))
#True

🚁 字符串替换函数

str.replace(oldStr,newStr[,max])

str = "贝多芬是世界闻名的航海家."
print(str.replace("贝多芬","哥伦布")) # 哥伦布是世界闻名的航海家

🚁 字符串拆分函数

str.split(sep="",num),通过指定分隔符对字符串进行切片,分割为 num+1 个子字符串

str = "Every cloud has a silver lining."
print (str.split())			
print (str.split(" ",3))     	
'''
['Every', 'cloud', 'has', 'a', 'silver', 'lining.']
['Every', 'cloud', 'has', 'a silver lining.']
'''

🚁 ord()和chr()

ord()函数和chr()函数是一对与编码相关而功能相反的函数

  • ord(c):返回单个字符的Unicode编码
  • chr(u):返回Unicode编码对应的字符

两个字符串之间的比较一般遵循如下规则:

  • 如果都是西文字符串,则按照字符串每个字符的ASCII编码逐个进行比较
  • 如果都是中文字符串,则按照汉字的Unicode编码逐个进行比较
  • 如果分别是汉字字符串和英文字符串,则统一按照它们的Unicode编码逐个进行比较,汉字字符串大于英文字符串
print("ord(c) =",ord("c"))	# ord(c) = 99
print("ord(d) =",ord("d"))	# ord(d) = 100
print("'c' > 'd':","c" > "d")	# 'c' > 'd': False
print("ord('输') = ",ord("输"))  # ord('输') = 36755
print("ord('赢') = ",ord("赢"))	# ord('赢') = 36194
print("'输' > '赢':","输" > "赢")	# '输' > '赢': True
print("ord('中') =",ord("中"))	# ord('中') = 20013
print("ord('z') =",ord("z"))	# ord('z') = 122
print("'中' > 'z':","中" > "z")	# '中' > 'z': True

🚁 字符串格式化函数

format() 一般格式为: '格式化字符串'.format(参数列表),格式化字符串:包括参数序号和格式控制信息的字符串 参数序号和格式控制信息包含在{}中 格式化符号和print()函数中的类似

  • *:自定义宽度或小数点精度
  • +:在正数前面显示加号(+)
  • -:左对齐
  • m.n.:显示最小总宽度为m,小数点后的位数为n
#根据位置格式化
print('{0}, {1}.'.format('Hello','world'))	# Hello, world.
print('{}, I am {}.'.format('Hello','Python'))	# Hello, I am Python.
print('{0} {1}, {1} is a new prgramming language.'.format('Hello','Python'))
Hello Python, Python is a new prgramming language

#根据key格式化
print("网站名:{name}, 地址 {url}".format(name="清华大学", url="http:
 			//www.tsinghua.edu.cn/"))	# 网站名:清华大学, 地址: http://www.tsinghua.edu.cn/
                                    
#根据字典格式化
site = {"name": "清华大学", "url": "http://www.tsinghua.edu.cn/"}
print("网站名:{name}, 地址 {url}".format(**site))	# 网站名:清华大学, 地址: http://www.tsinghua.edu.cn/
#根据列表格式化
list = ['world','python']
print('hello {names[0]}, I am {names[1]}.'.format(names=list))	# hello world, I am python.
print('hello {0[0]}, I am {0[1]}.'.format(list))	# hello world, I am python.
                                    
#数字格式化
#2位小数
print("{:.2f}".format(3.1415926))		# 3.14
#带符号
print("{:+.2f}".format(3.1415926))		# +3.14
#无小数位
print("{:.0f}".format(3.1415926))		# 3
#填充0 
print("{:0>2d}".format(6))				# 06

🚁 例题

phone = input("请输入电话号码: ")
while True:
  if phone.isdecimal() and len(phone) == 11:     	#电话号码为11位数字.
    print("您的电话号码是:",phone)
    break
  else:
    phone = input("您输入的电话号码不正确!\n请重新输入:")
'''
请输入电话号码: 18900a00000
您输入的电话号码不正确!
请重新输入:18900000000
您的电话号码是: 18900000000
'''

🚀 2.3.4 常用转义字符

转义字符描述转义字符描述
\(在行尾时)续行符\n换行
\\反斜杠符号\v纵向制表符
\'单引号\t横向制表符
\"双引号\r回车,将 \r 后面的内容移到字符串开头,
并逐一替换开头部分的字符,直至将 \r 后面的内容完全替换完成
\a响铃\f换页
\b退格(Backspace)\yyy八进制数,y 代表 0~7 的字符,例如:\012 代表换行
\e\xyy十六进制数,以 \x 开头,y 代表的字符,例如:\x0a 代表换行
\000\other其它的字符以普通格式输出
print("很多观众喜欢\"汉武大帝\"这部电视剧.")     
print("a = \t108")                              
print("d:\\b.py")                                
'''
很多观众喜欢"汉武大帝"这部电视剧.
a = 	108
d:\b.py
'''