在python中,有两种循:for in和while
for in循环
for循环主要是用来遍历序列、集合、字典。
用法:
list = [1,2,3]
for i in list:
print(i,end='') # 1 2 3
tuple = (1,2,3,)
for i in tuple:
print(i) # 1 2 3
上边代码,分别循环list和元组中的元素,i是数据中的每一个元素,in后边是需要遍历的数据,数据后边需要加上冒号,每一次循环都会打印数据中的元素,end='' 会使换行的值并列排到一排 , 不使用 默认end = ' \n ' 就是换行, 当然也可以使用的别分隔符 让打印的数值进行分割。
for循环与range函数一起用时,十分灵活,下边举了几个例子:
打印1~10奇数项
for i in range(1,10,2):
print(i) # 1 3 5 7 9
输入任意整数,判断这个数是否是质数(素数)
质数:只能整除1和它本身的数。。。
素数:判断比他小的数,输入的数 % 比他小的数 余数是否等于0,等于0 则 有别的数能整数输入的数,不是素数。
num = int(input())
for i in range(2,num-1):
if num % i == 0: # python中的 % 也是跟js用法一样
print(str(num)+"不是质数(素数)") # 这里之所以要把num转化为str,因为数字和str不能进行运算
break # 不是质数马上终止循环,否则可能会打印许多,下边同理
else:
print(str(num) + "是质数(素数)")
break
也可以利用range()生成一个list
list = [] # 定义一个空list
for i in range(1,11):
list.append(i) # 用append方法向list末尾添加元素
else:
print(list) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
求1~100和
proxy = 0
for i in range(1,101):
proxy += i
print(proxy) # 5050
求1~5的阶乘之和
下边代码,*= 可以写成 mul = mul * i,与 +=、%=、-= 类似。
# 求1-5的阶乘之和
count = 0
mul = 1
for i in range(1,5):
mul *= i
count += mul
print(count) # 33
这里补充下
循环else子句(在Python中很少用)
所谓循环else子句意思是:只要是正常循环结束时,就会执行else子句,当代码块中有终止循环的break时,循环子句else将不会执行;上边用range生成一个list,也用到了循环else子句。。。下边我们来看个例子:
for i in range(3):
print(i) # 0 1 2
else:
print("END") #END
上边代码,循环正常结束,则else子句就会执行,也就是说,不管循环了多少圈,只要没有代码不被break终止循环,总会执行else子句。
下边代码,循环被break终止,那么最后的else子句不会执行!
for i in range(5):
if i > 3:
break
print(i) # 0 1 2 3
else:
print("END") #不会打印
while循环
与for in循环类似,while循环需要添加判断条件,如果条件为True,执行下边缩进代码块,条件为False退出循环!
num = 10
while num > 5:
print(num) # 10 9 8 7 6
num -= 1
上边代码,while循环时,要判断num是否大于5,为True时,执行下边代码块。
死循环:
我们可以利用这种循环机制,做一个连续输入的demo
while True:
input("请说出您的问题:")
上边代码,条件为True,则执行下边代码块,而input函数的作用是等待用户输入信息,接着打印用户输入信息,打印完之后,又会判断,然而条件永远是True,循环会永远继续下去,也可以使用break(下文有讲到)跳出循环。
做一个我问你答简陋小demo:
while True:
c = input("hi,我是智能机器人小度,请说出您的问题:")
if c == "我叫什么名字":
print("吕星辰呀,嘻嘻")
elif c == "年龄":
print("20岁")
else:
break
上边代码,符合条件即可打印对应的信息,否则退出循环,在python中比较运算符 == 、!= 、>= 、 <= 、> 、 < 与js中用法相同,这里就不讲了!
总结下while循环与for in循环,
1、while终止循环的的条件是:False,或者 里边代码块中使用break
2、for in和while循环都可以在代码块中用break中断循环,而while还可以在判断条件时中断循环。
break
终止循环,用在if条件判断语句里边
for i in range(1,5):
if i > 3:
break
print(i)
这里着重说下,在for循环中,如果使用break强制终止循环,else字句也不会执行,但是我们下边讲的使用continue会执行else字句!!!
for i in range(1,5):
if i > 3:
break
print(i) # 1 2 3
else:
print("END") # 不会执行
#----------------------------
for i in range(1,5):
if i > 3:
continue
print(i) # 1 2 3 END
else:
print("END")
(补充)双for循环结合break使用
a = [[0,2,3,4,5]]
for i in a:
for j in i:
if j == 3:
break
print(j) # 4
上边代码,为什么打印4呢,我们首先要对break有一个深刻的认识,break只是终止当前的for循环,,上边双for循环,只会终止里边的for循环,外层for循环不会终止!!!,所以当j=4时,终止当前循环,而外层的print将会执行,打印的是4。。。
continue
continue与break类似,用在if条件判断语句里边,只不过是中断本次循环,直接开始下一次循环:
下边代码,把1~10的偶数打印出来
for i in range(1,11):
if i % 2 != 0:
continue
print(i) # 2 4 6 8 10
最后在来一个题:
给出一个不超过5位数的数字,判断有几位数;并且依次把 个位、十位、百位、千位、万位 打印出来。
比如:输入12345,打印5位数,最后依次把 5 4 3 2 1 打印出来,大家可以先自己写一写,答案不是唯一的!
num = int(input())
count = 0
if num >= 100:
if num >= 10000:
count = 5
print("您输入的是5位数")
elif num >= 1000:
count = 4
print("您输入的是4位数")
else:
count = 3
print("您输入的是3位数")
elif num >=10:
count = 2
print("您输入的是2位数")
else:
count = 1
print("您输入的是1位数")
newNum = 0
for i in range(count):
newNum = num // 10 # 用输入的数字除十,得到整数位,赋给一个新值
print(num - newNum*10) # 用输入的值 - 新值*10 即可得出输入的值的个位数
num = newNum
补充:
enumerate 枚举函数:
之所以把此函数放在这里,因为我们之前取一个列表(可遍历的数据都可以)的索引与各个项,一般通过for循环来实现的:
count = 0
l = [1,2,3,4]
for i in l:
print(count,i)
count += 1
有了enumerate函数,则更加便利、清晰:
l = [1,2,3,4]
for i,item in enumerate(l):
print(i,item)
enumerate函数,还可以接收第二个参数:
l = [1,2,3]
for i,item in enumerate(l,10):
print(i,item)
# 打印结果:
# 10 1
# 11 2
# 12 3
print(list(enumerate('abc')))
# [(0, 'a'), (1, 'b'), (2, 'c')]
print(list(enumerate('abc',2)))
# [(2, 'a'), (3, 'b'), (4, 'c')]