2015-11-17 5 views
0

В приведенном ниже коде я пытаюсь найти простые числа. Моя проблема в том, что я не уверен, как использовать печать внутри функции.О функциях

Верно ли это? Я получаю ответ, но он говорит, что 6 не является простым числом, и он также дает «Нет». Как я могу избавиться от этого «Нет»? Кроме того, хорошо ли использовать return именно так?

#Prime number 

def prime(num): 
    for i in range (2,num): 
     if num%i == 0: 
      print num, "is not a prime number." 
      return 
     else: 
      print num, "is a prime number." 
      return 

print prime(6) 
+0

Это питон правильно? Если да, сделайте изменение, чтобы добавить этот тег. – shuttle87

ответ

0

Прежде всего у вас есть операторы печати, в вашем коде уже так просто, призывающих prime приведет материал печатается на экране. Когда у вас есть голова return, ваша функция вернет None. Это означает, что когда вы делаете:

print prime(6) 

prime(6) возвратит None что делает этот эквивалент:

print None 

Тогда у вас есть серьезная логическая ошибка в коде, потому что вы не проверять каждый возможный делитель из-за до return слишком рано. Например, если у вас есть число 9, это не простое число. Однако ваша функция будет печатать, что это просто, потому что при первом прогоне цикла for i будет равно 2, что означает, что 9%2 является ложным, так что ветвь else берется и выводит, что число является простым. Затем функция возвращается в эту точку, не проверяя остальную часть чисел. Если вы запустите этот код, вы увидите, что произойдет: http://ideone.com/zxdez2

Проблема с дизайном заключается в том, что вы действительно должны оставить IO отдельно от остальных функций. Предположим, вы хотели повторно использовать prime где-то еще позже, вы не можете этого сделать, не распечатывая этот код на экране. Возможно, это не так, как вы хотите, в более поздний срок, но с этим сложно что-то сделать. Вместо этого он гораздо чище возвращать логическое значение, которое представляет, если число было простое или не затем распечатывают на основе этого возвращаемого значения:

def prime(num): 
    for i in range (2,num): 
     if num%i == 0: 
      return False 
    return True 

x = 6 
if prime(x): 
    print x, "is not a prime number." 
else: 
    print x, "is a prime number." 
Смежные вопросы