第三节课:循环

第三节课:循环

目录
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版权协议,转载请附上原文出处链接和本声明。