day4 分支和循环

day4 分支和循环

if多分支结构

  1. if-elif-else - 不同条件之间存在:其中一个条件成立的时候,别的条件一定不会成立

执行特点:如果前面的条件成立,那么后面的条件不会再判断(后面的条件的判断是在前面的条件不成立的情况下进行的)

# 根据分数打印:优秀(>=90)、良好([75, 90))、中等([60, 75))、不及格(<60)
score = 99
if score >= 90:
    print('优秀')
elif score >= 75:
    print('良好')
elif score >= 60:
    print('中等')
else:
    print('不及格')
  1. 单独使用多个if - 条件之间存在:其中一个条件成立,其他的条件也可能成立

    if score >= 90:
        print('优秀')
    if 75 <= score < 90:
        print('良好')
    if 60 <= score < 75:
        print('中等')
    if score < 60:
        print('不及格')
    

三目运算符

Python中的三目运算符
值1 if 表达式1 else 值2 - 先判断表达式1的结果是否为True,如果是,整个运算表达式的结果是值1,否则是值2

a = 100
x = 10 if a > 100 else 20
print(x)

for循环

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

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

for x in 'abc':
    print(x, '++++')
print('hello!')

range函数:产生一个等差数列的数字序列的函数

range(N) - 产生[0, N)步长为1的数字序列
range(3) -> 0, 1, 2
range(5) -> 0, 1, 2, 3, 4

range(M, N) - 产生[M, N)步长为1的数字序列
range(1, 5)-> 1, 2, 3, 4
range(10, 21) -> 10, 11, 12,…, 20

range(M, N, step) - 产生[M, N)步长为step指定值的数字序列,
range(1, 5, 2) -> 1, 3
range(10, 20, 3) -> 10, 13, 16, 19
range(20, 14, -1) -> 20, 19, 18, 17, 16, 15

# 练习1:利用循环计算1+2+3+...+100的和   -    求和套路
sum1 = 0    # 保存最后的和
for x in range(1, 101):
    sum1 += x   # sum1 = sum1 + x
print(sum1)
# 练习2:统计1000以内能被3整除但是不能被7整除的数的个数
count = 0
for x in range(3, 1000, 3):
    if x % 7 != 0:
        count += 1
print(count)

while 循环

语法:
while 条件语句:
循环体

说明:
while - 关键字,固定写法
条件语句 - 任何有结果的表达式(不能是赋值语法)
: - 固定写法
循环体 - 结构上和while保持一个缩进的一条或者多条语句;逻辑上就是需要重复执行的代码

# 练习:打印10次 'hello!'
x = 0
while x < 10:
    print('hello!')
    x += 1
# 练习(循环次数不确定):提示用户输入密码,直到密码输入正确为止
pw = '123456'   # 原密码
get_pw = None    # 保存输入得到的密码
# 当输入的密码和原密码不相等的时候就提示输入
while get_pw != pw:
    get_pw = input('请输入密码:')

continue和break

continue和break只能在循环体中使用
  • continue - 结束一次循环,当执行循环体的时候遇到了continue,那么这一次循环结束,直接进入下一次循环。
for x in range(10):
    if x % 2:
        continue
    print(x)
  • break - 结束整个循环,执行循环体的时候如果遇到了break,那么整个循环直接结束。
for x in range(1, 10):
    if x % 3 == 0:
        break
    print(x)
while循环和break的配合

初学者的while循环
while True:
需要重复执行的代码
if 循环结束的条件:
break

pw = '123456'
while True:
    get_pw = input('请输入密码:')
    if get_pw == pw:
        break

1. 基础题

  1. 输入年份,如果输入的年是闰年打印'闰年'否则打印'平年'

    year = int (input('请输入年份:'))
    if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0) :
        print('闰年')
    else:
        print('平年')
    
  2. 使用for和while循环输出 0~100内所有3的倍数。

    for x in range (0,101):
        if x % 3 == 0:
        	print(x)
    
    a = 0
    while a <= 100:
        if a % 3 == 0:
            print(a)
            a += 3
    
  3. 使用for和while循环输出100~200内个位数或者十位数能被3整除的数

    for y in range(100,201):
        if (y // 10 % 10 ) % 3== 0 or y % 10 % 3 == 0:
            print(y)
    
    y = 100
    while y <= 200:
        if (y // 10 % 10) % 3 == 0 or y % 10 % 3 == 0:
            print(y)
        y += 1
    
  4. 使用for和while循环统计100~200中十位数是5的数的个数

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

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

sum1 = 0
for f in range(50,151):
    if f % 3 == 0 and f % 5 != 0:
        sum1 += f
print(sum1)
sum1 = 0
f = 50
while f  < 151:
    if f % 3 == 0 and f % 5 != 0:
        sum1 += f
    f += 1
print(sum1)

2. 进阶题

  1. 使用循环计算1*2*3*4*...*10的结果。
u = 1
m = 1
while m <= 10 :
    m += 1
    u *= m
print(u)
  1. 统计100以内个位数是2并且能够被3整除的数的个数。

    count = 0
    for m in range(0,101):
        if m % 10 == 2  and m % 3 == 0:
            count += 1
    print(count)
    
  2. 输入任意一个正整数,求他是几位数?

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

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

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

n = 100
while n < 1000:
    sum1 = (n % 10) ** 3 + (n % 100 // 10) ** 3 + (n // 100) ** 3
    if  sum1 == n:
        print(n)
    n += 1

3. 挑战题

  1. 判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
num = 8
for x in range(2, int(num**0.5) + 1):
    if num % x == 0:
        print(num, '不是素数!')
        break
else:
    print(num, '是素数!')
  1. 求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)

  2. 输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

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

for x in range(101):
    for y in range (101):
        z = 100 - 3*x + 2*y
        if x + y + z == 100 and  x >= 0 and y >= 0 and z >=0:
                print ('大马:',x ,'中马:',y , '小马:',z )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值