Ví dụ em có một chuỗi được nhập vào: “Câu 1 hãy giải phương trình 5x2 + 6x - 2 = 0 và cho biết nghiệm?”
Làm thế nào để em tách ra các hệ sộ a,b,c của phương trình trong chuỗi trên được ạ.
Em cám ơn nhiều ạ!!
Tách chuỗi để lấy ra các hệ số của phương trình bậc 2
Bạn dùng regex nhé.
import re
m = re.findall(..., s) # điền chuỗi regex của bạn vào chỗ 3 chấm
phương trình ngãu nhiên được nhập vào thì làm sao v anh
Em đang học phần giải thuật ạ
Thì bạn ghép nhiều regex các hàm sơ cấp là được thôi.
Regex là dễ nhất rồi.
Còn làm kiểu “thủ công” thì nhận thấy đây là phương trình bậc 2 nên có x2, cắt đôi luôn string tại x2, thế là có 1 vế trái là trước x2, vế phải là sau x2.
“Câu 1 hãy giải phương trình 5x2 + 6x - 2 = 0 và cho biết nghiệm?” => Split tại x2
VT = “Câu 1 hãy giải phương trình 5"
VP = "x2 + 6x - 2 = 0 và cho biết nghiệm?”
VP làm tương tự là split tiếp tới dấu "= "
VP1 = "x2 + 6x - 2 = "
VP2 = "0 và cho biết nghiệm?”
Giờ vế trái spit bằng dấu cách, lấy giá trị cuối cùng
VT = “Câu 1 hãy giải phương trình 5” => “5”
VP2 làm tương tự trên, nhưng lấy giá trị đầu tiên => VP2 = 0
Ghép hết vào: PT = VT + VP1 + VP2 = 5x2 + 6x - 2 = 0
Nếu string của bạn luôn cố định theo format
Câu 1 hãy giải phương trình xxxxxxx và cho biết nghiệm?
thì chỉ cần xoá text phần đầu và phần cuối là xong mà
Còn nếu không cố định vậy, thì xài regex để nhận dạng format của phương trình
Phương trình có nhiều dạng format thì mình viết nhiều cái regex thôi.
Kinh nghiệm của mình là khi chưa quen với regex thì đừng nên ráng viết 1 regex có thể match được hết các trường hợp, mà thay vào đó là viết 1 regex match 1 vài trường hợp thôi, và viết nhiều cái, rồi cho hết vô loop
Ưu điểm: phù hợp newbie hay ai không nuốt được regex
Nhược:
- nhiều regex - nhiều lần test thử, tốc độ code chậm (nhưng mà chắc)
- Regex + loop = chạy chậm.
Còn một cách nữa nếu không rành về regex thì bác bỏ hết khoảng trắng và tách chuỗi theo ký tự +/- đưa vào mảng và duyệt từng phần tử
- Nếu có x2 ở cuối thì lấy substring từ [0, len - 2) => xác định a
- Nếu chỉ có x ở cuối thì lấy substring từ [0, len - 1) => xác định b
- Còn lại là hằng số => c
Đầu tiên viết regex để split re.split
sau đó với mỗi thành phần ta kiểm tra và tách theo regex