编写 Python 代码的乐趣应该在于看到简短、简洁、可读的类,这些类用少量清晰的代码表达了很多动作——而不是大量让读者厌烦的琐碎代码。
接着上一节的内容继续,我们继续探索Python的流程控制--循环,并去尝试他们实现循环重复任务。之后我们会继续学习编程中最重要的东西之一,函数。
很多时候,我们在处理业务的时候,并不是如果怎么样就怎么样,而是一直做某件事,直到全部做完,甚至永远做不完.....
循环控制,就是让程序循环运行某一段代码直到满足退出的条件,才退出循环。
Python用关键字for和while来进行循环控制,但是没有其它语言的do...while语句。
For 循环
循环允许多次运行一段代码。在 Python 中,循环的基本形式是for循环,它可以遍历可迭代对象。
sum = 0for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
sum = sum + x
print(sum)for item in 'Python': # String is iterable
print(item) # prints all characters of the string
for item in [1,2,3,4,5]: # List is iterable
print(item) # prints all numbers one at a time
for item in {1,2,3,4,5}: # Set is iterable
print(item)
for item in (1,2,3,4,5): # Tuple is iterable
print(item)
for ... in ....:属于固定套路。其实我们在前面的章节已经或多或少的介绍过for的用法,尤其是遍历一些数据类型的时候。
可迭代对象(iterable)
可迭代对象是可以迭代的数据集合。这意味着集合中的项目可以被一个一个地处理。列表、字符串、元组、集合和字典都是可迭代的对象。在可迭代对象上执行的操作是迭代,正在处理的当前项称为迭代器。
player = {'firstname': 'Virat',
'lastname': 'Kohli',
'role': 'captain'
}
for item in player: # iterates over the keys of player
print(item) # prints all keys
for item in player.keys():
print(item) # prints all keys
for item in player.values():
print(item) # prints all values
for item in player.items():
print(item) # prints key and value as tuple
for key, value in player.items():
print(key, value) # prints key and value using unpacking
范围(range)
range是Python中用于生成数字范围的可迭代对象。它通常用于循环和生成列表。range接受3个输入参数start、stop 和 step over,第2和第3可选。
for item in range(10):print('python') # prints python 10 times
for item in range(0,10,1):
print('hello') # prints hello 10 times
for item in range(0, 10, 2):
print('hii') # prints hii 5 times
for item in range(10, 0, -1):
print(item) # prints in reverse order
print(list(range(10))) # generates a list of 10 items
枚举(enumerate)
当循环时需要迭代器的索引时,enumerate非常有用。
for key, value in enumerate(range(10)): # using unpacking techiqueprint(f'key is {key} and value is {value}') # prints key and value at the same time
While循环
while循环语句的控制结构图如下所示:
语法格式:
while 判断表达式:内部代码块
“while”翻译成中文就是“当...”的意思,while循环用伪代码描述就是“当条件满足的时候,就一直运行while所管理的代码块,当条件不满足的时候,就结束while循环。”
While 循环是根据特定条件多次运行代码块的另一种方法。在处理while循环时,我们需要小心一点,以免意外地创建一个无限循环,它会一直执行,直到系统崩溃!
hungry = Truewhile(hungry): # This is always true so it keeps printing until system crashes!
print('Give me something to eat!!')
但尽管while 循环很酷。它们写得简单,读起来容易。我们只需要告诉解释器何时停止循环。这可以通过使用break语句来完成,该语句可以停止循环执行并中断循环。另一种方法是使条件变成False或者不成立,以停止执行。
hungry = Truewhile(hungry):
print('Give me something to eat!!')
break # prints only once and stops the loop executionhungry = True
satisfaction = 0
while(satisfaction < 10):
satisfaction += 1
print('Give me something to eat!!') # prints 10 times
while循环的另一个特点是它可以与else块组合。
hungry = Truesatisfaction = 0
while satisfaction < 10:
satisfaction += 1
print('Give me something to eat!!')
else:
print('I am super satisfied now') # gets printed once condition is falsy
需要注意的是,如果在while块中使用了break语句,则不会执行else块。
While 与 For 循环
当知道需要循环的可迭代范围时,For循环通常很有用。然而,当我们想多次执行某个任务而事先不知道范围时,while循环就可以派上用场。
while True:response_from_user = input('Enter some message. Enter bye to exit')
if(response_from_user == 'bye'):
break
除了break语句之外,还有另外两个语句,continue它们不是跳出循环而是继续迭代。pass不经常使用,但有时用作占位符以在循环后继续执行语句。
除了break语句之外,还有另外两个语句,continue,它不是中断循环,跳出当前循环,而是继续迭代。pass不常用,但有时它被用作占位符,以便在循环后继续执行语句。
循环的嵌套
if判断可以嵌套,while和for当然也可以嵌套。但是建议大家不要嵌套3层以上,那样的效率会很低。下面是一个嵌套for循环结合else子句的例子:
# 这是一个判断质数的程序for n in range(2, 100):
for x in range(2, n):
if n % x == 0:
print(n, '等于', x, '*', n//x)
break
else:
# 循环中没有找到元素
print(n, ' 是质数')
break语句
通常情况下的循环要么执行出错,要么死循环,要么就只能老老实实等它把所有的元素循环一遍才能退出。如果想在循环过程中退出循环,怎么办?用break语句!
break只能用于循环体内。其效果是直接结束并退出当前循环,剩下的未循环的工作全部被忽略和取消。注意当前两个字,Python的break只能退出一层循环,对于多层嵌套循环,不能全部退出。
for letter in 'Hello world': # 第一个实例if letter == 'd':
break
print ('当前字母为 :', letter)
--------------------------------------------
var = 10 # 第二个实例
while var > 0:
print ('当期变量值为 :', var)
var -= 1
if var == 5:
break
continue语句
与break不同,continue语句用于跳过当前循环的剩余部分代码,直接开始下一轮循环。它不会退出和终止循环,只是提前结束当前轮次的循环。同样的,continue语句只能用在循环内。
for letter in 'Hello world': # 第一个实例if letter == 'o': # 字母为 o 时跳过输出
continue
print ('当前字母 :', letter)
-------------------------------------------------------
var = 10 # 第二个实例
while var > 0:
var -= 1
if var == 5: # 变量为 5 时跳过输出
continue
print ('当前变量值 :', var)
Python没有goto语法
前面说了,在嵌套循环中,break只能跳出当前层的循环,无法全部跳出。在C语言中有goto语法,可以实现这一功能,但是Python没有goto。那有需求的时候怎么办呢?设置flag!
flag = False # 用于控制外层循环的标志for i in range(10):
if flag: # 当flag被内层循环设置为True的时候,跳出外层循环
break
for j in range(10):
if j==7:
flag = True
break
print(i,j)
快速编码练习
让我们在电子邮件列表中找到重复的电子邮件并打印它们。
email_list = ['roger@hey.com','michael@hey.com','roger@hey.com','prince@gmail.com']duplicate_emails = []
for email in email_list:
if email_list.count(email) > 1 and email not in duplicate_emails:
duplicate_emails.append(email)
print(duplicate_emails)
这就是我解决问题的方法。在评论中告诉我你会如何解决这个问题。
总结
这就是今天的全部内容。涉及到了流程控制中的循环模块,分为while和for循环,使用break和continue进行跳过或者停止循环,Python没有goto语法,切记。
又度过了美好的一天