我是python的绝对初学者,我的教授正在尝试用火法来教我们这门语言。目标是在关系{(a,b,c)中列出三元组:a,b和c是0和0的整数。 a< b< c< 5}。使用范围(5)作为a,b和c值的来源。
我想我理解它是什么的一般概念,我设置a,b,c的值很好,但是我不知道如何打印出那样的变量?我正在考虑使用某种类似while循环的同时a< b< c打印出(a,b,c)或其他东西,但我无法使用语法。
非常感谢你的帮助!
答案 0 :(得分:4)
因此,您需要更改0-4范围内的a
,b
和c
中的每一个(range(5)
生成的内容)。为此,您可以使用三个嵌套的for
循环。
for a in range(5):
for b in range(5):
for c in range(5):
这将确保针对a
的每个可能值,尝试b
的所有可能值,同样地,对于b
的每个可能值,c
的所有可能值1}}尝试过。换句话说,对于c
的每个值,最里面的(最底部的,因为它们被重写)循环b
将经历0-4,这也是通过0-4 a
的每个值,也通过0-4。
现在在这些循环中,您只需要检查您的教授给出的标准是否为真,如果是,则打印数字。幸运的是,你的教授给出的语法在Python中运行良好:
if 0 < a < b < c < 5:
print(a, b, c)
总而言之,我们有:
for a in range(5):
for b in range(5):
for c in range(5):
if 0 < a < b < c < 5:
print(a, b, c)
现在,这样做很好,毫无疑问会让你的教授满意,但是你可以对这个程序做一些简单的改进。首先,变量每个都从0到4,但值0永远不会通过if
测试,因为它永远不会小于0!那么为什么要尝试呢?您可以通过将每个范围写为range(1, 5)
来节省一些工作。
但是......还有一个事实是,如果a
为1,则b
永远不能为1(因为a < b
必须为true,如果{{1} }}是2,a
同样也不能是2,依此类推。而且,从范围的另一端开始,如果b
为4,则c
永远不能为4我们可以相应地编写范围,以便b
的范围从b
开始1,在 a
之前离开一个,这样那些永远不要测试价值组合。
最后,您的c
语句也可以简化:由于使用的范围,您不需要确保0小于if
;永远都是如此,因为a
从1开始。与此同时,您知道a
将始终小于5,因为c
会这样做,所以您可以删除那个测试。
所以你会得到相同的结果,同时做更少的工作,通过这样写:
range()
在这种情况下,额外的工作并不重要......两个版本都是如此之快,你永远不会注意到第一种方法花费的额外时间。但是,总是值得思考如何重新考虑问题以减少工作量;有时它是可用程序和不可用程序之间的区别。
在这种情况下,初始版本将通过125次测试。第二个更有效的版本? 四。这恰好与正确结果的数量完全相同!
因此我们可以完全取出for a in range(1, 3):
for b in range(a+1, 4):
for c in range(b+1, 5):
if a < b < c:
print(a, b, c)
语句,并打印每个组合,因为我们编写的循环确保只使用通过测试的数字开始。
我们在这个过程中完成的工作不到1/30!
答案 1 :(得分:1)
这个怎么样?
for a in range(5):
for b in range(5):
for c in range(5):
if 0 < a < b < c < 5:
print(a, b, c)
对于0
,4
和a
,这将迭代值b
直到c
,并且当条件{{1}时它将打印出来握住。