-
コース:「Pythonプログラミング」
-
クラス:1934
-
名前:Duan Kaiyu
-
学生ID:20193417
-
実験教師:王志強
-
実験日:2020年4月11日
-
必須/選択科目:パブリック選択科目コース
1.実験的な内容
-
完全なアプリケーションプログラム、加算、減算、乗算、除算などの完全な演算、およびその他の機能を設計して完成させます。
-
基本的な文法、判断文、ループ文、論理演算などの知識ポイントを調べます。
2.実験プロセスと結果
1.プロセス
1.最初に計算用のCal()クラスを作成し、加算、減算、乗算および除算、二乗、n乗の演算結果が格納される属性結果を定義し、逆数を取り、パーセント記号を取り、メソッドをクリアします
2.変数ult_resultをオブジェクトとして定義し、while Trueを使用して無限ループで複数の演算を実行し、ユーザーが数値で算術演算子を指定し、if-elseステートメントでユーザーが必要な演算を判断できるようにします。
3.ユーザーが文字を入力したら、breakステートメントを使用してループからジャンプし、計算を終了します
ソースコード:
#Define 計算クラスクラスCal: 結果= 0 def plus(self、num1): #addition self.result + = num1 print( '='、self.result) defマイナス(self、num1): #subtraction self.result- = num1 print( '='、self.result) def times(self、num1): #Multiplication self.result * = num1 print( '='、self.result) def devide (self、num1):#Division try: self.result / = num1 を除く: print( "MathError!")#ゼロで除算できない self.result = 0 print( '='、self.result) def square(self、num1): #square self.result = pow (num1、2) print( '='、self。結果) def nth_power(self、num1、num2):#nth power self.result = pow(num1、num2) print( '='、self.result) def reciprocal(self、num1): #カウントダウンself.result = 1 / num1 print( '='、self.result) def percent_sign(self、num1): #Percent sign self.result = num1 * 0.01 print( '='、self.result) def clear(self):#Clear data self.result = 0 print( '0') opr = {1: '+'、2: '-'、3: '*'、4: '÷'、5: 'x²'、6: 'x ^ n '、7:' 1 / x '、8:'% '、9:' CLEAR '、' p ':'() '} #ユーザー入力コード、対応するシンボルをすぐに返す方法numget1 = float(input('計算開始\ n ')) ult_result = Cal() ult_result。result = numget1 while True: print( '=' * 20、 "\ n1。+ \ t2 .- \ t3。* \ n4。÷\ t5。x²\ t6。x ^ n \ n7。1 / x \ t8。%\ t9。CLEAR \ n'p ':()\ n "、' = '* 20) try: signget1 = int(input()) print(ult_result.result、opr [signget1]) if 1 <= signget1 <= 4: numget2 = input () if numget2 == 'p':#ブラケットが入力された場合 print( '()') num_emptybox = ult_result.result#元の値を 保存sign_emptybox = signget1#元の演算子を 保存ult_result.result = float(入力( )) print( '=' * 20、 "\ n1。+ \ t2 .- \ t3。* \ n4。÷\ t5。x²\ t6。x ^ n \ n7。1 / x \ t8。%\ t9。 CLEAR \ n'p ':()\ n "、' = '* 20) signget1 = int(input()) print(ult_result.result、opr [signget1]) ult_result。devide(numget2) if(1 <= signget1)and(signget1 <= 4): numget2 = float(input()) if signget1 == 1: print(ult_result.result、 '+'、numget2) ult_result.plus(numget2) elif signget1 = = 2: print(ult_result.result、 '-'、numget2) ult_result.minus(numget2) elif signget1 == 3: print(ult_result.result、 'x'、numget2) ult_result.times(numget2) elif signget1 == 4 : print(ult_result.result、 '÷'、numget2) elif signget1 == 5: ult_result.square(ult_result。結果) elif signget1 == 6: nth = float(input( "n =")) ult_result.nth_power(ult_result.result、nth) elif signget1 == 7: ult_result.reciprocal(ult_result.result) elif signget1 == 8: ult_result。 percent_sign(ult_result.result) num2_emptybox = ult_result.result ##新しい 値を保存するult_result.result = num_emptybox ##元の値を 呼び出すsignget1 = sign_emptybox#元の演算子を 呼び出すnumget2 = num2_emptybox ##新しい値を 呼び出すnumget2 = float(numget2) に対してsignget1 == 1の場合は、。 print(ult_result.result、 '+'、numget2) elif signget1 == 7: ult_result.plus(numget2) elif signget1 == 2: print(ult_result.result、 '-'、numget2) ult_result.minus(numget2) elif signget1 == 3: print(ult_result.result、 'x'、numget2) ult_result。 times(numget2) elif signget1 == 4: print(ult_result.result、 '÷'、numget2) ult_result.devide(numget2) elif signget1 == 5: ult_result.square(ult_result.result) elif signget1 == 6: nth = float(input( "n =")) ult_result.nth_power(ult_result.result、nth) ult_result.reciprocal(ult_result.result) elif signget1 == 8: ult_result.percent_sign(ult_result.result) elif signget1 == 9: ult_result.clear() continue :: print( '计算结束') break
2.結果
1.例として1 + 2 = 3を取り上げます
2. 3 x(5-2)= 9を例にとります
3.例として5³+ 1/5 = 125.2を取り上げます
3.実験および解決プロセス中に発生した問題
-
質問1:除算では、0を除数にすることはできません。除算しないと、エラーが報告されます。エラー報告メカニズムの設定方法を教えてください。
-
問題の解決策1:「MathError!」のプロンプトを表示するには、try / exceptステートメントを使用します
-
-
質問2:ユーザーが演算子を指定した後、対応するシンボルをすばやく返す方法は?
-
問題2の解決策:辞書を使用して1〜9および 'p'をインデックス値として設定し、演算子「+」、「-」などを対応する値に設定し、ユーザーが入力した指定の数値をインデックス値として使用します。辞書に対応するコンテンツを読み取って出力します
opr = {1: '+'、2: '-'、3: '*'、4: '÷'、5: 'x²'、6: 'x ^ n'、7: '1 / x'、8 : '%'、9: 'CLEAR'、 'p': '()'} signget1 = int(input()) print(ult_result.result、opr [signget1])
-
-
質問3:括弧を使用する権利をユーザーに与えるにはどうすればよいですか?
-
問題3の解決策:指定された記号として括弧内の文字「p」を使用します。ユーザーが2番目の算術数値を入力するときに、ifステートメントを使用して、ユーザーがpを入力したかどうかを判別します
if numget2 == 'p':#かっこが入力されている場合は、 印刷( '()')
括弧が使用されている場合、以前に入力された算術数値(ult_result.resultに格納されています)およびオペレーターが指定した数値signget1は、新しい「コンテナー」-num_emptybox、sign_emptyboxに格納され、括弧内のコンテンツの実行後に呼び出されます。
num_emptybox = ult_result.result#元の値を 保存sign_emptybox = signget1 #元の演算子を保存# 括弧内の計算プロセスを省略 num2_emptybox = ult_result.result ## 新しい値を 保存ult_result.result = num_emptybox ##元の値を思い出すsignget1 = sign_emptybox#元の演算子を 呼び出すnumget2 = num2_emptybox ##新しい値を呼び出す
-
その他(感情、思考など)
電卓を作成するためのコードは想像よりもはるかに複雑です。コードの行数が多い場合は、コードにエラーがないかどうかを常に確認してください。そうでない場合、実行時にエラーを確認することが難しいため、デバッグを使用することもできます。重要です。私が書いたプログラムにはまだ改善の余地がたくさんあります。たとえば、if-elseステートメントを何度も使用して、ユーザーが選択したい演算子を決定する場合、プログラミングの世界「DRY」(Don)を維持するような関数を持つように関数を設定できます。繰り返さないでください)。
私はGreat Godが300行を超えるインターネット上で作成した電卓プログラムを見ました。実行中の端末は非常に高度なビジュアルウィンドウを生成できます。勉強したいのですが、残念ながらレベルが低くてプログラムが理解できず、自分でローエンド電卓プログラムしか書けません。自分のスキルが他の人ほど上手ではないことを知って初めて、私はもっと一生懸命に働かなければならないと感じました。