55#numpy
66import numpy as np
77
8+ from time import sleep
9+
810def equation (self ):
911 self .line_speaker ('請講一下是甚麼題目讓你連一元一次方程式都不會解的?' )
1012 self .line_speaker ('先講一下題目有幾個變數?' )
@@ -15,9 +17,9 @@ def equation(self):
1517 self .line_speaker ('請再說一次..' )
1618 self .line_speaker ('有{}個變數,請說{}個方程式。' .format (var_num ,var_num ))
1719 # AX=B
18- A = np .array ([[0 ]* var_num for _ in range (var_num )])
19- B = np .array ([[0 ] for _ in range (var_num )])
20- X = np .array ([[None ] for _ in range (var_num )])
20+ A = np .array ([[0 ]* var_num for _ in range (var_num )], dtype = float )
21+ B = np .array ([[0 ] for _ in range (var_num )], dtype = float )
22+ X = np .array ([[None ] for _ in range (var_num )], dtype = float )
2123 for i in range (var_num ):
2224 while True :
2325 self .line_speaker ('可以開始說了..' )
@@ -26,12 +28,12 @@ def equation(self):
2628 math_line = re .sub (r'[負副富減]+' ,'-' ,math_line )
2729 math_line = re .sub (r'等於' ,'=' ,math_line )
2830 math_line = re .sub (r'加' ,'+' ,math_line )
31+ math_line = re .sub (r'[立力例]' ,'z' ,math_line )
2932 math_line = re .sub (r'(?<=\D)(?=[xyz])|^(?=[xyz])' ,'1' ,math_line )
30- print (math_line )
31- if len (re .findall (r'([^xyzXYZ\+\-\d=])' ,math_line ))== 0 :
32- break
33- else :
33+ if len (re .findall (r'([^.xyzXYZ\+\-\d=])' ,math_line ))!= 0 or math_line [- 1 ]== '=' or not '=' in math_line :
3434 self .line_speaker ('請再說一次..' )
35+ else :
36+ break
3537 if var_num >= 1 :
3638 finda = re .findall (r'([\+\-\d]+)x' ,math_line )
3739 A [i ][0 ] = int (finda [0 ]) if len (finda )>= 1 else 0
@@ -42,21 +44,27 @@ def equation(self):
4244 finda = re .findall (r'x?y?([\+\-\d]+)z' ,math_line )
4345 A [i ][2 ] = int (finda [0 ]) if len (finda )>= 1 else 0
4446 findx = re .findall (r'=(.*)' ,math_line )
45- if len ( findx ) >= 1 :
46- B [i ][0 ] = int (findx [0 ])
47- else :
48- B [i ][0 ]= 0
47+ try :
48+ B [i ][0 ] = float (findx [0 ])
49+ except :
50+ B [i ][0 ] = 0
4951 have_ans = True
5052 try :
5153 X = np .linalg .inv (A ).dot (B )
5254 except :
5355 have_ans = False
5456 if have_ans :
57+ ans = [X [k ][0 ] for k in range (len (X ))]
58+ for i in range (len (ans )):
59+ if ans [i ]- int (ans [i ])== 0.0 :
60+ ans [i ]= int (ans [i ])
5561 if var_num == 1 :
56- self .line_speaker ('X等於{}' .format (X [ 0 ] [0 ]))
62+ self .line_speaker ('X等於{}' .format (ans [0 ]))
5763 elif var_num == 2 :
58- self .line_speaker ('X等於{}\n Y等於{}' .format (X [0 ][ 0 ], X [ 1 ][ 0 ]))
64+ self .line_speaker ('X等於{}\n Y等於{}' .format (ans [0 ], ans [ 1 ]))
5965 else :
60- self .line_speaker ('X等於{}\n Y等於{}Z等於 {}' .format (X [0 ][ 0 ], X [1 ][ 0 ], X [ 2 ][ 0 ]))
66+ self .line_speaker ('X等於{}\n Y等於{}\n Z等於 {}' .format (ans [0 ], ans [1 ], ans [ 2 ]))
6167 else :
6268 self .line_speaker ('此題無解or無限解 ^_^' )
69+ sleep (2 )
70+ self .line_speaker ('很高興為您服務,如果你需要法律諮詢,我們也可以為您解惑' )
0 commit comments