python只能在循环体中使用break_第9课 python while循环、for循环、迭代器和iter()函数...

一、while循环语句

1. while 循环语句结构

while循环中,当条件表达式为真时,就会重复的执行循环体内的语句块,直到条件为假。

count = 1

while count <= 10:

print("这是第%d次循环" % count)

count += 1

# 计数循环

while True:

print("dead loop")

# 死循环

一般情况下,很少使用死循环,除非要求程序一直是执行的,比如持续的网络请求的时候。一般死循环里面都会结合条件判断语句,用以在某些适当的情况下推出循环体。

2. 使用break语句跳出循环体

while True:

name = input("请输入你的名字(按q键退出):")

if name == "q" or name == "Q":

break

else:

print("你的名字是%s," % name +"欢迎你的到来!")

break

break语句是跳出当前语句所在的循环体,如果有循环嵌套的且break是在内层循环的,那么只会跳出内层循环, 不会跳出外层循环。

3. 使用continue语句跳出当次循环

continue 只是跳过当前次循环执行下次循环,并不是跳出整个循环体,示例如下:

count = 10

while count > 0:

if count == 5:

continue

print("loop", count)

count -= 1

# 结果:计数从10到6就停止了

对于嵌套的循环,continue跳过的也是它所在的那层循环的当次循环,与break是相似的。

4. else

count = 0

while count < 10:

print("hello", count)

count += 1

else:

print("while loop done well")

二、for循环语句

python中for循环语句的主要作用就是访问可迭代对象(序列,迭代器,生成器,字典,集合等)中的所有元素,并在所有元素都处理之后自动的结束循环。

1. for语句的语法结构

for 变量名 in 可迭代对象:

语句块

2. 用法示例

dict = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www.taobao.com'}

print "字典值 : %s" % dict.items()

for key,values in dict.items():

print key,values

# 字典值 : [('Google', 'www.google.com'), ('taobao', 'www.taobao.com'), ('Runoob', 'www.runoob.com')]

#Google www.google.com

#taobao www.taobao.com

#Runoob www.runoob.com

# 利用了字典的items() 函数以列表返回可遍历的(键, 值) 元组数组。

3. range函数

range函数是用来生成一个由数字组成的列表的迭代器,它有三个参数,start、stop、step

>>> range(5)

# 生成从0-4的range列表迭代器

>>> range(1, 6)

# 生成从1开始到5的列表迭代器

>>> range(1, 10, 2)

# 生成从1开始到9结束的列表迭代器,每隔两步生成一个(可以理解为两个数之间相差2)

4. 结合range遍历序列类型

chars = "hello world"

for i in range(len(chars)):

print("chars[%d] = %s" % (i, chars[i]))

5. 使用enumerate方法同时返回序列下标和值

list1 = ['学习','测试','很好','可以','别说']

for i, value in enumerate(list1):

print("{}:{}".format(i,value))

6. for循环也有else语句

for i in range(10):

print i

else:

print "done"

三、迭代器和iter()函数

迭代器其实就是一个实现了迭代器协议的容器对象。它基于两个方法:

__next__返回容器的下一个项目

__iter__返回迭代器本身

迭代器可以通过使用一个iter内建函数和一个序列来创建,比如:

>>> i = iter('abc')

>>> i.__next__()

# 得到字符a

'a'

>>> i.__next__()

'b'

>>> i.__next__()

'c'

>>> i.__next__()

Traceback (most recent call last):

File "", line 1, in

StopIteration

当序列遍历完成时,将抛出一个StopIteration异常。这个跟for循环是兼容的,for循环会自动的捕获这个异常,如果捕获到了那么就会停止循环并退出。

迭代器只能不断的往后迭代,而不能往前,也不能复制。如果你需要重复的迭代同一个对象的时候,你只能再重新创建一个新的迭代器了。不过一般情况下,我们很少自己去创建迭代器,因为很多的函数已经内置了。我们只需会用就好了。

比如我们前面学到过的:range()、enumerate()函数都是直接返回一个迭代器。

如何查看一个对象是否是可迭代的?

使用dir函数,查看对象的魔术方法,只要方法里面有__iter__方法的就是可以迭代的(可以通过循环来遍历出来)

四、使用for循环生成各种推导式

解析器(推导式):就是利用for循环在列表、元组、集合、字典等容器类型中迭代一个可迭代对象的元素,将其中的元素放到对应的数据类型中,在迭代创建的过程中可以对数据进行二次加工后再存放。

1. 列表推导式

语法:[ 变量名 for 变量名 in 可迭代对象]

list1 = [x ** 2 for x in range(1, 11)]

# 输出为[1, 4, 9, 16, 25, 36, 49, 64, 81]

list2 = [x for x in range(100) if x % 2 == 0]

# 结合if语句,类似三元操作符的方式,计算 ~100中所有的偶数,也可以下面方式实现,但是会出现很多""空元素

list2 = ["" if x % 2 == 0 else x for x in range(100)]

list3 = [ "stu-{}".format(i) for i in range(1,6)]

#输出结果为['stu-1', 'stu-2', 'stu-3', 'stu-4', 'stu-5']

list4 = [x for x in range(3) for i in range(4)]

list5 = [[x for x in range(4)] for y in range(3)]

list6 = [('a%d' % i, i) for i in range(4)]

# 输出结果为[('a0', 0), ('a1', 1), ('a2', 2), ('a3', 3)]

list7 = [{'stu%d' % i: i+10} for i in range(3)]

#输出结果为[{'stu0': 10}, {'stu1': 11}, {'stu2': 12}]

key = "".join(x for x in ['我','是','李'])

# 输出结果为我是李,字符串拼接

2. 集合推导式(用法与列表相同)

s1 = {x for x in range(10)}

s2 = {x**2 for x in range(10) if x % 2 == 10}

list8 = {x for x in [1, 2, 4, 6, 7, 4, 6, 7, 2, 9]}

# 因为集合是由不重复的无序排列的元素组成,则可以利用此特性去除重复项

3. 字典推导式

d1 = {x: 'a' for x in range(5)}

d2 = {'x%d' % i: i * 2 for i in range(5) }

4. 生成器表达式

生成器表达式返回的是一个生成器(generator),生成器的好处就是当你需要的时候才会去生成,不需要的时候是懒惰的。因此占用很少的内存空间。

生成器表达式是用圆括号括起来的,里面的用法跟其它的推导式是一样的。

g1 = (x for x in range(10))

# 打印g1输出为 at 0x0000025AA6970D58>

# 可以使用 for i in g1 的方式迭代

作业

问题1 :熟练使用python的while循环以及for循环,明白他们之间的区别以及用途。

for主要应用在遍历中,而while循环很少进行遍历使用(语句过多,没有for方便),while主要用于判断符合条件下循环

问题2:熟悉break和continue的用法及含义,特别是循环嵌套的时候,他们的作用范围。

break是跳出循环体,而continue只是跳出当前循环

问题3:熟悉各种方式的推导式的用法,特别是列表推导式的用法,自己多尝试不同的写法,看看结果会是什么样子的。

已练习

问题4:写一个猜字游戏:程序随机生成一个1到100之间的随机数,然后让用户从终端输入数字,如果用户输入的数字大了,那么就提示用户说数字大了,如果小了则提示小了,如果猜对了,则提示猜对了。猜不对的一直循环下去,直到用户猜对为止。(提示需要导入random模块,使用random.randint(start, end)方法可以生成从start到end(包括end)范围的随机数)

import random

i = random.randint(1,10)

print(i)

num = 0

while i != num:

num = input("请你猜一个1~10之间的数字:")

if num.isdigit():

if int(num) > i:

print("大了")

elif int(num) < i:

print("小了")

else:

break

else:

num = input("你输入了非数字内容,按任意键继续")

print("恭喜你,猜对了,数字是:",i)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值