Python高手之路体验课 第 8 / 18 篇
数据类型-数字与字符串
在阅读本系列课程时,你需要跟着老师的课程代码在自己的Python 环境中输入运行,加深认识理解哦。
一 数字类型
1. 数字类型 int和float
在第一章用户交互我们给大家介绍了一下基本的数据类型,这一章主要是介绍不同数据类型的使用方法和深入研究。
数字类型即变量的值,如 age = 18,18则是我们保存的数据。
变量的是用来反映/保持状态以及状态变化的,毫无疑问针对不同的状态就应该用不同类型的数据去标识
数字类型只能存一个值,是不可变类型(不可变类型可以哈希,后面章节会讲解哈希)。
# int 整型,整数
定义:age=10 # age=int(10)
用于标识:年龄,等级,身份证号,qq号,个数
# float 浮点型,带小数点的数
定义:salary=3.1 #salary=float(3.1)
用于标识:工资,身高,体重,
2. int类型常用的方法
下面代码所使用的bin()、oct()、hex()在进制转换中经常用到,大家可以了解一下:
# 常用操作+内置的方法
print(bin(3)) #十进制转成二进制,0b11
print(oct(8)) #十进制转成八进制,0o10
print(10) #10
print(hex(16)) #十进制转成十六进制,0x10
在进行用户交互程序的时候我们常用 .isdigit()这个判断用户输入是不是数字,来进行下一步操作,这样就避免了程序出错,但是需要注意的是用户输入的内容默认是字符串,判断一个字符串是否是数字,我们使用这个方法。
age = input(“your age>>:”)
if age.isdigit(): # isdigit() 检测字符串是否只由数字组成
age = int(age)# 如果大家在pycharm中敲代码if语句下面是会自动缩进的,如果在普通文档编辑器中,
敲下'Tab'键就可以缩进
age +=1
print(age)
3. Python其他数字类型(了解)
#int(整型)
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
#long(长整型)
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,
但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,
所以如今在长整数数据后面不加字母L也不会导致严重后果了。
注意:在Python3里不再有long类型了,全都是int
>>> a= 2**64 # >>>表示在命令行模式下进行输入
>>> type(a) #type()是查看数据类型的方法
<type 'int'># int类型
>>> b= 2**60
>>> type(b)
<type 'int'>
#complex复数型
>>> x=1-2j
>>> x.imag
-2.0
>>> x.real
1.0
二 字符串类型
1. 字符串类型介绍
在Python 中,加了引号的字符就是字符串类型,用于标识:描述性的内容,如姓名,性别,国籍,种族,定义形式:
name='Albert' # name=str(Albert)
#'Albert'、"Albert" 2种形式都是字符串
# str()可将其他数据类型转化成字符串
字符串格式化:
name = input('请输入名字>>:') #'请输入名字'为字符串
print('你好,%s' % name)# %s其实可以理解为占位符,在输出时会使用字符串后面的%后面的变量的值进行替换
2. 单引号,双引号和三引号的区别
#那单引号、双引号、多引号有什么区别呢? 让我大声告诉你,单双引号木有任何区别,
只有下面这种情况 你需要考虑单双的配合
msg = "My name is Albert , I'm 18 years old!"
#多引号有什么作用呢?作用就是多行字符串必须用多引号
msg =
'''
今天我想写首小诗,
歌颂我的同桌,
你看他那乌黑的短发,
好像一只炸毛鸡。
'''
print(msg)
# 三引号里面写多行内容
3. 字符串的拼接
#数字可以进行加减乘除等运算,字符串呢?让我大声告诉你,也能?what ?是的,但只能进行"相加"和"相乘"运算。
>>> name='albert'
>>> age='18'
>>> name+age # 相加,简单拼接
'albert18'
>>> name*5
'albertalbertalbertalbertalbert'
#注意1:
字符串1+字符串3,并不会在字符串1的基础上加字符串3,而是申请一个全新的内存空间存入字符串1和字符串3,
相当字符串1与字符串3的空间被复制了一次
#注意2:只能字符串加字符串,不能字符串加其他类型
字符串拼接(只能在字符串之间进行,且只能相加或相乘)
字符串类型只能存一个值,是不可变类型,可以哈希。
4. 字符串类型常用的方法
(1) 按照索引取值
字符串是不可变类型,并不能改变字符串的值,取值时最多可以有三个参数,分别是起始位置,结束位置和步长,可以正向取值,反向取值(起始位置大于结束位置或者没有起始位置与结束位置,步长为-1表示从最后一个开始,步长为负数)
hobbies = "music basketball"
print(hobbies[0])
print(hobbies[1])
print(hobbies[5])
print(hobbies[0:5])
print(hobbies[:5])
print(hobbies[0:5:2]) # 从第零个元素到第四个元素,隔一个元素取一次
print(hobbies[0:5:-2])# 取不到元素,因为表示从第零个元素到第四个元素,逆序(-2为负数)隔一个元素取一次,
第零个元素前面没有元素了,所以什么都取不出来
print(hobbies[11:5:-2])# 从第11个元素到第六个元素,逆序隔一个元素取一次
print(hobbies[-1])# 取倒数第一个字符
print(hobbies[-2])# 取倒数第二个字符
(2) 长度运算
print(len('name'))# 可用来求string类型、列表等的长度
(3) 成员运算
print('a' in 'Albert')# 判断a是否在Albert中,在则返回True,否则返回False
# False
print('a' not in 'Albert')
# True
(4) 移除空白
print(' name'.lstrip()) # 移除左边空白
print('name '.rstrip()) # 移除右边空白
print(' name '.strip()) # 移除两边空白
(5) 切分
切分的作用:比如给你一条数据“Kobe 24 Lakers”你需要把Kobe的号码和所属球队都提取出来,那么你可以用以下方式进行切分,会返回一个列表。
print('Kobe 24 Lakes'.split(' '))
print('n a me'.split(','))
print('n,a me'.split(','))
print('n,/a /me'.split('/',1)) # 数字表示切割次数,默认全部切割
print('n,a /me'.split('/'))
print('a|b|c'.rsplit('|',1)) # 从右边开始切割
(6) 组合
print('a'.join('1234'))
print('a'.join('bcde'))
tag = ' '
print(tag.join(['I', 'say', 'hello', 'world'])) # 可迭代对象必须都是字符串
(7) 替换
print('abc name id'.replace('a', 'card')) # 将前面字符串中的a全部替换为‘card’
name = 'albert say :i have a dream,my name is albert'
# 注意此时name原来的值并没有改变,而是产生了一个替换之后新的值
print(name.replace('albert', 'Albert', 1))# 把name中的albert替换为Albert,只替换1次,默认全部替换
(8) 字符串其他操作
# find,rfind,index,rindex,count
name='albert say hello'
print(name.find('o',1,3)) # 顾头不顾尾,找不到则返回-1不会报错,找到了则显示索引
# print(name.index('e',2,4)) # 同上,但是找不到会报错
print(name.count('e',1,3)) # 顾头不顾尾,如果不指定范围则查找所有
# center,ljust,rjust,zfill
name='albert'
print(name.center(30,'-'))
print(name.ljust(30,'*'))
print(name.rjust(30,'*'))
print(name.zfill(50)) # 用0填充
# captalize,swapcase,title
print(name.capitalize()) # 首字母大写
print(name.swapcase()) # 大小写翻转
msg='albert say hi'
print(msg.title()) # 每个单词的首字母大写
# is数字系列
# 在python3中
num1=b'4' # bytes
num2=u'4' # unicode,python3中无需加u就是unicode
num3='四' # 中文数字
num4='Ⅳ' #罗马数字
# isdigit:bytes,unicode
print(num1.isdigit()) # True
print(num2.isdigit()) # True
print(num3.isdigit()) # False
print(num4.isdigit()) # False
# isdecimal:uncicode
# bytes类型无isdecimal方法
print(num2.isdecimal()) # True
print(num3.isdecimal()) # False
print(num4.isdecimal()) # False
# isnumberic:unicode,中文数字,罗马数字
# bytes类型无isnumberic方法
print(num2.isnumeric()) # True
print(num3.isnumeric()) # True
print(num4.isnumeric()) # True
# 三者不能判断浮点数
num5='4.3'
print(num5.isdigit())
print(num5.isdecimal())
print(num5.isnumeric())
'''
总结:
最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景
如果要判断中文数字或罗马数字,则需要用到isnumeric
'''
# is其他
print('===>')
name='alb123ert'
print(name.isalnum()) # 字符串由字母或数字组成
print(name.isalpha()) # 字符串只由字母组成
print(name.isidentifier())
print(name.islower())
print(name.isupper())
print(name.isspace())
print(name.istitle())