循环结构和数据类型内置方法
循环结构和数据类型内置方法
while + else循环
# while + else连用
当while没有被break主动结束时,才会执行else的子代码
# 语法结构
'''
while 条件:
循环体代码
else:
循环正常结束要执行的代码
'''
eg:
num = 1
while num < 10:
print(num)
num += 1
else:
print('打印完成')
# continue不会导致else不被执行,只有break会导致

死循环与while的嵌套
# 死循环就是一直运行下去的循环,死循环会极度影响电脑的性能,甚至会造成硬件的损坏
死循环无法结束,会一直循环运行下去,并且一直占用CPU工作
eg:
count = 10
while True:
count *= count
print(count) # 电脑顶不住了,报错KeyboardInterrupt
'''!!!不要轻易尝试!!!'''
# while嵌套
eg:
i = 1
while i < 10:
j = 1
while j <=i:
print('%s * %s = %s'%(i,j,i*j),end=' ')
j +=1
print()
i +=1
运行结果:
1 * 1 = 1
2 * 1 = 2 2 * 2 = 4
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9
4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25
6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36
7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49
8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64
9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81

for循环
"""
for循环可以做到的事情while循环都可以做到!!!
但是for循环语法更加简单 使用频率更高
"""
一般情况下涉及到循环取值的时候 都会考虑使用for循环而不是while循环
# 语法结构
'''
for 变量名 in 循环对象: # 字符串、列表、字典、元组、集合
循环体代码
每执行一次循环都将循环对象中的一个元素赋值给变量名,循环对象中的所有元素赋值完后循环结束
ps:针对for循环的变量命名,也要遵从见名知意
如果真的没有合适的名字可以使用常用变量名i、j、k等
'''
eg:
#打印十以内的数字
for num in range(10):
print(num)
运行结果:
0
1
2
3
4
5
6
7
8
9

不同类型数据使用for循环的结果
-
列表
data_list = ['伞兵一号', 18, 183.5, 100] for data in data_list: print(data) 运行结果: 伞兵一号 18 183.5 100 # 遍历列表每个元素 -
字符串
# for循环字符串 str1 = 'hello world' for item in str1: print(item) 运行结果: h e l l o w o r l d # 遍历字符串每个字符 -
字典
# for循环字典 city_dict = {'安徽':'合肥','江苏':'南京'} for city in city_dict: print(city) 运行结果: 安徽 江苏 # 遍历每个键值对的key,value取不出来 -
元组
# for循环元组 tp = (11,22,33,44) for num in tp: print(num) 运行结果: 11 22 33 44 # 遍历元组每个元素 -
集合
# for循环集合 s = {11,22,33,44} for num in s: print(num) 运行结果: 33 11 44 22 # 遍历集合的每个元素,因为集合和字典的内部元素是无序的,但是字典因为使用较多,被pycharm优化了,所有字典输出是有序的,集合因为使用较少,没有优化,所以输出的顺序是乱的
range关键字
range方法在python2和python3中有所区分
在python2中range是直接产生一个列表 元素很多的情况下比较占用空间
在python2中有一个xrange 其实就是python3里面的range
在python3中range相当于哆啦A梦的口袋 不占空间但是可以取出很多数据
在python3中就只有一个range了
'''range其实是一个迭代器,用于产生一个数据集合 但是更节省空间'''
-
range用法一
eg: for i in range(5): print(i) 运行结果: 0 1 2 3 4 #括号内只写一个数字,可以看作生成从0到括号内的数字前一个数字的列表 -
range用法二
eg: for i in range(1,5): print(i) 运行结果: 1 2 3 4 #括号内写了两个数字,可以看作生成从前一个数字到后一个数字的列表,顾头不顾尾 -
range用法三
eg: for i in range(1,5,2): print(i) 运行结果: 1 3 #第三个数字代表步长,即隔多少个数字取值一次
for循环补充
'''
for循环其实和while循环差别不大,用for循环可以实现的逻辑while都可以实现,只不过for循环相较于while循环更加简洁,所以,while循环关键字for循环也可以使用
'''
#for + break
结束这个for循环
#for + continue
跳过本次循环,直接开始下一次循环
#for + else
for循环正常结束后运行else子代码
#for循环嵌套
原理和while循环相同

如何查看数据类型的内置方法
借助编程软件自动提示,数据类型后使用英文句号即可显示全部可用方法
数据类型的内置方法
-
整型
1. 类型转换 eg: res = '123' print(type(res)) res = int(res) print(type(res)) 运行结果: <class 'str'> <class 'int'> '''int()可以将字符串类型转换成整型,但仅限于纯数字,否则会报错''' 2. 进制转换 eg: print(bin(100)) # 转换成二进制 print(oct(100)) # 转换成八进制 print(hex(100)) # 转换成十六进制 print(int('0b1100100',2)) # 二进制转换成十进制 print(int('0o144',8)) # 八进制转换成十进制 print(int('0x64',16)) # 十六进制转换成十进制 运行结果: 0b1100100 0o144 0x64 100 100 100 '''int()括号里直接加其他进制数也可以转换,注意不要加引号,会报错''' -
浮点型
1. 类型转换 eg: res = '12.55' print(type(res)) res = float(res) print(type(res)) print(float(12)) 运行结果: <class 'str'> <class 'float'> 12.0 '''float()可以将字符串类型转换成浮点型,但仅限于纯数字,否则会报错,整数转化后会在小数点后加一个0''' -
字符串
1. 类型转换 str()可以将所有基本数据类型转换成字符串 eg: print(str(11), type(str(11))) print(str(11.0), type(str(11.0))) print(str(['11', '22']), type(str(['11', '22']))) print(str({'安徽': '合肥', '江苏': '南京'}), type(str({'安徽': '合肥', '江苏': '南京'}))) print(str((11, 22, 33)), type(str((11, 22, 33)))) print(str({11, 22, 33}), type(str({11, 22, 33}))) 运行结果: 11 <class 'str'> 11.0 <class 'str'> ['11', '22'] <class 'str'> {'安徽': '合肥', '江苏': '南京'} <class 'str'> (11, 22, 33) <class 'str'> {33, 11, 22} <class 'str'> 2. 其他方法 s = 'hello world' # 1. 索引取值 # print(s[0]) # >>>h ================================================ # 2. 切片操作 # print(s[2:4]) # >>>ll # 取出s[2]到s[3]的字符,顾头不顾尾 ================================================ # 3. 步长 # print(s[0:5:2]) # >>>hlo # 取出s[0]到s[4]的字符,每两个取值间隔为2 ================================================ # 索引取切片扩展 # print(s[-1]) # 索引值为负则反向取值 # >>>d # print(s[-1:-5:-1]) #反向取值,步长为1,前面两个都为负,步长必须为负 # >>>dlro # print(s[-5:-1]) # 从倒数第五个取到倒数第2个,顾头不顾尾 # >>>worl ================================================ # 4. 统计字符串长度 # print(len(s)) # >>>11 ================================================ # 5. 成员运算 # print('o' in s) # 判断是否在字符串中,返回布尔值 # >>>True ================================================ # 6. 移除字符串首位指定的字符(使用频率较高) # print(s.strip('d')) # 当括号内为空时,默认移除空格 # >>>hello worl # 只能移除两头的,不能移除中间的 '''ps:登录账号时用的多,可以移除用户输错的空格''' ================================================ # 7.按照指定字符切割字符串 # data = '伞兵一号|伞兵二号|伞兵三号' # print(data.split('|')) # >>>['伞兵一号', '伞兵二号', '伞兵三号'] # name1,name2,name3 = data.split('|') # print(name1,name2,name3) # >>>伞兵一号 伞兵二号 伞兵三号 # print(data.split('|',1)) # 控制切几次 # >>>['伞兵一号', '伞兵二号|伞兵三号'] # print(data.rsplit('|',1)) # 从右边开始切 # >>>['伞兵一号|伞兵二号', '伞兵三号'] """split方法切割完字符串之后是一个列表""" ================================================ # 8. 大小写问题 # print(s.lower()) # 将字符串的字母全部转成小写 # >>>hello world # print(s.upper()) # 将字符串的字母全部转成大写 # >>>HELLO WORLD ================================================ # 9. 判断开头结尾问题 # print(s.startswith('h')) # 判断是否以括号内的内容开头,返回True或者False,括号内不可以为空,但可以为多个字符 # >>>True # print(s.endswith('ld')) # 判断是否以括号内的内容结尾,返回True或者False,括号内不可以为空,但可以为多个字符 # >>>True '''大小写会影响到判断结果'''

浙公网安备 33010602011771号