Code: Alles auswählen
from sympy.matrices import *
from sympy.printing import *
from IPython.display import display, HTML, Math, Latex, clear_output
from ipywidgets import widgets
from random import randint
import numpy as np
from builtins import str
text1 = widgets.Text()
text=[]
button1 = widgets.Button(description="Auswerten")
button2 = widgets.Button(description="Neue Aufgabe")
#x = np.arange(9).reshape(3,3)
#y = np.arange(3).reshape(3,1)
x=Matrix()
y=Matrix()
latexWidget = widgets.Latex()
taskWidget = widgets.HTML()
taskWidget.value = "<b>Berechnen Sie:</b>"
mhbox1 = widgets.HBox((taskWidget, latexWidget))
mhbox2 = widgets.HBox((button1, button2))
cb_container= []
def init_vectors(b):
global x, y, text1, text, cb_container
cb_container=[]
cb_container.append(widgets.HBox())
cb_container.append(widgets.HBox())
cb_container.append(widgets.HBox())
for j in range(3):
for i in range(3):
text.append(widgets.Text(width=40))
cb_container[j].children=[i for i in text]
text=[]
x=zeros(3,3)
y=zeros(3,1)
for i in range(3):
for j in range(3):
x[j,i]=randint(-10,10)
for i in range(1):
for j in range(3):
y[j,i]=randint(-10,10)
#n_matrix_x=np.eye(3)
n_matrix_x=np.matrix(x).astype(float)
gefunden=False
if np.linalg.det(n_matrix_x)==0:
init_vectors(b)
else:
A,B=np.linalg.eig(n_matrix_x)
for i in range(3):
if A[i].real==0 or A[i].imag!=0:
gefunden=True
break
n_matrix_x=np.matrix(x).astype(float)
n_matrix_y=np.matrix(y).astype(float)
z = np.linalg.solve(n_matrix_x,n_matrix_y)
for i in range(3):
if z[i,0]!= int(z[i,0]):
gefunden=True
break
if gefunden:
init_vectors(b)
text1.value = ""
display_task()
def display_task():
global x, y, latexWidget
clear_output()
a1 = latex(x)
a2 = latex(y)
a1 = a1.replace("left[", "left(")
a2 = a2.replace("left[", "left(")
a1 = a1.replace("right]", "right)")
a2 = a2.replace("right]", "right)")
str1 = "$\langle" + a1 + ", " + a2 + "\\rangle$"
latexWidget.value = str1
def evaluate(b):
global x, y, text1
n_matrix_x=np.matrix(x).astype(float)
n_matrix_y=np.matrix(y).astype(float)
z = np.linalg.solve(n_matrix_x,n_matrix_y)
w=widgets.Textarea(Description='Lösung GLS',
value=str(z)
)
display(w)
clear_output()
display_task()
loesung_gefunden=True
for i in range(3):
if z[i,0]!=int(text[i].value):
loesung_gefunden=False
break
if loesung_gefunden:
display(HTML("<b><font color='green'>Richtig</font></b>"))
else:
display(HTML("<b><font color='red'>Falsch</font></b>"))
def exec_la_scalar_1():
init_vectors(button2)
button2.on_click(init_vectors)
button1.on_click(evaluate)
display(widgets.VBox(mhbox1))
display(widgets.VBox(cb_container[0]))
display(widgets.VBox(mhbox2))
Die Zeile cb_container[j].children= funktioniert nicht. Es kommt folgende Fehlermeldung:
TraitError: The 'children' trait of a FlexBox instance must be a tuple, but a value of class 'ipywidgets.widgets.widget_box.FlexBox' (i.e. <ipywidgets.widgets.widget_box.FlexBox object at 0x7f2abf20c9b0>) was specified.
Wenn ich cb_container nicht als Feld/Liste definiere dann funktioniert der Code. Woran liegt das?