我绝对是python的初学者,而我的教授正在尝试使用fire方法来教我们该语言。目的是列出关系{(a,b,c)中的三元组:a,b和c是0
我想我了解它的一般概念,我将a,b,c的值设置得很好,但是我不太了解如何打印出这样的变量?我当时想使用诸如while
python大神给出的解决方案
因此,您需要在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
的所有可能值。换句话说,最里面(写时最底端)的循环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
语句,并只打印每个组合,因为我们编写的循环确保仅使用通过测试的数字作为开头。
在此过程中,我们完成的工作还不到三分之一。