Справка по Python, печать значений из списка - PullRequest
1 голос
/ 29 января 2012

У меня есть программа, которая получит номер пользователя, найдет все простые числа до этого момента и сохранит их в списке, теперь мне нужно из этого списка посмотреть, добавят ли два из них вместе к вводу пользователя этотгде я не могу понять это правильно.Я просто добавлю последние биты, в которых мне нужна помощь.

    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

как мне заставить его напечатать только одно значение?

Ответы [ 2 ]

4 голосов
/ 29 января 2012

Ты вырываешься только из внутреннего цикла, а не из внешнего.

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 голос
/ 29 января 2012

Кроме того, вы можете переместить циклы в функцию и использовать 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
...