我有一个程序可以获取用户编号,查找到那一点的所有素数并将它们存储在列表中,现在我需要从该列表中查看它们中的两个是否一起添加到用户输入,这是我似乎无法正确的地方。我会把最后一点放在我需要帮助的地方。
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
我怎样才能让它只打印一个值?
答案 0 :(得分: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
for-else在python中有点反直觉;否则只有在循环完成而没有破坏时才执行。所以在这种情况下,如果它从未到达第一个中断,则else子句运行并继续执行下一个外部循环。但是你击中了第一个突破,否则没有跑,所以你打第二个突破,然后你就没有了。
答案 1 :(得分: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