循环是计算机可以帮我们做重复的大量的计算操作,比如要计算 1 + 2 + 3,我们可以直接写表达式,计算从 1 加到 1000,如果你一个一个加的方式去写代码,老板就要气疯了,此时我们就需要用循环了。
Python 的循环有两种:一种是 for 循环,一种是 while 循环。
for 循环的写法为 for x in Y
,就是把 Y 里面的每个成员(dict 带入的是键)带入 x(无论该成员有多复杂),
一般 Y 是集合(比如 str,list,tuple,dict,set 以及自定义可以遍历的类型)。
complex_list = ["ruhua", "xingxing", "zhaoritian", (1,), [2, 3], {"name": u"hauhua", "age": 18}] for item in complex_list: print(item)
用 for 循环直接遍历 dict 带入的是键,如果想带入值和成员,可以使用 dict 的 values 函数和 items 函数。
students_dict = {"name": "ruhua", "age": 18} for student in students_dict: print(student) # 带入的是键 for student in students_dict.keys(): print(student) # 带入的是键 for student in students_dict.values(): print(student) # 带入的是值 for student in students_dict.items(): print(student) # 带入的是成员
用 for 循环计算从 1 加到 1000 的总和,我们可以用 range 函数,range(1000)
实际上是生成一个
0 到 999 的 range 对象;我们也可以使用 range 函数生成某个范围的数放入 range 对象里面,比如 range(2, 5)
,注意是左闭右开。
for i in range(1000): print(i) print(range(2, 5))
注意:在 Python 2 中多了一个 xrange 函数,xrange 函数的作用和 range 相同,只是 xrange 函数返回的是一个迭代器;而 Python 2 的 range 函数返回的则是一个 list 类型对象。
while 循环,只要条件为真,就不断循环,直到条件为假时退出循环。
suppermen = ["如花", "星星", "赵日天"] smlen = len(suppermen) counts = 0 while counts < smlen: print(suppermen[counts]) counts += 1
重要的事情再说一遍,while 判断的是真假,对于各种数据类型的假值有: 整数 0, 浮点数 0.0, 字符串 "", 动态数组 [], 元组 (), 集合 set([]), 字典 {} 和自定义类型空对象,对于所有类型的非假值即为真值。
continue 语句可以结束本次循环,然后回到 while 或者 for 判断语句位置进行判断,重新开始下一次循环。
# 打印出 1 到 10 之间的偶数 for item in range(1, 11): if item % 2 != 0: continue print(item)
continue 语句会破坏逻辑,容易导致程序易读性差,大多数循环并不需要用到 continue 语句,我们可以通过改写循环条件或者修改循环逻辑去掉 continue 语句。
# 打印出 1 到 10 之间的偶数 for item in range(1, 11): if item % 2 == 0: print(item)
break 语句可以使循环运行到该处结束循环,跳到循环之外。我们看个例子:找出字符串中 是否有 "学" 字符串,有的话打印出下标并退出循环,否则不输出。
strone = u"Python 学习基地" for index, item in enumerate(strone): # enumerate 函数返回一个元组,该元组有两个成员:索引和成员。 if item == u"学": print(index) break
break 语句虽然在程序中会经常用到,但 break 也会破坏逻辑,尽量少用。
for 循环和 while 循环的使用。
continue 语句和 break 语句的作用。
著名公司(某东)找出姓名为 "星星" 的超人,找到后打印出姓名并退出循环,否则打印 "无此人"。
suppermen = ["jack马", "星星", "赵日天"] # 请在下面完成代码
suppermen = ["如花", "星星", "赵日天"]
for item in suppermen:
if item == "星星": print(item) break elif all(item) != "星星": print("无此人")
结果: 无此人 星星
suppermen = ["如花", "星", "赵日天"] for item in suppermen: if item == "星星": print(item) break elif all(item) != "星星": print("无此人")
··· suppermen = ["如花", "星", "赵日天"]
for item in suppermen:
if item == "星星":
print(item)
break
elif all(item) != "星星":
print("无此人") ···
suppermen = ["如花", "星星", "赵日天"] for item in suppermen: if item == "星星": print(item) break else : print("无此人")
suppermen = ["如花", "星", "赵日天"] for item in suppermen: if item == "星星": print(item) break elif all(item) != "星星": print("无此人")
suppermen = ["如花", "星", "赵日天"]
for item in suppermen: if item == "星星": print(item) break elif all(item) != "星星": print("无此人") ...
suppermen = ["如花", "星", "赵日天"]
for item in suppermen: if item == "星星": print(item) break elif all(item) != "星星": print("无此人")
suppermen = ["如花", "星", "赵日天"]
for item in suppermen: if item == "星星": print(item) break elif all(item) != "星星": print("无此人")
suppermen = ["如花", "星", "赵日天"] for item in suppermen: if item == "星星": print(item) break elif all(item) != "星星": print("无此人")
suppermen = ["如花", "星星", "赵日天"]
for index, item in enumerate(suppermen):
if item == u"星星": print(index) print(item) else: print("无此人")
结果
无此人
1
星星
无此人
suppermen = ["如花", "星星", "赵日天"]
for item in suppermen:
if item == "星星": print(item) else: print("无此人")
break语句可以在循环过程中直接退出循环,而continue语句可以提前结束本轮循环,并直接开始下一轮循环。这两个语句通常都必须配合if语句使用。
要特别注意,不要滥用break和continue语句。break和continue会造成代码执行逻辑分叉过多,容易出错。大多数循环并不需要用到break和continue语句,上面的两个例子,都可以通过改写循环条件或者修改循环逻辑,去掉break和continue语句。
有些时候,如果代码写得有问题,会让程序陷入“死循环”,也就是永远循环下去。这时可以用Ctrl+C退出程序,或者强制结束Python进程。
一直有点模糊,看了这个明白多了。感谢博主精彩演绎!
作业:找出超人“星星”,并打印姓名,否则打印“查无此人”
supperman = ["Jack马","星星","赵日天"] for item in enumerate(supperman): if item == "星星": print(item) break else: print("查无此人")