Python 无法在While循环中分散、打印、显示()
在我的代码底部。这是不方便的,我想我的循环无休止地允许1,2,3之间的选择,而不必重新运行程序。为什么Python的图形在运行时会崩溃 更新Python 无法在While循环中分散、打印、显示(),python,Python,在我的代码底部。这是不方便的,我想我的循环无休止地允许1,2,3之间的选择,而不必重新运行程序。为什么Python的图形在运行时会崩溃 更新 通过使用plt.draw(),我能够使图形至少显示,但它仍然没有响应。如果没有响应,则意味着它不会再次显示提示,这是因为plt.show()将导致程序停止,直到窗口关闭。您可以用plt.draw()替换plt.show(),但要真正启动windows,您需要处于交互模式。这是通过在任何draw调用之前调用plt.ion()来实现的(我把它放在while T
通过使用plt.draw(),我能够使图形至少显示,但它仍然没有响应。如果没有响应,则意味着它不会再次显示提示,这是因为plt.show()将导致程序停止,直到窗口关闭。您可以用plt.draw()替换plt.show(),但要真正启动windows,您需要处于交互模式。这是通过在任何draw调用之前调用plt.ion()来实现的(我把它放在while True之前:)。我已经测试过了,这应该可以实现你想要的行为
编辑:由于您没有重新绘制相同的数据,因此调用draw()会将数据附加到特定的绘图中(即反复键入1将继续添加点)。我不知道您在寻找什么类型的行为,但如果您想清除数据,您可能希望在每次分散调用之前调用plt.clf。这样做效果很小。事实上,没有什么是我没有异议的。这样做会导致图形崩溃和内核崩溃。我所希望的是能够选择我的三个图形中的一个一次显示。但我希望这是一个循环,这样我就不必每次都重新启动程序。像这样做对我来说非常有效,没有崩溃。崩溃时输出的是什么错误?它实际上会导致窗口不响应。Ctrl+Alt+Del以关闭窗口并重新启动Corpody中崩溃的内核。您尝试了我链接的版本吗?如果从命令行python[filename]运行它,对我来说没有问题
import math
import pylab as plt
import numpy
from numpy import sqrt
from scipy.integrate import quad
import random
numpy.seterr(divide='ignore', invalid='ignore')
def integrand (x):
return sqrt(1-x**2)
q1area, err = quad(integrand,0,1)
print "This program estimates the convergence of Pi to a ratio of one."
while True:
print "Please choose from one of the five following options:"
print " 1. 10^1\n 2. 10^2\n 3. 10^3\n"
choice = int(raw_input())
options = {1,2,3}
if choice == 1:
plt.xlim([0,15])
plt.ylim([-5,5])
x = numpy.linspace(0,15,500)
y = numpy.sqrt(1-x**2)
z = 1+x*0
xcord = []
ycord = []
under = []
above = []
pratiolist = []
yvalues = []
xvalues = range(1,11)
for i in range(10):
xcord.append(random.random())
ycord.append(random.random())
for j in ycord:
if (j <= q1area):
under.append(1)
else:
above.append(1)
punder = len(under)
if punder == 0:
punder = punder + 1
pabove = len(above)
if pabove == 0:
pabove = pabove + 1
pratio = punder / float(pabove)
pratiolist.append(pratio)
for k in pratiolist:
rtpi = k / float(math.pi)
yvalues.append(rtpi)
plt.scatter(xvalues,yvalues,c='b')
plt.plot(x,z,'g')
plt.show()
if choice == 2:
plt.xlim([0,110])
plt.ylim([-5,5])
x = numpy.linspace(0,110,500)
y = numpy.sqrt(1-x**2)
z = 1+x*0
xcord = []
ycord = []
under = []
above = []
pratiolist = []
yvalues = []
xvalues = range(1,101)
for i in range(100):
xcord.append(random.random())
ycord.append(random.random())
for j in ycord:
if (j <= q1area):
under.append(1)
else:
above.append(1)
punder = len(under)
if punder == 0:
punder = punder + 1
pabove = len(above)
if pabove == 0:
pabove = pabove + 1
pratio = punder / float(pabove)
pratiolist.append(pratio)
for k in pratiolist:
rtpi = k / float(math.pi)
yvalues.append(rtpi)
plt.scatter(xvalues,yvalues,c='b')
plt.plot(x,z,'g')
plt.show()
if choice == 3:
plt.xlim([0,1100])
plt.ylim([-5,5])
x = numpy.linspace(0,1100,500)
y = numpy.sqrt(1-x**2)
z = 1+x*0
xcord = []
ycord = []
under = []
above = []
pratiolist = []
yvalues = []
xvalues = range(1,1001)
for i in range(1000):
xcord.append(random.random())
ycord.append(random.random())
for j in ycord:
if (j <= q1area):
under.append(1)
else:
above.append(1)
punder = len(under)
if punder == 0:
punder = punder + 1
pabove = len(above)
if pabove == 0:
pabove = pabove + 1
pratio = punder / float(pabove)
pratiolist.append(pratio)
for k in pratiolist:
rtpi = k / float(math.pi)
yvalues.append(rtpi)
plt.scatter(xvalues,yvalues,c='b')
plt.plot(x,z,'g')
plt.show()
while choice not in options:
print "Not a valid choice!\n"
break
#plt.scatter(xvalues,yvalues,c='b')
#plt.plot(x,z,'g')
#plt.show()
plt.scatter(xvalues,yvalues,c='b')
plt.plot(x,z,'g')
plt.show()