Python 写一个程序为我做数学作业,但它不起作用

Python 写一个程序为我做数学作业,但它不起作用,python,Python,我的程序的一部分根据用户输入显示n个素数,但不管我输入什么,它只打印“1” 将“for”循环更改为: for num in range(1, amountOfNumbers): prime = True for i in range(2,num): if (num%i==0): prime = False if prime: print(num) num在代码中的任何地方都没有定义,我想这就是你的意思 你如

我的程序的一部分根据用户输入显示n个素数,但不管我输入什么,它只打印“1”


将“for”循环更改为:

    for num in range(1, amountOfNumbers):
    prime = True
    for i in range(2,num):
        if (num%i==0):
            prime = False
    if prime:
        print(num)
num在代码中的任何地方都没有定义,我想这就是你的意思

你如何调用你的代码?事实上,我无法运行它。我通过在底部添加对函数listPrimeNumbers()的调用来运行它

不管怎样,假设您发布的代码是您的全部代码,这就是适合我的版本:

import sys

def listPrimeNumbers():
    print("List Prime Numbers")
    print("------------------")
    print("Enter how many prime numbers you want displayed")
    print("Type in '0' to go back to the Main Menu")
    print("\n"*10)

    amountOfNumbers = int(input("Amount of Numbers --> "))

    print("\n"*10)
    for num in range(1, amountOfNumbers):
        prime = True
        for i in range(2,num):
            if (num%i==0):
                prime = False
        if prime:
            print(num)

    print("\n"*10)
    print("Type '0' to try again and '1' to go to the main menu")
    print("\n"*10)

    choice = int(input("Choice ---> "))

    if choice == 0:
        print("\n"*100)
        listPrimeNumbers()
    elif choice == 1:
        print("\n"*100)
        print 'Bye'
        sys.exit(0)


listPrimeNumbers()

如果我正确理解了这个问题,那么代码中就有一个逻辑缺陷,因为即使Alex建议进行了更正(这是可行的),您也只需打印所有素数,直到用户输入的值为止,而不是用户输入的量,这似乎是个问题

例如,根据您的问题,如果用户输入10,我知道您应该打印前10个素数(1,2,3,5,7,11,13,17,19,23),而不是最多10个素数(1,2,3,5,7)

如果我的假设是正确的,那么代码应该是:

import math

def listPrimeNumbers(n):
    l = int(math.sqrt(n))+1
    if n == 1:
        return True
    for x in range(2, l):
        if (n%x==0):
            return False
    return True

print("List Prime Numbers")
print("------------------")
print("Enter how many prime numbers you want displayed")
print("Type in '0' to go back to the Main Menu")
print("\n"*10)

amountOfNumbers = int(input("Amount of Numbers --> "))

counter = 0
n = 0
while (counter < amountOfNumbers):
    n += 1
    if listPrimeNumbers(n) == True:
        counter += 1
        print(n)
导入数学
def ListPrimeNumber(n):
l=int(数学sqrt(n))+1
如果n==1:
返回真值
对于范围(2,l)内的x:
如果(n%x==0):
返回错误
返回真值
打印(“列出素数”)
打印(----------------------)
打印(“输入要显示多少素数”)
打印(“键入“0”返回主菜单”)
打印(“\n”*10)
amountOfNumbers=int(输入(“数字量-->”)
计数器=0
n=0
而(计数器<数量):
n+=1
如果ListPrimeNumber(n)=真:
计数器+=1
打印(n)

我省略了该部分以重复该过程,因此您需要重新运行该程序,再次尝试使用嵌套for循环中的两次
I
变量,这很容易混淆。太多
I
。变量名也有其他字母。您使用
i
两次,例如在第二个循环中使用
j
作为旁白,
print(“\n”*100)
看起来非常可怕。如果要清除屏幕,请尝试在
os中使用命令。system()
取决于您所使用的操作系统。在MacOS上,命令是
clear
,就像链接的问题清楚地告诉您的一样。请注意,为了提高效率,您只需要转到
sqrt(num)
;当素数为false时,你应该立即中断。你是正确的,但首先他必须确保他的代码实际运行并执行他打算执行的操作:)我认为他想打印给定范围内的所有素数。这比我的效果更好。但是当我输入100时,我得到的所有素数都是100,而我想得到前100个素数,在我的代码中,我的想法被搞混了,这就是如果它有效的话应该做的。Gianlucca下面的答案是你真正想要做的。为我工作:)我需要为我的程序更改一点代码,但谢谢:)
import math

def listPrimeNumbers(n):
    l = int(math.sqrt(n))+1
    if n == 1:
        return True
    for x in range(2, l):
        if (n%x==0):
            return False
    return True

print("List Prime Numbers")
print("------------------")
print("Enter how many prime numbers you want displayed")
print("Type in '0' to go back to the Main Menu")
print("\n"*10)

amountOfNumbers = int(input("Amount of Numbers --> "))

counter = 0
n = 0
while (counter < amountOfNumbers):
    n += 1
    if listPrimeNumbers(n) == True:
        counter += 1
        print(n)