Python4.2 分支和循环

分支:只有符合条件,才会去做某事。

循环:只要符合条件,就持续做某事。

 if条件分支

语法:

if 条件:

  分支

elif条件:

  分支

elif也可以不用,但是效率相应会降低。

需求:按照成绩划分等级,90分以上为A,80~90为B,60~80为C,60以下为D,用户输入分数,自动转换为A、B、C、D。

 1 #p4_1.py
 2 score = int (input('Please input a score: '))
 3 s1 = 'Your grade is '
 4 
 5 if 90 <= score <= 100:
 6     print(s1 + 'A')
 7 if 80 <= score < 90:
 8     print(s1 + 'B')
 9 if 60 <= score < 80:
10     print(s1 + 'C')
11 if score < 60:
12     print(s1 + 'D')

也可以写成:

 1 #p4_2.py
 2 score = int (input('Please input a score: '))
 3 s1 = 'Your grade is '
 4 
 5 if 90 <= score <= 100:
 6     print(s1 + 'A')
 7 else:
 8     if 80 <= score < 90:
 9         print(s1 + 'B')
10     else:
11         if 60 <= score < 80:
12             print(s1 + 'C')
13         else:
14             if score < 60:
15                 print(s1 + 'D')

再简化一下:

 1 #p4_3.py
 2 score = int (input('Please input a score: '))
 3 s1 = 'Your grade is '
 4 
 5 if 90 <= score <= 100:
 6     print(s1 + 'A')
 7 elif 80 <= score < 90:
 8     print(s1 + 'B')
 9 elif 60 <= score < 80:
10     print(s1 + 'C')
11 elif score < 60:
12     print(s1 + 'D')

#p4_1没有用else if或者elif,那么当用户输入参数90,程序始终会无差别判断四个条件,而如果使用了else if或者elif,程序在判断到第一个条件,得出结果就会退出,提高了四倍的性能。

 

while循环

语法:

   while条件:

    循环体

需求:打印1+2+3+……+100的结果:

1 #p4_8.py
2 i = 1
3 sum = 0
4 
5 while i <= 100:
6     sum += i
7     i += 1
8 print (sum)

  设计循环体的时候要考虑退出循环的条件,例如上例中的i+=1,否则就会死循环。除了特殊场景,一般不需要死循环。

 

for循环

语法:

  for 变量 in 可迭代对象:

    循环体

  可迭代对象指元素可以被单独提取出来的对象,比如字符串,数组等。例如字符串'python',而for循环就是从'python'这个字符串中每次取一个字母放入变量中去执行循环体,直到执行完毕。

 

 1 >>> for each in 'python':
 2     print (each)
 3 
 4     
 5 p
 6 y
 7 t
 8 h
 9 o
10 n

如果要用for循环实现打印1+2+3+……+100的结果,那么就需要一个1~100的可迭代对象,要么建一个数组[1,2,3…]这就太拉跨了,要么使用一个叫做range()BIF函数,语法如下:

  range(结束值)

  range(开始值, 结束值)

  range(开始值, 结束值, 步长)

  开始值,结束值,步长,三个都只能是整数(正负都可以),开始值不填的话默认是0。

  注意,这里的结束值是开区间,就是说是<而非<=结束值。

1 >>> list(range(10))
2 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]//可以看到这里不包括10
3 >>> list(range(3, 10))
4 [3, 4, 5, 6, 7, 8, 9]
5 >>> list(range(1, 10, 2))
6 [1, 3, 5, 7, 9]
7 >>> list(range(1, -10, -2))
8 [1, -1, -3, -5, -7, -9]

现在有了0~100的可迭代对象,尝试用for循环实现打印1+2+3+……+100的结果:

1 #p4_10.py
2 sum = 0
3 
4 for i in range(101)://注意这里开区间,所以必须是101,
5     sum += i
6 print (sum)

小甲鱼说“for和range()如胶似漆”,个人经验认为涉及到数据库的话,range()应该用得不会太多,大多时候还是从数据库来的数组或者列表。后面学得多了看看吧,也许会打脸。

 

break语句

break作用是跳出循环体,例如:

 1 #p4_11.py
 2 s = '我死循环了!'
 3 time1 = 0
 4 time2 = int(input('请输入循环次数:'))
 5 
 6 while True:
 7     print(s)
 8     time1 += 1
 9     if time1 == time2:
10         break

如果没有输入次数,就不会执行break并一直循环下去。

1 >>> 
2 请输入循环次数:5
3 我死循环了!
4 我死循环了!
5 我死循环了!
6 我死循环了!
7 我死循环了!

再举个例子,找出区间内第n个闰年(被4整除且不被100整除,或可以被400整除的年份)

 1 #p4_12.py
 2 mypa = int(input('您要查2000年后的第几个闰年:'))
 3 count = 0
 4 
 5 for year in range(2000,9999):
 6     if (year % 4 == 0) & (year % 100 != 0) | (year % 400 == 0):
 7         count += 1
 8         if count == mypa:
 9             break
10 print('2000年后第',mypa,'个闰年是:' ,year,'')

运行结果:

1 >>> 
2 您要查2000年后的第几个闰年:10
3 2000年后第 10 个闰年是: 20364 >>> 
5 您要查2000年后的第几个闰年:1
6 2000年后第 1 个闰年是: 20007 >>> 
8 您要查2000年后的第几个闰年:2
9 2000年后第 2 个闰年是: 2004 年

 

continue语句

  这是另一个可以跳出循环的语句,作用是跳出本轮循环并开始下一轮循环,再开始下一轮循环之前,会先测试循环条件。

修改上一个需求,打印出区间内所有闰年年份:

 

1 #p4_13.py
2 
3 for year in range(2000,2020):
4     if (year % 4 == 0) & (year % 100 != 0) | (year % 400 == 0):
5           print(year)
6           continue

运行结果:

1 >>> 
2 2000
3 2004
4 2008
5 2012
6 2016

 

else语句

  else不仅可以和if搭配,还可以跟while和for搭配。

  语法:

    while条件:

      循环体

    else:

      条件不成立时执行的内容

 

    for变量in可迭代对象:

      循环体

    else:

      条件不成立时执行的内容

  看起来似乎和while/for完了之后直接打印没有区别,但实际上要执行“条件不成立时执行的内容”就意味着如果条件成立就不会运行else后面的代码,这点在break时有所体现。

1 #p4_14.py
2 #for完了直接打印
3 
4 for year in range(2000,2020):
5     if (year % 4 == 0) & (year % 100 != 0) | (year % 400 == 0):
6           break
7 print('2000年后第一个闰年是:',year)

效果如下:

1 >>> 
2 2000年后第一个闰年是: 2000

 用了else之后:

1 #p4_15.py
2 
3 for year in range(2000,2020):
4     if (year % 4 == 0) & (year % 100 != 0) | (year % 400 == 0):
5           break
6 else:
7     print('2000年后第一个闰年是:',year)

运行效果:

1 >>> //什么也没有打印出来,因为if后的条件没有不成立,所以不会执行else后面的语句。

 

posted @ 2022-01-04 14:08  巴拉拉没多少能量  阅读(42)  评论(0编辑  收藏  举报