Python 如何修复:此工厂功能只工作一次
这个函数只工作一次,然后就不再工作了。有人能告诉我我做错了什么吗Python 如何修复:此工厂功能只工作一次,python,vpython,Python,Vpython,这个函数只工作一次,然后就不再工作了。有人能告诉我我做错了什么吗 from vpython import * def create_cube(pos,size,front,back,left,right,bottom,top): c = [ pyramid(pos=pos-vector(0.5,0,0),size=size,color=left), pyramid(pos=pos+vector(0.5,0,0),size=size,color=right).rotate(angl
from vpython import *
def create_cube(pos,size,front,back,left,right,bottom,top):
c = [ pyramid(pos=pos-vector(0.5,0,0),size=size,color=left),
pyramid(pos=pos+vector(0.5,0,0),size=size,color=right).rotate(angle=radians(180),axis=vector(0,1,0)),
pyramid(pos=pos+vector(0,0,0.5),size=size,color=front).rotate(angle=radians(90),axis=vector(0,1,0)),
pyramid(pos=pos-vector(0,0,0.5),size=size,color=back).rotate(angle=radians(270),axis=vector(0,1,0)),
pyramid(pos=pos-vector(0,0.5,0),size=size,color=bottom).rotate(angle=radians(90),axis=vector(0,0,1)),
pyramid(pos=pos+vector(0,0.5,0),size=size,color=top).rotate(angle=radians(270),axis=vector(0,0,1)),
box(pos=pos,size = vector(0.9,0.9,0.9),color=color.black)]
return compound(c)
topleftfrontcorner = create_cube(vector(-1,1,1),vector(0.5,0.90,0.90),color.red,color.black,color.blue,color.black,color.black,color.yellow)
topmiddlefrontside = create_cube(vector(0,0,0),vector(0.5,0.90,0.90),color.red,color.black,color.black,color.black,color.black,color.yellow)
我希望此函数每次调用时都能输出一个自定义的“多维数据集”,而不仅仅是一次。您应该返回
c
,并在topleftfrontcorner
和topmiddlefrontside
上使用compound
:
from vpython import *
def create_cube(pos,size,front,back,left,right,bottom,top):
c = [ pyramid(pos=pos-vector(0.5,0,0),size=size,color=left),
pyramid(pos=pos+vector(0.5,0,0),size=size,color=right).rotate(angle=radians(180),axis=vector(0,1,0)),
pyramid(pos=pos+vector(0,0,0.5),size=size,color=front).rotate(angle=radians(90),axis=vector(0,1,0)),
pyramid(pos=pos-vector(0,0,0.5),size=size,color=back).rotate(angle=radians(270),axis=vector(0,1,0)),
pyramid(pos=pos-vector(0,0.5,0),size=size,color=bottom).rotate(angle=radians(90),axis=vector(0,0,1)),
pyramid(pos=pos+vector(0,0.5,0),size=size,color=top).rotate(angle=radians(270),axis=vector(0,0,1)),
box(pos=pos,size = vector(0.9,0.9,0.9),color=color.black)]
return c
topleftfrontcorner = create_cube(vector(-1,1,1),vector(0.5,0.90,0.90),color.red,color.black,color.blue,color.black,color.black,color.yellow)
topmiddlefrontside = create_cube(vector(0,0,0),vector(0.5,0.90,0.90),color.red,color.black,color.black,color.black,color.black,color.yellow)
compound(topleftfrontcorner, topmiddlefrontside)
这样做给了我:
也许更熟悉vpython
的人可以解释更多,但一般来说,创建多维数据集和渲染多维数据集是有区别的。在代码段中看不到两个多维数据集的原因是程序仍在渲染第一个多维数据集(一个阻塞操作),甚至还没有计算第二个函数调用。您可以通过在两个函数调用之间放置一个打印(“hello!”)
来了解情况<代码>“你好!”永远不会打印,因为程序仍在忙于渲染topleftfrontcorner
在更新后的代码片段中,我们构造了两个立方体,然后同时渲染它们。您所说的“只工作一次”是什么意思?确切的行为是什么?是否有任何错误消息或警告?预期的行为是,无论我在哪里,它都会创建一个自定义多维数据集,但在第一次呼叫后,它不会在第二次呼叫时输出另一个多维数据集。当我尝试发布以下答案时,它被删除,因为它“没有解决问题”。所以我要再说一遍:金字塔构造器是有缺陷的。它们的形式是金字塔(…)。旋转(…)后接“、轴=向量(0,1,0)”,这使得这些轴计算成为要合成的元素,您会得到一个错误,因为“轴=向量(0,1,0)”不是三维对象。