我遇到与here完全相同的问题,除了那里列出的解决方案对我不起作用。
我在我的本地计算机上运行它,我的内存和CPU使用情况在任务管理器中似乎很好。 ( 6个核心,12个ram )
我首先在一个名为repl.it的在线IDE中看到了这个问题。我有一个简单的代码,它以SQL条目的形式生成Math问题。
Here是我输出的屏幕截图。
循环仅运行了5次而不是请求的300次,然后冻结。 我再次运行它,循环运行了7次。
我重复了一遍,每一次,循环的次数都发生了巨大的变化。
这是我的完整代码:
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'),")
你可以自己运行它,看看你是否遇到了类似的结果。
这里的问题是什么?
答案 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)