欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python学习笔记(1)For Loops for循环

程序员文章站 2022-07-12 21:08:57
...

Python for循环

学堂在线第三讲,简单算法

我们会发现当型循环通常在一系列选择中进行迭代。
通常,尤其在穷举法中,这一系列选择
是一个按照顺序的完整序列。
我们至今遇到的所有例子中,对象都是整数。
如果我们在一系列选择中完成那种迭代、那种循环,
Python将会提供一种非常有用特殊机制
来处理这一问题。
它被称为for循环。
for循环相关的语法。
它的形式如下:

for<identifier> in <sequence>:
   <code block>

这里有一些特殊标识符。
然后又是一些标识符。
这些标识符仅为名称,我将它们
放到角括号里,便于提示。
我们举个例子,将in输入其中,
那么,in就是关键词。
再往下是一些序列,即选择的集合,
以冒号结尾。
接下来缩进的便是代码块。
和往常一样,代码块的意义在于告诉我们接下来将要完成的任务。
以上便是for循环的格式。

接下来我们谈谈for循环背后蕴含的一些思想。

  • 在循环开始时,标识符最初会绑定到序列里的第一个值。
  • 接着运行代码块。
  • 运行结束后,标识符将会绑定到序列里的下一个值。
  • 运行代码块。

如果我们就此停下来了,你也许会感到焦虑不安。
你也许会问,我们难道不应该将序列中所有
可能的值都运行一遍吗?

答案是肯定的。
将会重复上述执行过程,直到序列中所有的值都已运行,或我遇到一个名叫break的特殊关键词。
当我遇到break语句时,它将引领我跳出for循环的计算,跳转到下一个代码片段。

所以break语句是一种基于测试结果提示我何时该跳出for循环的好办法。

好的。
接下来,我们花点时间看一个for循环的例子。

但是这就是它的基本原理。我只需操作运行一系列选择,直到我遇到测试并转到break,或者运行完所有可能的选项。

我还有另一个问题。
如果我想要生成一个整数序列,那我该怎么做呢?
我们可以用很多方法生成序列,但是在很多情况下,正如我们所遇到的,我们更愿意从0,1,2,3…这样的自然数序列出发来处理一切。
对于这一点,我们可以应用一个内置函数,range(n) [0,1,2,3,...,n-1]
range,以及它的参数n,请注意n位于
圆括号中间,将会为我们提供一个从0到n-1的自然数序列。
如果我想从其它数字开始整数序列,那我需要给定 range(m,n) = [m,m+1,...,n-1]
两个参数m和n。
它会给我m,m+1到n-1的整数序列。
基于上述两种原理,让我们来看看如果我们返回并清理之前求立方根的函数会怎样。
这是代码。

x=int(raw_input('Enter an integer:'))
 for ans in range(0,abs(x)+1):
       if ans**3 == abs(x):
           break
       if ans**3 != abs(x):
           print(str(x)+'is not a perfect cube') 
        else:
        		if x < 0:
        		   ans = -ans
        		 print('Cube root of' + str(x) + 'is' + str(ans) )

这和我们之前写的类似,但是它更为简洁。
这是好事。同样,程序需要我提供一个
需要运算的整数。
我会输入这个整数,同时通过类型转换等方法
确保它的数据类型是整型。
接下来注意这边的这个loop循环。
这是我的标识符,代表answer, ans,in。
这边是值域,请注意,它会做些什么。
它将生成一个整数序列,0,1,2一直到
x的绝对值。
这个for循环会在值域中从0开始搜寻答案,
执行循环体代码。

注意循环体格式。

循环体内部有一个测试,如果测试为真,那么break将出现。
我们的形式如下:

  • 序列生成环节。
  • 测试环节,或者可称为检验环节。

我将在0,1,2,3…直到x的
值域中依次搜寻答案。
一旦我越过了x,我将停止搜寻。
但是在循环内部,我也将进行检验。
如果当前值的立方正好等于x的绝对值,也就是我正苦苦搜寻的目标,那我的工作就圆满完成了。
break语句将会被触发。
break语句将会将我抛出循环,把我带到循环体之外的
下一个代码片段。
在那种情况下,我还要进行一次检验。
我为什么最后还要再进行一次检验呢?
好吧,事实上我并不确定到底是我是因为遇到了break语句而跳出循环,还是因为
运行完了整个值域里所有可能的值。
因此,我需要检验现在处于上述两种情况中的哪一种。
如果我是因运行了值域内的所有数值而结束循环–换句话说,
当前值的立方不是x的绝对值,就是说并不是因为检验测试而跳到当前位置,
我需要返回事实,即x不是一个完美的立方数。
否则,我将会继续我之前的工作。
确保我清楚我打算使用的是哪个符号,然后
将正确的结果输出。

现在让我们来做个检验测试吧。
在IDLE当中,这是我的代码。
它囊括了上述所有的代码。
现在如果我运行这段代码,它会要求我提供一个整数作为输入。
我将输入我的老朋友27.
结果出来了。

cube root of 27 is 3

让我们再试一遍。
让我们将x的值设定为-27。
结果确实是这样的。
让我们再试一遍。
让我们试一些更有趣的值吧。

好的。
我大概知道了那不是一个完美的立方数。
这确实是段相当高效的代码。

那么它到底做了什么?

  • 通过使用值域,它生成了一个穷举的序列。
  • 当我需要的时候,它会每次执行一个数值。
  • 在每一次执行循环内代码块时,它都将执行检验,以便验证是否已经发现了我想要搜寻的目标数值。

通过诸如此类的生成和检验的思想,我确实写出了能够有效完成目标数值搜寻任务的一小段代码。
当我们继续学习时,我们将会进一步依赖于这一思想。

相关标签: python 穷举法