2016-11-11 35 views
0

我試圖讓三個數字的組合增加到810並乘以10760040.這是我迄今爲止;蠻力算法停止循環

x = 1 
y = 1 
z = 1 

keepGoing = 1 

while keepGoing == 1: 
    if x+y+z == 810: 
     if x*y*z == 10760040: 
      print(x) 
      print(y) 
      print(z) 
     else: 
      keepGoing = 2 
      z = 1 
      print("no z") 
     elif z == 810: 
     keepGoing = 2 
     print("no") 
    else: 
     z += 1 




while keepGoing == 2: 
    if x+y+z == 810: 
     if x*y*z == 10760040: 
      print(x) 
      print(y) 
      print(z) 
     else: 
      keepGoing = 3 
      z = 1 
      y = 1 
      print("no y") 

    elif y == 810: 
     keepGoing = 3 
    else: 
     z += 1 
     keepGoing = 1 

while keepGoing == 3: 
    if x+y+z == 810: 
     if x*y*z == 10760040: 
      print(x) 
      print(y) 
      print(z) 
      print("Success") 
     else: 
      print("Failure") 
    elif x == 810: 
     print("none") 
    else: 
     x += 1 
     keepGoing = 1 

我知道這個代碼是reaaaally基本的,但我沒有在很長一段時間做過任何Python和我試圖找到添加使810繁衍到10760040,任何幫助將號碼列表太棒了,謝謝!

+0

你必須巢對方內線的三個環路。現在,您正在測試'z'的所有值,使用'x'和'y'的初始值,然後測試'y'的所有值,使用'x'的初始值和'z'的最終值,以及等等。 –

+0

聲音更適合http://codereview.stackexchange.com/。 –

+0

那麼我將如何嵌套循環?在哪一點? @tobias_k –

回答

3

一個更清潔,更簡單的代碼是:

for x in range(1,810): 
    for y in range(1,810-x): 
     z = 810-x-y 
     if x*y*z == 10760040: 
      print 'x={},y={},z={}'.format(x,y,z) 
+0

在'z'的負值上浪費週期,'y'的值<''x',並且摘要不清楚是否允許候選者重複使用數字。 – MattH

+1

@MattH:你說得對,我在內部循環中加了'-x'。作爲一個側面說明,可能會有更多效率方面的改進,因爲這基本上是一個由兩個方程構成的系統,需要解決3個變量。但是,我主要集中於簡化OP的代碼,這對於特定的問題似乎過於複雜。 –

+0

非常感謝你!這是完美的 –