【Python基础教程】(二):选择结构与循环结构

联系QQ:970586718

博客地址:https://blog.csdn.net/m0_46521785

选择结构

多分支结构

if (条件A):
	pass
elif (条件B):
	pass
elif (条件C):
	pass
elif ...:
    pass
else:
	pass

编写程序需要使用多分支的时候不要使用多个if替代,因为可能会在第一个if里改变变量的值导致进入第二个if

实现流程

执行if语句的时候,会先计算条件,判断最后的结果是True还是False,如果是True的话会进入这个if语句的程序块,否则进行下一个条件的判断

条件嵌套

每一层if语句可以再写一个if语句,只要保证好缩进就可以了,在python中,缩进就是层级关系。

a = 1
b = 2
if a>0:
    if b<0:
        print(111)
    else:
        print(222)
else:
    if b<0:
        print(666)
    else:
        print(777)

练习题

  • 倍数判断

    程序的功能是判断一个整数是否能被711整除,若能被711整除,则输出"Yes",否则输出"No",请补充程序。
    
  • 素数判断

    输入一个数字判断它是不是素数(质数)
    
  • 输入整数x,y,z,判断x3+y3+z^3和1000的关系

    输入整数x,y,z,若x^3+y^3+z^3>1000,则输出x^3+y^3+z^3-1000的结果,否则输出三个数之和。
    注:用eval()函数结合input()函数同时输入3个整数,输入数字时用逗号分隔
    
  • 适婚问题

    输入年龄和性别,判断你当前的个人情况!
    男性小于30岁显示:young,30岁到36岁之间显示:marriageable age,大于36岁显示:old。
    女性小于25岁显示:young,25岁到30岁之间显示:marriageable age,大于30岁显示:old。
    

循环结构

for循环(已知循环次数)

for i in x

这里的x是可迭代对象,什么叫可迭代对象呢,就是可以依次代表每个元素

常见的可迭代对象有字符串、元组、列表、字典、集合

a = 'hzau'
for i in a:
    print(i)
print('#'*30)

b = list(a)  # 创建一个列表,同时学习一下,直接对字符串使用list强制转化的话,每一个字符都对应一个元素
print(b)
for i in b:
    print(i)

range(a,b)

range是一个迭代器,就像工厂可以生产产品一样,迭代器可以生成可迭代对象。

它得到的结果是一个range对象,构造内容是从a(a不写默认从0开始)到b(不包含b)的整数伪列表(胡滨老师起的名字)

什么意思呢,看下面代码就知道了

a = range(1,10)
print(a)
print(list(a))  # 看看a里到底包含什么东西

通过print(list(a))我们可以简单理解为,range(1,10)就相当于创建了一个列表,其中的元素是1-9

for i in range(1,10):
    print(i)

for i in range(x)

经常写为for i in range(len(x)),为什么这么写呢?因为我这样写索引和元素是一一对应的

a = 'hzau'
for i in range(len(a)):
    print(i,a[i])

for i in x能做到的事,for i in range(x)都可以做,所以推荐使用for i in range(x)的写法,反之不对

(细细体会这句话,就像下面要说的:for循环能做到的事,while循环都可以做,反之不对)

for的两种形式什么时候用呢?

还是老话:因题而仪,具体情况具体分析

你可以先写代码,发现for i in x写到最后写不出来了,那你就换成for i in range(x)

如果不想动脑子就直接写成for i in range(x)的形式,因为for i in x能做到的事,for i in range(x)都可以做

while循环(已知循环条件)

结构如下

while 条件:
    循环体

当条件成立就会执行循环体的内容,例如

x=0
while x<=5:
	print(x)
    x+=1
#结果为0 1 2 3 4 5

死循环

当while的判断条件一直为True的时候,程序会一直在循环里,无法执行后面的代码,如下

while 1:
    print(666)

但是,当给死循环加上一个判断条件的时候,就可以达到起到不错的作用,例如,我们使用while循环替代for循环

mystr = 'hzau'
index = 0
while True:  # 创建死循环
    if index >= len(mystr):  # 设置跳出循环的条件
        break
    print(mystr[index])
    index += 1

有同学可以看得出来,这个其实就等价于

mystr = 'hzau'
index = 0
while index >= len(mystr):  # 创建死循环
    print(mystr[index])
    index += 1

是的,没错,但是很显然第一段代码需要懂得脑子很少,逻辑更简单

continue与break

  • continue是结束本轮循环,不再执行本轮循环的循环体后面的代码,继续执行下一轮循环
  • break是结束整个循环
for i in range(3):
    if i==1:
        continue
    print(i,666)
print('###########################')
for i in range(3):
    if i==1:
        break
    print(i,777)

考试的时候经常这么描述:break用来跳出最内层循环,脱离循环后程序从循环代码后继续执行。【这句话是对的】

break只能跳出最内层的循环,也就是说它只能结束离它最近的循环结构,为什么说最近呢?因为循环也可以嵌套呀,看看下面的例子就明白了

for i in range(3):
    for j in range(3):
        if j==1:
            break
        print('i=%d,j=%d'%(i,j))

那如果想跳出外面一层怎么办呢可以使用创建flag的方式,什么叫创建flag,他就是创建一个条件,根据条件状态来判断后面该怎么编写代码,这个作用只可意会

flag = 1
for i in range(3):
    if not flag:  # 这么写为什么是对的呢?起到的作用和 if flag==0 一样吗?
        break
    for j in range(3):
        if j==1:
            flag = 0
            break
        print('i=%d,j=%d'%(i,j))

for循环与while循环的选择

很多同学对程序是使用for循环还是while循环十分纠结,其实记住一句话就OK

  • 已知循环次数使用for循环
  • 只知道循环条件使用while循环

for循环能做到的事,while循环都可以做,反之不对(细细体会)

其实,我们在写程序的时候经常使用for循环,相比之下,while循环使用的少一点

for-else循环与while-else循环

有个了解就可以了,知道有这么种形式,考的不是很多

执行完循环体,如果没有被break掉的话,会继续执行else里面的内容

x=0
while x<=5:
	print(x)
    x+=1
else:
    print('进入else啦')
###########################
x=0
while x<=5:
	if x==1:
        print(i)
        break
	print(x)
    x+=1
else:
    print('进入else啦')

练习题

做题前先想一下你是一直循环次数还是已知循环条件,然后判断使用哪种循环方式

  • 算数

    已知y=1+1/3+1/5++1/2n-1:
    求y<3时的最大n值以及最大n值对应的y值(y值保留小数点后2)
  • 小丽游泳

    小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游2米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的98%。
    现在小玉想知道,如果要游到距离x米的地方,她需要游多少步呢。请你编程解决这个问题。
    
  • 猴子吃桃

    猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前一天剩下的一半多一个,到第n天吃以前发现只剩下一个桃子。
    编写程序实现:据输入的天数计算并输出猴子共摘了几个桃子
    
  • 求和

    输入一个数,判断哪三个正整数的和与这个数字相等
    

思考问题

  • 什么可以代表True呢?1能不能代表True呢?还有没有别的代表方式?

  • 你觉得下面代码有问题吗

    a = 1
    print(a+True)
    
  • 什么时候该用for循环什么时候该用while循环

  • continue和break的作用记清楚了吗?

  • 可曾听闻for-else循环与while-else这种循环结构?

  • 编写代码解决以下问题

    输入一个数字n,返回n以内的斐波那契数列。
    注:斐波拉契数列由01开始,之后的数就是由之前的两数相加而得出:0, 1, 1, 2, 3, 5, 8, 13, 21
    【样例输入】(输入大于3的整数值)
    input a number please:200
    【样例输出】
    1,1,2,3,5,8,13,21,34,55,89,144,
    

猜你喜欢

转载自blog.csdn.net/m0_46521785/article/details/110914686#comments_28568636