本文概述
- While循环
- 对于循环
- While与Python中的For循环
- 嵌套循环
- 中断并继续关键字:创建无限循环
- range()与xrange()
- 磨练你的Python技能!
文章图片
循环在Python或任何其他编程语言中都很重要, 因为它们可以帮助你重复执行代码块。你经常会遇到需要一遍又一遍地使用一段代码, 但又不想多次编写同一行代码的情况。
在此Python循环教程中, 你将涵盖以下主题:
- Python while循环:你将学习如何在数据科学应用程序中构造和使用while循环。你将通过解决一些交互式编码挑战来做到这一点。
- 接下来, 你将进入for循环:再次, 你将学习如何在现实环境中构造和使用for循环。
- 你还将学习使用while循环和for循环之间的区别。
- 也是嵌套循环的主题
- 之后, 你将看到如何使用break和continue关键字。
- xrange()和range()函数之间的区别 :target:before { content:" " ; display:block; height:150px; margin:-150px 0 0; } h3 {font-weight:normal; margin-top:.5em} h4 { font-weight:lighter }
考虑到所有这些, 你可以轻松理解while循环的以下定义:
while循环是一种编程概念, 实现后, 将在给定条件仍然成立的情况下, 一遍又一遍地执行一段代码。
上面的定义还突出显示了在Python中构造while循环所需的三个组件:
- while关键字;
- 转换为True或False的条件;和
- 你要重复执行的代码块
如何在Python中制作While循环
既然你知道构造While循环的必要条件, 那么现在要做的就是看一个真实的示例, 在开始自己做练习之前, 使用while循环!考虑以下示例:
# Take user inputnumber = 2# Condition of the while loopwhile number <
5 :print("Thank you")# Increment the value of the variable "number by 1"number = number+1
Thank youThank youThank you
上面的代码示例是一个非常简单的while循环:考虑一下, 你之前阅读过的三个组件都存在:while关键字, 后跟一个转换为True或False(数字< 5)和你要重复执行的代码块:
print("Thank you")number = number + 1
如果你在上面的代码中进行了详细介绍, 你会看到存在一个存储整数2的变量数字。由于number的值小于5, 因此你将打印” 谢谢” 并使用一。当number的值保持小于5时, 你将继续执行while循环中包含的两行代码:
"Thank you""Thank you"
在number的值等于5且条件不再评估为True之前, 你还要打印两次” 谢谢” 。由于条件现在的值为False, 因此你将退出while循环并继续执行程序(如果包含更多代码)。在这种情况下, 没有更多的代码, 因此你的程序将停止。
上面的示例有点基本, 你还可以包括条件, 或者换句话说, 如果条件, 以使其更具个性化。看下面的例子:
# Take user inputnumber = 2 # Condition of the while loopwhile number <
5 :# Find the mod of 2if number%2 == 0:print("The number "+str(number)+" is even")else:print("The number "+str(number)+" is odd")# Increment `number` by 1number = number+1
The number 2 is evenThe number 3 is oddThe number 4 is even
现在, 让我们练习!
编写一个函数collat??z(), 该函数使用户可以在名为number的变量中输入整数。如果数字为偶数, 则应打印数字/ 2的结果。如果number为奇数, 则collat??z()应打印并返回3 * number +1。程序应继续对number调用函数collat??z(), 直到返回1。
请注意, 这实际上是collat??z序列的实现, 简而言之是一个数学问题, 你可以选择一个数字, 并继续进行上述计算, 直到得出结果1。
在下面, 你可以找到解决方案:
def collatz(number):# Is the mod of 2 equal to 0?if number % 2 == 0:print(number // 2)return number // 2# If the mod of 2 isn't equal to 0, print `3 * number + 1`elif number % 2 == 1:result = 3 * number + 1print(result)return result# Ask input from the usern = input("Give me a number: ")# As long as `n` is not equal to `1`, run `collatz()`while n != 1:n = collatz(int(n))
Give me a number: 5168421
对于循环 你可以以与while循环相同的方式处理for循环。如你所料, ” for循环” 中的” for” 组件是指你执行了一定次数的操作。
如果你牢记以上所有内容, 则可以轻松地如下定义for循环:
for循环是一种编程概念, 当实现该循环时, 它会根据序列一次又一次地” 重复” 执行一段代码。
【Python循环语句用法教程】与while循环相反, 没有任何活动条件参与-你只需多次重复执行一段代码。换句话说, 虽然while循环仅在条件为True之前继续执行其中包含的代码块, 但是for循环仅执行特定次数的执行。此” 次数” 由事物的顺序或有序列表确定。
你将稍微了解一下while和for循环之间的区别, 但是现在, 请集中精力创建一个for循环所需的以下内容:
- for关键字
- 一个变量
- in关键字
- range()函数, 这是Python库中用于创建数字序列的内置函数
- 你要重复执行的代码
# Print "Thank you" 5 timesfor number in range(5):print("Thank you")
Thank youThank youThank youThank youThank you
如你所见, 在上一节中看到的组件在Python的这个for循环小示例中返回:for关键字, 变量号, in关键字, range()函数和你想要的代码执行多次, 请打印(“ 谢谢” )。
那不是那么难, 对吧?
让我们考虑一个for循环的示例, 在该示例中, 你使用两个变量来定义控制流:
languages = ['R', 'Python', 'Scala', 'Java', 'Julia']for index in range(len(languages)):print('Current language:', languages[index])
Current language: RCurrent language: PythonCurrent language: ScalaCurrent language: JavaCurrent language: Julia
如你所见, 你可以使用for关键字开始循环。接下来, 你将使用变量索引和语言, in关键字以及range()函数来创建数字序列。此外, 你看到在这种情况下你还使用len()函数, 因为语言列表不是数字。你要重复执行的代码段是一条打印语句, 即print(‘ Current language:’ , languages [index])。
在上面的循环中, 你要表示要针对len(languages)范围内的每个索引, 打印数据科学编程语言。现在, len(languages)为5, 因此该语句也可以重写为:
for index in range(5):print('Current language:', languages[index])
Current language: RCurrent language: PythonCurrent language: ScalaCurrent language: JavaCurrent language: Julia
这再次给你相同的结果!
While与Python中的For循环 让我们再次回顾第一个while循环示例, 以确定while和for循环之间的确切区别。你已经在上面读到了区别在于所涉及的条件或不涉及的条件, 但是这在代码中如何体现出来, 又如何在两者之间切换?
# Take user inputnumber = 2while number <
5 :print("Thank you")# Increment `number` by 1number = number+1
Thank youThank youThank you
你可以使用for循环以更可控的方式打印语句” 谢谢” :
# Print "Thank you" 3 timesfor number in range(3) :print("Thank you")
Thank youThank youThank you
看到将while循环转换为等效的for循环有多么容易?
你问它如何运作?好吧, 这很简单。
在for循环中, range函数内提到的整数是范围或控件需要循环并执行for循环子句中的代码的次数。
请注意, range()函数的计数从0开始, 而不是从1开始。这意味着, 在上面的示例中, 计数应类似于0, 1, 2, 而不是1, 2, 3。这就是计算机内存中数字计数的工作方式。因此, 在设计for循环时, 请始终记住, 必须考虑从0而不是从1开始的范围计数。
提示:例如, 这与Python中的列表相同。如果你想进一步了解Python列表, 请考虑查看srcmini的18个最常见的Python列表问题教程。
现在, for循环和while循环之间还有另一个有趣的区别。 for循环比while循环快。要了解这一点, 你必须查看以下示例。
import timeit# A for loop exampledef for_loop():for number in range(10000) :# Execute the below code 10000 timessum = 3+4#print(sum)timeit.timeit(for_loop)
267.0804728891719
import timeit# A while loop exampledef while_loop():i =0while i<
10000:sum = 3+4#print(sum)i+=1timeit.timeit(while_loop)
884.9233417965908
在上面的代码块中, 你有两个带有大约10000次迭代的循环。乍一看, 两者看起来都是一样的, 直到你了解幕后并了解这两个循环的工作原理。提示:timeit()函数为你提供了可能有所不同的线索!
请记住:所有Python代码都是使用C编译器编译的, 这意味着你在上面看到的代码首先被分解为字节码, 然后由基础C编译器进行处理。
当上述示例中的for循环开始执行时, Python解释器与基础C编译器进行对话, 然后创建一个大小为10000的列表对象。接下来, 它调用一个迭代器以触及其中10000个项目中每个项目的索引。名单。
另一方面, while循环的执行不会创建任何列表对象。实际上, 底层C编译器针对条件i < 10000 9999次调用布尔比较运算符。
你已经可以想象到, 与重复执行布尔操作9999次相比, 对编译器而言, 对已创建的具有10000个元素的列表对象进行迭代要容易得多, for循环的时间性能优于while循环的时间性能。这清楚地反映在执行时间上:for循环完成的时间比while循环需要完成的时间小得多。
现在尝试一下for循环!请注意, 你要指定的范围是0到11, 因为你只想显示序列中的数字, 最多55个, 即序列中的第11个数字。
嵌套循环 正如你在上面的示例中注意到的那样, while循环中有一个if-else条件, 使你可以在代码中引入更多条件。
坚持, 稍等!
这不是定制循环的唯一方法。你还可以在现有代码中包含更多while循环, 这被称为嵌套循环。你可以修改上面的示例以包括另一个while循环, 如下所示:
# Take user inputnumber = 2 # condition of the while loopwhile number <
5 :# condition of the nested while loopwhile number % 2 == 0: print("The number "+ str(number)+" is even")
在上面的示例中, 还有一个while循环” 嵌套” 在外部循环中, 该内部循环又进行了一次检查, 以查看数字%(mod)2是否为0。
换句话说, 它检查数字是否为偶数, 然后打印语句” 数字为偶数” 。
但是有一个陷阱:如果仔细观察, 你会发现这次与前面的代码一样, 缺少number = number + 1条语句。由于你没有在任何地方增加变量号, 因此变量的值每次都保持不变, 并且代码进入无限循环。这意味着, 一旦它进入循环, 它就永远不会离开并打印无数次语句, 因为变量数将始终设置为2。该数当然小于5且为偶数。
现在让我们看一下嵌套的for循环是什么样的:
# Print the below statement 3 timesfor number in range(3) :print("-------------------------------------------")print("I am outer loop iteration "+str(number))# Inner loopfor another_number in range(5):print("****************************")print("I am inner loop iteration "+str(another_number))
-------------------------------------------I am outer loop iteration 0****************************I am inner loop iteration 0****************************I am inner loop iteration 1****************************I am inner loop iteration 2****************************I am inner loop iteration 3****************************I am inner loop iteration 4-------------------------------------------I am outer loop iteration 1****************************I am inner loop iteration 0****************************I am inner loop iteration 1****************************I am inner loop iteration 2****************************I am inner loop iteration 3****************************I am inner loop iteration 4-------------------------------------------I am outer loop iteration 2****************************I am inner loop iteration 0****************************I am inner loop iteration 1****************************I am inner loop iteration 2****************************I am inner loop iteration 3****************************I am inner loop iteration 4
上面的代码是第一个for循环示例的修改版本。注意在外部循环中如何使用第二个for循环。
继续执行代码。
你将发现该控件进入第一个for循环, 并且变量number的值初始化为0。打印第一个print语句, 然后控件进入第二个for循环, 其中变量another_number的值初始化为0。第二个for循环中的第一个print语句被打印一次。
现在, 该控件再次返回到内部for循环, 并且another_number的值再次初始化为下一个整数, 然后在print()函数内部打印该语句。
继续上述过程, 直到控件遍历了range()函数的末尾(在本例中为5), 然后控件返回最外层的循环, 将变量号初始化为下一个整数, 并在其中打印语句print()函数访问内部循环, 然后重复上述所有步骤, 直到遍历range()函数为止。
控件的这一过程从最外层的循环开始, 遍历内层的循环, 然后再返回到外层的for循环, 直到控件覆盖整个范围(在你的情况下为3倍)为止。
既然你已阅读了有关嵌套循环的一些说明, 那么该开始自己了!编写一个Python程序, 使用嵌套的for循环构造以下模式:
文章图片
中断并继续关键字:创建无限循环 你可以使用break并在创建的任何循环中继续。这些关键字不仅限于打破故意的无限循环, 而应谨慎使用。这两个关键字使其他人(包括你自己在几个月后回头查看代码时)难以理解循环中的控制流以及条件的终止位置。此外, 你不需要使用break和continue关键字:到目前为止, 你没有它们就做得很好!
但是, 在某些情况下, 编写有目的的无限循环比你到目前为止看到的传统的for和while循环更为清楚。当然, 在这种情况下, 鼓励使用这些关键字!
在Python中中断和继续While循环
幸运的是, 有一种方法可以突破上述无限循环的情况, 那就是使用break关键字。
# Take user inputnumber = 2 # Condition of the while loopwhile number <
5 :# condition of the nested while loopwhile number % 2 == 0:print("The number "+str(number)+" is even")breaknumber+=1
当你运行上面的代码时, 它不再进入无限循环。
“ 这是什么法术!” 你喊。 -我说放松, 这不是巫术。
发生的情况是, 当控件遇到break关键字时, 它将理解它必须退出循环(在这种情况下为内部循环)并执行下一行代码。因此, 它会从内部while循环中跳出并进入外部循环, 并继续执行其通常的工作, 直到外部while循环中的条件成立为止。
你应该考虑以下事实:在break关键字之后必须存在一行代码, 否则它不会起作用。在上面的示例中, 尝试删除break关键字之后的代码行, 然后执行代码。
如果你在break语句后潜入continue关键字怎么办?你可以按照以下代码进行操作:
# Take user inputnumber = 2 while number <
5 :while number % 2 == 0: print("The number "+str(number)+" is even")breakcontinuenumber+=1
上面的代码是break关键字示例的稍作修改的版本。
当你运行上述代码时, 你将再次遇到无限循环。在开始沮丧地拉头发之前, 请仔细看一下。你会发现休息后有一个继续关键字。 continue关键字所做的是, 即使在变量号增加之前, 它仍将控制权转移回最外层的循环, 因此代码进入了无限循环。
中断并继续循环
如果你不想在整个示例中对整个范围执行内部for循环, 该怎么办?你可以像在while循环中一样使用break语句。
# Print the below statement 3 timesfor number in range(3) : print("-------------------------------------------")print("I am outer loop iteration "+str(number))for another_number in range(3):print("****************************")print("I am inner loop iteration "+str(another_number))break
在上面的示例中, 内循环之后的break关键字指示控件从内循环中脱离出来, 然后控件返回到外循环。
运行以下代码示例:
# Print the below statement 3 timesfor number in range(3) :print("-------------------------------------------")print("I am outer loop iteration "+str(number))continuefor another_number in range(3):print("****************************")print("I am inner loop iteration "+str(another_number))break
在上面的代码中, 仅执行最外层的循环, 而控件甚至不接触内层的循环。
“ 为什么?” 你问。
仔细看一下代码。最外层循环中的第二个print语句之后有一个continue关键字。它的作用是指示控件跳回到外部for循环并重新开始, 这就是为什么控件从不接触内部循环的原因。
与while循环不同, for循环中的break关键字之后不需要任何代码。一个单独的中断循环将在for循环内正常工作。
range()与xrange() 这两个函数彼此相似, 但是如果你使用的是Python 3, 则只有range()函数可用。在Python 3.x中, xrange()函数被重命名为range()。这意味着, 如果你尝试在Python 3中使用xrange()函数, 则会出现NameError:名称’ xrange’ 未定义错误。
要了解这两个功能的相似之处, 请考虑以下示例:
# Print the below statement 3 timesfor number in range(5, 10, 2) :print("I am number : "+str(number))
I am number : 5I am number : 7I am number : 9
通过运行上面的代码, 你将看到如何将变量号的值跳过2倍, 这是由于range()函数中的参数所致。
此函数中的第一个参数是开始参数。这是控件开始计数的地方。第二个参数是停止参数, 是控制必须停止的点, 最后一个参数是步进功能, 它定义了控制在计数时必须跳变的因子。
因此, 在上述情况下, 控件从5开始, 然后遍历循环直到9, 同时在每次计数期间加2。这意味着5、5 + 2 = 7、7 + 2 = 9。
你已经了解了range()函数如何用于定义代码必须循环的次数。现在, 在Python 2.x中, 你还将找到另一种方法, 那就是使用xrange()函数。运行以下代码:
# Print the below statement 3 timesfor number in xrange(10) :print("I am number : "+str(number))
I am number : 0I am number : 1I am number : 2I am number : 3I am number : 4I am number : 5I am number : 6I am number : 7I am number : 8I am number : 9
你在上述代码的输出与没有xrange()函数的代码的输出中看到了什么区别?没有不同?
那就对了。你不会在代码输出中看到任何差异。
那么, 为什么要使用xrange()函数呢?你将在本教程的稍后部分进行介绍。首先运行以下代码:
print(xrange(10))print(range(10))
xrange(10)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
你可以看到在以上代码的输出中, 两个print语句的输出都有差异。在包含xrange()函数的print语句中, 将打印出xrange()函数对象。这与具有range()函数的print语句不同:在此处, 你会得到一个从0到9的整数列表。
现在, 这正是range()函数和xrange()函数之间的区别。
定义range()函数时, 整个范围的列表将存储在RAM中并显示给你。但是, 定义xrange()函数时, 列表未存储在内存中。相反, xrange()函数会在需要时在整个范围内生成整数。这样, xrange()函数有助于在资源匮乏的系统中节省内存。
磨练你的Python技能! 恭喜, 你已完成本教程的结尾。既然你已经学习了如何在Python中使用循环, 请继续练习。练习越多越好!
推荐阅读
- 使用矩阵分解查找相似的名称
- LDA2vec(主题模型中的单词嵌入)
- 学习数据科学-Python和R资源
- 学习数据科学-信息图
- Kaggle教程(EDA和机器学习)
- Google Cloud和数据科学(入门指南)
- CMD命令处理在Win7系统安全模式无法加载disk.sys的问题
- 深度技术win7 64位迅速装机版系统最新下载图文详细教程
- 深度技术w7最新64位安全体验版系统下载全过程