【问题标题】:Importing a returned variable from a function (python 3)从函数导入返回的变量(python 3)
【发布时间】:2017-08-07 15:55:53
【问题描述】:

我正在尝试编写一个单独的模块,该模块从第一个模块(输入的数字)中接收一个变量,并找到该输入数字之前的所有素数。我知道你不能从一个函数中调用一个变量到另一个文件中,除非它是一个全局变量或者除非它被返回。据我了解,我通过从函数'get_number'调用返回的变量'prime'来避免这个问题,但我仍然收到错误:第四行的“函数'get_number'没有'prime'成员”在第二个文件的最后一行,“和”和“函数单元格中的参数 '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()

非常感谢您的任何指导。

【问题讨论】:

  • 评论不用于扩展讨论;这个对话是moved to chat
  • 你的源代码中的prime = get_number()行在哪里?请显示与所示代码一致的错误...

标签: python import primes python-import


【解决方案1】:

在我看来,您希望 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 中进行相同的测试是可以的。

用法

> 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 
> 

【讨论】:

    猜你喜欢
    • 2019-06-18
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    相关资源
    最近更新 更多