Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonに組み込み関数を使用せずに1つの数式を評価するプログラム


(+、-、*、/)で数式を表す文字列があるとします。ここで、/は整数の除算を表します。組み込み関数を使用せずに結果を評価して返す必要があります。

したがって、入力がs ="2 + 3 * 5/7"の場合、出力は2 +((3 * 5)/ 7)=4

として4になります。

これを解決するには、次の手順に従います-

  • s:=指定された文字列を逆にします
  • 関数get_value()を定義します。
  • 記号:=1
  • sが空でなく、sの最後の要素が「-」と同じである場合、
    • sから最後の要素を削除する
    • 記号:=-1
  • 値:=0
  • sが空ではなく、sの最後の要素が数字である場合、
    • 値:=値* 10
    • value:=value + sの最後の要素の数値、およびsの最後の要素を削除する
  • 戻り記号*値
  • 関数get_term()を定義します
  • term:=get_value()
  • sが空ではなく、sの最後の要素が*または/のいずれかである場合、do
    • op:=sの最後の要素であり、sから最後の要素を削除します
    • value:=get_value()
    • opが"*"と同じ場合、
      • term:=term * value
    • それ以外の場合、
      • term:=(1.0 * term / value)のフロア
  • 返品期間
  • メインの方法から次の手順を実行します。
  • ans:=get_term()
  • sが空でない場合は、
    • op:=sの最後の要素であり、sから削除します
    • term:=get_term()
    • opが"+"と同じ場合、
      • ans:=ans + term
    • それ以外の場合、
      • ans:=ans --term
  • 回答を返す

理解を深めるために、次の実装を見てみましょう-

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

  1. Pythonプログラムに組み込まれている関数を使用せずに、大文字と小文字をカウントします

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −文字列が与えられたので、組み込み関数を使用せずに、文字列に存在する大文字と小文字の数を数える必要があります これは、Pythonで使用可能なislower()およびisupper()関数を使用して簡単に解決できます。ただし、ここには組み込み関数を使用するための制約があります。そこで、ここでは文字のASCII値を利用します。 ord()関数を使用して、文字列に存在する各文字のASCII値を計算し、次に示すように大文字と小文字を比較してチェックします。 例 def upperlower(string): &

  2. 組み込み関数を使用せずに大文字と小文字をカウントするPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 文字列入力が与えられた場合、与えられた文字列内の大文字と小文字の数を見つける必要があります。 ここでは、組み込みのord()関数を使用して各文字のASCII値を確認します。 ここでは、2つのカウンターを0に割り当て、入力文字列をトラバースし、ASCII値をチェックして、カウンターをそれぞれインクリメントしています。 次に、以下の実装を見てみましょう- 例 def upperlower(string):    upper = 0    lowe