首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从函数导入返回的变量(python 3)

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

Stack Overflow用户
提问于 2017-08-07 23:55:53
回答 1查看 217关注 0票数 0

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

代码语言:javascript
复制
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

这是我的两个文件:

代码语言:javascript
复制
#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()

这是第二个文件:

代码语言:javascript
复制
#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()

非常感谢您的指导。

EN

回答 1

Stack Overflow用户

发布于 2017-08-08 13:35:57

在我看来,您希望b.py更像这样:

代码语言:javascript
复制
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中使用相同的测试是很好的。

使用

代码语言:javascript
复制
> 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 
> 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45551082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档