2016年8月25日 星期四

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

18、設計一程式可將最長含10個字元的字串讀入, 每一個字元均代表某一數值
   的羅馬數表示法。將讀入之羅馬數及其相對應之阿拉伯數一起列印出來。
     羅馬數和字元之對應表如下:                        
                         1000
                          500
                          100
                           50
                           10
                            5
                            1
     你的輸入有下列幾組:
    1.VII
    2.LXXXVII
    3.CCXIX
    4.MCCCLIV
    5.MMDCLXXIII
    6.MCDLXXVI


範例一
範例二
範例三
範例四
範例五
範例六
輸入
VII
LXXXVII
CCXIX
MCCCLIV
MMMIM
ICXIa
輸出
7
87
219
1354
3999
不合法


M
1000
VII
7
D
500
LXXXVII
87
C
100
CCXIX
221
L
50
MCCCLIV
1356
X
10
MMMIM
4001
V
5
ICXI
112
I
1
MCDLXXVI
1676

程式 :
#coding=utf8

#18、設計一程式可將最長含10個字元的字串讀入, 每一個字元均代表某一數值
#   的羅馬數表示法。將讀入之羅馬數及其相對應之阿拉伯數一起列印出來。
#     羅馬數和字元之對應表如下:                         
#
#           M 1000 VII        7
#           D 500 LXXXVII        87
#           C 100 CCXIX        221
#           L 50 MCCCLIV        1356
#           X 10 MMMIM        4001
#           V 5 ICXI        112
#           I 1 MCDLXXVI 1676

print("#18、設計一程式可將最長含10個字元的字串讀入, 每一個字元均代表某一數值")
print("#   的羅馬數表示法。將讀入之羅馬數及其相對應之阿拉伯數一起列印出來。")
print("#     羅馬數和字元之對應表如下:                         ")
print("#")
print("#           M 1000 VII        7")
print("#           D 500 LXXXVII        87")
print("#           C 100 CCXIX        221")
print("#           L 50 MCCCLIV        1356")
print("#           X 10 MMMIM        4001")
print("#           V 5 ICXI        112")
print("#           I 1 MCDLXXVI 1676")

def f(x1):
      if x1== 'M':
         return 1000
      elif x1=='m':
         return 1000
      elif x1=='D':
         return 500
      elif x1=='d':
         return 500
      elif x1=='C':
         return 100
      elif x1=='c':
         return 100
      elif x1=='L':
         return 50
      elif x1=='l':
         return 50
      elif x1=='X':
         return 10
      elif x1=='x':
         return 10
      elif x1=='V':
         return 5
      elif x1=='v':
         return 5
      elif x1=='I':
         return 1
      elif x1=='i':
         return 1
      else :
         return 99   

    
while True:
     x=int(input("請你輸入幾筆要轉換 (大於2 ,小於10):"))
     try:
        x = int(x)
       
     except ValueError:
       print ('這是不合法的輸入.  請再輸入一次...')
       continue
        
     if ( x > 2 and x <=10 ):
       break



for i in range(x):
  
  a=(input("請輸入羅馬數字 :"))
  x1=repr(a)     #轉成 字串
  x1=x1[1:len(x1)-1]
  
  #for j in range (0,len(x1)):  #for debug
  #    print(x1[j])             #for debug    

  x2=0
  j=1
  for j in range (0,len(x1)):
      x3=f(x1[j])
      # print(x3)  #for debug
      if x3==99 :
         print ('這是不合法的輸入.  請再輸入一次...')
         x2="不合法的輸入"
         break
      else:
         x2=x2+x3

      j=j+1 
         
  print("羅馬數字及其相對應之阿拉伯數")       
  print("羅馬數字 : ", x1," 對應之阿拉伯數 :", x2)



  

結果 : 
================= RESTART: D:/程式語言 Python 入門/50題/Ex50-18.py =================
#18、設計一程式可將最長含10個字元的字串讀入, 每一個字元均代表某一數值
#   的羅馬數表示法。將讀入之羅馬數及其相對應之阿拉伯數一起列印出來。
#     羅馬數和字元之對應表如下:                         
#
#           M 1000 VII        7
#           D 500 LXXXVII        87
#           C 100 CCXIX        221
#           L 50 MCCCLIV        1356
#           X 10 MMMIM        4001
#           V 5 ICXI        112
#           I 1 MCDLXXVI 1676
請你輸入幾筆要轉換 (大於2 ,小於10):5
請輸入羅馬數字 :LXXXVII
羅馬數字及其相對應之阿拉伯數
羅馬數字 :  LXXXVII  對應之阿拉伯數 : 87
請輸入羅馬數字 :CCXIX
羅馬數字及其相對應之阿拉伯數
羅馬數字 :  CCXIX  對應之阿拉伯數 : 221
請輸入羅馬數字 :MCCCLIV
羅馬數字及其相對應之阿拉伯數
羅馬數字 :  MCCCLIV  對應之阿拉伯數 : 1356
請輸入羅馬數字 :MMMIM
羅馬數字及其相對應之阿拉伯數
羅馬數字 :  MMMIM  對應之阿拉伯數 : 4001
請輸入羅馬數字 :MCDaLXXVI
這是不合法的輸入.  請再輸入一次...
羅馬數字及其相對應之阿拉伯數
羅馬數字 :  MCDaLXXVI  對應之阿拉伯數 : 不合法的輸入
>>> 

沒有留言:

張貼留言

2024_09 作業3 以Node-Red 為主

 2024_09 作業3  (以Node-Red 為主  Arduino 可能需要配合修改 ) Arduino 可能需要修改的部分 1)mqtt broker  2) 主題Topic (發行 接收) 3) WIFI ssid , password const char br...