第八课.强大的分支与循环

Python是面向对象的编程语言,是由C语言编写而来的

玩一个输出分数的小游戏(判断分数的等级)

有3种实现方法

这里的第三种方法是第二种方法的改进,因为第二种方法靠缩进来实现,但是如果条件语句过多,缩进非常不美观,第三种里的elif相当于C语言中的else if

 

Python可以有效避免“悬挂else

 

什么叫“悬挂else”?

我们举个例子,初学C语言的朋友可能很容易被以下代码欺骗:

if ( hi > 2 )

         if( hi > 7 )

                  printf(“好棒!好棒!”);

else

         printf(“切~”);

 

C语言中,Else会和离它最近的if匹配,这里的else会和if( hi > 7 )匹配,但是python的缩进完全避免了这个问题

 

 

条件表达式(三元操作符)

有了这个三元操作符的条件表达式,你可以使用一条语句来完成以下的条件判断和赋值操作:

x, y = 4, 5

if x < y:

         small = x

else:

         small = y

例子可以改进为:

small = x if x < y else y

 

断言(assert

assert这个关键字我们称之为“断言”,当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError的异常。

举个例子:

>>> assert 3 > 4

以后的课程会讲到如何来接收AssertionError异常

这个就非常类似于C语言中GetLastError()获取错误参数的过程

一般来说我们可以用Ta在程序中置入检查点,当需要确保程序中的某个条件一定为真才能让程序正常工作的话,assert关键字就非常有用了。

 

 

Whlie 条件:

循环体

 

 

这里的while和C语言中的while是一样的,非常好理解

 

虽然说Python是由C语言编写而来的,但是Tafor循环跟C语言的for循环不太一样,Pythonfor循环显得更为智能和强大!

 

语法:

for 目标 in 表达式:

循环体

 

 

举个例子

这里的len()就是一个求长度的BIF

这里的j会自动增加,不用手动控制(智能)

 

下面介绍经常和for一起配合使用的小伙伴range(),这个是一个BIF(内置函数)

range()

语法:range( [strat,] stop[, step=1] )

这个BIF有三个参数,其中用中括号括起来的两个表示这两个参数是可选的。

step=1表示第三个参数的值默认值是1。

range这个BIF的作用是生成一个从start参数的值开始到stop参数的值结束的数字序列。

 

看定义可能会迷茫,直接看图就懂了

range(5)会生成一个从0开始到5结束的数字序列(不包括5)

list(range(0, 10)) 转换成列表是:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],注意不包含 10 哦

range(2,9)会生成一个从2开始到9结束的数字序列(不包括9)

Range(1,10,2)会生成一个从1开始到10结束并且每格数字相差2的序列(有点类似于等差数列,2相当于公差d,1相当于首项,8相当于末项)

breakcontinue

不会C的朋友就只能百度啦,我这只针对有C基础的,简单说一下

break语句的作用是终止当前循环,跳出循环体。(退出本层循环

continue语句的作用是终止本轮循环并开始下一轮循环(退出本次循环

)(这里要注意的是:在开始下一轮循环之前,会先测试循环条件)。
 

这个程序是这节课的重点,如果读懂了(答案和你预想的一样),就说明学会了这节课的内容,如果不一样,那还得加油哦~(认真读几遍都会有结果哒)

答案

 

 

 

 

 

测试题

  1. 假设有 x = 1,y = 2,z = 3,请问如何快速将三个变量的值互相交换?
    x, y, z = z, y, x
  2.  if not (money < 100): 这行代码相当于?
    if money >= 100:
  3. 猜猜 (x < y and [x] or [y])[0] 实现什么样的功能?
    这其实是 Python 的作者还没有为 Python 加入三元操作符之前,Python 社区的小伙伴们灵活的使用 and 和 or  搭配来实现三元操作符的功能,这里边有涉及到列表和切片的知识,这部分知识很快就会讲解,迫不及待的朋友可以先稍微预习下。
  4. 你听说过成员资格运算符吗?
    Python 有一个成员资格运算符:in,用于检查一个值是否在序列中,如果在序列中返回 True,否则返回 False。

4.设计一个验证用户密码程序,用户只有三次机会输入错误,不过如果用户输入的内容中包含"*"则不计算在内。

  1. count = 3
  2. password = 'FishC.com'
  3.  
  4. while count:
  5.     passwd = input('请输入密码:')
  6.     if passwd == password:
  7.         print('密码正确,进入程序......')
  8.         break
  9.     elif '*' in passwd:
  10.         print('密码中不能含有"*"号!您还有', count, '次机会!', end=' ')
  11.         continue
  12.     else:
  13.         print('密码输入错误!您还有', count-1, '次机会!', end=' ')    
  14.     count -= 1

5.编写一个程序,求 100~999 之间的所有水仙花数。

如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数

  1. for i in range(100, 1000):
  2.     sum = 0
  3.     temp = i
  4.     while temp:
  5.         sum = sum + (temp%10) ** 3
  6.         temp //= 10         # 注意这里要使用地板除哦~
  7.     if sum == i:
  8.         print(i)
     

猜你喜欢

转载自blog.csdn.net/qq_41917908/article/details/84147215