#!/usr/bin/env python
import math
def primeTest(isPrime):
print(' {0}=testnum'.format(testnum))
if testnum%2 == 0 and testnum != 2: #if divisible by 2 and not 2
isPrime = False
print('{0} a'.format(isPrime))
print('a')
else:
numroot = round(math.sqrt(testnum))
i = 2
while i <= numroot:
if testnum%i == 0:
isPrime = False
i+=1
print('b')
global testnum
global isPrime
testnum=2
numPrimesSoFar=0
reqPrimes=int(input('How many primes would you like? \n'))
while numPrimesSoFar < reqPrimes:
isPrime=True
primeTest(isPrime)
print(isPrime)
if isPrime:
print(' {0}'.format(isPrime))
print(' {0}'.format(testnum))
numPrimesSoFar+=1
testnum+=1(很抱歉格式设置我不太确定为什么它不能正常工作,但假设我的制表符格式正确)现在输出如下:
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时,为什么它仍然是true呢?
编辑:好的.所以这就是你们要说的?
发布于 2009-11-20 17:28:09
global isPrime需要位于赋值给isPrime的函数内部。
发布于 2009-11-20 17:33:32
在这个作用域中,全局foo是指在这个作用域之外可以访问并在这个作用域关闭后持久存在的foo。这并不意味着,让所有名为foo的变量无处不在,并且永远引用这个foo。
这与您的C/C++背景不同,在C/C++背景下,在顶层声明变量会使其成为全局变量,而不需要在每个作用域中显式声明全局变量。
发布于 2009-11-20 17:27:41
尽管您已将isPrime设置为全局变量,但您正在primeTest函数的局部边界内对其进行修改。因此,它不会被修改。
如果您需要更改它,请尝试将其作为参数传递,并以此方式进行修改。
https://stackoverflow.com/questions/1769278
复制相似问题