鱼C论坛

 找回密码
 立即注册

python学习小菜笔记——第九课(了不起的分支和循环3)

已有 872 次阅读2014-8-16 23:32 |个人分类:Python学习

课堂笔记:

while循环

 

说完了分支我们来说说循环,标准的while循环语法我们已经可以熟悉掌握了。

这里我们就简单的过一下,Python的while循环跟if条件分支类似,在条件为真的情况下,执行一段代码,不同的是,只要条件为真,while循环会一直重复执行那段代码,我们把这段代码称之为循环体。

 

while 条件:

循环体

 

for循环

 

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

这主要表现在Ta会自动调用迭代器的next()方法,会自动捕获StopIteration异常并结束循环,所以这更像是一个具有现代化气质的for循环结构。

for 目标 in 表达式:

循环体



range()

for循环其实还有一个小伙伴:range()内建函数,现在我们就来隆重介绍一下。

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


break 和 continue语句
一般说来,break和continue语句的作用是改变控制流程。当break语句在循环结构中执行时,它会导致立即跳出循环结构,转而执行该结构后面的语句。比如,我们依次输出字符串“hello”中的各个字符,遇到第一个字符“l”时结束,我们以交互方式演示:

>>># 用break语句跳出循环结构

    for char in "hello":

       if char == "l":

           break

       print char

h

e


与break语句不同,当continue语句在循环结构中执行时,并不会退出循环结构,而是立即结束本次循环,重新开始下一轮循环,也就是说,跳 过循环体中在continue语句之后的所有语句,继续下一轮循环。对于while语句,执行continue语句后会立即检测循环条件;对于for语 句,执行continue语句后并没有立即检测循环条件,而是先将“可遍历的表达式”中的下一个元素赋给控制变量,然后再检测循环条件。比如,我们这次还 是依次输出字符串“hello”中的各个字符,但忽略字符串中的字符“l”,我们以交互方式演示:

 

 

 >>>#continue语句将结束本轮循环,进入下一轮循环
    for char in "hello":
 
        if char == "l":
                continue
        print char
h
e
o

课后作业:

  
0. 下面的循环会打印多少次"I Love FishC"?
  1. for i in range(0, 10, 2):
  2.     print('I Love FishC')
复制代码
5次
5 次,因为从 0 开始,到 10 结束,步进为 2。

1. 下面的循环会打印多少次"I Love FishC"?
  1. for i in 5:
  2.     print('I Love FishC')
复制代码
报错,in后面因该是个list而不能是个数字吧
会报错,上节课的课后习题我们提到了 in 是“成员资格运算符”,而不是像 C 语言那样去使用 for 语法。Python 的 for 更像脚本语言的 foreach。


2. 回顾一下 break 和 continue 在循环中起到的作用?
    当break语句在循环结构中执行时,它会导致立即跳出循环结构,转而执行该结构后面的语句。continue语句在循环结构中执行时,并不会退出循环结构,而是立即结束本次循环,重新开始下一轮循环
break语句的作用是终止当前循环,跳出循环体。
continue语句的作用是终止本轮循环并开始下一轮循环(这里要注意的是:在开始下一轮循环之前,会先测试循环条件)。

3. 请谈下你对列表的理解?
 序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。

Python有6个序列的内置类型,但最常见的是列表和元组。

序列都可以进行的操作包括索引,切片,加,乘,检查成员。

此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。

列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。

列表的数据项不需要具有相同的类型



4. 请问 range(10) 生成哪些数?
     0,1,2,3,4,5,6,7,8,9
会生成 range(0, 10),list(range(0, 10)) 转换成列表是:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],注意不包含 10 哦。


5. 目测以下程序会打印什么?
  1. while True:
  2.     while True:
  3.         break
  4.         print(1)
  5.     print(2)
  6.     break
  7. print(3)
复制代码
2,3
2
3

因为 break 只能跳出一层循环,记住咯!

6. 什么情况下我们要使循环永远为真?
    死循环在系统的应用非常多,也非常重要,所有的应用系统都需要设置一个死循环来保证系统的正常运行,如果没有死循环,那么你会一开机马上就关机,因为这个程序已经运行完毕,所以在系统开发中死循环有着极其重要的作用!
while Ture:
    循环体
    
同样用于游戏实现,因为游戏只要运行着,就需要时刻接收用户输入,因此使用永远为真确保游戏“在线”。操作系统也是同样的道理,时刻待命,操作系统永远为真的这个循环叫做消息循环。另外,许多通讯服务器的客户端/服务器系统也是通过这样的原理来工作的。
     
所以永远为“真”虽然是“死循环”,但不一定是坏事,再说了,我们可以随时用 break 来跳出循环!



7. 【学会提高代码的效率】你的觉得以下代码效率方面怎样?有没有办法可以大幅度改进(仍然使用while)?
  1. i = 0
  2. string = 'ILoveFishC.com'
  3. while i < len(string)):
  4.     print(i)
  5.     i += 1

  1. 这段代码之所以“效率比较低”是因为每次循环都需要调用一次 len() 函数(我们还没有学到函数的概念,小甲鱼这里为零基础的朋友形象的解释下:就像你打游戏打得正HIGH的时候,老妈让你去买盐......你有两种选择,一次买一包,一天去买五次,或者一次性买五包回来,老妈要就直接给她。)
    1. i = 0
    2. string = 'ILoveFishC.com'
    3. length = len(string)
    4. while i < length:
    5.     print(i)
    6.     i += 1  

动动手:

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

 

print('---------I love fishc-------')
time = 3
num = input("请输入密码:")
secret = ('FishC.com')
if secret == num:
    print("密码正确,进入程序......")
t = 3
while secret !=num and time > 1:
    i='*'
    if i in num:
        print ('密码中不能包含"*"号!您还有',t,'次机会!请输入密码:',end =" ")
        num = input ()
    else:
        time = time - 1
        t = t - 1
        print ("密码输入错误!您还有",t,"次机会!请输入密码:",end = " ")
        num = input ()
        if secret == num:
            print("密码正确,进入程序......")

  1. count = 3
  2. password = 'FishC.com'

  3. while count:
  4.     passwd = input('请输入密码:')
  5.     if passwd == password:
  6.         print('密码正确,进入程序......')
  7.         break
  8.     elif '*' in passwd:
  9.         print('密码中不能含有"*"号!您还有', count, '次机会!', end=' ')
  10.         continue
  11.     else:
  12.         print('密码输入错误!您还有', count-1, '次机会!', end=' ')    
  13.     count -= 1
  
1. 编写一个程序,求 100~999 之间的所有水仙花数。
如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。
num=100
while 100 <=num< 999:
    a = num//100
    b =num //10 -(a*10)
    if b==0:    
        c=num -(a*100)
    else:
        c=num -(a*100)-(b*10)
    if num == (a**3)+(b**3)+(c**3):
        print(num)
    num = num + 1

  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)


2. 三色球问题
有红、黄、蓝三种颜色的球,其中红球 3 个,黄球 3 个,绿球 6 个。先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配。
for a in range(4):
    for b in range(4):
        c=8-a-b
        if c in range(7):
            print("黄球有",a,"个"    "红球有",b,"个"    "蓝球有",c,"个")

  1. print('red\tyellow\tblue')
  2. for red in range(0, 4):
  3.     for yellow in range(0, 4):
  4.         for green in range(2, 7):
  5.             if red + yellow + green == 8:
  6.                 # 注意,下边不是字符串拼接,因此不用“+”哦~
  7.                 print(red, '\t', yellow, '\t', green)
复制代码
注释:range(2, 7)是产生[2, 3, 4, 5, 6]5个数,绿球不能是1个,因为如果绿球是1个的话,红球 + 黄球需要有7个才能符合题意,而红球和黄球每种只有3个,因此是range(2, 7)


Python for 循环语句

Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。

语法:

for循环的语法格式如下:

for iterating_var in sequence: statements(s)

流程图:

python_for_loop

实例:

#!/usr/bin/python for letter in 'Python': # First Example print 'Current Letter :', letter fruits = ['banana', 'apple', 'mango'] for fruit in fruits: # Second Example print 'Current fruit :', fruit print "Good bye!"

以上实例输出结果:

Current Letter : P Current Letter : y Current Letter : t Current Letter : h Current Letter : o Current Letter : n Current fruit : banana Current fruit : apple Current fruit : mango Good bye!





python中的列表功能强大,远非其它语言中的数组可比。

不同于整数或字符串,列表是一个真正可变的类型,

列表是序列的一种,所以可做类似于字符串一样的序列操作。

如len(list)

当然还有索引,切片等操作。

list+[4,5,6]则类似于字符串的连接,会将两个列表合并。

python中列表不同于其它语言中数组的一个特征就是列表中允许不同类型的元素,甚至嵌套进无限深层次的列表,字典等。

列表可改变大小,如list.append函数,或者去除一个元素,如list.pop(2),还包括插入list.insert,按值删除remove等。

当然还有排序和逆序操作,list.sort和list.reverst,注意方法使用之后,列表的顺序就真的改变了。

但是列表仍不允许引用不存在的元素,会执行边界检查。

如果一个列表的元素是列表,那么就实现了多维数组

ll=[1,2,3],[4,5,6],[7,8,9]]

在列表中有一个高级方法叫列表解析表达式,比如

nn=[r[1] for r in ll]

print nn

会得到[2,5,8]

更高级的例子:

>>> zz=[a[2] for a in kk if a[2]%2==1]
>>> print zz
[3, 9]

>>> zz=[a[2]*2 for a in kk]
>>> print zz
[6, 12, 18]




Python 列表(Lists)

序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。

Python有6个序列的内置类型,但最常见的是列表和元组。

序列都可以进行的操作包括索引,切片,加,乘,检查成员。

此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。

列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。

列表的数据项不需要具有相同的类型



在编程中死循环并不是一个需要避免的问题,相反,在实际应用中,经常需要用到死循环。例如,我们使用的Windows操作系统下的窗口程序中的窗口都是通过一个叫消息循环的死循环实现的。在单片机、嵌入式编程中也经常要用到死循环。

死循环在系统的应用非常多,也非常重要,所有的应用系统都需要设置一个死循环来保证系统的正常运行,如果没有死循环,那么你会一开机马上就关机,因为这个程序已经运行完毕,所以在系统开发中死循环有着极其重要的作用!



路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-16 06:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部