【问题标题】:python: program hanging! (print issue maybe?)python:程序挂了! (可能是打印问题?)
【发布时间】:2014-03-16 20:16:08
【问题描述】:

所以,我对 python 很不熟悉。我决定制作一个生成素数的程序。我知道可能有一个内置函数可以做到这一点,但我决定自己做。

number = 1
numlist = list()
for x in range (0, 1000):
    numlist.append("")
    print "Created list entry " + str(x)
while True:
    number = number + 1
    if number % 2 != 0:
        numscrollerA = 1
        numscrollerB = 1
        while numscrollerA <= number:
            if float(number) / float(numscrollerA) == float(int(number)):
                numlist[numscrollerA] = "true"
            if float(number) / float(numscrollerA) != float(int(number)):
                numlist[numscrollerA] = "false"
            numscrollerA = numscrollerA + 1
        while numscrollerB <= number:
            if numscrollerB != 1 and numscroller != number and numlist[numscrollerB] == "true":
                primestatus = "false"
            else:
                primestatus = "true"
        if primestatus == "true":
            print number

我应该得到 1000 次“已创建列表条目 x”。然后程序就挂了。

【问题讨论】:

  • 你有 while True: 循环 - 这是一个无限循环,你需要在某个地方打破它
  • 我知道,我的方法是,当列表用完空格时,它会创建一个异常。不是最优雅的,但这只是一种学习体验。
  • 所以等几天......当程序“挂起”时,这意味着它正在运行一个无限循环。如果这是您所期望的……请耐心等待;o)
  • @m.wasowski 我至少期待它打印一个素数。它似乎没有这样做。

标签: python list primes


【解决方案1】:
   while numscrollerB <= number:
        if numscrollerB != 1 and numscroller != number and numlist[numscrollerB] == "true":
            primestatus = "false"
        else:
            primestatus = "true"

您不会在此循环中增加 numscrollerB,因此它会无限运行。无论如何,你应该使用'for循环':

for numscrollerB in range(1, number+1):
    pass  # do something

【讨论】:

  • 现在它打印奇数,包括合数。
  • 是的,但这是您的代码的另一个问题。我的建议:从更简单的开始,对其进行测试并逐步建立。
【解决方案2】:

您的代码非常不合 Python。典型的有不同编码风格的新手。 你的清单是不必要的。 在 python 中,您可以像这样创建列表

def check_even(val):
    #this contains your logic
    return val % 2 == 0

evenslist = [check_even(i) for i in xrange(1, 1001)]

print numlist

【讨论】:

  • 这是对偶数的定义——不是prime number
  • 是的,我只是在展示如何变得更加 Pythonic。 OP 可以填充函数的逻辑以对素数返回 true。
猜你喜欢
  • 2016-11-10
  • 2013-07-05
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多