Python程序在

时间:2018-03-03 23:40:16

标签: python windows

我遇到与here完全相同的问题,除了那里列出的解决方案对我不起作用。

我在我的本地计算机上运行它,我的内存和CPU使用情况在任务管理器中似乎很好。 ( 6个核心,12个ram

我首先在一个名为repl.it的在线IDE中看到了这个问题。我有一个简单的代码,它以SQL条目的形式生成Math问题。

Here是我输出的屏幕截图。

循环仅运行了5次而不是请求的300次,然后冻结。 我再次运行它,循环运行了7次。

我重复了一遍,每一次,循环的次数都发生了巨大的变化。

  • 在确保我的代码没有错误后,我想也许有 在线IDE有问题,所以我在本地命令上运行它 然而,控制台,同样的事情最终发生了。代码不会完全运行。
  • 此时,我认为打印功能有问题。我尝试写入.txt文件,而代码根本没有运行。
  • 我意识到我的电脑肯定有问题,而且 在我的旧笔记本上运行代码。确实发生了同样的事情。

这是我的完整代码:

import random

entries = input("Enter the number of entries you would like to insert");

sqltext = open("sql.txt", "w")
sqltext.write("INSERT INTO `toredatabase`.`questions` (`id`, `category`, `question`, `Correct_Answer`, `answer_A`, `answer_B`, `answer_C`, `answer_D`, `Details`) VALUES")
print("INSERT INTO `toredatabase`.`questions` (`id`, `category`, `question`, `Correct_Answer`, `answer_A`, `answer_B`, `answer_C`, `answer_D`, `Details`) VALUES")
for x in range(int(entries)):

  r1 = random.randint(0, 1000)

  r2 = random.randint(0, 1000)

  correctanswer = r1+r2
  possibleanswers = []
  ans1 = r1+r2+random.randint(-100,100)
  ans2 = r1+r2+random.randint(-100,100)
  ans3 = r1+r2+random.randint(-100,100)
  ans4 = r1+r2+random.randint(-100,100)
  possibleanswers.append(correctanswer);
  possibleanswers.append(ans1);
  possibleanswers.append(ans2);
  possibleanswers.append(ans3);
  a = random.choice(possibleanswers)
  b = random.choice(possibleanswers)
  while b == a:
    b = random.choice(possibleanswers)
  c = random.choice(possibleanswers)
  while c == a or c == b:
    c = random.choice(possibleanswers)
  d = random.choice(possibleanswers)
  while d == c or d == b or d == a:
    d = random.choice(possibleanswers)
  print(f"('', 'Math', 'What is {r1} + {r2}?', '{correctanswer}','{a}', '{b}', '{c}', '{d}', 'Addition'),")  
  sqltext.write(f"('', 'Math', 'What is {r1} + {r2}?', '{correctanswer}','{a}', '{b}', '{c}', '{d}', 'Addition'),")

你可以自己运行它,看看你是否遇到了类似的结果。

这里的问题是什么?

1 个答案:

答案 0 :(得分:0)

可以肯定的是,您应该使用ctrl+c或其他一些在退出时显示堆栈跟踪的方法来停止正在运行的脚本。这将显示您当时正在执行的代码。

但可能的原因是你的循环永远不会完成,因为你随机选择两次相同的数字作为答案(你选择了200个中的4个数字,做了300次 - 这很可能),所以:

  while d == c or d == b or d == a:
    d = random.choice(possibleanswers)

总会以副本结束。

不是随意选择答案,而是随意播放:

random.shuffle(possibleanswers)
a, b, c, d = possibleanswers

要生成没有重复的新答案,您可以执行以下操作:

correctanswer = r1+r2
domain = set(correctanswer+x for x in range(-100, 100))
domain.discard(correctanswer)  # make sure you don't select the correct one
possibleanswers = random.sample(domain, 3)  # select 3 random ones
possibleanswers.append(correctanswer)