python选择结构

1.选择结构

1.1单分支结构

1.1.1 语法:

if  表达式:
    语句块

1.1.2. 流程图

 

1.1.3 例:输入2个数,输出最大值:

a=int(input())
b=int(input())
max=a
if a<b:
    max=b
print(max)

1.1.4.注意:

  • 表达式:一般表达式,常量,关系表达式,逻辑表达式

  • 优先级:!(非)>算术>关系>and 和or>赋值运算符

  • 规则:逻辑表达式只检测是否为非0或非空字符串或非None就会执行分支

  • 注意:分支语句的缩进

1.2.1.语法:

if 表达式:
    语句块1
else:
    语句块2

1.2.2.流程图

 

1.2.3.例:输入一个整数判断奇偶数

num=input("请输入一个整数:")
if num%2==1:
    print('奇数')
else:
    print('偶数')
num=int(input("请输入一个整数:"))
if num & 1 == 1:
    print('奇数')
else:
    print('偶数')

1.2.4.例:判断一个整数能否被7或11整除但不能同时整除

num=int(input("请输入一个整数:"))
if (num%7 ==0 or num%11==0) and num%77!=0:
    print('yes')   #and优先级高于or
else:
    print('no')

1.2.5.例:判断闰年:能被4整除但不能被100整除,或者能被400整除。

year=int(input('请输入四位数年份'))
if year%4==0 and year%100!=0 or year%400==0:
    print('闰年')
else:
    print('平年')

1.3.多分支结构

1.3.1.语法1:

if 表达式1:
    语句块1
else:
    if 表达式2:
        语句块2
    else:
        ......
#逻辑嵌套推荐不超过7层

1.3.2.语法2:

if 表达式1:
    语句块1
elif 表达式2:
    语句块2
elif 表达式3:
    语句块3
.....
else:
    语句块n

1.3.3.流程图:

 

1.3.4.例:输入三个整数,降序输出:

a=int(input())
b=int(input())
c=int(input())
if a>b:
    if a>c:
        if b>c:
            print(a,b,c)
        else:
            print(a,c,b)
    else:
        print(c,a,b)
else:
    if a>c:
        print(b,a,c)
    elif b>c:
        print(b,c,a)
    else:
        print(c,b,a)

1.3.5例:输入一个百分制成绩,输出成绩

x>90 优秀

90>x>=80 良好

80>x>=60 及格

x<60 补考

x=int(input('请输入一个百分之成绩(0-100):'))
if x>100 or x<0:
    print('数据有误,请输入0-100范围的数字')
elif x>=90:
    print('优秀')
elif x>=80:
    print('良好')
elif x>=60:
    print('及格')
else :
    print('补考')

1.3.6.注意:

  • if else elif 之后的冒号不能省略

  • elif 与 else 不能单独使用

  • 通过缩进判断是否是同一语句块

2.循环结构

2.1.while循环

while   条件表达式:
        循环体语句

2.1.2.流程图

 

2.2.for循环

2.2.1.格式:

for  迭代变量  in 对象:
    循环体
​
#数值循环:
for 迭代变量 in range(start,and,step):
    循环体

2.2.2.range()函数:

  • python3中内置函数,用于生成一系列连续的整数

  • start:计数起始值,若省略则为0

  • end:计算终止值,不包含(开区间),如range(9)表示产生0-8的整数,end参数不可省略

  • step:步长,默认为1

  • 注意:range()函数只有一个参数,改参数表示end,二个参数时为start和end,三个参数时最后一个为step

  • 例:计算1+2+3+4+......100之和

#while循环
sum=0
i=1
while i <=100:
    sum=sum+i
    i+=1
print(sum)
#for循环
sum=0
for i in range(1,101):
    sum+=i
print(sum)

2.2.3.注意

  • 循环表达式值为非0时执行循环体

  • 循环区间尽量使用开区间

  • 循环嵌套时钟长循环应在内部,短循环在外,以减少内外循环跨越次数,提高效率

for i in range(10)
    for j in range(3):
        ......
​
for j in range(3):
    for i in range(10):
        ......
  • 循环嵌套应限制在3层以内,以提高理解性

3.程序示例

3.1.累加和

3.1.1.框架:

sum=0
for i in range(终止值):
    sum=sum+新项

3.1.2.例1:计算下列多项式的值:

 

sum=0
for i in range(1,101):
    sum=sum+1/i
print('sum=%.6f'%sum)

3.1.3.例2:计算下列多项式的值

 

sum=1
f=-1
for i in range(2,101):
    sum=sum+1/i*f
    f=-f
print('sum=%.6f'%sum)

3.1.4.例3:计算下列多项式的值:

 

sum=1
t=1
for i in range(2,101):
    t=t+i
    sum=sum+1/t
print(sum)

3.1.5.例4:计算下列多项式的值:

 

a=3
b=2
sum=0
for i in range(20):
    sum=sum+a/b
    t=a
    a=a+b
    b=t
print(sum)

3.1.6.例5:计算π的近似值,公式:

 

pi=1
f=-1
i=3
while 1/i>1e-6:
    pi=pi+1/i*f
    f=-f
    i=i+2
print('pi=%.6f'%(pi*4))

#注意:多项式的迭代时某一运算结果大于1e-6时说明其值需要累加,误差较大需要运算,小于等于1e-6时则结束循环迭代,表示当前数值较小,误差可控可以结束循环
 

3.1.7.例6:利用泰勒级数计算e的近似值

e=1+1/1! +1/2! +1/3! + .........+1/n!

sum=1
t=1
i=1
while 1 / t > 1e-6:
    t = t*i
    sum = sum+1/t
    i += 1
print(sum)

3.1.8.例7:计算a+aa+aaa+aaaa+aaa....aaa的值,其中计算前6项之和,a=2

sum=0
a=2
for i in range(6):
    sum=sum+a
    a=a*10+2
print(sum)

4.1.素数判断

4.1.1.break语句(结束循环):终止当前循环,执行循环外的下一条语句,一般与if搭配使用,如:

例:计算r=1到r=10时圆的面积直到面积大于100为止

import math
for r in range(1,11):
    area=math.pi*r*r
    if area>100:
        break
print('r:',r,'area is :%.6f'%area)

4.1.2.continue语句(加速循环):跳出当前次循环,继续执行下一次循环,一般与if语句搭配使用,若执行到continue语句,该语句之下的所有循环体语句都不执行直接跳到步长迭代出,如:

例:将100到150之间的不能被3整除的数输出,要求一行输出10个数

i=0
for n in range(100,151):
    if n%3==0:
        continue
    print(n,end=" ")
    i+=1
    if i%10==0:
        print()

4.1.3. for-else结构:for循环执行完或者未进入循环(即for循环不是通过break语句跳出而中断的)情况下执行else,例:

for i in range(1,100):
    if i%2==0 and i%3==0 and i%5==0:
        print('%d 是2,3,5的最小公倍数' % i)
        break
else:
    print('未找到!')

执行过程:当for循环正常执行完毕则会执行else之后的语句,若执行break异常跳出则不会执行else后语句,

for i in range(1,100):
    if i%2==0 and i%3==0 and i%5==0:
        print('%d 是2,3,5的最小公倍数' % i)
        #break
else:
    print('未找到!')

若删除上列中的break会出现问题,所有公倍数都会被打印出来,有满足循环正常结束则else之后的未找到也会被打印

4.2.4.素数:只能被1和自己本身整除的数称为素数,例:输入一个整数,判断是否为素数:

prime=7 7%2 7%3 7%4 7%5 7%6 素数

prime=8 8%2 8%3 ...... 8%7 平数

prime=9 9%2 9%3

  • 判断范围:[2,n-1]

  • 判断方法:整除%

#方法1
prime=int(input('请输入一个正整数:'))
if prime<2:     #保证输入数据大于2
    print('请输入大于2的正整数!')
else:
    for i in range(2,prime):
        if prime%i==0:
            print('平数')
            break
    else:    #循环顺利结束后执行
        print('素数')

prime=7

prime%2 !=0

prime%3 !=0

prime%5!=0

prime%6!=0

prime%7!=0

prime=8

prime%2!=0

#方法:2
prime=int(input('请输入一个正整数:'))
i=2
if prime<2:
    print('请输入大于2的整数!')
else:
    while prime%i:
        i=i+1
    if i==prime:
        print('素数')
    else:
        print('平数')
方法3
    筛选法:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
素数i的倍数一定不是素数,如序列1-20中去掉2的倍数,3的倍数....剩余一定是素数

4.2.穷举法

4.2.1作用:在指定范围内寻找符号条件数

4.2.2.框架:

for i in range(起始,终止,步长):
    if 条件表达式:
        处理

4.2.3. 例1:输出100以内的素数

for i in range(2,100):  #遍历2到99
    for j in range(2,i):  #判断i是否为素数
        if i%j==0:
            break
    else:
        print(i,end=' ') #输出素数

4.2.4. 例2:输出200到400间的非素数

for i in range(200,400):
    for j in range(2,i):
        if i%j==0:
            print(i)
            break

4.2.5.例3:输出大于m且紧随m的k个素数,如:m=5 k=3 结果为:7 11 13

#变量初始值
m=int(input('请输入起始值:'))
k=int(input('请输入需要的素数个数:'))
i=m+1
t=0     #计数器,记录找到的素数个数
while  t<k:    #当自己找到的素数小于指定个数k的时候继续寻找
    for j in range(2,i):    #判断i是否为素数
        if i%j==0:
            break
    else:
        t=t+1      #记录找到的素数个数
        print(i,end=' ')    #输出素数
    i=i+1           #继续下一个数的寻找

4.2.6.例4:输出100以内的能被9整除余数为2的数,计算其平均值的平方根并输出

aver=0   
t=0     #计算器
for i in range(1,101):
    if i%9==2:    #计算对9取余余数为2
        print(i,end=' ')
        aver=aver+i     #计算和值
        t=t+1       #记录个数
print('\n aver=%.2f'%((aver/t)**0.5))

4.2.7.例5:输出水仙花数,每位数的立方和等于原值,如:153==1^3+5^3+3^3

水仙花数:153 370 371 407

for i in range(100,1000):
    if(i%10)**3+(i//10%10)**3+(i//100)**3==i:
        print('水仙数:',i)

4.2.8.例6:输出1000以内的完数,完数:因子之和等于原值,如:6==1+2+3

i in range(6,1000):   #遍历0到999,最小完数为6
    sum=0     #每判断一个i必须先清零其因子之和
    for j in range(1,i):    #寻找i的因子
        if i%j==0:
            sum=sum+j     #计算因子之和sum
    if sum==i:      #判断因子之和是否等于原数
            print(i,end=' ')

4.2.9. 例7:输出100以内的同构树,同构树:若一个正整数出现在它的平方数的右侧则为同构数,如:5==25 6==36 25==625

for i in range(100):
    #100以内的同构数平方后可能为2位数或者3位数
    if i==i * i % 10 or i == i * i % 100:
        print(i,end=' ')

4.3.1.例8:输出200以内的回文数字

(整数倒置算法)

for i in range(100):
    t=0    #倒置后数
    m=i
    while m>0:  #对i进行整数倒置
        t=t * 10+ i % 10
        m=m//10
    if t==i:
        print(i,end=' ')

  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流年ꦿ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值