Python编程帮助

Python编程帮助,python,Python,好吧。。。那么为什么当我将isPrime设置为false时它仍然是true呢 编辑:好的。。。这就是你们所说的吗?尽管您已将iPrime设置为全局,但您正在primeTest函数的局部边界内对其进行修改。因此,它不会被修改 如果需要更改,请尝试将其作为参数传入并进行修改。尽管您已将isPrime设置为全局,但您正在primeTest函数的局部边界内对其进行修改。因此,它不会被修改 如果需要更改,请尝试将其作为参数传入并进行修改。全局isPrime需要位于分配给isPrime的函数内。全局isPr

好吧。。。那么为什么当我将isPrime设置为false时它仍然是true呢


编辑:好的。。。这就是你们所说的吗?

尽管您已将iPrime设置为全局,但您正在primeTest函数的局部边界内对其进行修改。因此,它不会被修改


如果需要更改,请尝试将其作为参数传入并进行修改。

尽管您已将isPrime设置为全局,但您正在primeTest函数的局部边界内对其进行修改。因此,它不会被修改

如果需要更改,请尝试将其作为参数传入并进行修改。

全局isPrime需要位于分配给isPrime的函数内。

全局isPrime需要位于分配给isPrime的函数内。

我认为,由于您是在primeTest定义之后声明isPrime全局变量,因此Python解释器将函数中的isPrime视为局部变量

我错了。。您必须在函数中将其声明为全局iPrime。首先声明函数或变量的顺序并不重要。大概是这样的:

    How many primes would you like? 
4
    2=testnum
b
True
    True
    2
    3=testnum
b
True
    True
    3
    4=testnum
False a
a
True
    True
    4
    5=testnum
b
True
    True
    5
请注意,您不能写入全局isPrime=False;这必须是两种说法

无论如何,像那样改变全局变量是相当糟糕的做法。你为什么不把isPrime作为参数传递给primeTest呢

编辑:

好吧,我的回答还是太草率了。简单地将isPrime作为参数传递是行不通的,因为布尔值是不可变的类型。处理当前问题的最佳方法是将iPrime作为返回值:

def primeTest():
    global isPrime
    isPrime = False

isPrime = True
print isPrime # returns True
primeTest()
print isPrime # returns False
现在,您可以执行isPrime=primeTest10来确定是否有任何数字是质数

但是,如果向函数传递一个可变类型(如列表),则可以在函数中修改它。但是您现在还不必担心这个问题。

我认为,由于您是在定义primeTest之后声明isPrime全局变量,Python解释器将函数中的isPrime视为局部变量

我错了。。您必须在函数中将其声明为全局iPrime。首先声明函数或变量的顺序并不重要。大概是这样的:

    How many primes would you like? 
4
    2=testnum
b
True
    True
    2
    3=testnum
b
True
    True
    3
    4=testnum
False a
a
True
    True
    4
    5=testnum
b
True
    True
    5
请注意,您不能写入全局isPrime=False;这必须是两种说法

无论如何,像那样改变全局变量是相当糟糕的做法。你为什么不把isPrime作为参数传递给primeTest呢

编辑:

好吧,我的回答还是太草率了。简单地将isPrime作为参数传递是行不通的,因为布尔值是不可变的类型。处理当前问题的最佳方法是将iPrime作为返回值:

def primeTest():
    global isPrime
    isPrime = False

isPrime = True
print isPrime # returns True
primeTest()
print isPrime # returns False
现在,您可以执行isPrime=primeTest10来确定是否有任何数字是质数


但是,如果向函数传递一个可变类型(如列表),则可以在函数中修改它。但是您现在还不必担心这个问题。

全局foo的意思是,在这个范围内,让我说foo是指一个从这个范围之外可以访问并在这个范围关闭后持久化的foo。这并不意味着,让所有名为foo的变量处处和永远都引用这个foo


这与您可能期望的不同,如果您来自C/C++背景,在C/C++背景中,在顶级声明变量使其成为全局变量,而不需要在每个范围中进行显式全局声明。

global foo意味着,在此范围内,让我说foo是指一个可以从这个范围之外访问并在这个范围关闭后持久化的foo。这并不意味着,让所有名为foo的变量处处和永远都引用这个foo


如果你来自,比如说,在C/C++背景中,在顶级声明变量可以使其成为全局变量,而不需要在每个作用域中进行显式全局声明。

仅对此进行评论,因为这是最有帮助的,但非常感谢大家对我的帮助。将其作为参数传入并进行修改。。。可以那会不会像我一样。。。我还需要改变什么吗?我现在只是粗略地掌握了python语言,任何帮助都会很棒。只对这一个进行评论,因为它是最有用的,但非常感谢你们所有人对我的帮助。将它作为参数传递并以这种方式修改它。。。可以那会不会像我一样。。。我还需要改变什么吗?我现在只是粗略地掌握了python语言,任何帮助都会很棒。啊,我没有注意到你建议也将isPrime作为参数传递,一旦我在函数完成时传递它,isPrime会被更新吗?另外,非常感谢您的帮助。啊,我没有注意到您建议也将isPrime作为参数传递,一旦我在函数完成时传递它,isPrime会被更新吗?还有,谢谢
非常感谢你的帮助。是的。。。c/c++和java。唉!固定的谢谢令人惊叹的刚打印了前10000个素数,它们都很好。哇呜…是的。。。c/c++和java。唉!固定的谢谢令人惊叹的刚打印了前10000个素数,它们都很好。Wohoo…-1:假设我的标签格式正确,对不起。我不能这么想。如果你做得不对,那是最可能的问题。使用空格。总是。-1:假设我的标签格式正确。对不起。我不能这么想。如果你做得不对,那是最可能的问题。使用空格。总是