Python多分支结构和循环(3.4)

多分支结构和循环

1. if

if的 多分支结构 根据不同条件做不同事情,

注意:其中一个条件成立了,其他的都不会成立

语法:
if 条件语句1:
代码段1:
elif 条件语句2::
代码段2:
elif 条件语句3::
代码段3:

else:
代码段N

练习:根据分数对成绩进行评级

def level():
    grade=int(input('输入成绩,获得评级:'))
    if grade<0 or grade>100:
        print('你输入的分数有误!')
    elif grade>=90:
        print('您的评级是A!')
    elif grade>=80:
        print('您的评级是B!')
    elif grade>=60:
        print('您的评级是C!')
    else:
        print('您的评级是D!')
level()

练习:进校标准(无因果关系的情况下,写多个if就好)

score=492
grade='A'
if score>500:
    print('进普通班级')
if grade=='A':
    print('进特长班')

练习:判断正常,偏瘦,偏重(公式有问题,怎么都是偏瘦)

def judge():
    height, weight = map(float, input('请输入身高(m)和体重(kg),注意用空格隔开:').split())
    result=weight / (height ** 2)
    if result >= 24.9:
        print('正常,完美!')
    elif result >= 18.5:
        print('偏瘦,加油,还有待提高!')
    else:
        print('偏胖,请勿熬夜和暴饮暴食!')
judge()

练习:判断一个数是否是偶数,如果是打印’偶数’否则打印’奇数’,同时判断这个数是否是4的倍数,如果是打印’4的倍数’

def judge_1():
    num=int(input('请输入数字:'))
    if num%2:
        print('是奇数')
    if num%2==0:
        print('是偶数')
        if num%4==0:
            print('是4的倍数')
judge_1()

2. for

语法:
for 变量 in 序列:
循环体

说明:
1)for ,in -关键字:固定写法
2)变量 - 变量名
3)序列 - 容器型数据类型的数据,例如:字符串,列表,字典,元组,集合,迭代器,生成器
4)循环体 -和for保持一个缩进的一条或多条语句;循环体就是需要重复执行的代码
执行过程:
让变量去序列中取值,一个一个的取,取完为止,每取一个就执行一次循环体(系列中元素的个数决定了循环的次数)

range()的用法:

range(N) - 产生一个[0,N)的数字序列 N > 0
range(M,N) - 产生一个[M,N)的数字序列 M < N
range(M,N,step) - 产生一个[M,N)的数字序列
step为步长(每次数字增加的值) M < N
:注意步长可以为负

for x in range(10,0,-1):
    print('x:',x)

练习:统计100以内,能被3整除的数的个数

count=0
for i in range(0,100,3):
    count+=1
print('100以内,能被3整除的数的个数:',count)

练习:统计100以内,能被3整除且不能被5整除,的数的和

sum=0
for i in range(3,101,3):
    if i%3==0 and i%5:
        sum+=i
print('1~100以内,能被3整除且不能被5整除,的数的和是:',sum)

3. while

语法:
while 条件语句:
循环体
说明:
1)while - 关键字;固定写法
2)条件语句 - 任何有结果的表达式
3)循环体 - 和while 保持一个缩进的一或多条语句
循环体就是需要重复执行的代码块

执行过程,判断条件语句,为True就执行,直到执行到为False,停止循环

练习:打印1~100 用for循环更简单

i=1
while(i<=100):
    print('i:',i)
    i+=1

练习:输入密码

def code_judge():
    code=''
    while 1:
        code=input('请输入密码:')
        if code=='abc123':
            print('密码正确!')
            break
        else:
            print('密码错误,请重新输入!')
code_judge()

练习: 猜数字:随机产生一个数(100以内),去猜,直到猜对

from random import randint
def caiMi():
    num = randint(0, 99)
    while 1:
        x = int(input('猜数字,请输入0~99之间的数:'))
        if x == num:
            print('猜对了!')
            break
        elif x < num:
            print('猜错了,再往大猜猜!')
        else:
            print('猜错了,再往小猜猜!')
caiMi()

4. 重要知识点的补充

1. continue 和 break

只能在循环体里边使用
continue:结束一次循环(遇到continue,当次循环结束,进入下次循环判断)
break:结束整个循环(遇到break,整个循环直接结束)

练习:熟悉continue和break的用法

关于中断 continue , break ,for 或者 while 循环中 else 的使用方法
for i in range(4):
    print(i,'+++++')
    if i%2==0:
        #continue  #当前for循环后面的代码不执行,继续下一次的for循环
        break      #直接退出for循环代码块
    print(i,'=====')
else:
    print('无异常') #常用来判断程序中for 或者 while 循环是否正常执行

2.重要!!else 在for 或者while循环中的使用

python中完整的for,while循环后面都有else结构,该结构不影响原来循环的影响
循环自然死亡,结束后,else后面的代码段会执行,
循环遇到break而结束,else代码段不会执行

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

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

练习:熟悉else的用法

for x in range(5):
    print('xxx')
    # break
    print('hello')
else:
    print('无异常')

作业:

基础题

  1. 根据输入的成绩的范围打印及格 或者不及格
def marginal():
    grade=int(input('请输入成绩(0~100):'))
    if grade>=60:
        print('恭喜!你合格了!!')
    else:
        print('没有及格,请继续努力!')
marginal()

结果如图:
在这里插入图片描述
在这里插入图片描述

  1. 根据输入的年纪范围打印成年或者未成年,如果年龄不在正常范围内(0~150)打印这不是人!
    #先判断是不是人
    #再判断是否成年,没有就是未成年
def adult():
    age=int(input('请输入年龄:'))
    if age>=0 and age<=150:
        if age<18:
            print('未成年!')
        else:
            print('你好,已成年!')
    else:
        print('这不是人!')
adult()

结果:
在这里插入图片描述
在这里插入图片描述

  1. 输入两个整数a和b,若a-b的结果为奇数,则输出该结果,否则输出提示信息a-b的结果不是奇数
def odd():
    a,b=map(int,input('判断两个整数(a,b)的差是否为奇数(用空格隔开):').split())
    if (a-b)%2: #是奇数
        print(a-b)
    else:
        print('a-b的差不是奇数')
odd()

结果图:
在这里插入图片描述
在这里插入图片描述

  1. 使用for和while循环输出 0~100内所有3的倍数。
for i in range(3,100,3):
    print(i)
num=3
while num<=100:
    print(num)
    num+=3

法二

num1=0
while 1:
    if num1<=100:
        print(num1)
        num1+=3
    else:
        break
  1. 使用for和while循环输出100~200内个位数或者十位数能被3整除的数。
for i in range(100,200):
    a=i%10 #取个位数
    b=i//10%10 #取原十位数
    if a%3==0 or b%3==0:
        print(i)
n=100
while n<201:
    c=n%10
    d=n//10%10
    if c%3==0 or d%3==0:
        print(n)
    n+=1
n1=100
while 1:
    if n1%3%3==0 or (n1//10%10)%3==0:
        print(n1)
    n1+=1
    if n1>=200:
        break

进阶题

  1. 使用循环计算1*2*3*4*...*10的结果。
product=1
for i in range(1,11):
    product*=i
print('乘积是:',product)

结果:
在这里插入图片描述

  1. 统计100以内个位数是2并且能够被3整除的数的个数。
count=0
for i in range(12,101):
    if i%10==2 and i%3==0:
        count+=1
print('count:',count)

法二(补充)

count1=0
for i in range(12,100,10):
    if i%3==0:
        count1+=1
print('count1:',count1)

结果:
在这里插入图片描述

  1. 输入任意一个正整数,求他是几位数?

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

def how_many():
   num=len(input('请输入一个整数,我来判断有几位:'))
   print('这个数有',num,'位:')
how_many()
def how_many1():
    num=int(input('请输入一个整数,我来判断有几位:'))
    count=0
    if num==0:
        print('输入的数有1位')
    else:
        while num != 0:
            count += 1
            num //= 10
        print('输入的数有',count,'位',sep='')
how_many1()

法二:用死循环来写更简洁

def how_many2():
    num=int(input('请输入一个整数,我来判断有几位:'))
    count=0
    while 1:
        num//=10
        count+=1
        if num==0:
            break
    print('输入的数有',count,'位',sep='')
how_many2()

结果:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  1. 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是

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

for i in range(100,1000):
    a=i//100 #百位
    b=i//10%10 #十位
    c=i%10 #个位
    if a**3+b**3+c**3==i:
        print(i)

结果:

在这里插入图片描述

挑战题

  1. 判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
def prime_num():
    num=int(input('判断输入的数是否为质数:'))
    if num==2:
        print(num,'是质数!')
        return
    for i in range(2,num):
        if num%i==0:
            print(num,'不是质数!')
            break
    print(num,'是质数!!')
prime_num()

法二:对1进行数学优化

import math
def prime_num1(): #也可利用for-else结构(非必要)
    num=int(input('判断输入的数是否为质数:'))
    if num==2:
        print(num,'是质数!')
        return
    for i in range(2,math.ceil(num**0.5)+1):
        if num%i==0:
            print(num,'不是质数!')
            break
    else:
        print(num,'是质数!!')
prime_num1()

结果:
在这里插入图片描述

  1. 求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)
    斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368
def fibo_n():
    result=[0]
    a,b=0,1
    num=int(input('你想输出菲波那切数列的第n个数的值:'))
    for i in range(num):
        a,b=b,a+b
        result.append(a) #从第二个开始添加
    print('菲波那切数列的第',num,'个数的值是:',result[num-1])
    # print('菲波那切数列的第n+1个数的值是:',b)
fibo_n()

法二:可以不用数组保存,直接输出

def fibo_n1():
    a,b=1,1
    num=int(input('你想输出菲波那切数列的第n个数的值:'))
    if num>2: #num大于2,开始斐波那切数列的迭代
        for i in range(num-2):
            a, b = b, a + b
        print('你想输出菲波那切数列的第n个数的值:',a+b)
    else:
        print('你想输出菲波那切数列的第n个数的值为1:')
fibo_n1()

法三:利用递归输出菲波那切数列进行判断

def recur_fibo(n):
    if n<=1:
        return n
    else:
        return (recur_fibo(n-1)+recur_fibo(n-2))
def fibo_num2():
    num=int(input('您要输出第几项?:'))
    print('第{}项为:{}'.format(num,recur_fibo(num)))
fibo_num2()

结果:
在这里插入图片描述

  1. 输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
    法一
for i in range(1,10):
    for j in range(1,i+1):
        print('{}*{}={}'.format(j,i,j*i),end=' || ')
    print()

法二:利用format ,代码更加易读

for i in range(1,10):
    for j in range(1,i+1):
        print('{}*{}={}'.format(j,i,j*i),end=' || ')
    print()

法三:

for i in range(1,10):
    for j in range(1,i+1):
        print('%d*%d=%d'%(j,i,j*i),end=' || ')
    print()

结果:
在这里插入图片描述

  1. 这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)
    分析:大+中+小=100
    大 * 3 + 中 * 2 + 2*小 * 1
    大:最多100//3
    中:最多50
    小:最多100
for big in range(1,100//3+1):
    for middle in range(1,51):
        small=100-big-middle
        if big*3+middle*2+small*0.5==100 and big+middle+small==100:
            print('大中小分别为:{},{},{}'.format(big,middle,small))

法二:三循环

horse={'big':3,'middle':2,'small':0.5}
count1,count2,count3=0,0,0
for big in range(1,100//3+1):
    for middle in range(1,51):
        for small in range(2,101,2):
            if big * 3 + middle * 2 + small * 0.5 == 100 and big + middle + small == 100:
                print('大中小分别为:{},{},{}'.format(big, middle, small))

结果:
在这里插入图片描述

今天新学了print 中 format的用法

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值