20191113 2019-2020-2「Pythonプログラミング」実験2レポート
コース:「Pythonプログラミング」
クラス:1911
名前:林子信
学生ID:20191113
実験教師:王志強
実験日:2020年4月12日
必須/選択科目:公開選択科目
1.実験的な内容
- 完全なアプリケーション計算機を設計して完成させます。含む:
- 単純な算術
- モジュラス演算
- 単純な三角関数を見つける
- 数値のn乗を求めます
- 数の階乗を見つける
- 1つの変数(複素数領域)で2次方程式を解く
- 統計演算(合計、平均、範囲、分散、標準偏差を含む)
- 基本的な文法、決定文、ループ、論理演算などを練習します。
2.実験プロセスと結果
明確な目的
手の中にある高度な計算機を参考にして、能力レベルに応じて計算機に含まれる機能を決めてください。
-
単純な算術
混合の難易度が大きすぎ、現在の知識の習熟度ではプログラミングがサポートされていません。
-
モジュラス演算
-
単純な三角関数を見つける
-
数値のn乗を求めます
-
数の階乗を見つける
-
1つの変数(複素数領域)で2次方程式を解く
-
統計演算(合計、平均、範囲、分散、標準偏差を含む)
デザインのアイデア
さまざまな論理演算を関数に編集することを選択し、最後にコンピューターフレームワーク全体をアセンブルします。
プログラムされたプログラムはややインテリジェントでユーザーエクスペリエンスが優れていることが期待されるため、誤ったデータを入力するとプロンプトが表示され、ユーザーは最初からやり直すのではなく、再入力できます。while構文の使用は避けられません。
同時に、電卓を実行した後、関連する関数が選択され、ifステートメントも一般的に使用されます。
-
簡単な三角演算
多くの場合、毎日の入力は角度に基づいています。Pythonアルゴリズムにはラジアンシステムが必要です。最初に入力角度をラジアンシステムに変換してから計算する必要があります。
-
1つの変数で2次方程式を解く
複素数フィールドで単項二次方程式を解くには、実数フィールドで単項二次方程式を解く必要がありますが、表現が異なるため、2つを区別する必要があります。
-
統計演算
統計演算では、合計は平均化の基準として使用され、分散は標準偏差の基準として使用されます。計算を簡略化するために適切にソートできます。
コーディング、デバッグ、実行プロセス
単純な算術
- 元のバージョンでは、各操作は関数として記述され、電卓のフレームワーク内で呼び出されましたが、これによりコードの冗長性が発生し、必要ありませんでした。
def add(a,b): # 加法运算
return a+b
def sub(a,b): # 减法运算
return a-b
def mul(a,b): # 乘法运算
return a*b
def div(a,b): # 除法运算,使用前需判断除数是否为0
return a/b
- 拡張バージョンは、プライマリバージョンの欠点を改善しますが、それでもユーザーエクスペリエンスを向上させることはできません。間違った関数番号を入力した場合は、最初のインターフェイスから開始する必要があります。
def ari():
print("1.二元加法运算\n2.二元减法运算\n3.二元乘法运算\n4.二元除法运算\n")
temp = int(input("请依照所要使用的功能输入相应的数字序号:"))
if temp == 1 or temp == 2 or temp == 3:
x = float(input("请输入第一个操作数:"))
y = float(input("请输入第二个操作数:"))
if temp == 1:
print(x + y)
elif temp == 2:
print(x - y)
else:
print(x * y)
elif temp == 4:
x = float(input("请输入被除数:"))
y = float(input("请输入除数:"))
while y == 0:
print("输入错误!除数不能为0!")
y = float(input("请重新输入除数:"))
print(x / y)
- 最終バージョンでは、入力された対応する関数番号が正しくない場合の問題を解決するために、whileループが追加されています。
def ari():
'''四则运算'''
print("1.二元加法运算\n2.二元减法运算\n3.二元乘法运算\n4.二元除法运算\n")
temp = 233
while temp != 1 and temp != 2 and temp != 3 and temp != 4:
temp = int(input("请依照所要使用的功能输入相应的数字序号:"))
if temp == 1 or temp == 2 or temp == 3:
x = float(input("请输入第一个操作数:"))
y = float(input("请输入第二个操作数:"))
if temp == 1:
print(x + y)
elif temp == 2:
print(x - y)
else:
print(x * y)
elif temp == 4:
x = float(input("请输入被除数:"))
y = float(input("请输入除数:"))
while y == 0:
print("输入错误!除数不能为0!")
y = float(input("请重新输入除数:"))
print(x / y)
else:
print("相应功能数字序号输入有误!")
print("1.二元加法运算\n2.二元减法运算\n3.二元乘法运算\n4.二元除法运算\n")
- 実行結果表示
モジュラス演算
- 4つの操作のレッスンと簡単な操作を習得すると、簡単にコンパイルできます。
def mol():
'''取模运算'''
x = int(input("请输入整数被除数:"))
y = int(input("请输入整数除数:"))
while y == 0:
print("输入错误!除数不能为0!")
y = int(input("请重新输入整数除数:"))
print(x % y)
- 実行結果表示
単純な三角関数を見つける
- 6種類の演算を2種類に分け、まずsinとasinを例にとり、簡単なコードを打ち込み、演算とデバッグを行います。
import math
x = float(input("请以角度制输入角度:"))
x = x/180 * math.pi
print(math.sin(x))
x = float(input("请输入相应数值:"))
print('%.2f' % math.degrees(math.asin(x)))
- テンプレートとしてsinおよびasinの関連コードを使用してアセンブルし、最後に同様の単純な算術演算を入力します。
def act():
'''求简单三角函数'''
print("\n1.求正弦\n2.求余弦\n3.求正切\n4.求反正弦\n5.求反余弦\n6.求反正切")
temp = 233
while temp != '1' and temp != '2' and temp != '3' and temp != '4' and temp != '5' and temp != '6':
temp = input("请依照所要使用的功能输入相应的数字序号:")
if temp == '1' or temp == '2' or temp == '3':
x = float(input("请以角度制输入角度:"))
x = x / 180 * math.pi
if temp == '1':
print('%.2f' %math.sin(x))
elif temp == '2':
print('%.2f' %math.cos(x))
elif temp == '3':
print('%.2f' %math.tan(x))
elif temp == '4' or temp == '5' or temp == '6':
x = float(input("请输入相应数值,答案将以角度制呈现:"))
if temp == '4':
if -1 <= x and x <= 1:
print('%.2f' % math.degrees(math.asin(x)))
else:
print("无解!")
elif temp == '5':
x = float(input("请输入相应数值(-1≤x≤1):"))
if -1 <= x and x <= 1:
print('%.2f' % math.degrees(math.acos(x)))
else:
print("无解!")
elif temp == '6':
x = float(input("请输入相应数值:"))
print('%.2f' % math.degrees(math.atan(x)))
else:
print("相应功能数字序号输入有误!")
- 実行結果表示
数値のn乗を求めます
- コードはモジュラス演算と同じくらい簡単で、エンコードプロセスで障害が発生することはありません。
def nqo():
'''求一个数的n次方'''
a = float(input("请输入底数:"))
while a == 0:
print("输入错误!底数不能为0!")
a = int(input("请重新输入底数:"))
n = float(input("请输入指数:"))
print(math.pow(a,n))
- 実行結果表示
数の階乗を見つける
- 最初に関連する階乗関数があることを知らなかったので、次のようにコーディングしました。
def fac(n): # 阶乘运算
t = 1
for i in range(1,n+1):
t = t * i
return t
- 数学ライブラリの関数は多く実用的であり、階乗演算は再エンコードされています。
def fac():
'''求一个数的阶乘 '''
n = int(input("请输入一个整数:"))
print(math.factorial(n))
- 実行結果表示
1つの変数で2次方程式を解く
- 1つの変数の2次方程式を解くと、さまざまな状況により異なる値が出力されます。ここでは、戻り値ステートメントを使用しています。元々は、計算フレームワークで出力ステートメントを使用することを意図していましたが、予期せず、戻り値を直接出力できることがわかりました。したがって、戻り値を戻り値の行にフォーマットします。
def qua():
'''解一元二次方程'''
print('*' * 7 + "解一元二次方程 ax^2 + bx + c = 0" + '*' * 7)
a = float(input("请输入a:"))
b = float(input("请输入b:"))
c = float(input("请输入c:"))
d = b*b - 4*a*c
if d>=0:
x1 = (-b+math.sqrt(d)) / (2*a)
x2 = (-b-math.sqrt(d)) / (2*a)
if d==0:
return "有唯一的解:X = "+str(x1)
else:
return "X1 = "+str(x1)+'\t'+"X2 = "+str(x2)
else:
x1 = str(-b/(2*a)) + '+' + str(math.sqrt(-d)/(2*a)) + 'i'
x2 = str(-b/(2*a)) + '-' + str(math.sqrt(-d)/(2*a)) + 'i'
return "X1 = "+x1+'\t'+"X2 = "+x2
- 実行結果表示
統計演算
- データを保存するにはリストを使用し、データを計算するにはforループを使用します。
x = int(input("输入数据个数:"))
y = []
print("请输入数据:")
for i in range(x):
temp = [float(input())]
y += temp
- 以前に分析したアイデアに従ってコードをコーディングし、コード化する必要がある関連するプロンプトステートメントとループ構造を組み合わせます。
def sta():
'''统计运算'''
x = int(input("输入数据个数:"))
y = []
print("请输入数据:")
for i in range(x):
temp = [float(input())]
y += temp
print("\n1.求和\n2.求平均值\n3.求极差\n4.求方差\n5.求标准差")
temp = 233
while temp != '1' and temp != '2' and temp != '3' and temp != '4' and temp != '5':
temp = input("请依照所要使用的功能输入相应的数字序号:")
s = 0
for i in range(x):
s = s + y[i]
var = 0
for i in range(x):
var = var + (s / x - y[i]) ** 2
var = var / x
if temp == '1':
print(s)
elif temp == '2':
print(s / x)
elif temp == '3':
print(max(y) - min(y))
elif temp == '4':
print(var)
elif temp == '5':
print(math.sqrt(var))
else:
print("相应功能数字序号输入有误!")
- 実行結果表示
電卓フレームコーディング
- 上記の関数を組み立て、関連するプロンプトステートメントを追加します。ループするには、whileステートメントを追加し、プログラムの終了マークとして「-1」を使用します。
#计算机功能框架
print('*'*5+"欢迎使用计算器!"+'*'*5)
print("本计算器提供的功能有:")
print("1.简单二元四则运算")
print("2.取模运算")
print("3.求简单三角函数")
print("4.求一个数的n次方")
print("5.求一个数的阶乘")
print("6.解一元二次方程")
print("7.统计运算")
print("-1.退出程序")
t = 233
while t!='-1':
t = input("\n请依照所要使用的功能输入相应的数字序号:")
if t=='1':
ari()
elif t=='2':
mol()
elif t=='3':
act()
elif t=='4':
nqo()
elif t=='5':
fac()
elif t=='6':
print(qua())
elif t=='7':
sta()
elif t=='-1':
exit(0)
else:
print("相应功能数字序号输入有误!")
print("\n是否再次计算?")
print("本计算器提供的功能有:")
print("1.二元四则运算")
print("2.取模运算")
print("3.求简单三角函数")
print("4.求一个数的n次方")
print("5.求一个数的阶乘")
print("6.解一元二次方程")
print("7.统计运算")
print("-1.退出程序")
- 実行結果表示
- サイクル
- 終了する
完全なコード表示コードクラウドアドレス
3.実験および解決プロセス中に発生した問題
-
質問1:私はmath.degreesの使用法に精通していません。これは誤った使用につながります。
問題の解決策1:関連情報を確認し、この関数の使用法を学びます。ラジアンシステムから角度システムに変換します。角度システムをラジアンシステムに変更するには、x = x / 180 * math.pi
-
質問2:単純な三角関数コードを記述する場合、表示される回答の形式は十分に美しくありません。同時に、三角関数クラスの一部の回答が正しくありません。
問題2の解決策:回答を書式設定し、入力値のサイズ制限を入力プロンプトステートメントに追加します。同時に、入力値が提供された範囲内にない場合は、「解なし!」を出力します。
-
質問3:計算機のループ構造が終了したい場合、「再実行しますか...」など、出力したくない情報は常に出力されます。
-
問題の解決策3:構造フレームワークに参加する
elif t=='-1': exit(0)
その他(感情、思考など)
- コーディングコードは特に効果的な学習方法であり、アプリケーションは紙に書かれていないすべての知識を新しくし、学習をより意味のあるものにします。
- 各プログラムの設計には、継続的なテストと改善が必要です。たとえ小さな計算機プログラムであっても、考慮しなければならないことが多く、関与する必要があります。
- 各プログラミングの前に、スムーズで比較的効率的なプログラミングを確実にするために、目的とアイデアの具体的な説明と設計を行う必要があります。