本文已参与「新人创作礼」活动,一起开启掘金创作之路。
🌴 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)的常量包括
True和False,分别表示真和假。非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(结束) 范围,则检查是否包含在指定范围内,如果指定范围内如果包含指定索引值,返回的是索引值在字符串中的起始位置。如果不包含索引值,返回-1str.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
'''