2014-12-31 2 views
0

Я пытаюсь написать код, который возвращает каждый основной палиндром с тремя цифрами. Вот мой код:Python 'for' function

def digpalprim(): 
    for x in range (100,1000): 
     if prime(x)=='prime': 
      if str(x)==str(x)[::1]: 
       return x 

Я уже определил функцию премьер (х), она работает хорошо, что этап просто определяет, является ли х простым или нет. В целом код работает, за исключением того, что он дает мне первый такой палиндром. Я действительно не понимаю, почему, не должна ли программа учитывать все числа от 100 до 1000? Пожалуйста помоги?

+1

Потому что как только вы говорите 'return' программа оставит функцию и возврат где он когда-либо назывался – user2097159

+0

. Возвращаемое ключевое слово существует из функции и дает результат. Таким образом, вы можете использовать 'print x', если вы просто хотите увидеть значения' x' else, вам нужно добавить 'x' для отображения и возврата этого списка в область уровня функции. –

ответ

7

Ваша функция возвращает, как только находит первый такой палиндром; return выходит из функции.

Соберите ваши находки в списке и вернуть, что:

def digpalprim(): 
    palindromes = [] 
    for x in range (100,1000): 
     if prime(x)=='prime': 
      if str(x)==str(x)[::1]: 
       palindromes.append(x) 
    return palindromes 

или вы можете сделать свою функцию а генератор заменой return с yield statement:

def digpalprim(): 
    for x in range (100,1000): 
     if prime(x)=='prime': 
      if str(x)==str(x)[::1]: 
       yield x 

Теперь вы будете придется перебирать эту функцию или использовать list() для «вытягивания» всех значений:

all_palindromes(digpalprim()) 

или

for palindrome in digpalprim(): 
    print(palindrome) 
+0

Чувак ...как вы можете набрать так много за 42 секунды? Вы должны появиться на Суперхуманах Стэна Ли ... –

+3

@BhargavRao: http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard –

+1

Но все же ... Я хотел ввести программу, и вы отправили ее на полпути (So I просто отправил объяснение) ... Это слишком быстро ... –

1

Функция возвращает и заканчивается, как только будет найден первый результат.

Возможно, вы захотите добавить результаты в список, а затем распечатать список.

1

return x Этот оператор заставляет программу возвращаться к вызывающей функции после того, как этот оператор встречается. Чтобы вернуть все, вы можете поместить его в список. Например, например: , вы можете иметь список под названием values и приложить его к нему, и, наконец, вернуть его в конце

2

Вы возвращаете функцию при первой встрече.

def digpalprim(): 
    palprimes = [] 
    for x in range (100,1000): 
     if prime(x)=='prime': 
      if str(x)==str(x)[::1]: 
       palprimes.append(x) 
    return palprimes 

Это создает список в начале функции и добавляет каждый действительный палиндром простой в этот список, а затем возвращает весь список (после завершения всех циклов) вместо возврата только первое встречается.

Просто помните, что если Python попадает в оператор return, он прекратит выполнение функции прямо там и вернет это значение независимо от каких-либо дополнительных циклов или кода, который вы можете намереваться выполнить.

0

Для таких небольших задач, я предпочитаю использовать списочные:

palindromes = [x for x in range(100, 1000) if (prime(x) == 'prime') and (str(x) == str(x)[::1])] 

Или (что эквивалентно):

condition = lambda f: prime(f) == 'prime' and str(f) == str(f)[::1] 
palindromes = [x for x in range(100, 1000) if condition(x)]