我正在尝试编写一个单独的模块,该模块从第一个模块(输入的数字)中获取一个变量,并找到所有输入数字的素数。我知道你不能将函数内的变量调用到另一个文件中,除非它是一个全局变量或者除非它被返回。根据我的理解,我通过从函数'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()
非常感谢您提供任何指导。
答案 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.py
和b.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
>