Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมเพื่อประเมินนิพจน์ทางคณิตศาสตร์หนึ่งนิพจน์โดยไม่มีฟังก์ชันในตัวใน python


สมมติว่าเรามีสตริงที่แสดงนิพจน์ทางคณิตศาสตร์ด้วย (+, -, *, /) ที่นี่ / แทนการหารจำนวนเต็ม เราต้องประเมินและส่งคืนผลลัพธ์โดยไม่ต้องใช้ฟังก์ชันในตัว

ดังนั้น หากอินพุตเป็น s ="2+3*5/7" ผลลัพธ์จะเป็น 4 เช่น 2 + ((3 * 5) / 7) =4

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • s :=ย้อนกลับสตริงที่กำหนด
  • กำหนดฟังก์ชัน get_value()
  • ลงชื่อ :=1
  • ถ้า s ไม่ว่างและองค์ประกอบสุดท้ายของ s เหมือนกับ "-" แล้ว
    • ลบองค์ประกอบสุดท้ายออกจาก s
    • ลงชื่อ :=-1
  • ค่า :=0
  • ในขณะที่ s ไม่ว่างเปล่าและองค์ประกอบสุดท้ายของ s เป็นตัวเลข ให้ทำ
    • ค่า :=ค่า * 10
    • ค่า :=ค่า + ค่าตัวเลขขององค์ประกอบสุดท้ายจาก s และลบองค์ประกอบสุดท้ายของ s
  • ค่าเครื่องหมายส่งคืน *
  • กำหนดฟังก์ชัน get_term()
  • term :=get_value()
  • ในขณะที่ s ไม่ว่างเปล่า และองค์ประกอบสุดท้ายของ s คือ * หรือ /, do
    • op :=องค์ประกอบสุดท้ายของ s และลบองค์ประกอบสุดท้ายออกจาก s
    • value :=get_value()
    • ถ้า op เหมือนกับ "*" แล้ว
      • ระยะ :=ระยะ * ค่า
    • มิฉะนั้น
      • term :=พื้นของ (1.0 * เทอม / ค่า)
  • ระยะเวลาคืนสินค้า
  • จากวิธีหลัก ให้ทำดังนี้:
  • ตอบ :=get_term()
  • ในขณะที่ยังไม่ว่างให้ทำ
    • op :=องค์ประกอบสุดท้ายของ s และลบออกจาก s
    • term :=get_term()
    • ถ้า op เหมือนกับ "+" แล้ว
      • ans :=ans + เทอม
    • มิฉะนั้น
      • ans :=ans - เทอม
  • คืนสินค้า

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

from math import floor, trunc
class Solution:
   def solve(self, s):
      s = list(s[::-1])

      def get_value():
         sign = 1
         if s and s[-1] == "-":
            s.pop()
            sign = -1
         value = 0
         while s and s[-1].isdigit():
            value *= 10
            value += int(s.pop())
         return sign * value

      def get_term():
         term = get_value()
         while s and s[-1] in "*/":
            op = s.pop()
            value = get_value()
            if op == "*":
               term *= value
            else:
               term = floor(1.0 * term / value)
         return term

      ans = get_term()
      while s:
         op, term = s.pop(), get_term()
         if op == "+":
            ans += term
         else:
            ans -= term
      return ans

ob = Solution()
s = "2+3*5/7"
print(ob.solve(s))

อินพุต

"2+3*5/7"

ผลลัพธ์

4