打印出python中变量之间关系的列表?

时间:2015-04-07 00:14:58

标签: python

我是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)或其他东西,但我无法使用语法。

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:4)

因此,您需要更改0-4范围内的abc中的每一个(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)

对于04a,这将迭代值b直到c,并且当条件{{1}时它将打印出来握住。