46、輸入兩帶分數P1 r1/q1 與P2
r2/q2,Pi,ri,qi(i=1,2)都是整數,求此二
分數之和,經化為最簡分數後以帶分數印出。
以下列分數組測試之
1/2 + 2/3 5 1/4 + 3 1/4 3/8 + -3/8 6 2/9 + 4 1/3
4/7 + 2/0
|
範例一
|
範例二
|
範例三
|
範例四
|
輸入
|
0 1/2
0 2/3
|
4/7
2/0
|
5 1/4
3 1/4
|
0 3/8
0 –3/8
|
輸出
|
1 1/6
|
ERROR
|
8 1/2
|
0
|
程式:
#coding=utf8
def gcd(m, n):
if n == 0:
return m
else:
return gcd(n, m % n)
print("46、輸入兩帶分數P1 r1/q1 與P2 r2/q2,Pi,ri,qi(i=1,2)都是整數,")
print(" 求此二分數之和,經化為最簡分數後以帶分數印出。")
print("==================================================================")
p=[0,0,0]
q=[0,0,0]
for i in range (0,len(p)):
while True:
print(i+1,end="")
Q=int(input("請輸入分數 P1+r1/q1:"))
try:
Q = int(Q)
except ValueError:
print ('這是不合法的輸入. 請再輸入一次...')
continue
if ( Q >= 0 and Q < 1000):
break
p[i]=Q
print()
#==================
for i in range (0,len(q)):
while True:
print(i+1,end="")
Q=int(input("請輸入分數 P2+r2/q2:"))
try:
Q = int(Q)
except ValueError:
print ('這是不合法的輸入. 請再輸入一次...')
continue
if ( Q >= 0 and Q < 1000):
break
q[i]=Q
#==================
print(p)
print(q)
p1=p[0]*p[2]+p[1]
q1=q[0]*q[2]+q[1]
Pup=p1*q[2]+q1*p[2]
Pdn=q[2]*p[2]
Ogcd=gcd(Pup,Pdn) #最大公因數
try :
Pup=int(Pup/Ogcd)
Pdn=int(Pdn/Ogcd)
if (Pup%Pdn==0) :
print("化簡的帶分數==>",int(Pup/Pdn)) #分子為0時 不顯示
else:
print("化簡的帶分數==>",int(Pup/Pdn),"+",Pup%Pdn,"/",Pdn)
print("==========================")
except NameError:
print(".....喔喔.....")
print(NameError,"錯誤.......")
except ZeroDivisionError:
print("例外發生,不可以除以0,.. 錯誤.......")
exit
print("==========================")
'''
#==================
Ogcd=gcd(Pup,Pdn)
try :
Pup=int(Pup/Ogcd)
Pdn=int(Pdn/Ogcd)
print("化簡的帶分數==>",int(Pup/Pdn),"+",Pup%Pdn,"/",Pdn)
print("==========================")
except NameError:
print(".....喔喔.....")
print("錯誤.......")
except ZeroDivisionError:
print("例外發生,不可以除以0,.. 錯誤.......")
exit
'''
#==========================================
結果:
================= RESTART: D:/程式語言 Python 入門/50題/Ex50-46.py =================
46、輸入兩帶分數P1 r1/q1 與P2 r2/q2,Pi,ri,qi(i=1,2)都是整數,
求此二分數之和,經化為最簡分數後以帶分數印出。
==================================================================
1請輸入分數 P1+r1/q1:5
2請輸入分數 P1+r1/q1:1
3請輸入分數 P1+r1/q1:4
1請輸入分數 P2+r2/q2:3
2請輸入分數 P2+r2/q2:4
3請輸入分數 P2+r2/q2:0
[5, 1, 4]
[3, 4, 0]
.....喔喔.....
<class 'NameError'> 錯誤.......
==========================
例外發生,不可以除以0,.. 錯誤.......
>>>
================= RESTART: D:/程式語言 Python 入門/50題/Ex50-46.py =================
46、輸入兩帶分數P1 r1/q1 與P2 r2/q2,Pi,ri,qi(i=1,2)都是整數,
求此二分數之和,經化為最簡分數後以帶分數印出。
==================================================================
1請輸入分數 P1+r1/q1:5
2請輸入分數 P1+r1/q1:1
3請輸入分數 P1+r1/q1:4
1請輸入分數 P2+r2/q2:3
2請輸入分數 P2+r2/q2:1
3請輸入分數 P2+r2/q2:2
[5, 1, 4]
[3, 1, 2]
.....喔喔.....
<class 'NameError'> 錯誤.......
==========================
化簡的帶分數==> 8 + 3 / 4
==========================
>>>
沒有留言:
張貼留言