for 语句(循环语句)
作用:
用来遍历可迭代对象元素
语法:
for 变量列表 in 可迭代对象:
语句块1...
else:
语句块2...
语法说明:
1.可迭代对象每次提供一个元素依次赋值给变量列表中的变量,赋值完毕后执行语句块1,重复执行此步骤
2.当可迭代对象不能提供数据时,执行else子句部分的语句块2,然后退出循环
3.else子句部分可以省略
4.当在语句内部用break终止循环时,else子句部分语句块2不会执行
注:可迭代对象是指能依次获取数据元素的对象
示例:
s="abcde"
for x in s:
print("----->",x)
else:
print("程序终止")
s="abcde"
for x in s:
print("----->",x)
if x=='c': # 此时else 子句部分不会执行
break
else:
print("程序终止")
练习
写程序,任意输入一行字符串,打印这个字符串内有多少空格' '
s=input("请输入一行字符串:")
a=0
for x in s:
if x==" ":
a+=1
print(a)
i=0
s=input("请输入一行字符串:")
a=0
length=len(s)
while i < length:
if x==" ":
a+=1
i+=1
print(a)
range函数
作用:
用来创建一个生成一系列整数的可迭代对象(也叫整数序列生成器)
调用格式:
range(stop)
从零开始,每次生成一个整数后加一操作,直至stop为止(不包含stop)
range(start,stop[,step]) 从start开始,每次生成一个整数后移动step,直至stop为止(不包含stop,且step可以为负数)
示例:
range(4)
# 0 1 2 3
range(3,6)
# 3 4 5
range(1,10,2)
# 1 3 5 7 9
range(5,0,-2)
# 5 3 1
range(4,1)
# 空
for x in range(4):
print(x)
# 0 1 2 3
练习:
用 for 执行
2.写一个程序,输入一个开始的整数值用变量begin绑定
输入一个结束的整数值用变量eng绑定
打印从begin到end(不包含end)的每个整数(打印在一行内)
如:
请输入开始值:8
请输入结束值:30
打印结果:
8 9 10...28 29 30
附加思考:
如何实现每5个数字打印在一行
begin=int(input("请输入开始值:"))
end=int(input("请输入结束值:"))
i=1
for a in range(begin,end):
print(a ,end=" ")
if i%5==0:
print()
i+=1
for 语句嵌套:
示意:
for x in "ABC":
for y in "123":
print(x+y)
练习
用 for 循环嵌套打印以下矩形:
(输入一个数n(10以内) 代表矩形的宽度和高度)
打印如下:
请输入:5
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
b=int(input("请输入一个整数(10以内):"))
if 0< b <=10:
for s in range(0,b):
for d in range(1,b+1):
print(s+d ,end=" ")
print()
else:
print("输入有错")
3.用for循环生成一个字符串:
'ABCD...XYZ'并打印
'AcBbCcDd...XxYyZz'并打印
提示:
用chr和ord函数
x=0
for a in range(65,91):
b=97
q=[]
while b<= 122:
q+=chr(b)
b+=1
print(chr(a)+q[x],end=" ")
x+=1
a+=1
4.任意输入一个n代表三角形的高度,打印此形状的三角形
如:输入:4
打印如下:
1
121
12321
1234321
a=int(input("请输入:"))
l=[]
for i in range(1,a+1):
l.append(i)
print((a-i)*' ',end='')
for x in l:
print(str(x),end="")
for d in l[-2: :-1]:
print(d,end="")
print()
5.将第四题打印的三角形变为打印菱形
a=int(input("请输入:"))
l=[]
for i in range(1,a+1):
l.append(i)
print((a-i)*' ',end='')
for x in l:
print(str(x),end="")
for d in l[-2: :-1]:
print(d,end="")
print()
ds=1
while ds<a:
l.pop()
print((ds)*" ",end="")
for r in l:
print(r,end="")
for o in l[-2::-1]:
print(o,end="")
print()
ds+=1
6.有一只小猴子,摘了很多桃
第一天吃了全部桃子的一半,感觉不饱又吃了一个
第二天吃了剩下桃子的一半,感觉不饱又吃了一个
....以此类推
到第十天,发现只剩下一个
问第一天摘了多少桃
a=1
for x in range(1,10):
a=(a+1)*2
print(a)
7.打印完全数
1+2+3=6(6为完全数)
1,2,3都为6的因数(能被一个数x整除的数为y,则y为x的因数)
1*6=6
2*3=6
完全数是指除本身以外的所有的因数之和相加等于自身的数
求4~5个完全数,并打印出来
6 28 496 8128
for x in range(1,100000):
l=[]
for a in range(1,x):
if x%a==0:
l.append(a)
if x == sum(l):
print(x)
方法二
x=1
while True:
sum_yinshu=0
for i in range(1,x):
if s%i==0:
sum_yinshu +=i
if sum_yinshu==x:
print(x,"是完全数")
i+=1
8,算出 100~999 以内的水仙花数(Narissistic Number)
水仙花数是值百位的3次方 加上 十位的3次方
加上个位的3次方等于原数的数字
例如:
153=1**3+5**3+3**3
for x in range(100,1000):
a=x%10
b=(x%100)//10
c=x//100
if x==a**3+b**3+c**3:
print(x)
方法二:
g=[]
for x in range(100,1000):
d=str(x)
a=list(d)
if x==int(a[0])**3+int(a[1])**3+int(a[2])**3:
g.append(x)
print(g)
方法三:
for bai in range(1,10):
for shi in range(10):
for ge in range(10):
x=bai*100+shi*10+ge
if x==bai**3+shi**3+ge**3:
print(x)
9.输入一个整数n 代表结束的数
将1~n之间所有的素数计算出来并存入列表l中
1)最后打印此列表中觉得全部素数
2)打印这些素数之和
c=[]
n=int(input("请输入:"))
for x in range(2,n):
for y in range(2,x):
if x%y==0:
break
else:
c.append(x)
print(c)
print(sum(c))
10.求100以内有哪些整数与自身加1 的乘积再对11求余的结果等于8
打印这些数,将这些数存入列表当中(建议用列表推导式)
a=[x for x in range(1,101) if ((x+1)*x)%11==8]
print(a)
11.计算20个百斐波那契数(fabonacci数)
存于列表中,最后打印这20个数
1,1,2,3,5,8,13,...
(从第三个数起,后一个数是前两个数之和)
d=[1,1,2]
i=1
a=2
while i<18:
f=d[i]+d[ a]
d.append(f)
i+=1
a+=1
print(d)
方法二:
l=[]
a=1
b=1
l.append(a)
l.append(b)
while len(l)<20:
c=a+b
l.append(c)
a=b
b=c
print(l)
continue 语句
作用:
用于循环语句(while,for语句)中,不再执行本次循环内continue之后的语句,重新开始一次新的循环
说明:
1.在while语句中执行continue语句,将直接跳转到whlie语句的真值表达式处重新判断循环条件
2.在for语句中执行continue语句,将会从可迭代对象中取下一个语句,绑定变量后再次进行循环
示例:
打印5以内的整数,但不打印2:
for i in range(5):
if i == 2:
contiue #如果i等于2,重新开始一次新的循环
print(i)
实例:
输入一个开始的数用begin绑定
输入一个结束的数用end绑定
打印begin~end之间所有的奇数
begin=int(input("请输入一个开始的整数:"))
end=int(input("请输入一个结束的整数:"))
for s in range(begin,end):
if s%2==0:
contiue
prlint(s)
begin=int(input("请输入一个开始的整数:"))
end=int(input("请输入一个结束的整数:"))
i=begin
while i<end:
if i%2==0:
i+=1
continue
print(i)
i+=1
练习:
写一个程序,求1~100之间所有不能被5,7,11整除的数的和
d=0
for s in range(1,101):
if s%5==0 or s%7==0 or s%11==0:
continue
d+=s
print(d)