2016年9月9日 星期五

python 程式設計50題測試範例-46

46、輸入兩帶分數P1 r1/q1 P2 r2/q2Piriqi(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
==========================
>>> 

沒有留言:

張貼留言

WOKWI LED + MQTT Node-Red SQLite

WOKWI LED + MQTT Node-Red SQLite const char *mqtt_broker = "broker.mqtt-dashboard.com" ; const char *topic1 = "alex9ufo/e...