Pythonがシンプルな電卓 - シンプルな電卓を教えるプロジェクトのPython実装

ナンセンスEDITORIAL:

私は初心者白のPython午前、いくつかの個体は、自己プログラミングの知識や文法は時に非常に明確な外観をポイントして、[数日後にガチョウを忘れないだろうと感じているので、私はシンプルさを覚えて知識ポイントを印象づけるために何か小さなプロジェクトを行う予定。

唯一の無脳は他の誰かのコードのノックに輝いて、そしてゆっくりあなたは卵と何もないことがわかります場合は、あなただけのアップノックをコードを置くが、あなたが書いた理由を他の人が理解していません。

私はあなたに特定のショーのニーズ、それが実現したときに、十分ではありませんビットは、あなたは少し考えを見つけていないだろう、自分のためだと思うそうでない場合。

セルフ彼らは問題は、その後、ステップデバッグによって、問題のステップを解決ところ、今回が最初に見つけるために、実装の過程で多くの問題が発生した最後の最終仕上げを記録するようにしてくださいだろう、達成するために自分自身を少しニーズを見つけることが最善です。

-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------------------------------

シンプルな電卓の開発ニーズ:

単純な算術演算は、その優先度は括弧で解決し、出力することができる正確な計算結果です。

参考アレックスビッグブラザー:教育プロジェクト- Pythonのことでシンプルな電卓

 

分析:

ユーザの入力を検出する。1.最初の必要性は、マッチング括弧として、合法です

入力文字列ので2.ので、文字列解析の必要性が出て解析し、「+ - * /()」のシンボルよう

3.優先解像度、第1の乗算、除算、加減算最後のカウントの計算において、括弧の内容を計算します

 

  。1  ! - * - UTF-コーディング8 - * - 。
  2  #の@time:$ [DATE] $ [TIME]!
  3。  @author:GG!
  4。 
  5。 インポート  6。 
  7。 DEFのcomupute_mut_and_div(式):
   8。     '' ' 演算子乗算および除算'' ' 
  9つの      演算子= re.findall(" [* /] " は、式)
 10      calc_list = re.split(" [* /] " は、式)
 。11の      RES =なし     #の最初のパスループの詳細割り当てさようなら
12      のためのインデックス、I 列挙(calc_list):
 13は         IF RES:    リストインデックスが範囲外ではないので、ここで初めては、実行されていない
14              IF演算子[-index 1] == " * " 15の                  RES * = フロート(I)
 16の             ELIFの演算子[ 1インデックス] == " / " 17の。                  RES / = フロート(I)
 18は         他の19の。              RES = フロート(I)
 20は     プリント" 033を\ [31であり; 1M [%S]の計算結果= \ 033 [0メートル"%の式、RES)
 21      リターンRES
 22  
23  DEF handle_special_sign(plus_and_sub_operators、mul_and_div):
 24      ""」
25      有时会遇到这种情况:1-2 * -2 / 1
 26      plus_and_sub_operators:[ ' - '、 ' - ']
 27      mul_and_div:[ '1 」、 '2 *'、 '2/1']
 28      :PARAMのplus_and_sub_operators:
 29      :PARAM mul_and_div:
 30      :リターン:
 31      ""」
32      のためのインデックスI 列挙(mul_and_div):
 33          、I = i.strip()
 34          もし i.endswith(" * "またはi.endswith(" / " ):
 35              mul_and_div [インデックス] = mul_and_div [インデックス] + plus_and_sub_operators [インデックス] + mul_and_div [インデックス+ 1 ]
 36              デル mul_and_div [インデックス+ 1 ]
 37              デルplus_and_sub_operators [索引]
 38      リターンplus_and_sub_operators、mul_and_div
 39  
40  デフhandle_minus_inlist(operators_list、calc_list):
 41      ""」
42      处理加减带负号的运算、1--4 = 1 - ( - 4)= 1 + 4
 43      operators_list:[ ' - ']
 44      calc_list。 [ '1'、 ''、 '4.0']
 45      :
param operators_list:46は     :PARAMのcalc_list:
 47      :リターン:
 48      "" " 
49      のためのインデックスI 列挙(calc_list):
 50          IF I == '' 51である              calc_list [インデックス+ 1] = " - " + calc_list [インデックス+ 1 ]
 52は、             デルcalc_list [索引]
 53である     戻り、calc_list operators_list
 54は 
55  DEF :計算(式)
 56である     '' ' 
57は     、文字列解析に
 58      PARAM式:の入力文字列
 59      リターン:演算結果
60      ''」
61      式= formula.strip(" ()"去括号、这里是(1 + 2-2 * 3 + 3/6)
62      plus_and_sub_operators = re.findall(" [+ - ] " 、式)
 63      mul_and_div = re.split(" [+ - ] "は、式)   取出乘除公式
64  
65      plus_and_sub_operators、mul_and_div = handle_special_sign(plus_and_sub_operators、mul_and_div)
 66      のための I におけるmul_and_div:
 67          場合でlen(I)> 1 68              プリント(I)
 69の              RES = comupute_mut_and_div(I)
 70              式= formula.replace(iは、STR(RES))
 71          72              続行
73      calc_list = re.split(" [+ - ] "は、式)   去除乘除公式
74      plus_and_sub_operators、calc_list = handle_minus_inlist(plus_and_sub_operators、calc_list)
 75      total_res = なし
 76      のためのインデックス、iは、列挙(calc_list):
 77          ならtotal_res:
 78              もしplus_and_sub_operators [索引- 1] == " - " 79                  total_res - = フロート(I)
 80              ELIFの plus_and_sub_operators [索引- 1] == " + " 81                  total_res + = フロート(I)
 82          83              total_res = フロート( I)
 84      プリント" 32 [033 \; 1メートル[%S]运算结果:033 \ [0メートル"%の式、total_res)
 85      リターンtotal_res
 86  
87  デフCALC(式):
 88に     '' ' 括号は去' '' 
89      brackets_flag = Trueを
 90      つつ:brackets_flag
 91          、M = re.search(" \([^()] * \)" 、式)  
 92          であれば、M:
 93              sub_res =計算(m.groupを())    替换
94              =式formula.replace(m.group()、STR(sub_res))
 95          96              プリント" 最终结果:" 、計算(式))
 97              brackets_flag = Falseの
 98  
99 もし __name__ == ' __main__ ' 100      式=「-1-2 *((60-30 +( - 40/5)*(9-2 * 5月3日+ 7月3日* 2998年4分の99 + 10 * 14分の568)) - ( - 4 * 3)/(16-3 * 2))」
101      式=入力(" 请输入:" 102      CALC(式)

 

何改竄検知実装入力は、他のものは、主に正規表現抽出、セグメンテーションと交換に、達成し、ループのために使用される機能を列挙している、存在しません。

再更新以降、動作を改善し、他のより高度なグラフィカルインタフェースディスプレイ。

 

おすすめ

転載: www.cnblogs.com/ggds2694/p/11259408.html