2017-04-26 193 views
-3

我正在嘗試製作一個簡單的Python代碼,用羅馬數字替換數字。爲了做到這一點,我需要得到每個數字的位置,用羅馬數字代替它。但是,我的代碼似乎不工作。使用if語句

number = range(1,21) 
number = list(number) 
number = str(number) 
for i in number: 
    for x in i: 
     if i.index(x) == 0: 
      if x == "1": 
       x.replace(x, "X") 
      elif x == "2": 
       x.replace(x, "XX") 
     else: 
      if x == 1: 
       x.replace(x, "I") 
      elif x == 2: 
       x.replace(x, "II") 
      elif x == 3: 
       x.replace(x, "III") 
      elif x == 4: 
       x.replace(x, "IV") 
      elif x == "5": 
       x.replace(x, "V") 
      elif x == "6": 
       x.replace(x, "VI") 
      elif x == "7": 
       x.replace(x, "VII") 
      elif x == "8": 
       x.replace(x, "VIII") 
      elif x == "9": 
       x.replace(x, "IX") 
      else: 
       x.replace(x, "") 
print number 

我懷疑它與我的if語句的工作方式有關,但我不確定。任何意見,將不勝感激。

+2

'x.replace(x,「X」)'你認爲這樣做了什麼? (然後閱讀文檔並重新評估你對該問題的回答) – njzk2

+1

除了@ njzk2所說的內容之外,前三行還會生成一個長字符串,而不是你想要的字符串列表。嘗試在交互式Python提示符中鍵入'str(list(range(1,21)))'來查看。 –

回答

1

ifelif子句長序列通常是一個應該使用一種或多種類型的字典的標誌。

numstrings = [str(i) for i in range(1, 100)] 

d0 = {'0':'', '1':'I', '2':'II', '3':'III', '4':'IV', 
     '5':'V', '6':'VI', '7':'VII', '8':'VIII', '9':'IX'} 
d10 = {'0':'', '1':'X', '2':'XX', '3':'XXX', '4':'XL', 
     '5':'L', '6':'LX', '7':'LXXX', '8':'LXXX', '9':'XC'} 
for s in numstrings: 
    if len(s) == 1: 
     r = d0[s] 
    elif len(s) == 2: 
     r = d10[s[0]] + d0[s[1]] 
    else: 
     r = '??' 
    print(r) 
+0

初學者需要注意的是:if和elif這兩個子句的長序列並不是字典的標誌,而是_definitely_是你不斷地將一個變量映射到別的東西上。 – byxor

+0

感謝您改進建議。 –