Python基础数据类型
-
bool str int 三者之间的转换
- str索引切片,常用操作方法
- for循环(大量的练习题)
1.基础数类型总览
- 整数(int) ,字符串(str),布尔值(bool),列表(list),元组(tuple),字典(dict),集合(set).
- 10203 123 3340 int 主要用于计算+- * / 等等
- '今天吃了没?' str 存储少量的数据,并进行相应的操作。str1 + str2, str *int , 索引,切片, 其他操作方法
- True False bool 判断真假
- [12, True, 'alex', [1,2,3 ]] list 存储大量有序数据。列表内部数据可任意改动
- (12, True, 'alex', [1,2,3 ]) tuple 存储大量的数据,元组不可改变里面的元素。只读,不能更改。
- {'name': '太白金星'} dict 字典存储大量的关联性比较强的数据,查询速度非常快。
- set 集合
2.数字int
十进制二进制转换 #二进制转换成十进制 0001 1010 ------> 26 b = 1 * 2**4 + 1 * 2**3 + 0 * 2**2 + 1 * 2**1 + 0 * 2**0 print(b) # 26 #十进制整数转换成二进制整数 42 -----> 0010 1010 除2取余,逆序排列 #十进制小数转换成二进制小数 乘2取整,顺序排列:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,此时0或1为二进制的最后一位。或者达到所要求的精度为止。 0.625 = (0.101)B 0.625 * 2 = 1.25 ---->1 0.25 * 2 =0.5 ---->0 0.50 * 2 =1.0 ---->1
-
bit_lenth 十进制转化成二进制的有效长度【bit_length()计算整数在内存中占用的二进制码的长度.】
# bit_lenth 有效的二进制的长度 i = 4 print(i.bit_length()) # 3 i = 5 print(i.bit_length()) # 3 i = 42 print(i.bit_length()) # 4
3.布尔值bool:True False
-
bool str int 三者之间的转换
数据类型之间的转换: ##### bool <---> int ####### #bool-->int :True 1 False 0 print(int(True)) # 1 print(int(False)) # 0 #int-->bool :非零即True ,0 为 False i = 0 print(bool(i)) 【重点】##### str <---> int ##### # str ---> int : 只能是纯数字组成的字符串可以转化成数字类型 s1 = '1088' print(int(s1)) # 字符串引号内必须是数字组成 print(int(' 22 '))#22 仅由数字和空白组成的字符串,通过int进行数据类型转换时,自动去除空格 print(int(' \n 22\t'))#22 仅由数字和空白组成的字符串,通过int进行数据类型转换时,自动去除空格 #应用:两个整数相加 while 1: content = input('请输入内容:') l1 = content.split('+') result = int(l1[0]) + int(l1[1]) print(result) # int ----> str 所有数字都能转化成字符串 i = 100 print(str(i),type(str(i))) 【重点】###### str <---> bool ##### # str--->bool :非空即True s1 = ' ' #空格,不是空 print(bool(s1)) #True s1 = '' # 空字符串,为False print(bool(s1)) #False # bool ---> str 无意义 print(str(True), type(str(True))) # 运行结果:True <class 'str'>
- 应用:
s = input('输入内容') #input输入的为字符串类型 if s: #(字符串作为布尔值进行判断) print('有内容') else: print('没有输入任何内容') #直接回车,显示“没有输入任何内容” #先空格,再回车,显示“有内容”
4.字符串str(重点)
Python中凡是用引号引起来的数据可以称为字符串类型,组成字符串的每个元素称之为字符,将这些字符一个一个连接起来,然后在用引号起来就是字符串。
索引:索引即下标,就是字符串组成的元素从第一个开始,初始索引为0以此类推
切片:切片就是通过索引(索引:索引:步长)截取字符串的一段,形成新的字符串
对字符串进行索引和切片,出来的数据都是字符串类型。
-
常用操作方法:字符串的常用操作方法,不会对原字符串进行任何操作,都是产生一个新的字符串
索引切片步长
#字符从左至右有顺序,依次为0,1,2....。从右往左以次为-1,-2,-3,.... s1 = 'python全栈22期' # 按照索引取值,每次取一个字符。索引即下标index s2 = s1[0] print(s2) #p print(s2,type(s2)) #p <class 'str'> s3 = s1[2] print(s3) #t s4 = s1[-1] print(s4) #期 # 按照切片取值。按照切片取值,原则:顾头不顾腚 s5 = s1[0:6] s5 = s1[:6] #从开头开始取,0可以默认不写 print(s5) #python s6 = s1[6:] print(s6) #全栈22期 print(s1[:-1] #python全栈22 #-1 是列表中最后一个元素的索引,但是要满足顾头不顾腚的原则,所以取不到'期'元素 # 切片步长 s7 = s1[:5:2] #加步长 print(s7) #pto print(s1[:]) ##开头到最后,python全栈22期 # 倒序: s8 = s1[-1:-6:-1] ##反向加步长 print(s8) #期22栈全 # 倒序全部取出来 s9 = s1[-1::-1] print(s9) #期22栈全nohtyp s9 = s1[::-1] print(s9) #期22栈全nohtyp s9 = s1[-1:0:-1] #错误 print(s9) #期22栈全nohty 没有字母p 按索引:s1[index] 注释:index下标 按照切片取值: s1[start_index: end_index+1] 按照切片步长取值: s1[start_index: end_index+1: step] 反向按照切片步长取值: s1[start_index: end_index后延一位: step]
-
练习题
''' 有字符串s = "123a4b5c" 通过对s切片形成新的字符串s1,s1 = "123" 通过对s切片形成新的字符串s2,s2 = "a4b" 通过对s切片形成新的字符串s3,s3 = "1345" 通过对s切片形成字符串s4,s4 = "2ab" 通过对s切片形成字符串s5,s5 = "c" 通过对s切片形成字符串s6,s6 = "ba2" ''' s = "123a4b5c" s1 = s[0:3] s1 = s[:3] print(s1) s2 = s[3:6] s2 = s[-5:-2] print(s2) s3 = s[0:-1:2] print(s3) s4 = s[1:6:2] print(s4) s5 = s[-1] print(s5) s6 = s[-3:0:-2] print(s6)
常用操作方法【重点】
字符串的常用操作方法,不会对原字符串进行任何操作,都是产生一个新的字符串 upper lower #例 s = 'taiBAifdsa' s1 = s.upper() #字符串s中字符全部大写(不会对原字符串进行任何操作,都是产生一个新的字符串 print(s1,type(s1)) #TAIBAICBR s2 = s.lower() #字符串s中字符全部小写 print(s2,type(s2)) #taibaicbr # 应用: username = input('用户名') password = input('密码') code = 'QweA' print(code) your_code = input('请输入验证码:不区分大小写') if your_code.upper() == code.upper(): if username == '太白' and password == '123': print('登录成功') else: print('用户名密码错误') else: print('验证码错误') startswith endswith #startswith 判断是否以...开头 s = 'taiBAifdsa' print(s.startswith('t')) #True ***【重点】 判断是否以单个字符开头 print(s.startswith('taiBAi')) #True ***【重点】 判断是否以多个字符开头 print(s.startswith(' ')) #False 判断是否以空格开头 #endswith 判断是否以...结尾 s = 'taiBAIcBr' s1 = s.endswith('t') print(s1) #False,返回的是布尔值 s2 = s.endswith('Br') print(s2) #True # 了解 s = 'taiBAifdsa' print(s.startswith('B',3,6)) #True 括号内的字符串必须加引号'B' #切片,顾头不顾腚。判断'BAi'是否以B开头。下标3,6,不包括6对应的f。 s = 'taiBAifdsa' print(s.endswith('f',3,6)) #False replace(old,new,count) #讲 msg = 'alex 很nb,alex是老男孩教育的创始人之一,alex长得很帅' msg1 = msg.replace('alex','太白') # 默认全部替换,用'太白'替换'alex' msg1 = msg.replace('alex','太白',2) #用'太白'替换'alex',2表示只替换前两个字符串 print(msg) #alex 很nb,alex是老男孩教育的创始人之一,alex长得很帅 print(msg1) #太白 很nb,太白是老男孩教育的创始人之一,alex长得很帅 #自 msg = '小明生病了,小明没去上学,小明在家休息' msg1 = msg.replace('小明','小红') print(msg1) #小红生病了,小红没去上学,小红在家休息 msg2 = msg.replace('小明','小红',2) print(msg2) #小红生病了,小红没去上学,小明在家休息 #自:比如某个字母小写变大写,大写边小写 s = ' qw sertyu eqtrti ' s1 = s.replace('t','T',2) print(s1)# qw serTyu eqTrti strip:去除空白,如空格,\t制表符, \n换行符。 # \n(换行符-将光标移动到下一行的开头) # \t(水平制表符-将光标向右移动一个制表符位) #默认去除字符串两边的空格,换行符,制表符 s4 = ' \n太白\t' print(s4) s5 = s4.strip() print(s5) #修改测试 s4 = ' \n太 白 tai \tbai\t' print(s4) s5 = s4.strip() print(s5)#太 白 tai bai #只能去掉两边的空白,内部的去不掉 name='*barr*y**' print(name.strip('*')) # barry print(name.lstrip('*')) # barry** print(name.rstrip('*')) # *barry #修改测试 name='*barr*y**' print(name.strip('*')) # barr*y #只把两边的*去掉了,内部的*去不了。 print(name.lstrip('*')) # barr*y** print(name.rstrip('*')) # *barr*y # 了解:可以去除指定的字符 s4 = 'rre太r白qsd' s5 = s4.strip('qrsed') #括号内字符串加引号,字符顺序无所谓 print(s5) #太r白 #只能去两头的对应字符 split 【非常重要】以什么分割,最终形成一个列表,此列表不含有这个分割的元素。 # str ---> list 字符串类型转换为列表类型,- 默认按照空格分隔,可以指定分隔符。 # 默认按照空字符串(空格,换行,制表符)分隔,返回一个列表 s6 = '太白 女神 吴超' l = s6.split() print(l) #['太白', '女神', '吴超'] # 指定分隔符 s6 = '太白:女神:吴超' l = s6.split(':') # :作为分隔符 print(l) #['太白', '女神', '吴超'] ret9 = 'title,Tilte,atre,'.split('t') # t作为分隔符 print(ret9) #['', 'i', 'le,Til', 'e,a', 're,'] ''空字符 #rsplit ret91 = 'title,Tilte,atre,'.rsplit('t',2) print(ret91)#['title,Til', 'e,a', 're,'] # 了解: s6 = ':barry:nvshen:wu' print(s6.split(':')) #['', 'barry', 'nvshen', 'wu'] 注:''空字符串 print(s6.split(":",2)) #['', 'barry', 'nvshen:wu'] #2表示前两个:有效 #自-实验 s1 = ' .haha.heihei.hehe.123' s2 = s1.split('.') # .作为分隔符 s3 = s1.split('.',3) print(s2) #[' ', 'haha', 'heihei', 'hehe', '123'] 注:' ' 引号内为空格 print(s3) #[' ', 'haha', 'heihei', 'hehe.123'] join(iterable):联合,连接,可以操作任何可迭代对象(可迭代:这个数据由多个元素组成,如字符串,列表), s1 = 'alex' s2 = '+'.join(s1) #'设置连接符'.join(iterable) iterable可迭代 用+作为连接符 print(s2) # a+l+e+x(字符串类型) print(s2,type(s2)) # a+l+e+x <class 'str'> #list ---> str 前提:列表里面的元素必须都是str类型才行 l1 = ['太白', '女神', '吴超'] s3 = ':'.join(l1) #用:作为连接符 print(s3) # 太白:女神:吴超(字符串类型) print(s3,type(s3)) #太白:女神:吴超 <class 'str'> s3 = ' '.join(l1) #用空格作为连接符 count #count数出字符串中的元素出现的个数。 s8 = 'sdfsdagsfdagfdhgfhgfhfghfdagsaa' print(s8.count('a')) #5,5是数字类型 s9 = s8.count("a",0,11) # 可切片,索引0,11不包含11 print(s9) #2 format: 格式化输出 # 第一种用法: msg = '我叫{}今年{}性别{}'.format('大壮',25,'男') # 第二种用法: msg = '我叫{0}今年{1}性别{2}我依然叫{0}'.format('大壮', 25,'男') print(msg) # 第三种用法: a = 100 msg = '我叫{name}今年{age}性别{sex}'.format(age=a,sex='男',name='大壮') #此处format()内可以不按顺序 print(msg) is 系列: 返回布尔值 #name = '100①' name = 'taibai123' print(name.isalnum()) #字符串由字母或数字组成 True print(name.isalpha()) #字符串只由字母组成 False s1 = '123' print(s1.isdecimal()) #字符串只由十进制组成 True print(s1.isdigit()) # 如果字符串中的所有字符都是数字,并且至少有一个字符,则返回True。 True s1 = b'123' # print(s1.isdecimal()) #报错:AttributeError: 'bytes' object has no attribute 'isdecimal' print(s1.isdigit()) # 如果字符串中的所有字符都是数字,并且至少有一个字符,则返回True。 True。 #应用 s1 = input('请输入您的金额:') if s1.isdecimal(): print(int(s1)) else: print('输入有误') 补充: #寻找字符串中的元素是否存在 find :通过元素找索引,找到第一个就返回,找不到 返回-1 index:通过元素找索引,找到第一个就返回,找不到 报错 a4 = "dkfjdkfasf54" ret1 = a4.find("fjdk",1,6) print(ret1) #2 返回的找到的元素的索引,如果找不到返回-1 ret2 = a4.index("fjdk",2,6) print(ret2) #2 返回的找到的元素的索引,找不到报错。 ret2 = a4.index("fjdk",4,6) print(ret2)#报错 #capitalize,swapcase,title name='taiBAIhi123' print(name.capitalize()) #Taibaihi123 首字母大写,其余变小写 print(name.swapcase()) #TAIbaiHI123 大小写翻转 msg='taibai say hi' print(msg.title()) #Taibai Say Hi 每个单词的首字母大写 # 内同居中,总长度,空白处填充 ret3 = a4.center(22,"*") print(ret3)#*****dkfjdkfasf54***** #python内置函数 1.len() #len():获取可迭代对象的元素总个数,是内置函数。不是字符串专用的 2.ord() #以一个字符(长度为1的字符串)作为参数,返回单个字符的 ASCII 数值(0-255),或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。 print(ord('a'))#97 print(ord('A'))#65 3.chr() #chr()函数是输入一个整数(0-255),返回其对应的ASCII字符 print(chr(65))#A print(chr(97))#a
5.for循环:有限循环
s1 = '老男孩edu'
print('老' in s1) #True 成员运算符
print('老男' in s1) #True
print('老ed' in s1) #False
print('老ed' not in s1) #True
s1 = '老男孩教育最好的讲师:太白'
输出:
'''
老 s1[0]
男 s1[1]
孩 s1[2]
教 s1[3]
育 ....
最
...
'''
s1 = '老男孩教育最好的讲师:太白'
print(len(s1)) #13
#while循环代码(利用while循环打印可迭代对象的每个元素)
s1 = '老男孩教育最好的讲师:太白'
index = 0
while index < len(s1): # len() :获取可迭代对象的元素总个数,是内置函数。不是字符串专用的
print(s1[index])
index += 1
# for 循环
'''
有限循环
for 变量 in iterable:
pass
'''
#for循环代码
s1 = '老男孩教育最好的讲师:太白'
for i in s1:
print(i)
#
for i in s1:
print(i)
if i == '好':
break
# break continue
# for else: while else:用法一样。