day4 分支和循环以及作业

二 分支和循环

2.1 分支结构

1.程序执行过程:
默认情况下程序从上往下一条一条的执行,每一条语句都会执行,并且只会执行一次。

2.分支结构(if) - 让程序根据条件执行代码

(1)if单分支结构 - 如果xx就xx(满足条件执行某个操作,条件不满足的时候这个操作不执行)

"""
语法:
if 条件语句:
    代码段

说明:
1)if       -   关键字;固定写法
2)条件语句   -   可以是任何有结果的表达式(比如:具体的数据、运算表达式、已经定义过的变量,只要赋值语句不行);
                一般将布尔的表达式作为条件
3):         -   固定写法(注意输入法问题)
4)代码段     -   结构上,就是和if保持一个缩进或者多条语句(至少一条!!!);
                 逻辑上,就是满足条件才会执行代码

执行过程:先判断条件是否成立(如果条件语句的结果不是布尔值,就转换成布尔值看是否是True),如果成立就执行代码段;条件不成立,代码段就不执行。
"""
num=231
if num%2:
    print('===') #没有结果

num=230
if num%2:
    print('===') #===

(2)if双分支结构 - 如果xxx就xxx,否则就xxx(条件成立执行某个操作,不成立就执行另外一个操作)

"""
语法:
if 条件语句:
    代码段1(满足条件执行的代码)
else:
    代码段2(不满足条件执行的代码)
"""
# 练习1:根据age的值打印成年或者未成年
age = 29
if age >= 18:
    print('age成年')
else:
    print('age未成年')

# 练习2:根据year的值打印'闰年'或者'平年'
year = 2004
if (year % 4 == 0 and year % 100 != 0) or (year % 400 ==0):
    print('year是闰年')
else:
    print('year是平年')

(3)if多分支结构 - 如果xxx就xxx,如果xxx就xxx…(根据不同的条件做不一样的事情)

"""
方法1:直接多个单分支结构(多个条件之间不存在‘其中一个条件成立,另外的条件就不成立’的情况)
if 条件1:
    代码段1
if 条件1:
    代码段2
if 条件1:
    代码段3

方法2:使用elif对应的对分支结果
if 条件1:
    代码段1
elif 条件1:
    代码段2
elif 条件1:
    代码段3
...
else:
    代码段N

注意:方法2后面的条件是在前面的条件不成立的基础上进行判断的;如果前面某个条件成立,后面的条件不会再判断。
"""

案例:根据百分制分数,给学生打等级:A(大于等于90)、B([80,90—))、C([60,80))、D(小于60)

# 方法1:
score = 95
if score >=90:
    print('A')
if 80 <= score <90:
    print('B')
if 60 <= score <80:
    print('C')
if score < 60:
    print('D')

# 方法2:
score = 95
if score >=90:
    print('A')
elif 80 <= score <90:
    print('B')
elif 60 <= score <80:
    print('C')
else:
    print('D')

2.if嵌套(if分支结构的内部又有分支结构)

案例:如果num是偶数就打印偶数,是奇数打印奇数,如果num能被4整除,打印’4的倍数’(3 -> 奇数 6 -> 偶数 8 -> 偶数、4的倍数)

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

2.2 for循环及应用

1.循环结构 - 让代码重复执行(代码写一遍,重复执行多次) - python实现循环结构的工具:for循环、while循环

2.for循环

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

说明:
1)for  -  关键字;固定写法
2)变量  -  变量名(可以是已经定义过的变量的变量名也可以是没有定义过的变量名)
3)in   -  关键字;固定写法
4)序列  -  必须是容器型数据类型的数据,例如:字符串、列表、元祖、集合、字典、range、迭代器、生成器等。
5):     -  固定写法
6)循环体 -  结构上,循环体就是和for保持一个缩进的一条或者多条语句(至少一句)
            逻辑上,就是需要重复执行的代码

执行过程:让变量去序列中取值,一个一个的取,去完为止,每取一个值就执行一次循环体
"""

3.range函数 - 创建等差数列

"""
1)range(N)        -   产生[0,N)的等差数列,差是1
                       例如:range(5) - 0,1,2,3,4
                       range(3) - 0,1,2
2)range(M,N)      -   产生[M,N)的等差数列,差是1
                       例如:range(5,10) - 5,6,7,8,9
3)range(M,N,step) -    产生[M,N)的等差数列,差是step
                        例如:range(9,0,-2) - 9,7,5,3,1
                             range(0,9,2) - 0,2,4,6,8
"""

4.累计求和

求和套路:

1)准备数据

2)定义变量保存最后的和(变量的默认值是0)

3)通过循环依次获取求和对象,得到一个求和对象就往保存和的变量中加一个

# 案例:计算1+2+3+...+100的和
total = 0
for i in range(1,101):
    total += i
print(total)

# 练习1:求2+3+4+...+50的和
sum1 = 0
for i in range(2,51):
    sum1 += i
print(sum1)

# 练习2:求3+6+9+12+...+99的和
sum2 = 0
for i in range(3,100,3):
    sum2 += i
print(sum2)

# 练习3:求100以内所有偶数的和
sum3 = 0
for i in range(0,101,2):
    sum3 += i
print(sum3)

# 练习4:求100以内所有能被3整除但是不能被5整除的数的和
# 方法1:
sum4 = 0
for i in range(0,101):
    if i % 3 == 0 and i % 5 != 0:
        sum4 += i
print(sum4)

# 方法2:(直接在数据上进行筛选)
sum4 = 0
for i in range(3,100,3):
    if i % 5 != 0:
        sum4 += i
print(sum4)

# 练习5:已知列表list1,求列表中所有数字的和
# list1 = [10, 1.23, 'abc', True, 20, 'mn', None]
# 求10+1.23+20
sum5 = 0
list1 = [10, 1.23, 'abc', True, 20, 'mn', None]
for i in list1:
    if type(i) == int or type(i) == float:
        sum5 += i
print(sum5)

5.统计个数

1)定义变量保存最后的个数(变量默认值是0)
2)通过循环获取每一个统计对象,获取到一个统计对象,个数就在原来的基础上加1

# 案例1:统计100以内偶数的个数
count = 0
for i in range(0,100,2):
    count += 1
print(count)

# 案例2:统计nums中偶数的个数
nums =[21,23,44,89,70,66,55]
count = 0
for i in nums:
    if i % 2 == 0:
        count += 1
print(count):

# 练习1:统计scores同不及格学生的人数
scores = [99, 80, 67, 55, 40, 81, 72, 51]
count = 0
for i in scores:
    if i < 60:
        count += 1
print(count)

# 练习2:统计nums中个位数大于5的数的个数
nums = [21, 23, 44, 89, 70, 66, 55]
count = 0
for i in nums:
    if i % 10 > 5:
        count += 1
print(count)

2.3 while循环

1.while循环

"""
语法:
while 条件语句:
    循环体(需要重新执行的代码)

执行过程:不断判断条件语句是否为True,如果是就执行循环体,如果不是循环直接结束。
         (控制次数的方式:保证条件一开始就是True,经历过指定次数以后条件会由True变成False)
         死循环 - 条件语句一直都是True
"""
num = 0
while num <= 99:
    num += 1
    print(num)

2.for循环和while循环的选择

"""
如果循环次数确定使用for循环;如果循环次数不确定使用while循环。

循环次数不确定 - 程序员写代码的时候无法确定这个循环会重复多少次(次数由使用程序的用户决定)
"""
password = 123456
key = None
while key != password:
    key = input('请输入密码(6位):')

day4分支和循环作业

基础题

  1. 根据输入的成绩的范围打印及格 或者不及格

    #方法1:
    score = int(input('请输入成绩:'))
    score_1 = '及格' if score >= 60 else '不及格'
    print(score_1)
    
    #方法2:
    score = int(input('请输入成绩:'))
    if score >= 60:
        print('及格')
    else:
        print('不及格')
    
  2. 根据输入的年纪范围打印成年或者未成年,如果年龄不在正常范围内(0~150)打印这不是人!

    age = int(input('请输入你的年龄:'))
    if 0 <= age < 18:
        print('未成年')
    elif 18 <= age <= 150:
        print('成年')
    else:
        print('这不是人')
    
  3. 输入两个整数a和b,若a-b的结果为奇数,则输出该结果,否则输出提示信息a-b的结果不是奇数

    a = int(input('请输入整数a:'))
    b = int(input('请输入整数b:'))
    if (a - b) % 2 == 1:
        print('a-b是奇数,它的的结果为:',a-b)
    else:
        print('a-b的结果不是奇数')
    
  4. 使用for循环输出 0~100内所有3的倍数。

    for i in range(3,100,3):
        print(i)
    
  5. 使用for循环输出100~200内个位数或者十位数能被3整除的数。

    for i in range(100,200):
        if ((i % 10) % 3 == 0 and i % 10 != 0) or (i // 10 % 10 % 3 == 0 and i // 10 % 10 != 0):
            print(i)
    
  6. 使用for循环统计100~200中十位数是5的数的个数

    count = 0
    for i in range(100,200):
        if i // 10 % 10 == 5:
            count += 1
    print(count)
    
  7. 使用for循环打印50~150中所有能被3整除但是不能被5整除的数

    for i in range(50,150):
        if i % 3 == 0 and i % 5 != 0:
            print(i)
    
  8. 使用for循环计算50~150中所有能被3整除但是不能被5整除的数的和

    sum1 = 0
    for i in range(50,150):
        if i % 3 == 0 and i % 5 != 0:
            sum1 += i
    print(sum1)
    
  9. 统计100以内个位数是2并且能够被3整除的数的个数。

    count = 0
    for i in range(0,100):
        if i % 10 == 2 and i % 3 == 0:
            count += 1
    print(count)
    

进阶题

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

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

    num = str(input('请输入正整数:'))
    count = 0
    for i in num:
        count += 1
    print(f'这个正整数是{count}位数')
    
  2. 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如: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)
    
  3. 判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)

    num = int(input('请输入整数:'))
    if num >= 2:
        if num == 2:
            print(f'{num}是素数')
        else:
            for i in range(2,num):
                if num % i == 0:
                    print(f'{num}不是素数')
                    break
            else:
                print(f'{num}是素数')
    else:
        print('不是素数')
    
  4. 输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

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

    for i in range(0,101):
        for j in range(0,101):
            for z in range(0,101):
                if 6 * i + 4 * j + z == 200 and i + j + z == 100:
                    print(f'需要大马{i}匹,需要中马{j}匹,需要小马{z}匹')
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值