2012-01-29 6 views
1

私はユーザ番号を取得し、その時点までのすべての素数を見つけてリストに格納するプログラムを持っています。ユーザーの入力を追加する、これは私が右に得るように見えることです。私はちょうど私が助けを必要とする最後のビットを入れます。私が言うの8のユーザー入力を持っている場合リストから値を出力する、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 = 3 + 5

8 = 5 + 3

を私はそれを得ることができる方法1つの値だけを印刷しますか?

答えて

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で

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

は少し反直感的です。ループが途切れずに完了した場合にのみ実行されます。したがって、この場合、最初のブレークに決してぶつからない場合は、else節が実行され、次の外側ループの実行が続きます。しかし、それは最初の休憩に当たった、それ以外は動かないので、2回目の休憩をして、そしてあなたは両方のループから抜け出した。

+0

これは、完全に感謝を働きました。私はそれに沿って他にもあるかもしれないことを私が知らなかったと思う、私はそれがif – user1176675

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 
関連する問題