while+else
''' 语法结构 while 条件: 条件成立后执行的代码块 else: 循环体正常结束后才会执行的代码块 '''
执行流程图:
# eg: count = 1 while count <10 print (count) count += 1 else: print("while循环正常结束了")
该代码的的运行结果为:
死循环有时候会极度的影响电脑的性能,甚至会造成硬件的损坏
就是永远靠自身的控制终止的循环,并且一致占用CPU工作
count = 10 while True: count *= 1 #此段代码就是一个死循环,它没有结束的条件,只会依靠此段代码无限的循环运算
将一个while循环放入到另一个while循环体里面,就形成了while嵌套,嵌套循环就是把内层循环,当成了外层循环的循环体
''' for循环可以做到的事情,while循环都可以做到 但for循环语法更加简单,使用频率更高 一般情况下,涉及到循环取值的时候,都会考虑使用for循环而不是while循环 ''' ''' 语法结构 for 变量名 in for循环对象: # 字符串、列表、字典、元组、集合 for循环的循环体代码 每次执行都会将循环对象中的一个元素赋值给变量名 ''' # for循环命名要求 # 针对for循环语法结构中的变量名,也应该做到见名知意 # 如果真没有合适的名字可使用常用的变量名i,j,k,v,num,item # eg: name_list = ['jason', 'kevin', 'tony', 'tank', 'oscar'] #使用while循环打印出列表名字 count = 0 while count < 5: print(name_list[count]) count += 1 #使用for循环打印出列表名字 for i in name_list: print(i) 这两种循环都可以打印出列表名字,但是for循环的代码明显简洁了很多
依次取出每一个字符
for i in 'helloword': print(i)
运行结果如图所示:
循环字典比较特殊,循环字典只能获取到字典的key,而value无法直接获取
# eg userinfo_dict = {'username':'tuzi','age' = 18, 'gender': 'male'} for i in userinfo_dict: print(i)
运行结果如图所示:
可以看到输出结果只打印了字典的K值
# eg for i in (1,2,3,4): print(i)
运行结果为:
注:字典与集合内部都是无序的
# eg for i in {11,22,33,44,55}: print(i)
运行结果为:
python2中 range() 函数可创建一个整数列表,一般用在 for 循环中。
range方法在python2和python中有所区分
在python2中range是直接产生一个列表,元素很多的情况下比较占用空间
在python2中有一个xrange其实就是python3里面的range
在python3中range相当于哆啦A梦的口袋(迭代器,后面会补充)不占空间但是可以取出很多数据
在python3中就只有一个range了
区别如下图
python2中的range
python2中的xrange
python3中的range
# 用法1 # 括号内只写一个数字,默认从0开始,顾头不顾尾 for i in range(10): print (i) """ 输出结果为 0 1 2 3 4 5 6 7 8 9 """ # 用法2 # 括号内写两个数字,自定义起始位置,顾头不顾尾 for i in range(1,10) print(i) """ 输出结果为 1 2 3 4 5 6 7 8 9 """ #用法3 括号内写三个数字,第三个数字表示的是等差数列的差值,默认情况下是1 for i in range(1,10,2): print(i) """ 输出结果为 1 3 5 7 9 """
for 循环补充
# for+break break结束本层for循环 # for+continue continue结束本次for循环,直接开始下一次循环 # for+else for循环正常结束之后运行else子代码 # 用法与while一致
可以借助编程软件的自动提示 采用句点符快速查看
# 类型转换 res = int(123) # 将int方法在执行之后的结果赋值给变量res print(res,type(res)) # 只可以转换整数,不能转换其他类型(浮点型,字母)
转换浮点型和字母会报错
# 将十进制转换成其他进制 bin 将十进制转换成二进制 oct 将十进制转换成八进制 hex 将十进制转换成十六进制 print(bin(100)) # 0b1100100 二进制0b开头 print(oct(100)) # 0o144 八进制0o开头 print(hex(100)) # 0x64 十六进制0x开头 # 将其他禁止转换成十进制 print(int('0b1100100', 2)) print(int('0o144', 8)) print(int('0x64', 16)) 根据不同的进制,末尾加上不同的进制名
# 类型转换 res = float('11.11') print(res,type(res)) # 需要注意的是,如果你转换的是一个整型,那么在转换完毕后,会给你把这个整数加上小数点。 res = float('11') print(res, type(res)) float('abc') # 结果为11.0
类型转换
str 可以转换所有的基本数据类型 整型、浮点型、列表、字典、集合、元组、布尔 # 转换方式为:str(转换的数据,可以是任意数据类型) # 使用print(str(数据),type(str(数据)))来查看转换结果
索引取值
s = 'hello world' print(s1[0]) #输出结果为h
切片操作
s = 'hello world' print(s[2:4]) # 顾头不顾尾 输出结果为ll
步长
s = 'hello world' print(s[0:9:1]) # 第三个参数是步长 默认为1 依次获取,顾头不顾尾 print(s[0:9:2]) # 间隔一个取一个 # 结果:hlowr # 索引切片扩展 print(s[-1]) #获取最后一个字符 print(s[-1:-8:-2]) # 第三个参数可以控制索引的方向 # 结果:drwo
统计字符串中字符的个数
s = 'hello world' print(len(s)) #结果:11
成员运算
s = 'hello world' print('lo'in s) # 必须是相连的字符串,否则为false
移除字符串首位指定的字符(使用频率较高)
strip # 用法 name = ' tuzi ' print(len(name)) # 结果为11 res = name.strip() # 默认移除字符串首尾的空格,也可以是其他字符 print(res,len(res)) #结果为tuzi 4(字符串长度) ''' strip还分为lstrip(只移除左边指定字符串) rstrip(只移除右边指定字符串) '''
按照指定的字符切割字符串
split方法切割完之后是一个列表 rsplit从右往左切 date = 'tuzi|1234|meitoufa' print(date.split('|')) # ['tuzi', '1234', 'meitoufa'] username, password, hobby = date.split('|') print(username,password,hobby) # tuzi 1234 meitoufa split也可以设置步长,比如说想切一个不切了,也可以实现 date = 'tuzi|1234|meitoufa' print(date.split('|',maxsplit=1)) # 只切一次 # 输出结果:['tuzi', '1234|meitoufa'] print(date.rsplit('|',maxsplit=1)) # rsplit从右往左切 # 输出结果:['tuzi|1234','meitoufa']