Tách chuỗi để lấy ra các hệ số của phương trình bậc 2

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 ạ!!

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
3 Likes

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.

1 Like

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

4 Likes

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.
3 Likes

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
2 Likes

Đầ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 :slight_smile:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?