20184313実験2「Pythonプログラミング」実験レポート

20184313 2019-2020-2「Pythonプログラミング」実験2レポート

コース: "Pythonプログラミング"
クラス:1843
名前:Sun Weili
学生ID:20184313
実験教師:Wang Zhiqiang
実験日:2020年4月12日
必須/選択科目:パブリック選択科目

1.実験的な内容

  • 完全なアプリケーションプログラム、加算、減算、乗算、除算などの完全な演算、およびその他の機能を設計して完成させます。
  • 基本的な文法、判断文、ループ文、論理演算などの知識ポイントを調べます。

2.実験プロセスと結果

  • プログラムの枠組み
    フローチャート

  • ZhuanHuan関数

    この関数は主に、中間順序式をポスト順序式に変換するために使用され、前学期のデータ構造コースの練習を参照します。

    • オペランドが読み取られると、出力に直接配置されます(浮動小数点数を考慮すると、文字列は最初にスプライスされ、読み取りが完了した後で浮動小数点変数に変換されます)。
    • 読み取り演算子が "("の場合、またはスタックが空の場合は、直接スタックにプッシュされます。
    • 演算子が読み取られるとき、それは出力に直接配置されず、どこかに(実際にはスタック)に格納されなければならず、次に優先順位が比較されます。演算子がスタックの最上位よりも高い優先順位を持っている場合、次に、それがスタックに置かれます。演算子の優先順位がスタックの最上位より高くない場合、スタックの最上位の演算子はスタックの外にあり、現在のスタックの最上位の演算子の優先順位が比較されます。
    • 読み取り演算子が ")"の場合、スタックから演算子をポップし、 "("、 "("および ")"が出力に書き込まれないまで出力を書き込みます。
    • 入力が空の場合、スタック内のすべての演算子がポップされ、出力に書き込まれます
  • JiSuanHouXu関数

    この関数の主な機能は、ポストオーダーシーケンスから対応するオペランドと演算子を見つけ、最初に最後のビットを演算子として取り、次に演算子のタイプに従ってオペランドの数を決定し、最後のオペランドを取り、JiSuanを呼び出すことです。操作機能

  • ジスアン関数

    この関数の目的は、入力オペランドと演算子に基づいて演算を実行することです。これは比較的単純で、主にいくつかのifステートメントで実装されます

  • 運用実績

    テストケース:

    1-2!*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568%14))-(-4^3)/(16-3*2))
    

    運用実績

    コードクラウドリンク

3.実験および解決プロセス中に発生した問題

  • 質問1:JiSuanHouXu(HouXu)関数で使用されているオペランドと演算子を削除すると、演算結果がオペランド2と同じである場合、1つ少ないオペランドが削除されます
  • 問題1の解決策:以前は、変数aを使用してオペランドを保存し、whileループを使用して後順式の最後のビットがaを削除するかどうかを比較しましたが、aが2番目のオペランドと等しい可能性があるため(60-30 = 30)したがって、1つ少ないオペランドが削除され、演算の結果に影響を与えるため、オペランドの数が異なる演算子は、問題を回避するために別々に演算されます。
  • 質問2:負の数を処理する場合、最初はポストオーダー式に0.0を追加してスタックに符号を配置しますが、シンボルがミッドオーダー式の最初の項目(つまり括弧なし)にあり、演算子の優先順位が後ろにある場合マイナス記号より高い場合、結果は正しくありません-2%3は-2として計算されます
  • 問題2の解決策:小数点は演算子としてスタックにプッシュされないため、「-」を「。」に置き換え、スローされた要素が優先される場合は、優先順位を最高に設定します。 「はい、次に変換します」
  • 質問3:演算子の優先順位は、「+」、「-」、「*」、「/」の同じレベルにする必要がありますが、計算の便宜上、私のプログラムの優先順位は加算<減算<乗算<除算です
  • 問題3の解決策:加算と乗算の両方に結合則があるため、この結果には何の問題もありませんが、中次式から後次式への変換を純粋に考慮すると、結果に一貫性がなくなります。3 + 2-1のように、最初に3 + 2を計算し、次に5-1を計算するのが通例ですが、使用されるシーケンスは1つだけなので、プログラムでは2-1 + 3を計算しますが、加算の組み合わせの法則により、結果は正しいです

その他(感情、思考など)

この実験を通じて、前学期のデータ構造の知識を確認しましたが、Cに対するPythonの利点をより深く理解することもできました。C言語では、スタックを実装する最も簡単な方法は線形ですスタックに格納されている要素のデータ型を事前に明確にする必要があるストレージ構造と最大容量も考慮する必要があり、メソッドを構造で定義できないため、Pythonシーケンスは長さとデータ型を無視でき、移植を容易にするために、クラス内でスタックとスタックの方法を定義します。

つまり、この実験により、以前に学んだプログラミングのアイデアの一部を再訪することができましたが、Pythonについての理解が深まり、Cに対するPythonのいくつかの利点についてより深く理解することができました。

リファレンスc

- 「データ構造(第2版)」

- 「ゼロベーシックパイソン(フルカラー版)」

おすすめ

転載: www.cnblogs.com/swldeblog/p/12737103.html