Computer >> Máy Tính >  >> Lập trình >> Python

Máy tính cơ bản II bằng Python

Giả sử chúng ta phải triển khai một máy tính cơ bản để đánh giá một chuỗi biểu thức đơn giản. Chuỗi biểu thức sẽ chỉ chứa các số nguyên không âm, một số toán tử như, +, -, *, / và các khoảng trống. Phép chia số nguyên chỉ nên lấy phần thương.

Vì vậy, nếu đầu vào là “3 + 2 * 2”, thì đầu ra sẽ là 7.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • xác định một ngăn xếp s, i:=0, x:=một chuỗi rỗng
  • cho mỗi ký tự j trong s
    • nếu j không phải là một ký tự trống
      • nối j vào x
  • s:=x, n:=độ dài của x
  • trong khi tôi
  • nếu s [i] là ‘/’ thì
    • tăng tôi lên 1
    • num:=số bắt đầu từ chỉ mục thứ i, sau đó cập nhật i là ký tự cuối cùng của số
    • nếu phần tử trên cùng của ngăn xếp <0, thì hãy cập nhật phần tử trên cùng của ngăn xếp dưới dạng - (đỉnh của ngăn xếp / num), nếu không thì cập nhật phần tử trên cùng của ngăn xếp thành (đỉnh của ngăn xếp / num)
  • ngược lại khi s [i] =“*”
    • tăng tôi lên 1
    • num:=số bắt đầu từ chỉ mục thứ i, sau đó cập nhật i là ký tự cuối cùng của số
    • đỉnh ngăn xếp:=num * đỉnh ngăn xếp
  • ngược lại khi s [i] =‘-’
    • tăng tôi lên 1
    • num:=số bắt đầu từ chỉ mục thứ i, sau đó cập nhật i là ký tự cuối cùng của số
    • chèn –num vào ngăn xếp
  • nếu không thì
    • num:=số bắt đầu từ chỉ mục thứ i, sau đó cập nhật i là ký tự cuối cùng của số
    • chèn num vào ngăn xếp
    • tăng tôi lên 1
  • trả về tổng các phần tử của ngăn xếp
  • Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

    Ví dụ

     class Giải pháp (đối tượng):def tính (self, s):"" ":type s:str:rtype:int" "" stack =[] i =0 x ="" cho j trong s:if j ! ="":x + =j s =x n =len (s) while i  

    Đầu vào

     "3 + 2 * 2" 

    Đầu ra

     7