1

私は物理学のPythonを学んでいます.VIDLE - Py 2.7を使用してい
ます.新しいファイルを開き、保存せずに次のコードを入力してください.

ビジュアルインポートから *

scene.width = 800
scene.height = 600
scene.autoscale = 0
scene.range = (100, 100, 100)
scene.center = (0, 40, 0)
#scene.fullscreen = 1

ball = sphere(pos=(0,103,1),radius = 2)


ground = box(pos=(0,-1,0),size=(100,2,100))
building = box(size = (6,100,6),pos=(0,50,0),color=color.blue)

gravity = 9.8 # m/s**2
velocityX = 7 #m/s
seconds = 0
dt = 0.05

finished = False
while not finished:
    rate(100)   # dont run through loop more than 100 times/sec
    seconds += dt

#position equation; y(t) = y0 + v0*t + .5 * a * t**2

ballY = 100 - .5 * gravity * seconds**2
ballX = velocityX * seconds


ball.pos = vector(ballX, ballY, 0)

if ballY -2 <=0:
    finished = True
    print "seconds to drop: " + str(seconds)

これによりプログラムが正常に実行されますが、.pyとして保存してから同じ方法で再度実行しようとするとエラーが発生します

トレースバック (最新の呼び出しが最後): ファイル "/Users/bencallaghan/Desktop/psyre.py"、ビジュアル インポートの 1 行目 * ファイル "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site -packages/VPython-6.05-py2.7-macosx-10.6-intel.egg/visual/init.py "、visual_common.create_display の 34 行目 import * ファイル "/Library/Frameworks/Python.framework/Versions/2.7/lib /python2.7/site-packages/VPython-6.05-py2.7-macosx-10.6-intel.egg/visual_common/create_display.py"、10 行目で wx を _wx ファイルとしてインポート"/usr/local/lib/wxPython-2.9 .4.0/lib/python2.7/site-packages/wx-2.9.4-osx_cocoa/wx/ init.py", wx._core import の 45 行目 * ファイル "/usr/local/lib/wxPython-2.9.4.0/lib/python2.7/site-packages/wx-2.9.4-osx_cocoa/wx/_core.py "、5 行目で新しいファイルをインポート "/Users/bencallaghan/Desktop/new.py"、8 行目で pylab import scatter,xlabel,ylabel,xlim,ylim,show ImportError: No module named pylab から

私の推測では、ビジュアルとpylabにアクセスできるVpython内のある種のシェルで実行されていますが、保存すると、別の場所からそれらにアクセスしようとし、アクセスできません。しかし、その推論を超えて、そこからどこへ行くべきかについてのアイデアはほとんどありませんか?

4

1 に答える 1

0

まず、最初の行で vpython をインポートしたのと同じ方法で pylab をインポートする必要があります。

from pylab import*

また、位置/速度の更新が while ループ内に含まれるように、このようにインデントする必要があるようです。お役に立てれば

while not finished:
    rate(100)   # dont run through loop more than 100 times/sec
    seconds += dt

    #position equation; y(t) = y0 + v0*t + .5 * a * t**2

    ballY = 100 - .5 * gravity * seconds**2
    ballX = velocityX * seconds


    ball.pos = vector(ballX, ballY, 0)

    if ballY -2 <=0:
        finished = True
        print "seconds to drop: " + str(seconds)

PS「インポート」と「*」の間のスペースが最初の行でも問題を引き起こしているかどうかはわかりません。次のようにする必要があります。

from visual import*

いいえ:

from visual import *

しかし、これは大丈夫かもしれません

于 2014-06-08T21:54:21.523 に答える