【问题标题】:Basic Vpython code error - "TypeError: bad operand type for unary -: 'tuple'"基本 Vpython 代码错误 - “TypeError:一元操作数类型错误 -:'tuple'”
【发布时间】:2017-07-07 12:17:13
【问题描述】:

如果这是一个菜鸟问题,我首先表示歉意,但我对编码完全陌生。

我正在按照在 Vpython 中构建谐波振荡模拟器的指南进行操作,但每次尝试运行该程序时都会出现此错误。

文件“C:/Users/Nathan/Desktop/vspring”,第 14 行 F_spring=-k*(block.pos -L) TypeError: 一元操作数类型错误 -: 'tuple'

有人可以看看代码并告诉我哪里出错了。我真的按照这封信的指南进行操作,因为我只是逐行复制它告诉我的内容。但它没有故障排除。它只是说“您的程序现在可以运行了”

from visual import *
from visual.graph import *

L=vector(1,0,0)
s=vector(1.,0,0)
block=sphere(radius=0.25, color=color.cyan, pos=L+s)
spring=cylinder(pos=(0,0,0), axis=L+s, radius=.1)
scene.autoscale=0
posgraph=gcurve(color=color.green)


k=100,; g=9.8; mu_s=.5; mu_k=.5; m=1.; dt=.0001; d=0.; t=0.
F_mu_s=mu_s*m*g
F_spring=-k*(block.pos-L)
almost_zero_p=mag(F_spring)*dt
block.p=vector(0,0,0)

while not(mag(block.p)<almost_zero_p and F_mu_s>=mag(F_spring)):
    if not(mag(block.p)<almost_zero_p):
        F_mu_k=m*g*mu_k*norm(block.p)
    else:
        F_ms_k=vector(0,0,0)

    F_spring=-k*(block.pos-L)
    Fnet=F_spring+F_mu_k
    block.p=block.p+Fnet*dt
    block.pos=block.pos+block.p/m*dt
    spring.axis=block.pos-spring.pos

    d=d+mag(block.p/m)*dt
    posgraph.plot(pos=(t,block.pos.x-L.x))
    t=t+dt

print "Total distance traveled is", d

【问题讨论】:

    标签: python physics simulator vpython


    【解决方案1】:

    当你在第 12 行做时:

    k=100,
    

    您实际上创建了一个元组 (100,)。

    如果你想创建一个浮动,做:

    k=100.
    

    确实,当您尝试执行-k 时,由于k 类型(元组),一元运算符- 不起作用。我认为这只是一个语法错误。

    【讨论】:

    • 啊你的传奇谢谢。所以我用逗号代替了创建元组的句号。老实说,我正在查看 k=100 下的行,这也无济于事。
    • 没问题 :) 你很幸运没有得到任何反对票 ;) 通常,语法问题很快就会被反对。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 2013-03-28
    • 2019-02-17
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多