#20200928_循环语句与注释
#while循环
# i=0
# while i <=100: #当while后面的表达式为真时,则执行while循环,直到表达式未假时,停止循环
# print(i,end=' ') #修改结尾处缺省值未换行的,把结尾改成空格,让打印出来的数能在同一行,好看些
# i+=10 #i不会自己涨,所以要自增长,实现循环,确保不陷入死循环
#怎么实现十个十个数排成一排?
# i=0
# while i <=100:
# if i%10==0: #1除以10的余数等于0
# print(i)
# else:
# print(i,end=' ')
# i+=1
#for循环 如果有明确的循环次数没建议使用for循环,如果没有明确的循环次数,就适应while循环,不过两者可以互相替换
# for i in range(1,11): #包含起始值,不包含终止值,起始值为0时可以省略,步长不写就默认为1
# print(i)
#两种不同的for循环遍历某个列表
#第一种方法:用range函数循环取值
# list1=['我','和','我','的','祖国']
# for i in range(0,len(list1)): #第一种写法,这里的0可以省略
# print(list1[i])
#第二章方法:遍历
# list1=['我','和','我','的','祖国']
# for one in list1:
# print(one,end=' ')
#break和continue的用法,break是终止循环,continue是跳出当次循环。如:
# for i in range(1,11):
# if i==5:
#break #如果是break,打印结果是1 2 3 4,后面不继续循环了
#continue #如果是continue,打印结果是1 2 3 4 6 7 8 9 10,只是结束i等于5的那次循环,后面还会继续循环的
#pass #占位符,不跳出循环,如果后面有语句正常执行
#print('you are so beautiful'),如果上面只有pass,会继续打印这句话
# print(i)
#循环本身也可以带一个else,当循环成功运行完成之后,会执行一次else中的语句
# else:
# print('循环执行完毕')
#用print函数,配合循环语句写一个倒计时 倒计时100秒
# for i in range(10,0,-1): #range(起始值,终止值,步长),因为是倒计时,所以起始值大于终止值
# print(f'倒计时{i}秒') #f'是格式化字符串,不懂课后理解
#进阶版写法:
# import time
# for i in range(10,0,-1): #range(起始值,终止值,步长),因为是倒计时,所以起始值大于终止值
# print(f'倒计时{i}秒')
# time.sleep(1)
#如果只想让秒数变化怎么办?
# import time
# for i in range(3,0,-1): #range(起始值,终止值,步长),因为是倒计时,所以起始值大于终止值
# print('
',f'倒计时{i}秒',end=' ') #'
'表示让打印的光标刷新回到行首 如果倒计时不刷新,再加上flush-True
# time.sleep(1)
# else:
# print('
','倒计时结束')
# 心田老师循环语句课程
'''
本节课大纲:
1- while循环
2- for循环
3- break语句
4- continue语句
5- 注释
'''
# 1- while循环,学习这个先联系一个需求
'''
功能需求:
基本需求:求1+2+3+...+100的和
扩展需求:
1-这个函数要重复使用,需要进行封装
2-需要得到累加和做二次运算 --增加函数的返回值return
3-用户可以自定义求一段数据的和 --增加形参
4-实现求:奇数偶数等差数列之和 --再增加一个形参c然后自变量i+=c就能实现了
'''
# i= 1 # 初始值
# sun = 0 #结果和 创建两个参数,然后开始循环
# while i<=100:
# sun=i+sun #不停地累加 这个语句等同于 sun+=i
# i+=1 #自变量累加,实现循环,直到while false,循环才会结束,while true只会是死循环
# print(sun) #基本需求完成啦,实现了打印出1加到100的和
# 如果要实现扩展需求1-,封装函数,很简单,直接定义一个函数,然后代码体全部缩进就好了:
# def get_sundat(): #del 定义一个函数
# i= 1 # 初始值
# sun = 0 #结果和 创建两个参数,然后开始循环
# while i<=100:
# sun=i+sun #不停地累加 这个语句等同于 sun+=i
# i+=1 #自变量累加,实现循环,直到while false,循环才会结束,while true只会是死循环
# print(sun)
# get_sundat() #后续使用直接调用函数就可以求和了,得:5050
# 接下来实现需求2,怎么获取累加和做二次运算: return
# def sundate():
# i=1
# sun=0
# while i <=100:
# sun+=i
# i+=1
# return (sun) #这里不把值传给打印台,直接return回去,就可以用该值来进行运算啦
# print(sundate()+100) #打印得:5150
# 怎么实现扩展需求3-用户可以自定义求一段数据的和呢?
# def sundate(a,b): #增加形参,这是必填参数
# i=a
# sun=0
# while i<=b:
# sun+=i
# i+=1
# print(sun)
# sundate(12,13) #打印得:25.在调用的时候用户自己传实参,就可以实现自定义一段数据的和了
# 实现扩展需求4-,用户可以自定义传值并实现奇数和偶数和等差数列和
# def sundate(a,b,c=1):
# i=a
# sun=0
# while i<=b:
# sun+=i
# i+=c
# print(sun)
# sundate(1,10,2) #打印得:25,这是求的1-10 的奇数和
# **如何用while实现遍历呢?
# namelist=['Tom','Susan','hello']
# a=0 #这个就相当于是定义了列表的下标,这样就能实现遍历了,.起始值是0从第0位开始遍历
# while a<len(namelist):
# print(namelist[a])
# a+=1 #打印得:Tom Susan hello. 牢记while循环语句实现遍历,就是定义下标,让列表下标循环取值
# 但是这个while遍历较为复杂,引入for循环语句,一行代码就可以搞定
# 2- for 循环: 注意,for循环遍历列表,如果列表为空时for循环不进去
# namelist=['Tom','Susan','hello']
# # for i in namelist: #它的工作原理就是用i这个遍历分别取等于列表里面的每个数然后打印出来
# # print (i) #打印得:Tom Susan hello.
# namelist.clear() #清空列表
# print(namelist) #打印得:[]
# for i in namelist:
# print(i) #如果列表未空则返回空,不会报错
# print('验证空列表时是否有进入for循环') #不返回东西,也不报错,没有打印这句话证明for循环没有进来
# 如果要用for循环来表示循环几次,引入range()方法,表范围值:
# for one in range(0,5): #range左闭右开,右边的值取不到
# print(one) #打印得:0,1,2,3,4 五个数字,说明range()是包含首位0不包含尾数5的
# print('我不久一定就升职加薪啦!!!开心') #打印结果如下: 可以限制输出的内容,以及输出多少遍都可以
# ** if 拓展range方法中步长知识, 注意步长的正负数代表意思与切片不一样, 切片中步长未负数表示从列表中倒着取值, 而循环中的步长为负数代表递减:
# for one in range(0,5,2): #这个方法里面还有个step,默认是1,也可以自定义步长2,正数表示递增,负数表示递减
# print(one) #打印得:0,2,4
# for one in range(0,5,-1):
# print(one) #这里是打印空,因为0每次倒着数没有东西啦,所以步长要是为负数,那么range里面的起始值要大于终止值,如:
# for one in range(6,0,-1):
# print(one) #打印得:654321
'''0
我不久一定就升职加薪啦!!!开心
1
我不久一定就升职加薪啦!!!开心
2
我不久一定就升职加薪啦!!!开心
3
我不久一定就升职加薪啦!!!开心
4
我不久一定就升职加薪啦!!!开心
'''
'''
知识点汇总:
while循环:
比较适合:不明确循环次数,通过条件来结束的循环
for 循环
比较适合:遍历操作,明确次数的循环操作
'''
# 3- break 语句---终止.中断循环
# for two in range(1,7):
# if two==4:
# # break #如果是用的break,那么打印结果就是 1 2 3,说明break语句遇到了异常就跳出了*本层*循环
# continue #如果是用的continue,那么打印结果是1 2 3 5 6,说明continue语句遇到循环就结束了*本次*循环,但是并没有跳出循环,而是继续执行下次循环
# print(two)
# *for 循环的嵌套用法:
# namelist=['Tom','Susan','hello']
# for one in range(0,2): #这是一个循环,代表将循环体运行两次
# for name in namelist: #这是一个循环,将namelist表名字都遍历一遍,一共三个名字
# print(name) #结果是把namelist表全部名字打印了两遍(原因是第一个for循环是0,2,代表只能循环两次),一共六个名字
# namelist=['Tom','Susan','hello']
# for one in range(0,2): #这是一个循环,代表将循环体运行两次
# for name in namelist: #这是一个循环,将namelist表名字都遍历一遍,一共三个名字
# if name=='Susan':
# # break #遍历到第二个名字的时候跳出了本层循环,所以只能将第一个名字打印两次 #打印得:Tom Tom
# continue #遍历到第二个名字的时候跳出本次循环,所以讲除第二个名字以外的名字都打印了两边,打印得:Tom hello Tom hello
# print(name,end=' ')
# 扩展 ---列表生成式:
# alist=[]
# for one in range(1,7):
# alist.append(one)
# print(alist) #打印得:[1, 2, 3, 4, 5, 6]
# 扩展1-:
# alist=[one for one in range(1,7)]
# print(alist) #打印得:[1, 2, 3, 4, 5, 6] 这个和上面那个循环打印的结果都是一样的,但是就简便了两行代码
# salarylist=[10000,12000,16007]
# 要求是:扣除百分之十的税,然后存在一个新列表里面
# afteresalart=[]
# for one in salarylist:
# afteresalart.append(int(one*0.9)) #可以加int代表取整数,打印得:[9000, 10800, 14406]
# print(afteresalart) #打印得:[9000.0, 10800.0, 14406.300000000001]
# 上面哪行代码可以简化:
# afteresalart=[int(one*0.9) for one in salarylist] #可以加int代表取整数,打印得:[9000, 10800, 14406]
# afteresalart=[int(one*0.9) for one in salarylist if one>=10001] #可以添加if语句做限制 打印得:[10800, 14406]
# print(afteresalart) #打印得:[9000.0, 10800.0, 14406.300000000001]
# 列表生成式缺点:代码逻辑是比较复杂的for循环语句,不好实现,不好维护代码,不好调试即不好debug