6. Python分支结构和循环

分支结构:Python中的分支结构只有if语句

if语句
  1. 结构1:满足某个条件才执行某段代码
    a.语法:
    if 条件语句:
    代码段
    其他语句

​ b.说明:if - 关键字
​ 条件语句 - 可以是一个具体的数据,也可以是一个已经赋值过的变量,或者是运算表达式(不能是赋值语句)
​ :- 固定写法
​ 代码段 - 一条或者多条和if语句保持缩进的任何语句

c.执行过程:先判断条件语句的结果为是否位True(如果不是布尔就先转换成布尔),如果为True就执行代码段,在执行其他代码段,否则直接执行其他语句
补充:布尔值转换 - python中的所有的数据都能转换成布尔,所有为0为空的值都会转换成False, 其他都是True

  1. 结构2: 条件有多个(有关联)的时候执行不同的代码段(if - elif - elif -…-else)
    a.语法
    if 条件语句1:
    代码段1
    elif 条件语句2:
    代码段2

else:
代码段N

b.执行过程:按顺序判断条件语句是否为True,如果为True就执行该条件语句的代码段,
满足则跳出结构,不满足则往下继续判断。

if语句嵌套
在if结构中的if、else、elif后面的代码段中,还可以写其他的if语句

Python中有两种循环: for-in循环和while循环

for循环
  1. 语法:
    for 变量 in 序列:
    循环体
    其他语句

2)说明
for — 关键字
变量 — 标识符
in — 关键字
序列 — 容器型数据类型的数据,例如:字符串、列表、元组、字典、集合、迭代器、生成器、range
循环体 — 和for保持一个缩进的一条或者多条语句;循环体种的代码就是需要重复执行的代码

3)执行过程:让变量从序列种一一取值,每取一个值执行一个循环体,直到取完为止。
(python种控制for循环的次数,是通过控制in后面序列元素的个数来控制的)

range函数的使用—产生指定范围内的数字序列

range(N) — 产生 0~N-1 次的整数数列
range(M, N) — 产生 M~N-1 的整数数列
range(M, N, step) — 从M开始每次加step产生下一个数,直到N的前一个数为止

while循环
  1. 语法:
    while 条件语句:
    循环体
    2)说明
    while — 关键字
    条件语句 — 只要是有结果的表达式就可以(除赋值语句)
    循环体 — 和while保持一个缩进的一条或者多条语句

3)执行过程
先判断条件语句是否为True,如果为True,就执行循环体;执行完
循环体以后在判断条件语句是否为True,为True又执行循环体,
直到判断条件语句的结果为False的时候,整个循环结束,执行后面的语句

for和while循环怎么选择?

for:循环次数确定的时候
while:循环次数不确定和死循环的时候

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

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

执行过程:如果循环自然结束,else后面的代码段会执行,如果循环因为是遇到break而结束,else后面的代码段不会执行

continue

continue是只能出现在循环体中的关键字;当执行循环体的时候遇到continue,当次循环结束,执行进入下次循环的判断

break

只能用在循环体中的关键字;执行循环体的时候遇到break,整个循环直接结束

实例

1.求1到100之间所有数的和、平均值
sum1 = 0
count = 0
for num in range(1, 101):
    sum1 += num
    count += 1
print('和:',sum1, '平均值:',sum1/count)


sum1 = 0
count = 0
num = 1
while True:
    sum1 += num
    count += 1
    if num == 100:
        break
    num += 1
print('和:',sum1, '平均值:',sum1/count)


2.计算1-100之间能3整除的数的和
sum1 = 0
for num in range(1, 101):
    if num % 3 == 0:
        sum1 += num
print('和:', sum1)

sum1 = 0
for num in range(3, 100, 3):
    sum1 += num
print('和:', sum1)


3. 求斐波那契数列中第n个数的值:1,1,2,3,5,8,13,21,34....
# 有一对兔子,生长三个月后。开始生第一对兔子,并且以后每月生一对兔子,小兔子生长三个月后,也开始生兔子,问N个月后兔子的总数量
"""
1月兔   2月兔   3月兔     总量      月份
1        0       0        1      1
0        1       0        1      2
1        0       1        2      3
1        1       1        3      4
2        1       2        5      5
3        2       3        8      6
"""
pre_1 = 1    # 前第一个数
pre_2 = 1    # 前第二个数
n = 8     # 求的第n个数
current = 1   # 表示当前数
for x in range(n-2):
    current = pre_1 + pre_2
    pre_2 = pre_1
    pre_1 = current
print('第n个数:', current)


4.判断101-200之间有多少个素数,并输出所有素数。
素数(质数): 除了1和它本身不能被其他数整除的数就是素数
# 方法一:  先取出101-200之间的每一个数
count = 0
for num in range(101, 201):
    # 判断是否是素数: 让这个从2开始除,除到这个数减一, 看2~num-1之间有没有一个能被整除的
    for x in range(2, int(num**0.5)+1):
        if num % x == 0:
            # print(num, '不是素数')
            # 遇到break不是素数,没有遇到break肯定是素数
            break
    else:
        print(num, '是素数')
        count += 1

print('101到200之间素数的个数:', count)

# 方法二:
count = 0
for num in range(101, 201):
    flag = True   # 假设当前数是素数
    for x in range(2, num):
        if num % x == 0:
            flag = False    # 如果在2~num-1之间遇到一个能够被整除的数,假设不成立
            break

    if flag:
        count += 1
        print(num, '是素数')
print('101到200之间素数的个数:', count)


5. 打印出所有的⽔仙花数,所谓⽔仙花数是指⼀个三位数,其各位数字⽴⽅和等于该数本身。
例如:153是⼀个⽔仙花数,因为153 = 1^3 + 5^3 + 3^3
for num in range(100, 1000):
    ge = num % 10
    shi = num // 10 % 10
    bai = num // 100
    if num == ge**3 + shi**3 + bai**3:
        print(num, '是水仙花数')

6.有⼀分数序列:(1/1),2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的第20个分数
规律: 后一个分数的分子 = 前一个分数的分子 + 分母; 后一个分数的分母 = 前一个分数的分子
fen_zi = 1
fen_mu = 1
for _ in range(20):
    fen_zi, fen_mu = fen_zi + fen_mu, fen_zi

print(fen_zi, '/', fen_mu)
"""
fen_zi = 1
fen_mu = 1
_ = 0; fen_zi, fen_mu = 1+1, 1 = 2,1
_ = 1; fen_zi, fen_mu = 2+1, 2 = 3,2
"""

补充:交换两个变量的值
# 其他语言:
a = 10
b = 20
temp = a
a = b
b = temp
print(a, b)

# python
a = 10
b = 20
a, b = b, a   # a, b = 20, 10
print(a, b)


a = 10
b = 20
c = 30
# c=a, b=c, a=b
a, b, c = b, c, a
print(a, b, c)

7. 给⼀个正整数,要求:1、求它是⼏位数 2.逆序打印出各位数字
# 123 // 10 = 12 // 10 = 1//10 = 0
# 2617 // 10 = 261 // 10 = 26 // 10 = 2 // 10 = 0
# 方法一
num = 1226790
count = 0
while True:
    count += 1
    print(num % 10)
    num //= 10
    if num == 0:
        break

print(count)

# 方法二
print('==============')
num = 1226790
print(len(str(num)), str(num)[::-1])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值