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

我绝对是python的初学者,而我的教授正在尝试使用fire方法来教我们该语言。目的是列出关系{(a,b,c)中的三元组:a,b和c是0
我想我了解它的一般概念,我将a,b,c的值设置得很好,但是我不太了解如何打印出这样的变量?我当时想使用诸如while

python大神给出的解决方案

因此,您需要在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的所有可能值。换句话说,最里面(写时最底端)的循环c对于每个b值将经历0-4,对于每个a值也将经历0-4。 ,它也正在经历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,并且如果a为2,b同样也不能为2,并且并且,从范围的另一端开始,如果c为4,则b永远不能为4并满足测试条件。我们可以相应地编写范围,以使b的范围从1开始超过a并在c之前保留一个,因此永远不需要测试这些值的组合。

最后,您的if语句也可以简化:由于使用了范围,因此无需确保0小于a;因为a从1开始总是正确的。同时,您知道c总是小于5,因为range()这样做,所以您也可以删除该测试。

因此,通过这样编写,您将在减少工作量的同时获得相同的结果:

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)

在这种情况下,额外的工作并不重要……两个版本都非常快,您永远都不会注意到第一种方法所花费的额外时间。但是,始终值得考虑如何重新思考问题以减少工作量;有时是可用程序和不可用程序之间的区别。

在这种情况下,初始版本将经过125次测试。第二个更有效的版本?四。恰好与正确结果的数量完全相同!

因此,我们可以完全取出if语句,并只打印每个组合,因为我们编写的循环确保仅使用通过测试的数字作为开头。

在此过程中,我们完成的工作还不到三分之一。