从函数导入返回的变量(python 3)

时间:2017-08-07 15:55:53

标签: python import primes python-import

我正在尝试编写一个单独的模块,该模块从第一个模块(输入的数字)中获取一个变量,并找到所有输入数字的素数。我知道你不能将函数内的变量调用到另一个文件中,除非它是一个全局变量或者除非它被返回。根据我的理解,我通过从函数'get_number'调用返回变量'prime'来避免这个问题,但我仍然得到错误:“function'get_number'在第四行没有'prime'成员”在第二个文件的最后一行中,第二个文件和“和”参数'prime'的值没有在函数单元格中的值。我正试图通过从第一个文件输入一些素数值来解决这个错误。

Traceback (most recent call last):
  File "beginner_python_2.py", line 1, in <module>
    from beginner_python_1 import get_number
  File "/home/ubuntu/workspace/beginner_python_1.py", line 5, in <module>
    prime = get_number()
NameError: name 'get_number' is not defined

这是我的两个文件:

#a.py
import math

def main():
    number = get_number()
    is_it_prime = is_prime(number)
    print(is_it_prime)

def get_number():
    """Function to ensure user inputs a positive integer"""
    while True:
        prime = input("enter a positive integer: ")
        if prime.isdigit():
            prime = int(prime)
            return prime

def is_prime(number):
    """Function to determine if inputted integer is a prime number"""
    if number % 2 == 0:
        print("{} is not a prime number".format(number))
        return False
    if number != 2:
        for i in range(3,int(math.sqrt(number))+1,2):
            if number % i == 0:
                print("{} is not a prime number".format(number))
                return False
        print("{} is a prime number".format(number))  
        return True


if __name__=="__main__":
    main()

这是第二个文件:

#b.py
from a import get_number

def return_primes(prime):
    for i in range(1,a.prime+1):
    for j in range(2,i):
        if i % j == 0:
            break
    else:
        print("{}".format(i),end=" ")

if __name__=="__return_primes__":
    return_primes()

非常感谢您提供任何指导。

1 个答案:

答案 0 :(得分:0)

在我看来,你希望b.py更像是:

from a import get_number

def return_primes(limit):

    if limit > 1:
        print(2, end=" ")

    for i in range(3, limit + 1, 2):  # beyond 2, only odds are prime
        for j in range(3, int(i ** 0.5) + 1, 2): # only odds to sqrt
            if i % j == 0:
                break
        else:  # no break
            print(i, end=" ")

    print()

if __name__ == "__main__":
    return_primes(get_number())

if __name__ == "__main__"仅测试此文件当前是用作库还是作为程序执行。因此,在a.pyb.py中进行相同的测试非常好。

<强> USAGE

> python3 b.py
enter a positive integer: 100
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 
>