30天Python入门到进阶——第6天:循环和函数

30天Python入门到进阶——第6天:循环和函数

编写 Python 代码的乐趣应该在于看到简短、简洁、可读的类,这些类用少量清晰的代码表达了很多动作——而不是大量让读者厌烦的琐碎代码。

接着上一节的内容继续,我们继续探索Python的流程控制--循环,并去尝试他们实现循环重复任务。之后我们会继续学习编程中最重要的东西之一,函数

很多时候,我们在处理业务的时候,并不是如果怎么样就怎么样,而是一直做某件事,直到全部做完,甚至永远做不完.....

循环控制,就是让程序循环运行某一段代码直到满足退出的条件,才退出循环。

Python用关键字for和while来进行循环控制,但是没有其它语言的do...while语句。

For 循环

循环允许多次运行一段代码。在 Python 中,循环的基本形式是​​for​​循环,它可以遍历可迭代对象。

sum = 0
for 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 techique 
print(f'key is {key} and value is {value}') # prints key and value at the same time

While循环

while循环语句的控制结构图如下所示:

30天Python入门到进阶——第6天:循环和函数

语法格式:

while 判断表达式:
内部代码块

“while”翻译成中文就是“当...”的意思,while循环用伪代码描述就是“当条件满足的时候,就一直运行while所管理的代码块,当条件不满足的时候,就结束while循环。”

While 循环是根据特定条件多次运行代码块的另一种方法。在处理while循环时,我们需要小心一点,以免意外地创建一个无限循环,它会一直执行,直到系统崩溃!

hungry = True
while(hungry): # This is always true so it keeps printing until system crashes!
print('Give me something to eat!!')

但尽管while 循环很酷。它们写得简单,读起来容易。我们只需要告诉解释器何时停止循环。这可以通过使用​​break​​语句来完成,该语句可以停止循环执行并中断循环。另一种方法是使条件变成False或者不成立,以停止执行。

hungry = True
while(hungry):
print('Give me something to eat!!')
break # prints only once and stops the loop execution
hungry = True
satisfaction = 0
while(satisfaction < 10):
satisfaction += 1
print('Give me something to eat!!') # prints 10 times

​while​​循环的另一个特点​是它可以与​​else​​块组合。

hungry = True
satisfaction = 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语法,切记。

发表评论

相关文章