第三节课:循环
目录
1.for循环结构
2.嵌套循环
3.旗标法
4.练习题
一、for循环
1.for 循环结构
for 变量 in range(起始,终止,步长):
循环体
(终止位置取不到)
执行顺序:
1)定义变量
2)给变量赋值
3)变量和终止数值比较,若满足终止条件则停止循环
4)做循环体
5)变量自加一个步长
6)执行3
例:
for i in range(1,9,1):
print(i)
"""
执行顺序
1.i
2.i=0
3.i<9
4.print
5.i+=1
6.执行3
"""
#累加
sum=0
for i in range(1,9,1):
sum += i
print(sum)
#累乘
sum=1
for i in range(1,9,1):
sum *= i
print(sum)
2.嵌套循环:
外层循环:行
内层循环:列
例:
for i in range(0,4,1):
for j in range(0,i+1,1):
print("*",end=" ") #不换行打*
print() #换行
输出:
*
* *
* * *
* * * *
for i in range(0,4,1): #行
for k in range(0,3-i,1): #打印空格
print(" ",end=" ")
for j in range(0,i+1,1): #列
print("*",end=" ")
print()
输出结果:
*
* *
* * *
* * * *
3.旗帜法(立flag)
例:判断a是否为素数
a = 8
flag = False #立flag,使flag为假
for i in range(2,a//2+1): #因为一个属的因字数最大不会超过这个数本身的一半,所以终止为a//2+1
if a%i == 0: #如果a有因子数,则flag为真
flag = True
if flag : #if后加表达式,表达式的结果为bool型(flag结果也为bool型)
print("不是素数") # 因此若flag为假执行else,反之执行if
else:
print("是素数")
break:提前结束循环
abs(i):绝对值
循环最多有三层
**
练习题:
**
# 1.
# 输出图型
# *
# **
# ** *
# ** **
# ** ** *
# ** ** **
for i in range(1,7,1):
for j in range(1,i+1):
print("*",end="")
print()
# 2
# 输出图型
# ** ** ** *
# ** ** **
# ** ** *
# ** **
# ** *
# **
# *
for i in range(7,0,-1):
for j in range(i,0,-1):
print("*",end="")
print()
# 3
# 把12题的两个图型合成一个。
for i in range(1, 7, 1):
for j in range(1, i + 1):
print("*", end="")
print()
for i in range(7, 0, -1):
for j in range(i, 0, -1):
print("*", end="")
print()
# 4.
# 编写一个九九乘法法
for i in range (1,10,1):
for j in range(1,i+1):
print(j,"x",i,"=",i*j,end=" ")
print()
# 5
# 百钱买百鸡,有100元钱,要去买100只鸡,公鸡5元一只,母鸡3元一只,小鸡1元3只,问公,母,小鸡各买多少只。
# 提示: a + b + c = 100只
# # 5a + 3b + 1 / 3c = 100钱
for a in range(0,21,1):
for b in range(0,35,1):
for c in range(0, 301, 1):
if a + b + c ==100 and 5*a + 3*b + 1/3*c ==100:
print("买",a,"只公鸡",b,"只母鸡",c,"只小鸡。")
# 6
# 星型图案
# *
# ** *
# ** ** *
# ** ** ** *
# ** ** ** ** *
for i in range(0,9,1):
for j in range(0,8-i,1):
print(" ",end="")
for k in range(0,i+1,1):
print("*",end=" ")
print()
# 7
# 把上图形再倒过来,合成一个菱形图案
n=9
for i in range(-int(n/2),int(n/2)+1,1):
print(" "*abs(i),"*"*abs(n-abs(i)*2))
# 8
# 打印出一个空菱形图案
a = int(input("n="))
b = a
c = a
print(" " * (a - 1), "*")
for i in range(2, a+1): # 先打印正三角,由空格和*根据规律组成
print(" " * (b - 1) + "*" + " " * (2 * i - 3) + "*")
b -= 1
if i == a: # 临界点,当打印到此,开始打印倒三角
for y in range(2, a):
print(" " * y+"*"+" "*(2*c-5)+ "*" )
c -= 1
print(" "*a+"*")
# 9.
# 求300 - 400
# 之间的素数
import math
for i in range(300,401,1):
for j in range(2,int(math.sqrt(i)+1)):#开放强行取整
if i%j == 0:
break
else:
print(i)
# 10
# 输出一个平行四边形的图案
n=int(input("请输入边长:"))
for i in range(0,int(n/2)+1,1):
for j in range (0,i,1):
print(" ",end="")
for k in range(0,n-1):
print("*",end=" ")
print()
# 11
# 用while做
# 鸡兔同笼。鸡兔一共有50只,脚一共有160只,问鸡和兔各多少只?要求鸡兔至少一样一只。
for i in range(1,50,1):
if (i*2)+4*(50-i)==160:
print("有",i,"只鸡",50-i,"只兔子")
# 12.
# 计算2 / 1 + 3 / 2 + 4 / 3 +…+(n + 1) / n,写出算法的程序.
n=int(input("请输入n:"))
sun=0
for i in range(1,n+1):
sun += (i+1)/i
print(sun)
#
# 13.2000
# 年我国人口为13亿,如果人口每年的自然增长率为7 %,那么多少年
# 后我国人口将达到15亿?设计一个算法的程序
ren = 13
for i in range(1,100,1):
x = ren*(1+0.07)**i
if x >= 15:
print(i)
break
# 14.
# 给出50个数,1,2,4,7,11,„,其规律是:第1个数是1,第2个数比第1个数大1,第3个数比第2个数大2,第4个数比第3个数大3,„
# ,以此类推.要求计算这50个数的和.先将下面给出的程序框图,再根据程序框图写出程序.
sun=1
x=0
for i in range(0,51,1):
sun+=i
print(sun)
x += sun
print(x)
# 15
# 有个人想知道,一年之内一对兔子能繁殖多少对?于是就筑了一道围墙把一对兔子关在里面。
# 已知一对兔子每个月可以生一对小兔子,而一对兔子从出生后第3个月起每月生一对小兔子。
# 假如一年内没有发生死亡现象,那么,一对兔子一年内(12个月)能繁殖成多少对?
# 分析:兔子的规律为数列,1,1,2,3,5,8,13,21
sun=1
sum=0
b=0
for i in range(1,13):
#sun ,sum=sum ,sun+sum
b=sun
sun = sum
sum=b+sum
print(sum)
# 16.
# 水仙花数(Narcissistic
# number)也被称为超完全数字不变数、自恋数、自幂数,水仙花数是指一个
# n
# 位数(n≥3 ),它的每个位上的数字的
# n
# 次幂之和等于它本身(例如:1 ^ 3 + 5 ^ 3 + 3 ^ 3 = 153), 请通过程序找出所有的3位数的水仙花数(穷举法)
for i in range(100,1000,1):
if (i%10)**3+(i//10%10)**3+(i//100)**3==i:
print(i)
# 17.
# 从控制台输入一个正整数,并进行反转输出
a=int(input("请输入一个正整数:"))
a=str(a)
a=a[-1::-1]
print(a)
1
# 盈盈为了考验令狐冲夺冠的决心,要他说一百遍“我能行!”
for i in range(1,101,1):
i="我能行!"
print(i)
# 2.
# 本金10000元存入银行,年利率是千分之三,每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是多少?
mon=10000
for i in range(1,6,1):
x = mon*(1+0.003)**i
# 3.
# 计算出1—100
# 之间所有能被3整除的整数的和?
sun=0
for i in range(3,101,3):
sun+=i
print(sun)
# 4.
# 计算1000以内所有不能被7整除的整数之和?
sun=0
for i in range(0,1001,1):
sun+=i
print(sun)
su2=0
for k in range(0,1001,7):
su2+=k
print(su2)
print(sun-su2)
# 5.
# 用while做
# 求10到20的累加和
sun=0
for i in range(10,21,1):
sun+=i
print(sun)
# 6.
# 找出一个数的所有因子数
sun=int(input("请输入一个数:"))
for i in range(1,sun,1):
if sun% i == 0:
if sun !=i:
print(i)
# 7.
# 输入一个数,判断这个数是否是素数;
flag=1
sun=int(input("请输入一个数:"))
for i in range(2, sun, 1):#被除了自身和1之外的数整除不是素数
if sun%i == 0 :
flag=0
print("不是素数")
break#不循环
if flag==1:
print("是素数")
# 8
# 定义一个正整数如:1205
# 统计它的各位数字中零的个数,并求各位数字中的最大者。
sun=(input("请输入一个数:"))
print("零的个数有",sun.count("0",0),"个")
sun=int(sun)
n1=sun//1000
n2=sun//100%10
n3=sun%1000%100//10
n4=sun%1000%100%10
print(max(n1,n2,n3,n4))
# 9有1020个西瓜,第一天卖掉总数的一半后又多卖出两个,以后每天卖剩下的一半多两个,问几天以后能卖完
sun=1020
for i in range(1,10,1):
sun=sun/2-2
if sun<=0:
print("第",i,"天之后能买完。" )
break
# 10猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,
# 第二天早上又将剩下的桃子吃了一半,又多吃一个,
# 以后每天都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子。
# 求第一天共摘了多少个?
sun=1
for i in range(1,10,1):
sun=(sun+1)*2
print(sun)
# 11判断一个数是否是完全数(完数指的是一个数的所有因子数的和等于这个数本身,例如
# 6 = 1 + 2 + 3, 即6就是完全数)
sun=int(input("请输入一个数:"))
sun1=0
for i in range(1,sun+1,1):
if sun% i == 0:
if sun !=i:
sun1+=i
if sun == sun1 :
print("是完全数")
elif sun != sun1:
print("不是完全数")
# 12.
# 循环录入某学生5门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示录入错误(使用break)
falg=1
sum=0
for i in range(0,5):
x = int(input("请输入成绩"))
if x<0:
print("录入错误")
break
else:
sum+=x
if falg==1:
print("平均分=" ,sum / 5)
# 13.
# 循环录入python课的学生成绩,统计分数大于等于80分的学生比例(使用continue)
count=0
sum = int(input("请输入总人数:"))
for i in range(0,sum):
x = int(input("请输入成绩:"))
if x>=80:
count+=1
print("占比为:%s"%((count/sum)*100))
版权声明:本文为Scztms原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。