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

PythonでExcelスプレッドシート操作を実行するプログラム?


Excelスプレッドシートを表す2Dマトリックスがあるとします。すべてのセルと数式が計算された同じ行列を見つける必要があります。 Excelスプレッドシートは次のようになります

B1 7 0
3 5 =A1 + A2

列の名前は(A、B、C ...)、行の名前は(1、2、3 ....)です。各セルには、値、別のセルへの参照、または次の操作のExcel数式が含まれます。数値またはセル参照の間。 (例: "=A1 + 5"、 "=A2 + B2"、または "=2 + 5")

したがって、入力が次のような場合

B1 7 0
3 5 =A1 + A2

その場合、出力は次のようになります

7 7 0
3 5 10

B1 =7(最初の行の2番目の列)であり、「=A1+A2」は7+3=10であるため。

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

  • 関数resolve()を定義します。これには時間がかかります

  • sが数値の場合、sを整数として返します

  • それ以外の場合はsolve(getIdx(s))

    を返します
  • 関数getIdx()を定義します。これには時間がかかります

  • 最初の値が整数として1から最後までのsの部分文字列であり、2番目の値がs[0]のASCII-「A」のASCIIであるリストを返します

  • 関数do()を定義します。これにはa、b、opが必要です

  • opが「+」と同じ場合、

    • a+bを返す

  • opが「-」と同じ場合、

    • a --b

      を返します
  • opが「*」と同じ場合、

    • a * b

      を返します
  • opが「/」と同じ場合、

    • a/bを返す

  • 関数solve()を定義します。これにはi、jが必要です

  • matrix [i、j]が数値の場合、その値を返します

  • それ以外の場合:

    • s:=matrix [i、j]

    • s[0]が"="と同じ場合、

      • sの部分文字列の各c[インデックス2から終了まで]に対して、実行

        • cが(+、-、/、*)の演算子の場合、

          • op:=c

          • ループから出てきます

      • [a、b]:=sの部分文字列[インデックス1から最後まで]そしてopで分割

      • [aRes、bRes]:=[resolve(a)、resolve(b)]

      • do(aRes、bRes、op)を返す

    • それ以外の場合

      • リターンsolve(getIdx(s))

  • 0から行列の行数までの範囲のiについては、次のようにします

    • 0から行列の列数までの範囲のjについては、次のようにします

      • matrix [i、j]:=(solve(i、j))as string

  • リターンマトリックス

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

class Solution:
   def solve(self, matrix):
      def resolve(s):
         try:
            return int(s)
         except:
            return solve(*getIdx(s))

      def getIdx(s):
         return [int(s[1:]) - 1, ord(s[0]) - ord("A")]

      def do(a, b, op):
         if op == "+":
            return a + b
         if op == "-":
            return a - b
         if op == "*":
            return a * b
         if op == "/":
            return a / b

      def solve(i, j):
         try:
            return int(matrix[i][j])
         except:
            s = matrix[i][j]
            if s[0] == "=":
               for c in s[2:]:
                  if c in "+-/*":
                     op = c
                     break
               a, b = s[1:].split(op)
               aRes, bRes = resolve(a), resolve(b)
               return do(aRes, bRes, op)
            else:
               return solve(*getIdx(s))

      for i in range(len(matrix)):
         for j in range(len(matrix[0])):
            matrix[i][j] = str(solve(i, j))

      return matrix

ob = Solution()
matrix = [
   ["B1", "7", "0"],
   ["3", "5", "=A1+A2"]
]
print(ob.solve(matrix))

入力

[["B1", "7", "0"],
["3", "5", "=A1+A2"] ]

出力

[['7', '7', '0'],
['3', '5', '10']]

  1. Pythonを使用してチェス盤の正方形の色を決定するプログラム

    チェス盤の座標、つまりチェス盤の行と列の座標を表す文字列があるとします。以下は参考のためのチェス盤です。 指定されたセルが白かどうかを確認する必要があります。白がtrueを返す場合は、falseを返します。 したがって、入力がcoordinate =f5のような場合、出力はTrueになります(画像を参照) これを解決するには、次の手順に従います- 座標[0]mod2のASCIIが同じ座標[1])mod 2の場合、 Falseを返す それ以外の場合 Trueを返す 理解を深めるために、次の実装を見てみましょう- 例 def solve(coord

  2. リストの各要素とPythonで指定された値を使用して指定された操作を実行するプログラム

    numsという数値のリストがあり、「+」、「-」、「/」、「*」などの演算子を表す別の文字列opもあり、別の値valも指定されている場合、 valを使用してnumsで数値を計算し、結果を返します。 したがって、入力が[5,3,8]の場合、出力は[15、9、24]になります。 これを解決するには、次の手順に従います- res:=新しいリスト numsの各iについて、 opが+と同じ場合、 resの最後にi+valを挿入 それ以外の場合、opが-と同じ場合、 resの最後にi-valを挿入 それ以外の場合、opが*と同じ場合、 resの最後にi*valを挿入 それ以外の場合、