2012-01-29 37 views
1

我有一個程序,將獲得一個用戶號碼打印值,發現的所有質數到這一點,並將其存儲在一個列表中,現在我從名單要看看他們兩個人在一起增加了用戶輸入,這是我似乎無法得到它正確的地方。我只是把最後一點,我需要幫助。Python的幫助下,從列表

num = int(raw_input('enter a number: ')) 
    b = [2, 3, 5, 7, 11, #... etc up to the prime before the users number] 
    for a in b: 
     for c in b: 
      if c + a = num 
      print num, '=', a, '+', c 
      break 

然而當我有發言權8的用戶輸入,它打印出:

8 = 3 + 5

8 = 5 + 3

我怎樣才能得到它只打印一個值?

回答

4

你只是打破了內部循環,而不是外一個的出來。

num = int(raw_input('enter a number: ')) 
b = [2, 3, 5, 7, 11] 
for a in b: 
    for c in b: 
     if c + a == num: 
      print num, '=', a, '+', c 
      break 
    else: 
     continue 
    break 

輸出:

$ python ~/tmp/soprim.py 
enter a number: 8 
8 = 3 + 5 

換別人在python是有點反直覺的;否則只有在循環完成而沒有中斷時纔會執行。所以在這種情況下,如果嗟率先破發,else子句運行並繼續與下一個外循環執行。但是,你打的第一次突破,否則不運行,所以你打第二次破發,然後你出兩個循環的。

+0

這工作完全,謝謝。我想我不知道,可能有一個else與它一起還,我認爲這必須排隊使用if – user1176675 2012-01-29 17:09:02

1

或者,你可以移動循環的功能和使用return該函數內部從兩個循環退出:

def print_first(b): 
    for a in b: 
     for c in b: 
      if c + a == num: 
       print num, '=', a, '+', c 
       return 

num = int(raw_input('enter a number: ')) 
b = [2, 3, 5, 7, 11, #... etc up to the prime before the users number] 
print_first(b) # 8 = 3 + 5