Brauche Hilfe bei Python in PB Übersetzung

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Brauche Hilfe bei Python in PB Übersetzung

Beitrag von Scarabol »

Hallo Leute,

ich versuche den folgenden Code in PB zu übersetzen, komme aber jetzt irgendwie nicht weiter, währe also super wenn ihr mir weiterhelfen könntet.
Ihr müsst nicht direkt den ganzen Code 100% übersetzen, wie ihr seht hab ich auch nur bruchstückhaft angefangen, aber jeder Schritt zählt.

Wichtig! Im Code sollten die Variablen, ect. erhalten bleiben, da er nachher in einige andere eingefügt werden soll.

Code: Alles auswählen

#E = 2.718281828459

Import math

class Vector:

	rep = 0

	Procedure __init__(self, x, y=0, z=0, w=0)
		If y = 0
			self.rep = tuple(x)
		ElseIf z = 0
			self.rep = (x, y)
		ElseIf w = 0
			self.rep = (x, y, z)
		Else
			self.rep = (x, y, z, w)
  EndProcedure
  
	; math functions
  
	Procedure __add__(self, other)
		ProcedureReturn Vector(map(lambda a, b: a + b, self.rep, other.rep))
  EndProcedure
  
	Procedure __sub__(self, other)
		ProcedureReturn Vector(map(lambda a, b: a - b, self.rep, other.rep))
  EndProcedure
  
	Procedure __mul__(self, value)
		ProcedureReturn Vector(map(lambda x: x * value, self.rep))
  EndProcedure
  
	Procedure __div__(self, value)
		ProcedureReturn Vector(map(lambda x: x / value, self.rep))
  EndProcedure
  
	Procedure __abs__(self)
;		"absolute gives the length"
		ProcedureReturn Sqr(self % self)
  EndProcedure
  
	Procedure __neg__(self)
		ProcedureReturn Vector(map(lambda x: -x, self.rep))
  EndProcedure
  
	Procedure __mod__(self, other)
;		"dot product"
		ProcedureReturn dot(self, other)
  EndProcedure
  
	Procedure __xor__(self, other)
;		"3d cross product"
		ProcedureReturn cross(self, other)
  EndProcedure
  
	; coord access functions
  
	Procedure __len__(self)
		ProcedureReturn Len(self.rep)
  EndProcedure
  
	Procedure __getitem__(self, index)
		ProcedureReturn self.rep[index]
  EndProcedure
  
	Procedure __getattr__(self, name)
		name_indices = {'x':0, 'y':1, 'z':2, 'w': 3, 'u': 0, 'v': 1}
		If Not name_indices.has_key(name): raise AttributeError(name)
		ProcedureReturn self.rep[name_indices[name]]
  EndProcedure
  
	; other useful basic functions
  
	Procedure __eq__(self, other)
		ProcedureReturn 0 Not in map(lambda a, b: a == b, self.rep, other.rep)
  EndProcedure
  
	Procedure __ne__(self, other)
		ProcedureReturn 0 in map(lambda a, b: a == b, self.rep, other.rep)
  EndProcedure
  
	Procedure __nonzero__(self)
		ProcedureReturn max(map(lambda x: Abs(x), self.rep)) > 0
  EndProcedure
  
	; string conversion functions
  
	Procedure.s __str__(self)
		s.s = ",".join(map(lambda x: "%.3f" % x, self.rep))
		ProcedureReturn "(" + s + ")"
  EndProcedure
  
	Procedure.s __repr__(self)
		s.s = ",".join(map(lambda x: "%.3f" % x, self.rep))
		ProcedureReturn "Vector(" + s + ")"
  EndProcedure
  
	; other functions
  
	Procedure dot(self, other)
		temp = map(lambda x, y: x * y, self.rep, other.rep)
		ProcedureReturn reduce(lambda a, b: a + b, temp)
  EndProcedure
  
	Procedure cross(self, other)
		a1, a2, a3 = self
		b1, b2, b3 = other
		ProcedureReturn Vector(a2*b3 - a3*b2, a3*b1 - a1*b3, a1*b2 - a2*b1)
  EndProcedure
  
	Procedure normalize(self)
		len = Abs(self)
		If len < #E-5 : ProcedureReturn 0 : EndIf
		self.rep = tuple(map(lambda x: x / len, self.rep))
  EndProcedure
  
	Procedure unit(self)
		len = Abs(self)
		If len < #E-5 : ProcedureReturn 0 : EndIf
		ProcedureReturn self / len
  EndProcedure
  
; test
If __name__ == "__main__":
	a = Vector(0,3,4)
	b = Vector(1,2,5)

	print a, b
	print a + b
	print Abs(a)
	print a + Vector(1,0,0)
	print a ^ b
	x, y, z = a
	print x, y, z
Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP