Python程序不执行任何函数

2024-05-15 01:00:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在学习python是为了好玩。我习惯于用C++编码,到目前为止,它很容易被拾取。我自己写了我的第一个程序,但由于某种原因,它什么都不做,我写的函数也不会执行。如果我在函数外编写print语句,这些语句就会执行,但它永远不会进入函数内部。这是我的密码。任何提示都将不胜感激。你知道吗

racks = 1000000
sum = 0
def ConsecutivePrime():
    primeNum = 0
    stack = []
    while(StackAdder == False):
        primeNum = isPrime(primeNum)
        stack.append(primeNum)
        StackAdder(stack)
    if(StackAdder == True):
        print ("Largets Prime: ", sum)

def StackAdder(stack):
    for n in stack:
        sum += n 
    if(count < racks):
        return False
    else:
        stack.pop()
        return True

def isPrime(primeNum):
    isPrime = False
    while(isPrime == False):
        primeNum += 1 
        if(primeNum % 2 == 1): #First Checks If Odd 
            if(primeNum % 3 == 0):
                isPrime == False
            elif(primeNum % 5 == 0):
                isPrime == False
            elif(primeNum % 7 == 0):
                isPrime == False
            elif(primeNum % 9 == 0):
                isPrime == False
            else:
                isPrime == True
    if(isPrime == True):
        return primeNum

def main():
    ConsecutivePrime()
if __name__ == "__main__":
    main()

Tags: 函数falsetruereturnifstackmaindef
3条回答

StackAdder是一个函数;它既不是True也不是False,所以ConsecutivePrime被调用,它什么都不做。你知道吗

ConsecutivePrime()函数的开头添加这些行,并观察输出:

print(StackAdder == True)
print(StackAdder == False)

你可以看到False打印两次,对吗?惊讶吗?阅读斯科特·亨特对答案的评论。也许这会有点帮助。你知道吗

所以,whileif的条件都是假的。你知道吗

如果您想检查StackAdder()返回了什么值,则需要这样做:

def ConsecutivePrime():
    primeNum = 0
    stack = []
    while(StackAdder(myStack) == False): # define myStack to your needs
        primeNum = isPrime(primeNum)
        stack.append(primeNum)
        StackAdder(stack)
    if(StackAdder(myStack) == True):
        print ("Largets Prime: ", sum)

您构建代码的方式存在一些主要问题,我将尝试指出函数中最明显的错误:

1)关于函数isPrime(primeNum),这是正确的编写方法:

def isPrime(primeNum):
    isPrime = False
    while not isPrime:
        primeNum += 1 
        if(primeNum % 2 == 1): #First Checks If Odd 
            if(primeNum % 3 == 0):
                isPrime == False
            elif(primeNum % 5 == 0):
                isPrime == False
            elif(primeNum % 7 == 0):
                isPrime == False
            elif(primeNum % 9 == 0):
                isPrime == False
            else:
                isPrime == True
    return primeNum

我把while(isPrime == False)重写为while not isPrime。另外,您不需要if(isPrime == True)语句,因为while循环将在isPrime == True时退出。你知道吗

2)在函数StackAdder(stack)中,您引入了count,这是以前没有定义过的。也许你想要sum?或者您尝试使用count()方法(它返回对象在列表中出现多少次的计数?)你知道吗

3)在函数ConsecutivePrime()中,Stackadder是一个函数,因此您的代码应该是:while(StackAdder(stack) == False)

相关问题 更多 >

    热门问题