Проблема вызова функций и функций Python - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь найти простые числа с помощью этой функции.Когда я верну это;вывод на печать;

"Prime Number" и число, которое я ввел

number=int(input("Please enter the number :"))

def my_function(number):
  if number==1:
   print("Not a Prime Number.")
  elif number==2:
   print("Prime Number")
  for i in range(2,number):
    if number%i==0:
     print("Not a Prime Number")
     break
    elif number%i!=0:
     print("Prime Number")
     break
  return number

print(my_function(number))

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Ваша функция выполняет три вещи:

  • тестирование независимо от того, является ли ее ввод простым числом
  • печать результатэтого теста в удобном для человека виде
  • возвращая свои входные данные

Чтобы заставить его делать то, что вы хотите, вместо дружественного к человеку возвращают выводinput.

def my_function(number):
    if number == 1:
        result = "Not a Prime Number."
    elif number == 2:
        result = "Prime Number"
    for i in range(2, number):
        if number % i == 0:
            result = "Not a Prime Number"
            break
        elif number % i != 0:
            result = "Prime Number"
            break
    return result

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

Мы можем изменить функцию, чтобы она возвращала логическое значение - True или False - и сделать форматирование вывода вне функции.

def my_function(number):
    if number == 1:
        result = False
    elif number == 2:
        result = True
    for i in range(2, number):
        if number % i == 0:
            result = False
            break
        elif number % i != 0:
            result = True
            break
    return result

>>> number = 1
>>> print(number, 'is', 'a prime number' if my_function(number) else 'not a prime number')
1 is not a prime number   
>>> number = 2
>>> print(number, 'is', 'a prime number' if my_function(number) else 'not a prime number')                                                                                         
2 is a prime number  

Наконец,есть ошибка в вашей логике.Как написано, цикл выполняется только один раз, потому что один из двух тестов всегда будет успешным.

0 голосов
/ 31 декабря 2018
print(my_function(number))

В этом выражении вы печатаете все, что возвращается из функции my_function, и возвращаете входной номер из my_function.

Вместо приведенного выше выражения просто используйтеВызовите my_function напрямую, как показано ниже:

number=int(input("Please enter the number :"))

def my_function(number):
  if number==1:
   print("Not a Prime Number.")
  elif number==2:
   print("Prime Number")
  for i in range(2,number):
    if number%i==0:
     print("Not a Prime Number")
     break
    elif number%i!=0:
     print("Prime Number")
     break
  return number ### You are returning the number here.

my_function(number) #Just don't print the return value here

Только не печатайте значение, возвращенное из my_function, и это должно решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...