ナンセンス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(式)
何改竄検知実装入力は、他のものは、主に正規表現抽出、セグメンテーションと交換に、達成し、ループのために使用される機能を列挙している、存在しません。
再更新以降、動作を改善し、他のより高度なグラフィカルインタフェースディスプレイ。