day3-循环结构

01for循环

循环 - 代码一遍,却可以执行多次

循环分为:for循环,while循环

    1. for循环
    • 语法:
      for 变量 in 序列:
      循环体
    • 说明:
      • for、in - 关键字
      • 变量 - 变量名(可以是没有定义的变量名,也可以是已经定义过的变量名)
      • 序列 - 容器型数据类型的数据,常见序列:字符串,列表,元祖,字典,集合。迭代器,生成器,range等
      • : - 固定写法
      • 循环体 - 和for保持一个缩进的一条或者多条语句。(需要重复执行的代码)
    • 执行过程:
      • 让变量去序列中取值,一个一个的取,取完为止,每取一个值就执行一次循环体。
      • (序列中元素的个数决定for循环的循环次数)
    for x in 'abc':
        print(x, 'world')
        
        
    # a world
    # b world
    # c world
    
    1. range函数 - 产生指定范围的数字序列

    range(N) - 产生 0~N-1的数字序列 例如range(3)—0,1,2

    range(M,N) - 产生M ~ N-1 的数字序列 例如range(10,15)—10,11,12,13,14

    range(M,N,step) - 产生M ~ N-1 的数字序列,step步长 例如range(10,15,2) 10,12,14

for i in range(5):
    print(i, '你好')
# 0 你好
# 1 你好
# 2 你好
# 3 你好
# 4 你好
for i in range(2, 5):
    print(i, '你好')
# 2 你好
# 3 你好
# 4 你好

for i in range(10, 15, 2):
    print(i, '你好')
# 10 你好
# 12 你好
# 14 你好

for i in range(10, 2, -2):
    print(i, '你好')
# 10 你好
# 8 你好
# 6 你好
# 4 你好

# 练习1:打印100以内所有的偶数
for i in range(0, 100, 2):
    print(i)



# 练习2:统计100以内奇数的个数
x = 0
for i in range(1, 100, 2):
    x += 1
print('100以内奇数的个数:',x)

# 练习3:统计100以内能被3整除的偶数的个数
# 方法一
x = 0
for i in range(100):
    if i % 6 == 0:
        x += 1
print('100以内能被3整除的偶数的个数为:', x)
# 方法二
x = 0
for i in range(0, 100, 6):
    x += 1
print('100以内能被3整除的偶数的个数为:', x)


# 练习4:计算1+2+3+...+100的和
x = 0
for i in range(1, 101):
    x += i
print('1+2+3+...+100的和为:', x)

# 练习: 计算100~200之间所有能被3整除但是不能5整除的数和
sum1 = 0
for i in range(100, 200):
    if i % 3 == 0 and i % 5 != 0:
        sum1 += i
print(sum1)

# f2
sum1 = 0
for i in range(102, 201,3):
    if i % 5 != 0:
        sum1 += i
print(sum1)

02while循环

  • while循环

    • 语法:
      while 条件语句:
      循环体
    • 说明:
      • while - 关键字,固定写法
      • 条件语句 - 任何有结果的表达式(除了赋值语句)
      • : - 固定写法
      • 循环体 - 和while保持一个缩进的一条或者多条语句
    • 执行过程:
      • 先判断条件语句是否为True,如果是就执行循环体,;执行完循环体,在判定条件语句是否为True
      • 为True 就再执行循环体。。以此类推,知道条件语句为False结束
    i = 3
    while i > 0:
        print('hello')
        i -= 1
    
  • for和 while的选择

    当循环次数确定的时候用for

    循环次数不确定的时候用while 例如: 提示用户输入密码,直到输入正确


# 练习:提示用户输入密码,直到输入正确为止

"""
请输入密码: 123
请输入密码: 321
请输入密码: 2312
....
请输入密码: 123456
结束
"""

pw = '123456'
flag = 1
aa = input('请输入密码:')
while flag:
    if aa == pw:
        flag = 0
        print('密码正确!')
    else:
        aa = input('密码错误,请重新输入密码:')
        continue


# f1
input_pw = input('请输入密码:')
while input_pw != pw:
    input_pw=input('请输入密码:')

# f2
while input('请输入密码:') != pw:
    pass




# 猜数字

import random
num = random.randint(0, 100)
flag = 1
count = 0
aa = int(input('开始游戏!请输入0~100的数字:'))
while flag:
    count += 1
    if aa == num:
        flag = 0
        if count <= 5:
            score = '天才'
        elif count <= 10:
            score = '普通人'
        else:
            score = '智商告急'
        print('恭喜你!猜中了!你一共猜了', count, '次,你的游戏等级为:', score)
    elif aa > num:
        aa = int(input('猜大了!请重新输入数字:'))
    else:
        aa = int(input('猜小了!请重新输入数字:'))


03循环关键字

循环关键字 - continue break else

  • 1.continue - 结束一次循环

    执行循环体的时候如果遇到continue, 当次循环直接结束,直接进入下一次循环

    for x in range(3):
        print('===')
        print('+++')
        continue     # 循环结束,直接进入下一次循环
        print('---')
    
    # ===
    # +++
    # ===
    # +++
    # ===
    # +++
    
    
    
    
    for x in range(10, 20):
        if x % 3 == 0:
            continue
        print('x=', x)
    # x= 10
    # x= 11
    # x= 13
    # x= 14
    # x= 16
    # x= 17
    # x= 19
    
  • 2.break - 结束整个循环 (只能在循环体里用)

    执行循环体的时候如果遇到break, 整个循环直接结束

    for x in range(3):
        print('===')
        print('+++')
        break     # 循环结束
        print('---')
    print(x)
    # ===
    # +++
    # 0
    
    • 使用while 循环的套路
      • while True:
        每次循环要做的事情
        if 循环结束的条件:
        break
  • 3.else

  • for 变量 in 序列:
    循环体
    else:
    代码段

  • while 条件语句:
    循环体
    else:
    代码段

  • 总结:

    • 1)else的存在不影响原来循环的执行;
    • 2)else后面的代码段在循环自然死亡的时候会执行,循环因为遇到break而结束的时候else后面的代码不执行

for x in range(3):
    print('hello')
else:
    print('world')

# hello
# hello
# hello
# world
for x in range(3):
    print('hello')
    if x == 1:
        break
else:
    print('world')    # 判断循环里有没有遇到break

# 遇到了break,结束循环,else后不执行
# hello
# hello

作业

基础题

  1. 使用for和while循环输出 0~100内所有3的倍数。

    # for循环
    for i in range(0, 100, 3):
        print('0~100内所有3的倍数:', i)
        
    
    # while循环
    i = 0
    while i < 100:
        i += 3
        print('0~100内所有3的倍数:',i)
    
  2. 使用for和while循环输出100~200内个位数或者十位数能被3整除的数。

    # for循环
    for i in range(100,200):
        ge = i % 10
        shi = i // 10 % 10
        # print(ge, shi)
        if ge % 3 == 0 or shi % 3 == 0:
            print('100~200内个位数或者十位数能被3整除的数为',i)
            
    
    #while循环        
    i = 100
    while i < 200:
        ge = i % 10
        shi = i // 10 % 10
        if ge % 3 == 0 or shi % 3 == 0:
            print('100~200内个位数或者十位数能被3整除的数为',i)
        i += 1
    

进阶题

  1. 使用循环计算1*2*3*4*...*10的结果。

    sum = 1
    for i in range(10):
        sum *= (i+1)
    print(sum)
    
  2. 统计100以内个位数是2并且能够被3整除的数的个数。

    count = 0
    for i in range(100):
        ge = i % 10
        if ge == 2 and i % 3 == 0:
            count +=1
            # print(i)
    print('100以内个位数是2并且能够被3整除的数的个数为:',count)
    
  3. 输入任意一个正整数,求他是几位数?

    注意: 这儿不能使用字符串,只能用循环

    count = 0
    num = int(input('请输入一个正整数:'))
    while num > 0:
        ge = num % 10
        count += 1
        num //= 10
    print('该正整数是',count,'位数')
    
  4. 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是

    ⼀个⽔仙花数,因为 1³ + 5³ + 3³ 等于 153。

    for i in range(100, 999):
        ge = i % 10
        shi = i //10 % 10
        bai = i // 100
        if ge**3 + shi ** 3 + bai ** 3 == i:
            print(i)
    

挑战题

  1. 判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)

    flag = 1
    num = int(input('请输入一个大于2的数:'))
    for i in range(2, num//2):
        if (num % i == 0):
            flag = 0
            print('该数不是素数')
            break
    if flag:
        print(num,'是素数')
    
  2. 求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)

    a=1
    b=1
    n=int(input('请输入:'))
    for i in range(n-2):
        c=a+b
        a=b
        b=c
    print('第n个斐波那契数的值是:',c)
    
    
  3. 输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

    for i in range(1,10):
        for j in range(1,i+1):
            print(i,'*',j,'=',i*j,end=',')
        print('')
    
  4. 这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)

for i in range(100):
    for j in range(100):
        for k in range(100):
            if (3*i + 2*j + 0.5*k == 100) and (i + j + k == 100):
                print(i, j, k)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值